diff -Nru frescobaldi-1.2.0/ChangeLog frescobaldi-2.0.0/ChangeLog --- frescobaldi-1.2.0/ChangeLog 2010-12-25 06:50:06.000000000 +0000 +++ frescobaldi-2.0.0/ChangeLog 2011-12-26 07:09:49.000000000 +0000 @@ -1,529 +1,107 @@ -Changes in 1.2.0 -- December 26th, 2010 +ChangeLog of Frescobaldi, http://www.frescobaldi.org/ +===================================================== -* Translations: - - Dutch updated by Wilbert Berendsen - - Turkish updated by Server Acim - - French updated by Valentin Villenave and Ryan Kavanagh - - Czech updated by Pavel Fric - - Spanish updated by Francisco Vila - - German updated by Georg Hennig - - Polish updated by Piotr Komorowski - -Changes in 1.1.8 -- November 9th, 2010 - -* All pitch name related functions (detection and translation) support - the new \language LilyPond command (as of LilyPond 2.13.38). -* Installation: An option has been added to suppress checking presence and - versions of required python modules. -* Translations: - - Dutch updated by Wilbert Berendsen - - Turkish updated by Server Acim - - Czech updated by Pavel Fric - - German updated by Georg Hennig - - French updated by Valentin Villenave -Changes in 1.1.7 -- October 4th, 2010 - -* New features: - - New tool to download LilyPond binary releases. Go to Settings -> Configure - Frescobaldi -> LilyPond Preferences, Versions -> Add -> Download to use it. - - New rhythm command "Make implicit (per line)" that removes repeated - durations, except for the first duration in a line. -* Quick Insert Panel: - - New default shortcuts for Slur: Ctrl+( and Breathing sign: Alt+' -* Bugfixes and improvements: - - Don't error out if certain GUI containers can't be found, due to missing - objects in the local frescobaldiui.rc file. Display a message instead. -* PDF Preview: - - If 'Sync preview' is unchecked, the preview now also doesn't open newly - created or updated PDF documents. As a result, the 'Disable PDF preview' - setting became superfluous and has been removed. -* LilyPond Log: - - The toolbar at the bottom has been removed, as all functions in the main - menu and toolbar are now equivalent. -* Translations: - - Dutch updated by Wilbert Berendsen - - Turkish updated by Server Acim - -Changes in 1.1.6 -- September 10th, 2010 +Changes in 2.0.0 -- December 26th, 2011 +* Updated translations: fr, nl, es, it, cs +* Bug fixes: + - when changing LilyPond instance that was default, keep it as default * New features: - - New built-in MIDI player using the KMidPart of KMid 2.4.0 or higher - - Notification popup when a long build finishes while Frescobaldi is hidden - - Quick Insert: new panels for dynamics, bar lines, spanners, arpeggios, etc - - LilyPond version to use configurable per session -* Bugfixes and improvements: - - Fix error message on Cut&Assign, introduced in 1.1.3 - - Expand dialog: Don't insert expansion when closed with ESC - - Handle keyboard interrupt (SIGINT) nicely, don't show the bug dialog - - Fix session --start commandline option - - Blank staff paper: improved bar line distances with recent LilyPond versions -* Installation: - - Install Frescobaldi icon as SVG, not SVGZ - - make uninstall now possible - -Changes in 1.1.5 -- August 16th, 2010 - -* Bugfixes and improvements: - - Work-around a crash introduced in KDE 4.5 when using the --smart option - to set the cursor position. - - Fix Python error message when adding a new LilyPond version with the "Set as - default" option checked. -* Translations: - - Czech updated by Pavel Fric - - Polish updated by Piotr Komorowski - - French updated by Ryan Kavanagh - - Turkish updated by Server Acim + - new dialog and snippet to set the fonts for a LilyPond document + - the tabs can be hidden and shown via the mainwindow context menu + - autocomplete on #'font-name, with font preview +* Improvements: + - Shift-F1 (What's This) now works in dialogs + - the tab bar can be hidden via the main window context menu -Changes in 1.1.4 -- July 28th, 2010 -* Bugfixes: - - Fix Point and Click when running from 'run' script +Changes in 1.9.5 -- December 20th, 2011 -Changes in 1.1.3 -- July 25th, 2010 +* Updated translations: es, nl, cs +* Bug fixes: + - charmap now avoids characters "narrow" builds of Python can't handle + - fix incorrect midi tempo when midi file contains tempo changes + - fix importing the pyportmidi._pyportmidi module if that is used + - really honor 'delete intermediate files' option +* New features: + - Documents list with optional per-directory grouping + - helper applications can be specified to override operating system defaults + - list of generated files in LilyPond menu +* Improvements: + - tooltips in music view show variable name of music definition + - search bar in documentation browser + - autocomplete on \include, \language + - other small cosmetic improvements -* General: - - Tabs can be reordered (can be turned off) - - Tabs don't get automatic shortcuts, they sometimes conflict with ours - - the right tool dock has been made slightly larger by default -* New: Session Management, in two ways: - - Basic session management: if you log out with Frescobaldi running and then - back in, Frescobaldi will reopen the documents that were open at logout. - - Advanced named session support. A session defines a list of open documents, - and optionally a base directory. More features will be added later to be - able to use this as a light-weight project tool. -* Context sensitive LilyPond help: - - added support for internals reference: contexts, grobs and engravers -* Bugfixes: - - Fix crash when editing toolbars -* Installation: - - A 'run' script has been added to run Frescobaldi from the tarball (or even - SVN) without installing. - - Using CMake out-of-source is now easier: icons and translations are not - rebuilt anymore so the Frescobaldi install procedure does not need LilyPond - and 'convert' (from ImageMagick) anymore. The icons and translations are in - the prebuilt/ directory. Simply removing this directory restores the old - behaviour (useful when you want to develop Frescobaldi from a release - tarball, although a fresh SVN checkout is recommended in that case). -* Translations: - - Dutch updated by Wilbert Berendsen - - Turkish updated by Server Acim -Changes in 1.1.2 -- July 8th, 2010 +Changes in 1.9.4 -- December 5th, 2011 +* Updated translations: es, fr, nl * New features: - - Segno bar line added (available in LilyPond 2.13.19 and higher) - - It is now possible to configure the path that is used to find - files that are included via the LilyPond \include command. - - New 'Close other' action to close all documents except the current - - Print and View icons in the toolbar to print music and open PDF and MIDI - files in their external helper applications -* Printing: - - Printing generated PDF files now uses a print dialog, instead of just - sending the PDF to the 'lpr' command. -* Run LilyPond: - - warn if the document contains a conflicting point and click setting -* General: - - print and email actions have moved to the File menu - - close button on document tabs (can be turned off in Settings->Editor Comp.) - - warnings and notifications have a "dont ask again" checkbox, and can be - turned back on in the settings - - progress indicator saves the build time in document metainfo -* Autocompletion: - - only popup completions from the expansion manager on blank lines -* Settings dialog: - - the settings have been organized in more logical groups -* Installation: - - building the icons from SVN or out-of-source requires LilyPond >= 2.13.19 -* Translations: - - Dutch updated by Wilbert Berendsen - - French updated by Valentin Villenave - - Italian updated by Gianluca D'Orazio - -Changes in 1.1.1 -- May 3rd, 2010 - -* LilyPond Documentation Browser: - - Indexing help items fixed with new website (2.13+) -* Fixed Python error message on opening settings dialog with recent SIP/PyQt -* Translations: - - Dutch updated by Wilbert Berendsen - - Turkish updated by Server Acim - -Changes in 1.1.0 -- March 26th, 2010 - -* It is now possible to use multiple versions of LilyPond easily from within - Frescobaldi. LilyPond instances can be configured under Settings, Paths. - There is also a custom Run LilyPond command where a version can be chosen, - among other options. And Frescobaldi can be configured to automatically - choose a LilyPond version according to the document's \version statement. -* Score Wizard, Choir: - - New lyric option "Distribute stanzas" to spread the stanzas between staves. - This option only has effect when there are three or more staves, and is very - useful if there is a large number of stanzas that apply to all voices. - - Lyric placement is fine-tuned when LilyPond >= 2.13.4 is used, using the - staff-affinity setting, so lyrics are placed close to the staff they belong - to. If lyrics apply to multiple voices, the are centered between staves. - This improves the layout of vocal music if the systems are vertically - streched by LilyPond to fill the page nicely. - - New checkbox to create rehearsal MIDI files. If checked, one MIDI file is - generated for each voice, with the voice standing out in a clear sound and - the other voices in a lower volume. Repeats are unfolded and lyrics for the - current voice are also added to the MIDI file. -* Score Wizard, Score settings: - - New checkbox option to wrap the score in a \book block. -* New dialog to insert special characters from the Unicode table, with the - ability to assign keyboard shortcuts to often used characters. -* New command: Copy Lyrics with hyphenation removed -* Expansion Dialog: - - has now some documented default keyboard shortcuts -* Quick Insert Panel: - - New buttons for \halfopen and \snappizzicato - - It is now possible to assign keyboard shortcuts to the articulation buttons -* Repeat last expression: don't append space -* Email files: select files with checkboxes instead of Ctrl+Click -* Installation: - - byte compiling the Python modules can be supressed by adding - -DBYTECOMPILE=NO to the cmake command line - - building the icons from SVN or out-of-source requires LilyPond 2.13.11+ -* Some workarounds for subtle SIP 4.10/KDE 4.4 garbage collection bugs - -Changes in 1.0.2 -- February 18th, 2010 + - Engrave custom dialog for specifying other engraving formats and options + - Character selection tool to insert characters from all unicode blocks +* Bugfixes: + - fix crash on 64bit Linux and Windows introduced in 1.9.3 -* Make Frescobaldi working with SIP 4.10 and KDE 4.4 -Changes in 1.0.1 -- January 17th, 2010 +Changes in 1.9.3 -- December 1st, 2011 -* Translations: - - New Galician translation by Manuel A. Vázquez -* Bugfixes: - - Rumor: Make config dialog more robust if no MIDI outputs available - - Score Wizard: Fix disappearing instrumentName if this is a markup object and - the same one as shortInstrumentName - - Stability improvements - - Some corrections in the default expansions of the Expansion Manager - -Changes in 1.0.0 -- December 26th, 2009 - -* Editor: - - Right-click menu action on \include command now opens the named file from - the LilyPond data directory if that exists and there is no local file with - that name. -* Repeat last expression (Ctrl+;): - - Doesn't repeat normal rests and skips, but rather the chord preceding it - - Keeps the \rest when repeating a pitched rest (e.g. c\rest) - - Only removes the octave from the repeated pitch (or from the first pitch - of the repeated chord) inside \relative music expressions -* Blank staff paper tool: - - option to remove small "FRESCOBALDI.ORG" tagline at bottom -* Score Wizard: - - Fix lyrics not added if there is only one staff (reported by M. Moles) -* Quick Insert Panel: - - If cursor is inside a chord, note or rest, the cursor is positioned right - after the chord, note or rest before the articulation is inserted (if there - is no selection, in which case the articulation is inserted after all - chords, notes or rests). So now you can click a note in the PDF and directly - click a button to add an articulation or ornament etc. without repositioning - the cursor manually. -* PDF preview: - - Action in contextmenu to reload PDF document -* General: - - Fix crash on moving tools around - - Fix crash on exit on some systems with multiple updated documents open - - Work around crash on logging out from the built-in terminal and then hiding - and re-showing it, that occurs due to a bug in SIP 4.9.1 - - ESC key now closes PDF-preview dialogs properly - - ESC key does not take focus away from editor window if PDF visible - - Main window is activated when clicking on notes in detached PDF viewer - - Fix interaction with SIP 4.9.3 (some settings were not saved, like paths) - - Fix order of cautionary accidentals and octave marks in pitches (affects - transpose and relative/absolute conversion functions) - - Fix attribute error on file dialogs in KDE 4.1 (but KDE 4.2 is recommended) - - Fix document name not shown in tab bar if opening non-existing file - - Improved hyphenation dictionaries search, also some explanation in docs -* Installation: - - CMake now does not require a compiler to be present anymore -* Translations: - - Dutch updated by Wilbert Berendsen - - Spanish updated by Francisco Vila - - Turkish updated by S. Acim - - Italian updated by Gianluca D'Orazio - - French updated by Ryan Kavanagh - - Czech updated by Pavel Fric - - Polish updated by Piotr Komorowski - - German updated by Georg Hennig - -Changes in 0.7.17 -- November 29th, 2009 - -* Expansion Dialog: - - It is now possible to assign keyboard shortcuts to snippets in the dialog - - Improved syntax coloring in snippet entry -* Autocompletion: - - If the autocompleter does not find any suitable completions, matching - expansions from the Expansion dialog are shown -* Score Wizard: - - Harp, Guitar and Jazz Guitar: allow multiple voices per staff - - Choir: checkbox for automatic piano reduction -* General bugfixes and improvements: - - When quitting, the last seen documents, starting with the current, are - closed first. This way, if the user cancels the quit, the current document - (if modified) remains the same. - - Files can be opened by dropping them on the Frescobaldi window - - Fix crash when swichting to a document opened using the Open File dialog - when multiple files were opened at the same time - - All pitch manipulation functions better detect the end of unbracketed markup - expressions like: g g g-\markup \sharp g g g. Frescobaldi now knows the - number of arguments each markup command has and will not mistake the g after - \sharp for a markup argument. -* Installation: - - building and installing the User Guide has been improved. If meinproc4 or - the XSL stylesheets can't be found, only a warning is printed and the cache - file (index.cache.bz2) is not pre-generated, but the install will continue. - (If there is no cache file, KHelpcenter will generate one on a per-user - basis as soon as the User Guide is displayed for the first time.) -* Translations: - - Dutch updated by me - - Spanish updated by Francisco Vila - - Polish updated by Piotr Komorowski - - Czech updated by Pavel Fric - - French updated by Ryan Kavanagh - -Changes in 0.7.16 -- November 15th, 2009 - -* New command to transpose music -* New commands for conversion between relative and absolute pitches -* New: Alt+Shift+Up/Down selects text till next or previous blank line, and - Ctrl+Alt+Shift+Up/Down moves the selected block to the next or previous blank - line. This gives a very quick way to reorder fragments of LilyPond input. -* A new tool to create empty staff paper -* Improved support for quarter tones in all pitch-related functions -* Translations: - - French updated by Ryan Kavanagh - - Spanish updated by Francisco Vila - -Changes in 0.7.15 -- October 13th, 2009 - -* New LilyPond documentation browser providing context-sensitive help -* New shortcuts: - - Repeat selected music, Ctrl+Shift+R: wraps the selection in a - \repeat volta 2 { music... } construct - - Insert pair of braces, Ctrl+{: wraps the selection in braces, or inserts - { newline newline } and places the cursor on the middle indented line. -* New bar lines submenu to insert different types of bar lines -* Expansion Manager: - - Two cursormarks (|) can be used to select a range of text after expanding - - New contextmenu command to add selected text to expansions -* Autocompletion: - - named colors are shown in the right color - - some often used block commands like \header now also insert the braces, - and place the cursor between them. - - names of variables (like composer in the header) automagically append ' = ' - if the remainder of the line does not start with the '=' character. -* New commands in the Log context menu to copy or save its contents. -* LilyPond symbol icons are displayed white if the users color palette settings - have light text on a dark background. The icons are automatically recolored - if the user changes the color preferences while Frescobaldi is running. -* The Save As... dialog now really opens in the default directory if the - document has no filename yet. -* Tools can be shown/hidden with configurable keyboard shortcuts -* Score Wizard: parts can be reordered by dragging with the mouse -* Documentation updates -* Translations: - - Turkish updated by S. Acim - - Russian updated by Artem Zolochevskiy - - Polish updated by Piotr Komorowski - - Dutch updated by Wilbert Berendsen - -Changes in 0.7.14 -- September 12th, 2009 - -* Log shows elapsed time after successful LilyPond run -* Option to run LilyPond with --verbose output -* Fix Rumor input when key signature is set to anything else than "Auto" -* Misc other bugfixes -* Translations: - - Czech updated by Pavel Fric - - Italian updated by Gianluca D'Orazio - -Changes in 0.7.13 -- August 9th, 2009 - -* Make Frescobaldi working again in KDE 4.3 due to changes in KDE and PyQt-4.5 -* Translations: - - Turkish updated by S. Acim - - Russian updated by S. Poltavski - -Changes in 0.7.12 -- July 1st, 2009 - -* It is now possible to run LilyPond on remote documents and documents that have - not been saved yet. In such cases Frescobaldi internally saves the LilyPond - file to a local temporary directory. Point and click also works on remote or - unnamed documents. This makes it easy to paste something from an email and run - LilyPond immediately, without bothering to save it first under a suitable file - name. The local cache is deleted when the document is closed or saved to a - directory on the local file system. -* It is now possible to configure external applications for PDF and MIDI files. - These will then be used instead of the KDE default configured applications. -* New align action (LilyPond->Source Document->Indent) that properly indents a - document or selection of lines. This indenter is a bit more robust than the - one built into KatePart. The Score Wizard and Expand Manager now also use the - users indentation settings, instead of always using two spaces indent. -* New shortcuts to insert nice typographical quotes: Ctrl+' for single and - Ctrl+" for double quotes. Left and right quotes are automatically determined. - If text is selected, the selected text is put between quotes. -* Repeat last note/chord: only keep articulations and ties. +* LilyPond Documentation browser: + - multiple versions of LilyPond documentation can be browsed, local and remote * Bug fixes: - - Smart Point and Click remains working if pitches are translated - - Text editor keeps keyboard focus again when clicked in PDF preview - - Rumor plugin more stable in keyboard mode and stops cleanly if running on - Frescobaldi exit -* Translations: - - French updated by David Bouriaud (thanks!) - - Dutch updated by self - -Changes in 0.7.11 -- June 15th, 2009 - -* Stability improvements - -Changes in 0.7.10 -- June 9th, 2009 - -* Point and click: Shift-click in the PDF preview now selects music from current - cursor position to new cursor position. So you can select a music fragment by - clicking on the first note and then shift-clicking on the last note. -* Editor: - - Context sensitive context (right-click) menu with, besides the usual cut, - copy and paste, commands to open \include file, hyphenate lyrics and - Cut & Assign text (if selected) - - The Cut & Assign command (Ctrl+Shift+C) now obeys inputmodes. If you e.g. - cut out some lyrics, the fragment will automatically be wrapped in a - \lyricmode { } block. - - Autocompletion for accidental styles -* User Interface: - - new document tab bar for easy navigation between open files, can be hidden - - when running LilyPond and the option 'Save document when LilyPond is run' is - enabled, the Save As dialog is displayed when the document has no filename - yet. -* Translations: - - German translation updated by Georg Hennig (thanks!) + - fix missing result files for documents with square brackets in filename + - fix error message when running LilyPond on modified document with a name but + which was never saved before (happens e.g. when opening a non-existing file) + - fix crash when MIDI synth stopped or disconnected while playing (issue #4) + - fix using PortMidi via ctypes under 64bit Linux (issue #3) + - fix error message on invalid textedit links + - fix scrollbars covering search box in some GUI styles (issue #2) +* Improvements: + - lyrics hyphenation doesn't require text to be selected anymore + - don't try to load non-existing file when clicking a point-and click link + - cursor now remains in same column while moving vertically after indent + - add articulations etc to autocompletion + - dont show the log if the user aborted a job -Changes in 0.7.9 -- May 23rd, 2009 -* Bugfixes: - - spurious crashes seem to have been gone (by using thread locks on - katepart's SmartInterface) -* Editing: - - Alt-Up and Alt-Down now jump to the first line of a blank block instead of - just the next or previous blank line. -* Quick Insert Panel: - - ornaments use the default window text color -* Repeat last expression: - - remove octave mark from first pitch - - remove barcheck pipe symbols -* Score Wizard: - - Small fixes to fretted instruments - - Predefined Guitar Fret option for Chord Names (also in Lead Sheet) - -Changes in 0.7.8 -- March 20th, 2009 - -* New Polish translation by Piotr Komorowski, many thanks! -* Updated translations: tr -* Smart Point & Click: URLs point to correct position even if the document is - changed without re-running LilyPond. Also the clickable messages in the log. - Smart Point & Click from the PDF preview only works in KDE 4.2. -* New option to only show the log if LilyPond outputs warnings or errors -* Progress bar in statusbar shows LilyPond progress -* Bugfixes: - * Make Frescobaldi exit gracefully if a LilyPond job was still running - * Make Point & Click work again in KDE 4.2 if there are tabs in the document. - * Fixed Change Pitch Language, sometimes this function didn't work if there - were complicated markups in the document. - * Memory usage improvements (some unused objects were not garbage collected) - -Changes in 0.7.7 -- March 3rd, 2009 - -* New comprehensive User Guide in the help menu (F1 key) -* Context sensitive Help buttons in most dialogs -* New Czech translation by Pavel Fric, many thanks! -* Updated translations: ru, nl -* Settings: it is now possible to choose which LilyPond version number to - use by default for new documents: the version of the installed LilyPond, - the version of the last conversion rule of convert-ly, or a custom version. -* PDF preview: context menu has a new action to configure Okular -* Score Wizard: if there is more than one part, make separate assignments for - the parts. This simplifies the generated \score { } section and makes it - easier to create additional score sections for printing separate parts. -* Bugfixes: - * Apply/paste rhythm: don't lose parts of text and don't hang if no rhythm - * Find translations when installed to non-standard directory - * Avoid double entries in score wizard instrument name language combobox - -Changes in 0.7.6 -- February 21st, 2009 - -* New context sensitive autocompletion feature, supporting: - * general lilypond commands and markup commands (inside markup) - * contexts and layout objects and their properties - * engravers, musicglyph names and midi instrument names - * most used variable names in \header, \paper, \layout, etc. - * some often used scheme function names - -Changes in 0.7.5 -- February 12th, 2009 - -* Translations updated: fr, it, nl -* Frescobaldi now can be installed to non-standard install directories -* New command to change the pitch names in a LilyPond document to another - language -* In Edit-menu: - * New command to cut a piece of text and assign it to a variable - * New shortcut to repeat the last entered music expression - * New shortcut to expand a short string to user-definable pieces of LilyPond - input. When no shortcut is typed a dialog is opened where shortcuts can - be chosen and edited. - * New shortcuts (Alt+Up and Alt+Down) to jump between blank lines, c.q. - insertion points - -Changes in 0.7.4 -- January 31st, 2009 - -* Translations updated: es, tr, it, nl -* Auto-configures Okular in KDE 4.2 to enable point-and-click -* New Fullscreen option -* New option to disable the built-in PDF preview -* A LogWidget bug fixed that garbled the text if the user clicked somewhere - in the log while LilyPond was still running -* Some Rumor bugs fixed - -Changes in 0.7.3 -- January 22nd, 2009 - -* Score Wizard: new "Try" button that shows score example -* New rhythm menu actions to copy and paste rhythms -* New option to set default directory for documents -* New option to save state (bookmarks, cursor position, etc.) for documents -* New options to edit keyboard shortcuts and toolbars -* Default keyboard shortcuts have been added for most used actions -* Save Dialog now also has LilyPond filetype filter and default extension -* Bugfixes: - * Fix editor part not saving and loading settings - * Score Wizard: fix partial measure, tabstaff, basso continuo and drumstaff -* Installation: - * Install script does not use pykdeconfig anymore, just tests PyKDE4, etc. - * Release tarballs now have prebuilt icons and translations - -Changes in 0.7.2 -- January 7th, 2009 - -* New "Run LilyPond" icon (hand drawn in Inkscape, based on the LilyPond XPM) -* Open Current Folder action -* Actions to view or print PDF, play MIDI or email documents -* Bugfixes: - * Fix shift-up and shift-down selection in editor while PDF is visible. - * don't say LilyPond crashes if user terminates the process - * End startup notification if running instance found. - -Changes in 0.7.1 -- January 3rd, 2009 - -* Settings dialog -* Show Path in window title option -* Tools save their settings -* Tool Views submenu in Settings menu -* Fix handling of filenames containing non-ascii characters -* Misc other fixes and improvements - -Changes in 0.7 -- December 26th, 2008 - -* Initial release. +Changes in 1.9.2 -- November 11th, 2011 +* Translation updates: es, nl +* New features: + - Built-in MIDI player + - Snippets can also be put in File->New from Template. When triggered via that + menu, a new document is created. There's also a command to save the current + document as a template. + - Import and export of snippets. + + +Changes in 1.9.1 -- October 11th, 2011 + +* Translation updates +* Help in much more dialogs +* New icons for some commands +* It is now possible to set the preferred Qt GUI style +* Always makes backup copy on save, config setting to retain it +* Detailed version info in about dialog +* Lots of small improvements, such as: + - Apply Rhythm dialog remembering rhythms + - snippet error messagebox now has Edit Snippet button +* New commands: + - Cut and Assign + - Copy to Image + - Tools -> Format to format whitespace + - Update with Convert-Ly (with diff view) +* Bugfixes: + - fix error message on View->Clear error marks + - fix autocomplete picking second item if no item is highlighted + - some Parser (highlighting) fixes + - color buttons now show color on all platforms + - fix error message on saving settings if no LilyPond was installed + + +Changes in 1.9.0 -- September 27th, 2011 + +* Full rewrite, not depending on KDE4 libraries any more +* Much more modular internal design, easier to add features +* All translations imported diff -Nru frescobaldi-1.2.0/checkmodules.py frescobaldi-2.0.0/checkmodules.py --- frescobaldi-1.2.0/checkmodules.py 2010-08-19 12:08:57.000000000 +0000 +++ frescobaldi-2.0.0/checkmodules.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -#! python - -# This script checks if required modules are present by simply -# importing them, and performs some additional version checks. - -import sys, os - -def mkver(major, minor, release): - return major * 65536 + minor * 256 + release - -def checkModules(): - missing = [] - - # these are checks for modules Frescobaldi needs, but you can tailor it - # for other needs. - - for module in ( - "sip", "PyQt4", "PyQt4.QtCore", "PyQt4.QtGui", - "PyKDE4", "PyKDE4.kdecore", "PyKDE4.kdeui", "PyKDE4.kparts", "PyKDE4.kio", - "PyKDE4.ktexteditor", - "dbus", "dbus.mainloop.qt", - ): - try: - exec ("import %s" % module) in globals() - except: - missing.append(module) - return missing - - -def checkVersions(): - # versions - errors = [] - - if not (2, 6) <= sys.version_info[:2] < (3, 0): - errors.append("Python version %s.%s.%s found, but need 2.6 or 2.7.\n" - "(Use e.g. cmake -DPYTHON_EXECUTABLE=/path/to/python2.6)" % - sys.version_info[:3]) - - if sip.SIP_VERSION < mkver(4, 9, 1): - errors.append("(python-)sip version %s found, but need at least 4.9.1." % - sip.SIP_VERSION_STR) - - if PyQt4.QtCore.PYQT_VERSION < mkver(4, 6, 0): - errors.append("PyQt4 version %s found, but need at least 4.6.0." % - PyQt4.QtCore.PYQT_VERSION_STR) - - if PyKDE4.kdecore.pykde_version() < mkver(4, 0, 2): - errors.append("PyKDE4 version %s found, but need at least 4.0.2." % - PyKDE4.kdecore.pykde_versionString()) - - if dbus.version < (0, 82, 4): - errors.append("python-dbus version %s found, but need at least 0.82.4." % - '.'.join(map(str, dbus.version))) - - return errors - - -if __name__ == "__main__": - - missing = checkModules() - if missing: - sys.stderr.write("The following Python modules are missing:\n") - for m in missing: - sys.stderr.write(" %s\n" % m) - sys.exit(1) - - errors = checkVersions() - if errors: - sys.stderr.write("Some packages have outdated versions:\n") - for e in errors: - sys.stderr.write(e + '\n') - sys.exit(1) - diff -Nru frescobaldi-1.2.0/cmake/modules/FindKDEInstallDirs.cmake frescobaldi-2.0.0/cmake/modules/FindKDEInstallDirs.cmake --- frescobaldi-1.2.0/cmake/modules/FindKDEInstallDirs.cmake 2009-12-03 22:30:44.000000000 +0000 +++ frescobaldi-2.0.0/cmake/modules/FindKDEInstallDirs.cmake 1970-01-01 00:00:00.000000000 +0000 @@ -1,190 +0,0 @@ -# FindKDEInstallDirs, by Wilbert Berendsen -# This file is in the public domain. - -# Most of this comes from FindKDE4.cmake and FindKDE4Internal.cmake - -# Take KDEDIRS into account -file(TO_CMAKE_PATH "$ENV{KDEDIRS}" _KDEDIRS) - -# From FindKDE4.cmake: find kde4-config -find_program(KDE4_KDECONFIG_EXECUTABLE NAMES kde4-config - # the suffix must be used since KDEDIRS can be a list of directories which don't have bin/ appended - PATH_SUFFIXES bin - HINTS - ${CMAKE_INSTALL_PREFIX} - ${_KDEDIRS} - /opt/kde4 - ONLY_CMAKE_FIND_ROOT_PATH - ) - -if(NOT KDE4_KDECONFIG_EXECUTABLE) - message(FATAL_ERROR "ERROR: Could not find KDE4 kde4-config") -endif(NOT KDE4_KDECONFIG_EXECUTABLE) - -# Call kde4-config and strip trailing slash. -macro(setconfigpath _varname) - execute_process( - COMMAND "${KDE4_KDECONFIG_EXECUTABLE}" ${ARGN} - OUTPUT_VARIABLE _temp - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(_temp) - string(REGEX REPLACE "\\/$" "" _temp ${_temp}) - endif(_temp) - set(${_varname} ${_temp}) -endmacro(setconfigpath _varname) - -# Now find the path to KDELibsDependencies.cmake -setconfigpath(KDELIBS_DEPENDENCIES --path data --locate cmake/modules/KDELibsDependencies.cmake) - -# and include it if found -if(KDELIBS_DEPENDENCIES) - include(${KDELIBS_DEPENDENCIES}) -else(KDELIBS_DEPENDENCIES) - # Otherwise set at least the default resource definitions using kde4-config - setconfigpath(KDE4_INSTALL_DIR --prefix) - setconfigpath(KDE4_LIB_INSTALL_DIR --install lib) - setconfigpath(KDE4_DATA_INSTALL_DIR --install data) - setconfigpath(KDE4_HTML_INSTALL_DIR --install html) - setconfigpath(KDE4_CONFIG_INSTALL_DIR --install config) - setconfigpath(KDE4_ICON_INSTALL_DIR --install icon) - setconfigpath(KDE4_KCFG_INSTALL_DIR --install kcfg) - setconfigpath(KDE4_LOCALE_INSTALL_DIR --install locale) - setconfigpath(KDE4_MIME_INSTALL_DIR --install mime) - setconfigpath(KDE4_SOUND_INSTALL_DIR --install sound) - setconfigpath(KDE4_TEMPLATES_INSTALL_DIR --install templates) - setconfigpath(KDE4_WALLPAPER_INSTALL_DIR --install wallpaper) - setconfigpath(KDE4_XDG_APPS_INSTALL_DIR --install xdgdata-apps) - setconfigpath(KDE4_XDG_DIRECTORY_INSTALL_DIR --install xdgdata-dirs) - setconfigpath(KDE4_SERVICES_INSTALL_DIR --install services) - setconfigpath(KDE4_SERVICETYPES_INSTALL_DIR --install servicetypes) -endif(KDELIBS_DEPENDENCIES) - -########## the following are directories where stuff will be installed to ########### -# Taken from FindKDE4Internal.cmake. - -# install compiled Python modules to PREFIX/lib{suffix} -set(_Init_LIB_SUFFIX "") -if ("${KDE4_LIB_INSTALL_DIR}" MATCHES lib64) - set(_Init_LIB_SUFFIX 64) -endif ("${KDE4_LIB_INSTALL_DIR}" MATCHES lib64) -if ("${KDE4_LIB_INSTALL_DIR}" MATCHES lib32) - set(_Init_LIB_SUFFIX 32) -endif ("${KDE4_LIB_INSTALL_DIR}" MATCHES lib32) - -set(LIB_SUFFIX "${_Init_LIB_SUFFIX}" CACHE STRING "Define suffix of directory name (32/64)" ) - - -if (WIN32) -# use relative install prefix to avoid hardcoded install paths in cmake_install.cmake files - - set(LIB_INSTALL_DIR "lib${LIB_SUFFIX}" ) # The subdirectory relative to the install prefix where libraries will be installed (default is ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX}) - - set(EXEC_INSTALL_PREFIX "" ) # Base directory for executables and libraries - set(SHARE_INSTALL_PREFIX "share" ) # Base directory for files which go to share/ - set(BIN_INSTALL_DIR "bin" ) # The install dir for executables (default ${EXEC_INSTALL_PREFIX}/bin) - set(SBIN_INSTALL_DIR "sbin" ) # The install dir for system executables (default ${EXEC_INSTALL_PREFIX}/sbin) - - set(LIBEXEC_INSTALL_DIR "${BIN_INSTALL_DIR}" ) # The subdirectory relative to the install prefix where libraries will be installed (default is ${BIN_INSTALL_DIR}) - set(INCLUDE_INSTALL_DIR "include" ) # The subdirectory to the header prefix - - #set(PLUGIN_INSTALL_DIR "lib${LIB_SUFFIX}/kde4" ) # "The subdirectory relative to the install prefix where plugins will be installed (default is ${LIB_INSTALL_DIR}/kde4) - set(CONFIG_INSTALL_DIR "share/config" ) # The config file install dir - set(DATA_INSTALL_DIR "share/apps" ) # The parent directory where applications can install their data - set(HTML_INSTALL_DIR "share/doc/HTML" ) # The HTML install dir for documentation - set(ICON_INSTALL_DIR "share/icons" ) # The icon install dir (default ${SHARE_INSTALL_PREFIX}/share/icons/) - set(KCFG_INSTALL_DIR "share/config.kcfg" ) # The install dir for kconfig files - set(LOCALE_INSTALL_DIR "share/locale" ) # The install dir for translations - set(MIME_INSTALL_DIR "share/mimelnk" ) # The install dir for the mimetype desktop files - set(SERVICES_INSTALL_DIR "share/kde4/services" ) # The install dir for service (desktop, protocol, ...) files - set(SERVICETYPES_INSTALL_DIR "share/kde4/servicetypes" ) # The install dir for servicestypes desktop files - set(SOUND_INSTALL_DIR "share/sounds" ) # The install dir for sound files - set(TEMPLATES_INSTALL_DIR "share/templates" ) # The install dir for templates (Create new file...) - set(WALLPAPER_INSTALL_DIR "share/wallpapers" ) # The install dir for wallpapers - set(DEMO_INSTALL_DIR "share/demos" ) # The install dir for demos - set(KCONF_UPDATE_INSTALL_DIR "share/apps/kconf_update" ) # The kconf_update install dir - set(AUTOSTART_INSTALL_DIR "share/autostart" ) # The install dir for autostart files - - set(XDG_APPS_INSTALL_DIR "share/applications/kde4" ) # The XDG apps dir - set(XDG_DIRECTORY_INSTALL_DIR "share/desktop-directories" ) # The XDG directory - set(XDG_MIME_INSTALL_DIR "share/mime/packages" ) # The install dir for the xdg mimetypes - - set(SYSCONF_INSTALL_DIR "etc" ) # The kde sysconfig install dir (default /etc) - set(MAN_INSTALL_DIR "share/man" ) # The kde man install dir (default ${SHARE_INSTALL_PREFIX}/man/) - set(INFO_INSTALL_DIR "share/info" ) # The kde info install dir (default ${SHARE_INSTALL_PREFIX}/info)") - set(DBUS_INTERFACES_INSTALL_DIR "share/dbus-1/interfaces" ) # The kde dbus interfaces install dir (default ${SHARE_INSTALL_PREFIX}/dbus-1/interfaces)") - set(DBUS_SERVICES_INSTALL_DIR "share/dbus-1/services" ) # The kde dbus services install dir (default ${SHARE_INSTALL_PREFIX}/dbus-1/services)") - -else (WIN32) - - # This macro implements some very special logic how to deal with the cache. - # By default the various install locations inherit their value from their "parent" variable - # so if you set CMAKE_INSTALL_PREFIX, then EXEC_INSTALL_PREFIX, PLUGIN_INSTALL_DIR will - # calculate their value by appending subdirs to CMAKE_INSTALL_PREFIX . - # This would work completely without using the cache. - # But if somebody wants e.g. a different EXEC_INSTALL_PREFIX this value has to go into - # the cache, otherwise it will be forgotten on the next cmake run. - # Once a variable is in the cache, it doesn't depend on its "parent" variables - # anymore and you can only change it by editing it directly. - # this macro helps in this regard, because as long as you don't set one of the - # variables explicitely to some location, it will always calculate its value from its - # parents. So modifying CMAKE_INSTALL_PREFIX later on will have the desired effect. - # But once you decide to set e.g. EXEC_INSTALL_PREFIX to some special location - # this will go into the cache and it will no longer depend on CMAKE_INSTALL_PREFIX. - # - # additionally if installing to the same location as kdelibs, the other install - # directories are reused from the installed kdelibs - macro(_SET_FANCY _var _value _comment) - set(predefinedvalue "${_value}") - if ("${CMAKE_INSTALL_PREFIX}" STREQUAL "${KDE4_INSTALL_DIR}" AND DEFINED KDE4_${_var}) - set(predefinedvalue "${KDE4_${_var}}") - endif ("${CMAKE_INSTALL_PREFIX}" STREQUAL "${KDE4_INSTALL_DIR}" AND DEFINED KDE4_${_var}) - - if (NOT DEFINED ${_var}) - set(${_var} ${predefinedvalue}) - else (NOT DEFINED ${_var}) - set(${_var} "${${_var}}" CACHE PATH "${_comment}") - endif (NOT DEFINED ${_var}) - endmacro(_SET_FANCY) - - if(APPLE) - set(BUNDLE_INSTALL_DIR "/Applications/KDE4" CACHE PATH "Directory where application bundles will be installed to on OSX" ) - endif(APPLE) - - _set_fancy(EXEC_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" "Base directory for executables and libraries") - _set_fancy(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share" "Base directory for files which go to share/") - _set_fancy(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" "The install dir for executables (default ${EXEC_INSTALL_PREFIX}/bin)") - _set_fancy(SBIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/sbin" "The install dir for system executables (default ${EXEC_INSTALL_PREFIX}/sbin)") - _set_fancy(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX}" "The subdirectory relative to the install prefix where libraries will be installed (default is ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX})") - _set_fancy(LIBEXEC_INSTALL_DIR "${LIB_INSTALL_DIR}/kde4/libexec" "The subdirectory relative to the install prefix where libraries will be installed (default is ${LIB_INSTALL_DIR}/kde4/libexec)") - _set_fancy(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" "The subdirectory to the header prefix") - - _set_fancy(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/kde4" "The subdirectory relative to the install prefix where plugins will be installed (default is ${LIB_INSTALL_DIR}/kde4)") - _set_fancy(CONFIG_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/config" "The config file install dir") - _set_fancy(DATA_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/apps" "The parent directory where applications can install their data") - _set_fancy(HTML_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/doc/HTML" "The HTML install dir for documentation") - _set_fancy(ICON_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/icons" "The icon install dir (default ${SHARE_INSTALL_PREFIX}/share/icons/)") - _set_fancy(KCFG_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/config.kcfg" "The install dir for kconfig files") - _set_fancy(LOCALE_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/locale" "The install dir for translations") - _set_fancy(MIME_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/mimelnk" "The install dir for the mimetype desktop files") - _set_fancy(SERVICES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/kde4/services" "The install dir for service (desktop, protocol, ...) files") - _set_fancy(SERVICETYPES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/kde4/servicetypes" "The install dir for servicestypes desktop files") - _set_fancy(SOUND_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/sounds" "The install dir for sound files") - _set_fancy(TEMPLATES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/templates" "The install dir for templates (Create new file...)") - _set_fancy(WALLPAPER_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/wallpapers" "The install dir for wallpapers") - _set_fancy(DEMO_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/demos" "The install dir for demos") - _set_fancy(KCONF_UPDATE_INSTALL_DIR "${DATA_INSTALL_DIR}/kconf_update" "The kconf_update install dir") - _set_fancy(AUTOSTART_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/autostart" "The install dir for autostart files") - - _set_fancy(XDG_APPS_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/applications/kde4" "The XDG apps dir") - _set_fancy(XDG_DIRECTORY_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/desktop-directories" "The XDG directory") - _set_fancy(XDG_MIME_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/mime/packages" "The install dir for the xdg mimetypes") - - _set_fancy(SYSCONF_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/etc" "The kde sysconfig install dir (default ${CMAKE_INSTALL_PREFIX}/etc)") - _set_fancy(MAN_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/man" "The kde man install dir (default ${SHARE_INSTALL_PREFIX}/man/)") - _set_fancy(INFO_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/info" "The kde info install dir (default ${SHARE_INSTALL_PREFIX}/info)") - _set_fancy(DBUS_INTERFACES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/dbus-1/interfaces" "The kde dbus interfaces install dir (default ${SHARE_INSTALL_PREFIX}/dbus-1/interfaces)") - _set_fancy(DBUS_SERVICES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/dbus-1/services" "The kde dbus services install dir (default ${SHARE_INSTALL_PREFIX}/dbus-1/services)") - -endif (WIN32) - diff -Nru frescobaldi-1.2.0/cmake/modules/Python.cmake frescobaldi-2.0.0/cmake/modules/Python.cmake --- frescobaldi-1.2.0/cmake/modules/Python.cmake 2010-08-24 22:46:29.000000000 +0000 +++ frescobaldi-2.0.0/cmake/modules/Python.cmake 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -# We need Python -find_package(PythonInterp REQUIRED) - - -# Check if all required Python modules are present by running checkmodules.py -macro(python_test_script _script) - execute_process( - COMMAND ${PYTHON_EXECUTABLE} "${_script}" - RESULT_VARIABLE _return - ERROR_VARIABLE _error) - if(_return) - message(FATAL_ERROR ${_error}) - endif(_return) -endmacro(python_test_script) - - -# install all python files in the current directory recursively to a -# destination and create a target to byte-compile them (if BYTECOMPILE is True) -macro(python_install_directory _destination) - file(GLOB_RECURSE python_files *.py) - set(_pycs) - foreach(_py ${python_files}) - file(RELATIVE_PATH _rel ${CMAKE_CURRENT_SOURCE_DIR} ${_py}) - get_filename_component(_dir ${_rel} PATH) - - # install .py file - install(FILES ${_py} DESTINATION ${_destination}/${_dir}) - - if(BYTECOMPILE) - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_dir}) - set(_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_rel}c) - add_custom_command( - OUTPUT ${_pyc} - COMMAND ${PYTHON_EXECUTABLE} - ARGS -c "import py_compile; py_compile.compile('${_py}', '${_pyc}', doraise=True)" - COMMENT "Byte-compiling ${_rel}" - DEPENDS ${_py} - VERBATIM - ) - list(APPEND _pycs ${_pyc}) - - # install .pyc file - install(FILES ${_pyc} DESTINATION ${_destination}/${_dir}) - endif(BYTECOMPILE) - endforeach(_py) - - if(BYTECOMPILE) - # make unique target name - file(RELATIVE_PATH _target ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) - string(REGEX REPLACE "[/]" "_" _target ${_target}) - add_custom_target("bytecompile_${_target}" ALL DEPENDS ${_pycs}) - endif(BYTECOMPILE) - -endmacro(python_install_directory _destination) - diff -Nru frescobaldi-1.2.0/cmake/modules/uninstall.cmake frescobaldi-2.0.0/cmake/modules/uninstall.cmake --- frescobaldi-1.2.0/cmake/modules/uninstall.cmake 2010-08-26 10:54:36.000000000 +0000 +++ frescobaldi-2.0.0/cmake/modules/uninstall.cmake 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -# CMake module and scripts to add an uninstall target - -set(SCRIPTS_DIR "${CMAKE_SOURCE_DIR}/cmake/scripts") - -add_custom_target(uninstall) - -add_custom_target(uninstall_from_manifest - COMMAND "${CMAKE_COMMAND}" - "-DMANIFEST=${CMAKE_BINARY_DIR}/install_manifest.txt" - -P "${SCRIPTS_DIR}/uninstall_from_manifest.cmake" -) -add_dependencies(uninstall uninstall_from_manifest) - -# create unique target names based on a prefix -macro(unique_target _varName _prefix) - set(_counter "_counter_${_prefix}") - if(NOT DEFINED ${_counter}) - set(${_counter} 0) - endif(NOT DEFINED ${_counter}) - math(EXPR ${_counter} "${${_counter}} + 1") - set(${_varName} "${_prefix}_${${_counter}}") -endmacro(unique_target) - -# uninstall_file(name) removes a file or symlink with that name on uninstall, -# taking DESTDIR into account. If NO_CHECK is appended, the file's existence is -# not checked before removing. This can be used to uninstall a broken symlink. -# -# Use this macro to remove a file or symlink that is not in the -# install_manifest.txt file, e.g. because it was generated by an -# install(CODE ...) construct. -macro(uninstall_file _name) - unique_target(_target "uninstall_file") - if("${ARGN}" STREQUAL "NO_CHECK") - add_custom_target(${_target} - COMMAND "${CMAKE_COMMAND}" - "-DFILENAME=${_name}" - "-DNO_CHECK=TRUE" - -P "${SCRIPTS_DIR}/uninstall_file.cmake" - ) - else("${ARGN}" STREQUAL "NO_CHECK") - add_custom_target(${_target} - COMMAND "${CMAKE_COMMAND}" - "-DFILENAME=${_name}" - -P "${SCRIPTS_DIR}/uninstall_file.cmake" - ) - endif("${ARGN}" STREQUAL "NO_CHECK") - add_dependencies(uninstall ${_target}) -endmacro(uninstall_file) - diff -Nru frescobaldi-1.2.0/cmake/scripts/uninstall_file.cmake frescobaldi-2.0.0/cmake/scripts/uninstall_file.cmake --- frescobaldi-1.2.0/cmake/scripts/uninstall_file.cmake 2010-08-26 10:54:36.000000000 +0000 +++ frescobaldi-2.0.0/cmake/scripts/uninstall_file.cmake 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -# Remove a file or symlink taking DESTDIR into account. -# FILENAME should be defined on the command line. -# If NO_CHECK is also defined, the file's existence is not checked -# before removing. This can be used to remove a broken symlink. - -set(file "$ENV{DESTDIR}${FILENAME}") -message(STATUS "Uninstalling: ${file}") -if(DEFINED NO_CHECK OR EXISTS "${file}") - file(REMOVE "${file}") -else(DEFINED NO_CHECK OR EXISTS "${file}") - message("File does not exist: ${file}") -endif(DEFINED NO_CHECK OR EXISTS "${file}") diff -Nru frescobaldi-1.2.0/cmake/scripts/uninstall_from_manifest.cmake frescobaldi-2.0.0/cmake/scripts/uninstall_from_manifest.cmake --- frescobaldi-1.2.0/cmake/scripts/uninstall_from_manifest.cmake 2010-08-26 10:54:36.000000000 +0000 +++ frescobaldi-2.0.0/cmake/scripts/uninstall_from_manifest.cmake 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -# Remove files from install_manifest.txt. -# MANIFEST should be defined on the command line. -# DESTDIR is taken into account automatically. - -if(NOT EXISTS "${MANIFEST}") - message(FATAL_ERROR "Cannot find install manifest: \"${MANIFEST}\"") -endif(NOT EXISTS "${MANIFEST}") - -file(STRINGS "${MANIFEST}" files) -foreach(file ${files}) - set(file "$ENV{DESTDIR}${file}") - message(STATUS "Uninstalling: ${file}") - if(EXISTS "${file}") - file(REMOVE "${file}") - else(EXISTS "${file}") - message("File does not exist: ${file}") - endif(EXISTS "${file}") -endforeach(file) diff -Nru frescobaldi-1.2.0/CMakeLists.txt frescobaldi-2.0.0/CMakeLists.txt --- frescobaldi-1.2.0/CMakeLists.txt 2010-12-25 06:50:06.000000000 +0000 +++ frescobaldi-2.0.0/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -cmake_minimum_required(VERSION 2.4) -project(frescobaldi NONE) -set(VERSION "1.2.0") - -option(HANDBOOK "Install Frescobaldi User Guide" ON) -option(BYTECOMPILE "Byte-compile Python modules on install" ON) -option(CHECKMODULES "Check presence and versions of required Python modules" ON) - -# Find our own modules -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) - -# some Python macros -include(Python) - -# uninstall target -include(uninstall) - -# Check if all required Python modules are present by running checkmodules.py -if(CHECKMODULES) - python_test_script(${CMAKE_SOURCE_DIR}/checkmodules.py) -endif(CHECKMODULES) - - # Where to install stuff, in separate module -include(FindKDEInstallDirs) - -# Do not rebuild our MO's and icons if the build rules were changed. -# Makes releasing prebuilt tarballs possible. -set(CMAKE_SKIP_RULE_DEPENDENCY TRUE) - -# Set some install directories -set(APP_DIR ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -set(MODULE_DIR ${APP_DIR}/lib) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/frescobaldi.py - ${CMAKE_CURRENT_BINARY_DIR}/frescobaldi @ONLY) -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/frescobaldi DESTINATION ${BIN_INSTALL_DIR}) - -add_subdirectory(python) -add_subdirectory(data) - -if(EXISTS ${CMAKE_SOURCE_DIR}/prebuilt) - add_subdirectory(prebuilt) -else(EXISTS ${CMAKE_SOURCE_DIR}/prebuilt) - add_subdirectory(pics) - add_subdirectory(po) -endif(EXISTS ${CMAKE_SOURCE_DIR}/prebuilt) - -if(HANDBOOK) - add_subdirectory(doc) -endif(HANDBOOK) - -install(DIRECTORY - rumor - icons - css - DESTINATION ${APP_DIR} - PATTERN .* EXCLUDE) Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/css/lcd-background.png and /tmp/z3itFtculI/frescobaldi-2.0.0/css/lcd-background.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/css/lcd-borders.png and /tmp/z3itFtculI/frescobaldi-2.0.0/css/lcd-borders.png differ diff -Nru frescobaldi-1.2.0/css/lilydoc.css frescobaldi-2.0.0/css/lilydoc.css --- frescobaldi-1.2.0/css/lilydoc.css 2010-08-28 05:43:04.000000000 +0000 +++ frescobaldi-2.0.0/css/lilydoc.css 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -/* - * Stylesheet to load in the LilyPond documentation browser. - */ - -pre { - font-family: "monospace" !important; - font-size: 85% !important; - line-height: 130% !important; -} - diff -Nru frescobaldi-1.2.0/data/CMakeLists.txt frescobaldi-2.0.0/data/CMakeLists.txt --- frescobaldi-1.2.0/data/CMakeLists.txt 2010-08-30 12:27:55.000000000 +0000 +++ frescobaldi-2.0.0/data/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -# Menu entry -install( - FILES frescobaldi.desktop - DESTINATION ${XDG_APPS_INSTALL_DIR} -) - -# Appicon -install( - FILES frescobaldi-lily.svg - DESTINATION ${ICON_INSTALL_DIR}/hicolor/scalable/apps - RENAME frescobaldi.svg -) - -# Default config file -install( - FILES frescobaldirc - DESTINATION ${CONFIG_INSTALL_DIR} -) - -# UI configuration, etc -install( - FILES frescobaldiui.rc expansions frescobaldi.notifyrc - DESTINATION ${APP_DIR} -) - diff -Nru frescobaldi-1.2.0/data/expansions frescobaldi-2.0.0/data/expansions --- frescobaldi-1.2.0/data/expansions 2010-08-30 12:27:55.000000000 +0000 +++ frescobaldi-2.0.0/data/expansions 1970-01-01 00:00:00.000000000 +0000 @@ -1,316 +0,0 @@ -[pa] -Name=Paper Section -Name[nl]=Papier sectie (\\paper) -Text=\\paper {\n (|)\n}\n - -[i0] -Name=Paper: indent = 0 -Name[nl]=Papier: indent = 0 -Text=indent = #0 - -[a4] -Name=Paper Size A4 -Name[nl]=Papierformaat A4 -Text=#(set-paper-size "a4") - -[a4l] -Name=Paper Size A4 Landscape -Name[nl]=Papierformaat A4 oblong -Text=#(set-paper-size "a4" 'landscape) - -[a5] -Name=Paper Size A5 -Name[nl]=Papierformaat A5 -Text=#(set-paper-size "a5") - -[let] -Name=Paper Size Letter -Name[nl]=Papierformaat Letter -Text=#(set-paper-size "letter") - -[o] -Name=Override -Text=\\override\s - -[oo] -Name=Once Override -Text=\\once \\override\s - -[su] -Name=Stem Up -Name[nl]=Stokken omhoog -Text=\\stemUp\s - -[sd] -Name=Stem Down -Name[nl]=Stokken omlaag -Text=\\stemDown\s - -[rel] -Name=Relative Music -Name[nl]=Relatieve muziek -Text=\\relative @c'(|) {\n \n}\n - -[18] -Name=Set Global Staffsize 18 -Name[nl]=Globale balk-grootte 18 -Text=#(set-global-staff-size 18) - -[rep] -Name=Repeat -Name[nl]=Herhaling (\\repeat) -Text=\\repeat volta 2(|) {\n \n}\n - -[alt] -Name=Repeat Alternative -Name[nl]=Herhaling alternatief -Text=\\alternative {\n { (|) }\n { }\n}\n - -[he] -Name=Header Section -Name[nl]=Kopregels sectie (\\header) -Text=\\header {\n (|)\n}\n - -[h] -Name=Header Template -Name[nl]=Header-sjabloon -Text=\\header {\n title = "(|)"\n composer = ""\n tagline = \\markup {\n Engraved at\n \\simple #(strftime "%Y-%m-%d" (localtime (current-time)))\n with \\with-url #"http://lilypond.org/web/"\n { LilyPond \\simple #(lilypond-version) (http://lilypond.org/) }\n }\n} - -[nt] -Name=Header: No Tagline -Name[nl]=Kopregels: geen tagline -Text=tagline = ##f - -[tagline] -Name=Tagline with date and LilyPond version -Name[nl]=Tagline met datum en LilyPond-versie -Text=tagline = \\markup {\n Engraved at\n \\simple #(strftime "%Y-%m-%d" (localtime (current-time)))\n with \\with-url #"http://lilypond.org/web/"\n { LilyPond \\simple #(lilypond-version) (http://lilypond.org/) }\n} - -[lyr] -Name=Lyric Stanza -Name[nl]=Couplet liedtekst -Text=\\lyricmode {\n \\set stanza = "(|)."\n \n}\n - -[song] -Name=Melody with Lyrics -Name[nl]=Melodie met liedtekst -Text=\\relative @c'(|) {\n \n}\n\\addlyrics {\n \n}\n - -[sc] -Name=Score section -Name[nl]=Score sectie -Text=\\score {\n (|)\n}\n - -[la] -Name=Layout Section -Name[nl]=Layout sectie -Text=\\layout {\n (|)\n}\n - -[nb] -Name=Layout: No Barnumbers -Name[nl]=Layout: geen maatnummers -Text=\\context {\n \\Score\n \\remove "Bar_number_engraver"\n} - -[mi] -Name=Midi section -Name[nl]=Midi sectie -Text=\\midi {\n (|)\n}\n - -[nd] -Name=Midi: No Dynamics -Name[nl]=Midi: geen dynamiek -Text=\\context {\n \\Voice\n \\remove "Dynamic_performer"\n} - -[mt] -Name=Midi: Set Tempo -Name[nl]=Midi: tempo instellen -Text=\\context {\n \\Score\n tempoWholesPerMinute = #(ly:make-moment (|)100 4)\n} - -[c] -Name=New ChoirStaff -Name[nl]=Nieuwe koorbalk (ChoirStaff) -Text=\\new ChoirStaff (|)<<\n \n>>\n - -[p] -Name=New PianoStaff -Name[nl]=Nieuwe pianobalk (PianoStaff) -Text=\\new PianoStaff (|)<<\n \\new Staff = "rh" { }\n \\new Staff = "lh" { \\clef bass }\n>>\n - -[s] -Name=New Staff -Name[nl]=Nieuwe balk (Staff) -Text=\\new Staff (|){ }\n - -[w] -Name=With (after \\new Staff, etc.) -Name[nl]=With (na \\new Staff, etc.) -Text=\\with {\n (|)\n}\s - -[in] -Name=With: instrumentName -Text=instrumentName = #"(|)" - -[sin] -Name=With: shortInstrumentName -Text=shortInstrumentName = #"(|)" - -[ss] -Name=With: Smaller Staffsize -Name[nl]=With: notenbalk verkleinen -Text=fontSize = #-1\n\\override StaffSymbol #'staff-space = #(magstep -1) - -[C] -Name=Key C major -Name[nl]=C-groot -Text=\\key @c \\major\n - -[D] -Name=Key D major -Name[nl]=D-groot -Text=\\key @d \\major\n - -[E] -Name=Key E major -Name[nl]=E-groot -Text=\\key @e \\major\n - -[F] -Name=Key F major -Name[nl]=F-groot -Text=\\key @f \\major\n - -[G] -Name=Key G major -Name[nl]=G-groot -Text=\\key @g \\major\n - -[A] -Name=Key A major -Name[nl]=A-groot -Text=\\key @a \\major\n - -[Cm] -Name=Key C minor -Name[nl]=C-klein -Text=\\key @c \\minor\n - -[Dm] -Name=Key D minor -Name[nl]=D-klein -Text=\\key @d \\minor\n - -[Em] -Name=Key E minor -Name[nl]=E-klein -Text=\\key @e \\minor\n - -[Fm] -Name=Key F minor -Name[nl]=F-klein -Text=\\key @f \\minor\n - -[Gm] -Name=Key G minor -Name[nl]=G-klein -Text=\\key @g \\minor\n - -[Am] -Name=Key A minor -Name[nl]=A-klein -Text=\\key @a \\minor\n - -[22] -Name=Modern 2/2 Time Signature -Name[nl]=Moderne 2/2 maat -Text=\\override Staff.TimeSignature #'style = #'()\n\\time 2/2\n - -[44] -Name=Modern 4/4 Time Signature -Name[nl]=Moderne 4/4 maat -Text=\\override Staff.TimeSignature #'style = #'()\n\\time 4/4\n - -[tac_maj] -Name=Tactus Major (2/half note) -Name[nl]=Tactus Major (2/halve noot) -Text=\\once \\override Staff.TimeSignature #'style = #'()\n\\once \\override Staff.TimeSignature #'stencil = #ly:text-interface::print\n\\once \\override Staff.TimeSignature #'text = \\markup {\n \\override #'(baseline-skip . 0.5)\n \\column { \\number 2 \\tiny \\note #"2" #-.6 }\n}\n - -[tac_min] -Name=Tactus Minor (1/half note) -Name[nl]=Tactus Minor (1/halve noot) -Text=\\once \\override Staff.TimeSignature #'style = #'()\n\\once \\override Staff.TimeSignature #'stencil = #ly:text-interface::print\n\\once \\override Staff.TimeSignature #'text = \\markup {\n \\override #'(baseline-skip . 0.5)\n \\column { \\number 1 \\tiny \\note #"2" #-.6 }\n}\n - -[tac_prop] -Name=Tactus Proportionatus (1/half dot) -Name[nl]=Tactus Proportionatus (1/halve punt) -Text=\\once \\override Staff.TimeSignature #'style = #'()\n\\once \\override Staff.TimeSignature #'stencil = #ly:text-interface::print\n\\once \\override Staff.TimeSignature #'text = \\markup {\n \\override #'(baseline-skip . 0.5)\n \\column { \\number 1 \\tiny \\note #"2." #-.6 }\n}\n - -[tac_prop3] -Name=Tactus Proportionatus (3/quarter note) -Name[nl]=Tactus Proportionatus (3/kwartnoot) -Text=\\once \\override Staff.TimeSignature #'style = #'()\n\\once \\override Staff.TimeSignature #'stencil = #ly:text-interface::print\n\\once \\override Staff.TimeSignature #'text = \\markup {\n \\override #'(baseline-skip . 0.5)\n \\column { \\number 3 \\tiny \\note #"4" #-.6 }\n}\n - -[tm] -Name=Tempo text mark -Name[nl]=Tempo tekstaanduiding -Text=tempoMark = {\n \\once \\override Score.RehearsalMark #'self-alignment-X = #LEFT\n \\once \\override Score.RehearsalMark #'break-align-symbols = #'(time-signature key-signature)\n \\once \\override Staff.TimeSignature #'break-align-anchor-alignment = #LEFT\n \\mark \\markup \\bold {\n (|)Allegro(|)\n \\small \\general-align #Y #DOWN \\note #"4" #1 = 100\n }\n}\n - -[2] -Name=Two voices -Name[nl]=Twee stemmen -Text=<< { (|) } \\\\ { } >> - -[2l] -Name=Two voices (long) -Name[nl]=Twee stemmen (lang) -Text=<< \n {\n (|)\n } \\\\\n {\n \n }\n>> - -[l] -Name=New Lyrics -Name[nl]=Nieuwe liedtekst (Lyrics) -Text=\\new Lyrics \\lyricsto "(|)" { }\n - -[3] -Name=Triplet -Name[nl]=Triool -Text=\\times 2/3 { (|) } - -[v1] -Name=Voice One -Name[nl]=Stem 1 (\\voiceOne) -Text=\\voiceOne - -[v2] -Name=Voice Two -Name[nl]=Stem 2 (\\voiceTwo) -Text=\\voiceTwo - -[v3] -Name=Voice Three -Name[nl]=Stem 3 (\\voiceThree) -Text=\\voiceThree - -[v4] -Name=Voice Four -Name[nl]=Stem 4 (\\voiceFour) -Text=\\voiceFour - -[1v] -Name=One Voice -Name[nl]=Eenstemmig (\\oneVoice) -Text=\\oneVoice - -[br] -Name=Breath Mark -Name[nl]=Ademhalingsteken (\\breathe) -Text=\\breathe\n - -[mub] -Name=Markup Bold -Name[nl]=Markup Vet (bold) -Text=\\markup \\bold { (|) } - -[mui] -Name=Markup Italic -Name[nl]=Markup Cursief (italic) -Text=\\markup \\italic { (|) } - diff -Nru frescobaldi-1.2.0/data/frescobaldi.desktop frescobaldi-2.0.0/data/frescobaldi.desktop --- frescobaldi-1.2.0/data/frescobaldi.desktop 2010-01-10 20:48:14.000000000 +0000 +++ frescobaldi-2.0.0/data/frescobaldi.desktop 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -[Desktop Entry] -GenericName=LilyPond Music Editor -GenericName[nl]=Muziek-editor voor LilyPond -GenericName[es]=Editor de música para LilyPond -GenericName[it]=Editor musicale per LilyPond -GenericName[ru]=Музыкальный нотатор LilyPond -GenericName[cs]=LilyPond hudební editor -GenericName[tr]=LilyPond Müzik Düzenleyicisi -GenericName[pl]=Edytor nutowy LilyPond -GenericName[fr]=Éditeur de musique LilyPond -GenericName[de]=LilyPond Musik-Editor -Name=Frescobaldi -MimeType=text/x-lilypond; -Exec=frescobaldi %U -X-KDE-StartupNotify=true -Icon=frescobaldi -X-DocPath=frescobaldi/index.html -Type=Application -Terminal=false -InitialPreference=8 -Categories=Qt;KDE;AudioVideo;Music;Utility;TextEditor; -X-Accepts-TextEditUrl=True diff -Nru frescobaldi-1.2.0/data/frescobaldi-lily.svg frescobaldi-2.0.0/data/frescobaldi-lily.svg --- frescobaldi-1.2.0/data/frescobaldi-lily.svg 2010-08-19 12:19:04.000000000 +0000 +++ frescobaldi-2.0.0/data/frescobaldi-lily.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,222 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru frescobaldi-1.2.0/data/frescobaldi.notifyrc frescobaldi-2.0.0/data/frescobaldi.notifyrc --- frescobaldi-1.2.0/data/frescobaldi.notifyrc 2010-08-24 14:06:42.000000000 +0000 +++ frescobaldi-2.0.0/data/frescobaldi.notifyrc 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -[Global] -IconName=frescobaldi -Name=Frescobaldi -Comment=Frescobaldi - -[Event/compileFinished] -Name=Compile Finished -Comment=A LilyPond compile process has finished -Action=Popup diff -Nru frescobaldi-1.2.0/data/frescobaldirc frescobaldi-2.0.0/data/frescobaldirc --- frescobaldi-1.2.0/data/frescobaldirc 2010-09-10 05:42:07.000000000 +0000 +++ frescobaldi-2.0.0/data/frescobaldirc 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -# Default configuration file for Frescobaldi -# Please only use this to provide default keyboard shortcuts! - -[expand shortcuts] -3=Ctrl+3 -v1=Alt+1 -v2=Alt+2 -v3=Alt+3 -v4=Alt+4 -1v=Alt+0 -mub=Alt+M, Alt+B -mui=Alt+M, Alt+I - -[charselect shortcuts] -0x2248=Alt+~ - -[quickinsert shortcuts] -bar:double=Alt+; -bar:end=Alt+. -bar:rcomma=Alt+' -spanner:slur=Ctrl+( - diff -Nru frescobaldi-1.2.0/data/frescobaldiui.rc frescobaldi-2.0.0/data/frescobaldiui.rc --- frescobaldi-1.2.0/data/frescobaldiui.rc 2010-10-04 07:50:24.000000000 +0000 +++ frescobaldi-2.0.0/data/frescobaldiui.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,180 +0,0 @@ - - - - - &File - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - &Edit - - - - - - - - - - - - - - - - &View - - - - &Document - - - - - - &LilyPond - - - - - - - - - - &Insert - - - - - - - - - - - - - &Pitch - - - - - - - - &Rhythm - - - - - - - - - - - - - - - - - - &Lyrics - - - - - - &Source Document - - - - - &Extra Tools - - - - - - - &Sessions - - - - - - - - &Tools - - - - &Settings - - - - - - - - - - - - - &Help - - - -Main Toolbar - - - - - - - - - - - - - - - - - - - - - - - diff -Nru frescobaldi-1.2.0/debian/changelog frescobaldi-2.0.0/debian/changelog --- frescobaldi-1.2.0/debian/changelog 2011-11-24 23:54:19.000000000 +0000 +++ frescobaldi-2.0.0/debian/changelog 2012-01-03 21:20:32.000000000 +0000 @@ -1,3 +1,16 @@ +frescobaldi (2.0.0-1) unstable; urgency=low + + * New upstream release + * Drop the following uneeded patches: + + 01_checkmodules_no_python-kde4_build-dep.diff + + 02_no_pyc.diff + + 04_no_binary_lilypond_upgrades.diff + * Needs new dependency python-poppler-qt4 + * Update debian/watch for new download path + * Update copyright file with new holders and years + + -- Ryan Kavanagh Tue, 03 Jan 2012 16:20:11 -0500 + frescobaldi (1.2.0-2) unstable; urgency=low * Bump standards vertion to 3.9.2 diff -Nru frescobaldi-1.2.0/debian/control frescobaldi-2.0.0/debian/control --- frescobaldi-1.2.0/debian/control 2011-11-24 23:52:51.000000000 +0000 +++ frescobaldi-2.0.0/debian/control 2011-12-30 01:23:56.000000000 +0000 @@ -1,7 +1,7 @@ Source: frescobaldi Section: editors Priority: optional -Maintainer: Ryan Kavanagh +Maintainer: Ryan Kavanagh Uploaders: Python Applications Packaging Team Build-Depends: debhelper (>= 8) Build-Depends-Indep: python (>= 2.6.6-3~), @@ -19,13 +19,10 @@ Depends: ${misc:Depends}, ${python:Depends}, python-qt4, - python-kde4 (>= 4:4.0.2), - python-dbus, - lilypond, - okular, - kdebase-bin (>= 4.2.1), - python-qt4-dbus -Suggests: rumor, timidity, alsa-utils, lilypond-doc + python-poppler-qt4, + lilypond +Recommends: python-pypm +Suggests: lilypond-doc Description: LilyPond sheet music editor for KDE4 Frescobaldi is a LilyPond sheet music editor for KDE4, with the following features: diff -Nru frescobaldi-1.2.0/debian/copyright frescobaldi-2.0.0/debian/copyright --- frescobaldi-1.2.0/debian/copyright 2010-11-10 20:08:58.000000000 +0000 +++ frescobaldi-2.0.0/debian/copyright 2012-01-03 21:20:07.000000000 +0000 @@ -1,7 +1,11 @@ This package was debianized by Ryan Kavanagh on Sat, 31 Jan 2009 19:53:55 -0500. -It was downloaded from http://code.google.com/p/lilykde/downloads/list +Versions prior to 2.0.0 were downloaded from + http://code.google.com/p/lilykde/downloads/list +Versions 2.0.0 onwards were downloaded from + https://github.com/wbsoft/frescobaldi/downloads + Upstream Authors: @@ -17,6 +21,8 @@ es.po: Francisco Vila fr.po: + Raphaël Doursenaud + Philippe Massart Valentin Villenave David Bouriaud Yann Collette @@ -42,22 +48,24 @@ Copyright: - Copyright (C) 2008-2010 Wilbert Berendsen - Copyright (C) 2009-2010 Pavel Fric + Copyright (C) 2008-2011 Wilbert Berendsen + Copyright (C) 2009-2011 Pavel Fric Copyright (C) 2008 Henrik Evers Copyright (C) 2009-2010 Georg Hennig - Copyright (C) 2008, 2009 Francisco Vila + Copyright (C) 2008–2011 Francisco Vila Copyright (C) 2008, 2010 Valentin Villenave Copyright (C) 2009 David Bouriaud - Copyright (C) 2009-2010 Ryan Kavanagh - Copyright (C) 2009 Manuel A. Vazquez - Copyright (C) 2008, 2009 Gianluca D'Orazio + Copyright (C) 2009-2011 Ryan Kavanagh + Copyright (C) 2009–2011 Manuel A. Vazquez + Copyright (C) 2008–2011 Gianluca D'Orazio Copyright (C) 2009-2010 Piotr Komorowski Copyright (C) 2008 Сергей Полтавский Copyright (C) 2009 Serj Poltavski Copyright (C) 2008–2010 Server Acim Copyright (C) 1999–2009 Gentoo Foundation Copyright (C) 2009 Artem Zolochevskiy + Copyright (C) 2011 Raphaël Doursenaud + Copyright (C) 2011 Philippe Massart License: @@ -78,6 +86,6 @@ On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-2'. -The Debian packaging is Copyright (C) 2009, Ryan Kavanagh +The Debian packaging is Copyright (C) 2009–2012 Ryan Kavanagh and is licensed under the GPL version 2, or (at your option) any later version, see above. diff -Nru frescobaldi-1.2.0/debian/patches/01_checkmodules_no_python-kde4_build-dep.diff frescobaldi-2.0.0/debian/patches/01_checkmodules_no_python-kde4_build-dep.diff --- frescobaldi-1.2.0/debian/patches/01_checkmodules_no_python-kde4_build-dep.diff 2010-07-28 17:57:38.000000000 +0000 +++ frescobaldi-2.0.0/debian/patches/01_checkmodules_no_python-kde4_build-dep.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -## 01_checkmodules_no_python-kde4_build-dep.diff -## by Ryan Kavanagh -## Description: We don't need to check that these are installed at build since -## they're only used at runtime. -Index: frescobaldi-1.1.3/checkmodules.py -=================================================================== ---- frescobaldi-1.1.3.orig/checkmodules.py 2010-07-28 12:07:22.067048461 -0400 -+++ frescobaldi-1.1.3/checkmodules.py 2010-07-28 12:08:18.635050654 -0400 -@@ -55,7 +55,7 @@ - return errors - - --if __name__ == "__main__": -+if __name__ == "__DebianDontRunFollowingToSaveOnB-D__": - - missing = checkModules() - if missing: diff -Nru frescobaldi-1.2.0/debian/patches/02_no_pyc.diff frescobaldi-2.0.0/debian/patches/02_no_pyc.diff --- frescobaldi-1.2.0/debian/patches/02_no_pyc.diff 2010-11-10 20:08:58.000000000 +0000 +++ frescobaldi-2.0.0/debian/patches/02_no_pyc.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -# 02_no_pyc.diff by Ryan Kavanagh -# Description: Don't install *.pyc -Index: frescobaldi-1.1.8/cmake/modules/Python.cmake -=================================================================== ---- frescobaldi-1.1.8.orig/cmake/modules/Python.cmake 2010-08-24 18:46:29.000000000 -0400 -+++ frescobaldi-1.1.8/cmake/modules/Python.cmake 2010-11-09 13:51:51.362724192 -0500 -@@ -40,7 +40,8 @@ - list(APPEND _pycs ${_pyc}) - - # install .pyc file -- install(FILES ${_pyc} DESTINATION ${_destination}/${_dir}) -+ # Or not -- RK -+ # install(FILES ${_pyc} DESTINATION ${_destination}/${_dir}) - endif(BYTECOMPILE) - endforeach(_py) - diff -Nru frescobaldi-1.2.0/debian/patches/04_no_binary_lilypond_upgrades.diff frescobaldi-2.0.0/debian/patches/04_no_binary_lilypond_upgrades.diff --- frescobaldi-1.2.0/debian/patches/04_no_binary_lilypond_upgrades.diff 2010-10-08 15:38:56.000000000 +0000 +++ frescobaldi-2.0.0/debian/patches/04_no_binary_lilypond_upgrades.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -# 04_no_binary_lilypond_upgrades.diff by Ryan Kavanagh -# Description: Comment out the download 3rd-party lilypond binary feature. We -# don't want to end up with bug reports in Debian about users screwing up their -# system by installing 3rd party packages. The stable lilypond packages in -# Debian are generally up to date and if they know enough to want to run an -# unstable version, they know enough to install it themselves. -Index: frescobaldi-1.1.7/python/frescobaldi_app/settings.py -=================================================================== ---- frescobaldi-1.1.7.orig/python/frescobaldi_app/settings.py 2010-10-08 10:42:23.474305523 -0400 -+++ frescobaldi-1.1.7/python/frescobaldi_app/settings.py 2010-10-08 10:47:45.527302819 -0400 -@@ -828,15 +828,21 @@ - """ - def __init__(self, parent): - KDialog.__init__(self, parent) -+ # Comment out the download 3rd-party lilypond binary feature. We don't -+ # want to end up with bug reports in Debian about users screwing up -+ # their system by installing 3rd party packages. The stable lilypond -+ # packages in Debian are generally up to date and if they know enough to -+ # want to run an unstable version, they know enough to install it -+ # themselves. - self.setButtons(KDialog.ButtonCode( -- KDialog.Ok | KDialog.Cancel | KDialog.Help | KDialog.User1)) -+ KDialog.Ok | KDialog.Cancel | KDialog.Help))# | KDialog.User1)) - self.setCaption(i18n("LilyPond")) - self.setHelp("settings-paths-lilypond") -- self.setButtonText(KDialog.User1, i18n("Download...")) -- self.setButtonIcon(KDialog.User1, KIcon("download")) -- self.setButtonToolTip(KDialog.User1, i18n( -- "Download new binary LilyPond releases.")) -- self.user1Clicked.connect(self.downloadLilyPond) -+ #self.setButtonText(KDialog.User1, i18n("Download...")) -+ #self.setButtonIcon(KDialog.User1, KIcon("download")) -+ #self.setButtonToolTip(KDialog.User1, i18n( -+ # "Download new binary LilyPond releases.")) -+ #self.user1Clicked.connect(self.downloadLilyPond) - layout = QGridLayout(self.mainWidget()) - - l = QLabel(i18n("LilyPond Command:")) -@@ -879,8 +885,12 @@ - info.auto = self.auto.isChecked() - - def downloadLilyPond(self): -- from frescobaldi_app.download import LilyPondDownloadDialog -- LilyPondDownloadDialog(self).exec_() -+ # We don't want users installing 3rd party binary packages of Lilypond -+ # through Frescobaldi, we don't want to get bug reports about broken -+ # lilypond installations. Commenting out for Debian. -+ #from frescobaldi_app.download import LilyPondDownloadDialog -+ #LilyPondDownloadDialog(self).exec_() -+ pass - - - class SessionsStartup(SettingsGroup): diff -Nru frescobaldi-1.2.0/debian/patches/series frescobaldi-2.0.0/debian/patches/series --- frescobaldi-1.2.0/debian/patches/series 2010-10-08 15:38:56.000000000 +0000 +++ frescobaldi-2.0.0/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -01_checkmodules_no_python-kde4_build-dep.diff -02_no_pyc.diff -04_no_binary_lilypond_upgrades.diff diff -Nru frescobaldi-1.2.0/debian/watch frescobaldi-2.0.0/debian/watch --- frescobaldi-1.2.0/debian/watch 2010-08-19 14:26:56.000000000 +0000 +++ frescobaldi-2.0.0/debian/watch 2011-12-26 18:44:52.000000000 +0000 @@ -1,6 +1,3 @@ -# Compulsory line, this is a version 3 file version=3 - -opts=downloadurlmangle=s#.*name=(frescobaldi-(.*)\.tar\.gz).*#http://lilykde.googlecode.com/files/$1#,filenamemangle=s#.*(frescobaldi-(.*)\.tar\.gz).*#$1# \ - http://code.google.com/p/lilykde/downloads/list \ - detail\?name=frescobaldi-(.*)\.tar\.gz.* +opts="filenamemangle=s@.*/v@frescobaldi-@" \ +http://githubredir.debian.net/github/wbsoft/frescobaldi .*/v(.*).tar.gz diff -Nru frescobaldi-1.2.0/doc/about.docbook frescobaldi-2.0.0/doc/about.docbook --- frescobaldi-1.2.0/doc/about.docbook 2010-09-13 22:56:39.000000000 +0000 +++ frescobaldi-2.0.0/doc/about.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,169 +0,0 @@ - -About &frescobaldi; - - -&frescobaldi; is named after -Girolamo Frescobaldi (1583 – 1643), -an Italian organist and composer. - - - -&frescobaldi;'s homepage is at www.frescobaldi.org -and there is a mailinglist at -frescobaldi@googlegroups.com -(more info). - - - -Credits - - -The following people have contributed to &frescobaldi;: - - - - -Main author, core developer and Dutch translation: - - - Wilbert Berendsen (www.wilbertberendsen.nl) - - - - - -French translation: - - - Valentin Villenave (valentin.villenave.info) - - - Yann Collette - - - David Bouriaud - - - Ryan Kavanagh - - - - - -Turkish translation: - - - Server ACİM (acim.name.tr) - - - - - -Spanish translation: - - - Francisco Vila (www.paconet.org) - - - - - -Russian translation: - - - Sergey Poltavski - - - Artem Zolochevskiy - - - - - -Italian translation: - - - Gianluca D'Orazio - - - - - -German translation: - - - Henrik Evers - - - Georg Hennig - - - - - -Czech translation: - - - Pavel Fric - - - - - -Polish translation: - - - Piotr Komorowski - - - - - -Galician translation: - - - Manuel A. Vázquez - - - - - - - - - - - -License -&underFDL; -&underGPL; - - - -Contributing - -&frescobaldi; is a Free Software -project to create a user friendly &lilypond; music score editor. -&frescobaldi; is written in Python and -uses the KDE4 libraries as a foundation. -The goal is to make &frescobaldi; available on all platforms supported by KDE. - - - -&frescobaldi; is developed in a public GoogleCode SVN repository at -lilykde.googlecode.com. -There you can browse or checkout the source code and report bugs and wishes. - - - -You can contribute by simply using &frescobaldi; and reporting bugs and suggestions. -Translations are also very welcome. How to create new translations is described -in the README-translations in the po directory -in the source distribution of &frescobaldi;. -If you want to add functionality you can find information about the source code -structure in the file README-development in the source distribution. - - - - - \ No newline at end of file Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/doc/blankpaper1.png and /tmp/z3itFtculI/frescobaldi-2.0.0/doc/blankpaper1.png differ diff -Nru frescobaldi-1.2.0/doc/CMakeLists.txt frescobaldi-2.0.0/doc/CMakeLists.txt --- frescobaldi-1.2.0/doc/CMakeLists.txt 2010-08-26 10:54:36.000000000 +0000 +++ frescobaldi-2.0.0/doc/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -# CMake file for installing docbook files for the KDE Helpcenter - -find_program(KDE4_MEINPROC_EXECUTABLE NAMES meinproc4 PATHS ${KDE4_BIN_INSTALL_DIR} NO_DEFAULT_PATH) -find_program(KDE4_MEINPROC_EXECUTABLE NAMES meinproc4) - -find_file(KDE4_XSL_STYLESHEET NAMES kde-chunk.xsl PATHS ${KDE4_DATA_INSTALL_DIR}/ksgmltools2/customization NO_DEFAULT_PATH) - -# Create a symlink on install -macro(install_symlink _to _from) - install(CODE " - message(STATUS \"Creating symlink '${_to}' at \$ENV{DESTDIR}${_from}\") - execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${_to} \"\$ENV{DESTDIR}${_from}\" ) - ") - # remove symlink on uninstall - uninstall_file("${_from}" NO_CHECK) -endmacro(install_symlink) - -# This macro can install docbook files and images from the current directory to the -# correct location for KDE Helpcenter files. If meinproc and the stylesheets are available, -# a index.cache.bz2 is generated so the Helpcenter doesn't have to generate one per user. -macro(create_handbook _docbook _language) - - # determine install dir - if(NOT _language) - set(_lang "en") - else(NOT _language) - set(_lang ${_language}) - endif(NOT _language) - set(_installdir "${HTML_INSTALL_DIR}/${_lang}/${PROJECT_NAME}") - - # docbook source files - file(GLOB _docbooks *.docbook) - - # images - file(GLOB _images *.png) - - # install those directly - install(FILES ${_docbooks} ${_images} DESTINATION ${_installdir}) - - # make the ../common symlink - install_symlink("../common" "${_installdir}/common") - - # if meinproc and the default style sheets are found, install a cached help file - if(KDE4_MEINPROC_EXECUTABLE AND KDE4_XSL_STYLESHEET) - get_filename_component(_input ${_docbook} ABSOLUTE) - set(_cache ${CMAKE_CURRENT_BINARY_DIR}/index.cache.bz2) - add_custom_command( - OUTPUT ${_cache} - COMMAND ${KDE4_MEINPROC_EXECUTABLE} --check --cache ${_cache} ${_input} - DEPENDS ${_docbooks} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ) - get_filename_component(_targ ${CMAKE_CURRENT_SOURCE_DIR} NAME) - set(_targ "${_targ}-cache") - add_custom_target(${_targ} ALL DEPENDS ${_cache}) - install(FILES ${_cache} DESTINATION ${_installdir}) - else(KDE4_MEINPROC_EXECUTABLE AND KDE4_XSL_STYLESHEET) - message(STATUS "The help cache index.cache.bz2 will not be generated:") - if(NOT KDE4_MEINPROC_EXECUTABLE) - message(STATUS "*** meinproc4 could not be found.") - endif(NOT KDE4_MEINPROC_EXECUTABLE) - if(NOT KDE4_XSL_STYLESHEET) - message(STATUS "*** The KDE XSL StyleSheets could not be found.") - endif(NOT KDE4_XSL_STYLESHEET) - endif(KDE4_MEINPROC_EXECUTABLE AND KDE4_XSL_STYLESHEET) -endmacro(create_handbook) - - -create_handbook(index.docbook en) - diff -Nru frescobaldi-1.2.0/doc/configuring.docbook frescobaldi-2.0.0/doc/configuring.docbook --- frescobaldi-1.2.0/doc/configuring.docbook 2010-10-01 21:36:50.000000000 +0000 +++ frescobaldi-2.0.0/doc/configuring.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,527 +0,0 @@ - -Configuring &frescobaldi; - -This chapter documents how to configure &frescobaldi; for your needs. - - -The Settings Menu - - -The Settings menu has options to show the full path of the -file currently being edited in the window title bar or just the filename, to -show or hide the toolbar and to switch the &frescobaldi; window to full screen -mode. - - - -The Tool Views sub menu lets you alter some settings of -the tools in the sidebar docks of the &frescobaldi; window. (Note that you can -right-click on the tabs in the sidebar docks for more tool options.) - - - -Finally, &frescobaldi; has the usual menu entries -Configure Shortcuts..., -Configure Toolbars... and -Configure &frescobaldi;.... - - - - - -The Settings Dialog - - -General Preferences - - -Here you can set some general preferences to influence the behaviour of -&frescobaldi;. - - - - - -Session to load if &frescobaldi; is started without arguments - - - Here you can choose if you want &frescobaldi; to load documents by default. - You can let &frescobaldi; start up empty, with the last used session or with a specific - session. - See Sessions for more information. - - - - - -When saving documents - - - - Remember cursor position, bookmarks, etc. - - - If checked, &frescobaldi; will save the cursor position, bookmarks and some - view settings for a document when it is closed. This meta-information is - retained for one month. - - - - - - Default folder - - - Here you can configure a default folder that is displayed when saving a new document - for the first time. - - - - - - - - - -Warnings and notifications - - - Here you can check which warnings and notifications you want to get. Usually, - warning messages have a checkbox "Don't show this message again" - (or "Don't ask this question again"). - When you enable a warning here, its dialog will be shown on the next occurrence. - - - - - -Point and Click - - - Click this button if Point & Click does not work, i.e. when clicking a note - in the PDF preview does not move the cursor in the text editor. - See also Configuring Point & Click. - - - - - - - - - - -&lilypond; Preferences - - -Here you can you configure all &lilypond;-related things. - - - - - -&lilypond; versions to use - - - This list normally shows just one item, "lilypond". - But if you have multiple versions of &lilypond; installed you can add them to the list by clicking - the Add button. - Existing entries can be configured by clicking Configure. - - - - In the dialog that opens you can specify the exact path to &lilypond;. - If you just enter lilypond, the first &lilypond; instance in your - PATH environment variable is used. - You can also enter the paths to related commands such as convert-ly - and lilypond-book. But if you don't specify the paths, these commands will be - searched for in the same directory as the lilypond command was found. - - - - Check Set as default to make the current &lilypond; entry the default, - i.e. the one that is run for all actions (also the Blank Staff Paper tool, etc.). - The other checkbox, Include in automatic version selection, if checked, - will include the current &lilypond; entry in the automatic version selection (see below). - The Download button lets you - download and install binary packages - from the &lilypond; website. - - - - Below the list of installed &lilypond; instances, there is a checkbox - Enable automatic version selection. - If checked, &frescobaldi; will check the \version statement in your - document and choose the most suitable &lilypond; version from your installed list to run. - This is the lowest available version number that's still higher than or equal to the document's version. - You can exclude particular instances (e.g. development or testing versions) by unchecking the - option Include in automatic version selection of that &lilypond; entry. - - - - - -&lilypond; version number to use for new documents - - - Here you can set which version number you want &frescobaldi; to insert by - default with the Insert &lilypond; Version command or the - Score Wizard. Choose one of three options: - - - - Use version number of installed &lilypond; - - - &frescobaldi; will use the version number of the installed &lilypond; by - default. - - - - (&frescobaldi; determines the version by running - lilypond and looking at the first - line of the output.) - - - - - - Use version number of last convert-ly rule - - - &frescobaldi; will use the version number of last rule of the installed - convert-ly program by default. This is useful if you - just want your document to conform to the latest &lilypond; syntax without - requiring the most recent available version. - - - - This makes document exchange easier. - E.g. when you use \version "2.12.2", another user's - &lilypond; version 2.12.0 might complain about your document's version - being to new, even though there are no syntax changes and the older - &lilypond; would just compile the document fine. - - - - (&frescobaldi; determines the last convert-ly rule version by running - convert-ly and looking at - the last line that starts with a version number.) - - - - - - Use custom version number - - - Enables you to explicitly specify the version number you want to use by - default for new documents. - - - - - - - Note that the Score Wizard is able to adjust its output depending on the version - you specify in the Score Wizard. It is therefore possible to write documents for - older &lilypond; versions, although in general using the most recent stable - &lilypond; release is recommended. - - - - - - - -Running &lilypond; - - - Here you can adjust how &lilypond; is run. - - - - - Let &lilypond; delete intermediate files - - - If checked, &frescobaldi; will run &lilypond; with the - option, so that e.g. PostScript - files are deleted after the PDF file has been generated. - - - - - - Run &lilypond; with verbose output - - - If checked, &frescobaldi; will run &lilypond; with the - option, displaying more information during the - compile process. - - - - - - &lilypond; include path - - - Here you can enter a list of directories that are searched for files that - are included via the &lilypond; \include command. - - - - - - - - - - - - - -Paths - - -Here you can specify the paths to use for different commands. - - - - - -Helper applications - - - Here you can specify paths to your favorite viewers for PDF and MIDI. - If you leave the paths empty, the preferences set in KDE's System Settings - are used. - - - - - -&lilypond; Documentation - - - You can also provide the URL or path to the documentation for the built-in - &lilypond; documentation browser. - - - - - -Hyphenation settings - - - Finally, at the bottom of the Paths section, you can configure a list of - directories to search for hyphenation pattern files that can be used to break - lyrics into syllables. - - - - &frescobaldi; currently does not include hyphenation pattern files by itself, - but it can use the hyphenation patterns that are often installed with programs like - OpenOffice.org, KOffice, - Scribus or in specialized packages like myspell. - - - - If &frescobaldi; doesn't find any hyphenation files, - while you're sure you installed some of the software mentioned above, - try to find out where those files are in your file system, and list the paths - in the text entry. - If your operating system supports the locate command, you can open - a terminal and use a command like this to get a list of paths that you can simply paste in the - text entry to have &frescobaldi; find all installed pattern files: - - - locate '*/hyph_*.dic' | sed s,/[^/]*$,, | sort -u - - or: - - locate '*/hyph_*.dic' | xargs -n1 dirname | sort -u - - - - - - - - -Editor Component - - -In this page you can configure the looks and behaviour of the documents tab bar. - - - -Below this page, -configuration options can be set for the KatePart editor component that is used by &frescobaldi;. -Documentation for the editor component can be found in the manuals for -KWrite and -Kate. - - - - - - - - -Configuring Point & Click - - -Point & Click is a &lilypond; feature that embeds clickable URLs in the PDF output. -Those URLs contain the source file path and line and column numbers. Clicking on those -clickable objects lets the cursor in &frescobaldi; jump to the corresponding position -in the source document. - - - -If all is well, Point & Click should "Just Work". -But this section is here to help you setting it up in the case it doesn't work -by default. Point & Click in &frescobaldi; is handled differently in KDE 4.1 and KDE 4.2. - - - -In KDE 4.1, you need to install the lilypond-kde4 package. -This contains a program that handles the textedit: service. -If point and click still does not work, check if &frescobaldi; is tied to the -text/x-lilypond MIME type in the KDE System Settings -(File Associations). - - - -In KDE 4.2, the Point & Click URLs are handled by Okular itself. -When you install &frescobaldi;, on its first run it autoconfigures the Okular part -to run &frescobaldi; when a Point & Click URL is clicked. -But if for some reason this didn't happen, you can configure Okular manually -to run &frescobaldi;. -The easiest way to do this is just clicking the button on the first page in the -Settings Dialog. -But you can also right-click the PDF preview tab and choose -Configure Okular... (or use - - Settings - Tool Views - Configure Okular... -) to open the Okular settings dialog. -There, under Editor, you can configure a custom editor command. -Enter the following command and click Ok: - - -frescobaldi --smart --line %l --column %c - - -(The option tells &frescobaldi; to translate cursor positions according -to changes in the document. This way, Point & Click URLs remain working, even if you -change the document without updating the PDF preview.) - - - -Point & Click URLs enlarge the PDF output documents significantly. -It is therefore better to build PDF documents in publish mode when you -want to distribute them (via e-mail or the World-wide Web) to others. - - - -In KDE 4.2, Okular's built-in Point & Click support sometimes doesn't work -if the path of your &lilypond; source document contains spaces or accented characters. -This is due to Okular not fully understanding the way &lilypond; encodes URLs. - - - - - -Highlighting and indenting - - -&frescobaldi; uses the &lilypond; syntax highlighting and indenting algorithm from KDE's -editing component KatePart. By default, indenting is switched on, using spaces, -and the indent-width is 2 spaces. - - - -You can configure other indentation settings using kate variables in your document, -by setting kate variables in the &lilypond; Kate mode, or by simply adjusting the -default indentation in the -Editor component settings. - - - -Setting variables in the document is described -here in the Kate manual. -Setting variables globally for a specific file type (or Kate mode) is described -in the Kate manual under -"Modes & Filetypes." -Select the Other/&lilypond; mode to enter settings that affect -&lilypond; files. (Kate and KWrite will also use the settings configured here.) - - - -The default indentation settings will only have effect if they are not overridden -by variables set in the &lilypond; Kate mode or in the current document. - - - - - -Download LilyPond packages - - -&frescobaldi; can automatically download and install binary &lilypond; packages -(.sh packages) from the &lilypond; website. - - - -To install e.g. a new development version of &lilypond;, go to &menu.settings.lilypond; -and click Add. -In the dialog that appears (to configure the path to a &lilypond; instance), -click Download. -Again a small dialog opens, where you can select the &lilypond; version you want to -download and a destination directory, which will be created if it doesn't exist. - - - -Then click Install. After downloading and unpacking, -the dialog will disappear and the path to the newly installed &lilypond; will be -set in the underlying dialog. -Click Ok to add the new &lilypond; instance to the list -and then Ok to close the Settings dialog and apply your changes. - - - -In the Download dialog, -you can also click Details to change the website where -the releases are downloaded from, or to manually browse to an already downloaded -package. - - - - -Inside the destination directory another directory will be created with the -version number of the &lilypond; version to be installed, -so different versions of &lilypond; can coexist in the same destination directory. - - - -If you install the same version of &lilypond; again, &frescobaldi; will warn you -and offer the choice to remove and re-install it, or to just use it instead -of overwriting it. - - - -When you remove versions of &lilypond; from the list in the settings dialog, -they are not removed from your file system. -If you really want to uninstall one of more &lilypond; versions, -you can just remove the directory of that version from the place where you -installed it. - - - - - - diff -Nru frescobaldi-1.2.0/doc/editing.docbook frescobaldi-2.0.0/doc/editing.docbook --- frescobaldi-1.2.0/doc/editing.docbook 2010-10-04 08:15:01.000000000 +0000 +++ frescobaldi-2.0.0/doc/editing.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,332 +0,0 @@ - -Editing Features - - -While editing, &frescobaldi; provides many ways to change and manipulate already entered music. - - - -Rhythm - - -In the &lilypond;Rhythm -menu there are many options to manipulate the durations -of a selected music fragment. You can double or halve the durations, add or -remove dots, remove scaling (the *n/m suffix) or remove all durations. -Make implicit removes durations that are equal to the previous note, -Make implicit (per line) does the same, except that it always adds a duration -to the first note or chord on a line, and -Make explicit adds the duration to every note or chord, even if it has the same -duration as the previous one. - - - -You can also copy a rhythm from a selected piece of music. The rhythm is then -copied to the clipboard. To "paste" the rhythm to other music you must then -select the target music. Paste Rhythm will then apply the copied rhythm to the -newly selected music. This is nice when you enter e.g. hymns that have multiple -voices that share the same rhythm. You can also use Apply Rhythm... to manually -enter some durations and apply them to a selected fragment of music. -If there are more notes than durations, the durations will be repeated. - - - - -Pitch - - -The &lilypond;Pitch -menu has several commands to manipulate pitches of already entered music: - - - - - -Pitch Name Language - - - This command is very powerful: it translates pitch names in your - document to a different &lilypond; language. This is useful when you want to edit - a work started by someone else, but are not accustomed to entering notes with e.g. - Dutch or Italian names. - - - The pitch translation function is quite accurate: it almost 100% correctly - parses &lilypond; input and finds all pitches, without altering e.g. markup, - lyrics, strings or comments that might contain words (like "do") that are - also pitch names. It even warns you when quarter tones are used and the target - languages does not have definitions for them. But just to be sure: run &lilypond; - after translating the pitches and carefully examine the document. If anything - went wrong, press Ctrl+Z and try again. - - - - - -Convert Relative to Absolute - - - This command converts all notes in the document or selected fragment that - are inside a \relative { ... } section to absolute - pitches. It honors octave checks (see the &lilypond; manual) but does not print - warnings. - - - - - -Convert Absolute to Relative - - - This command converts all notes in the selected music expression(s) to - relative pitches, inserting a \relative command - at the beginning of each selected music expression. - A music expression is a piece of music enclosed in - << ... >> or { ... }. - If no music is selected, all toplevel expressions that contain notes are made relative. - Chordmode sections (music inside \chordmode or \chords) - are not made relative. - - - - - -Transpose... - - - This command transposes all music in the document or selected fragment. - A dialog is displayed where you can enter two pitches, - the "from" and the "to" pitch. - &frescobaldi; then computes the distance between the two pitches and transposes the music - over the same distance. Both absolute and relative music can be transposed. - Chordmode sections are transposed without changing the octave. - - - - - - - - - - -Lyrics - - -&frescobaldi; can automatically place hyphens ' -- ' inside texts to make those -texts usable as lyrics. It can use hyphenation dictionaries of OpenOffice.org, -Scribus, KOffice, etc. - - - -To use this feature you must first select the text you want to hyphenate. Then -choose &menu.lilypond.hyphenation;. -In the dialog that appears, select the language. Click OK -or press Enter to have the hyphenation take place. - - - -A small limitation is that word processor hyphenation dictionaries often don't -want to break a word right after the first letter (e.g. a -- men), because that -does not look nice in word processor texts. So it might be possible that you -have to add some hyphens after the first letter of such lyrics. - - - -There is also a command to remove hyphenation. This can be useful if you have a -stanza of lyrics that you just want to display as a markup below the music. -Under &menu.settings.paths; you can enter a list of -directories to search for hyphenation pattern files. - - - - -Cut and Assign - - -If you find that you want to use the same &lilypond; commands or music fragment -more than once in multiple places in your document, but have already entered -them in some structure, there is a quick command to cut the fragment out and -put it as a toplevel variable assignment in your &lilypond; document. - - - -First select the exact text you want to store in a variable. Then choose - - Ctrl+Shift+C - Edit - Cut and Assign - and enter a &lilypond; variable name. -This identifier name may only contain letters. Then click -Ok. The selected fragment will be cut from its original -place and assigned to the specified variable. The assignment is placed just -before the current section in your document. The fragment will be replaced -with a reference to the variable. - - - - -Keyboard Shortcuts - - -&frescobaldi; uses the KatePart text editing component of KDE. So, in addition to the -shortcuts outlined below, you can also use the many keyboard shortcuts available in e.g. -Kate and -KWrite. - - - - - - - -Alt+Up/Down - Move the cursor to the end of the next or previous blank line - - - -Alt+Shift+Up/Down - Select text till the next or previous blank line - - - -Alt+Ctrl+Shift+Up/Down - Move the selected block to the next or previous blank line - - - -Ctrl+D - Comment out the current line or selected text - - - -Ctrl+Shift+D - Uncomment the current line or selected text - - - -Ctrl+; - Repeat the last entered note or chord with all added articulations, etc - - - -Ctrl+{ - -Insert a pair of braces { } with an empty, -indented line in between and places the cursor there. -If text is selected, it is placed between the braces. - - - - -Ctrl+. - -Replace the entered mnemonic with the corresponding snippet from the -Expand Manager, -or, if no existing mnemonic was typed, show the Expand Manager dialog - - - - -Ctrl+Space - Show the available completions - - - -Ctrl+' - -Insert a single typographical quote. Left or right is automatically determined. -If text is selected, that text is put between left and right single quotes. - - - - -Ctrl+" - -Insert a double typographical quote. Left or right is automatically determined. -If text is selected, that text is put between left and right double quotes. - - - - -Ctrl+Shift+C -Cut and assign - - - -Ctrl+Shift+V - -Insert a \version command with the default &lilypond; version number. -Which version number is used can be configured in the -Settings dialog. - - - - -Ctrl+Shift+R - -Wrap the selected music in a \repeat volta 2 { ... } -construct. - - - - -Ctrl+Shift+N - Show the Score Wizard - - - -Ctrl+M - Run &lilypond; on the current document in preview mode - - - -Alt+Ctrl+P - Run &lilypond; on the current document in publish mode - - - -Ctrl+Shift+M - Open a dialog to run &lilypond; on the current document in custom mode - - - -Ctrl+L - -Hyphenate the currently selected lyric text - - - - -Ctrl+E - -Email the generated output documents (PDF, MIDI, etc.) after a &lilypond; run - - - - -Ctrl+Shift+P - -Print the generated PDF output document(s) after a &lilypond; run - - - - -Ctrl+Shift+F - Toggle Full-screen mode - - - - - -You can change the keyboard shortcuts and also add shortcuts for actions that don't -have one by default, by choosing - - Settings - Configure Shortcuts... - -or by right-clicking the respective menu entries. - - - - \ No newline at end of file diff -Nru frescobaldi-1.2.0/doc/entering.docbook frescobaldi-2.0.0/doc/entering.docbook --- frescobaldi-1.2.0/doc/entering.docbook 2010-09-10 05:42:07.000000000 +0000 +++ frescobaldi-2.0.0/doc/entering.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,382 +0,0 @@ - -Entering Scores - - -&frescobaldi; provides a host of features to help you to enter &lilypond; music scores as fast as possible. - - - -Score Setup Wizard - - -The Score Setup Wizard, at - Ctrl+Shift+N - &lilypond; - Setup New Score... -, makes -for a quick start of many types of music score. In the first tab you can enter -titling information, in the second tab you can compose your score of many -available part types. Doubleclick a part type to add it to your score (or click -Add). Select the part in the score list to change some settings for the selected -part, if desired. Many parts, especially Choir, have powerful options to set up -the score the way you want it. - - -
- Score Wizard: Titles and Headers - - - - Score Wizard: Titles and Headers - - -
- -
- Score Wizard: Parts setup - - - - Score Wizard: Parts setup - - -
- - -In the third tab you can set some general adjustments, e.g. whether to create -MIDI output or not, which key and time signature you want to use, etc: - - -
- Score Wizard: Score settings - - - - Score Wizard: Score settings - - -
- - -Clicking Try presents a demo score with some random notes filled in. -Clicking Ok writes the &lilypond; code to your text document, -waiting for music etc. to be added. - -
- - -Context Sensitive Autocompletion - - -&frescobaldi; has a context-sensitive automatic -completion feature. In most cases it will be enabled by default. It will pop up -relevant completions as you type. The autocompletion popup can be enabled or -disabled under - - Settings - Configure &frescobaldi; - Editor component - Editing - Auto Completion -. -Even if disabled, you can always show the popup with Ctrl+Space. - - - - -Quick Text Expansions - - -Type e.g. rel and then press Ctrl+. (period). -&frescobaldi; will expand it to: - - - -\relative c' { - -} - - - -and place the cursor right after the pitch so you could change it. If you then -move the cursor a line down, you can start typing music notes or other -shortcut names. E.g. typing F and then Ctrl+. yields \key f \major. -There are many more default shortcuts. - - - -Press Ctrl+. (without having entered an existing -shortcut name) to open a dialog with all defined text snippets. In this dialog you -can also add, alter or remove snippets. -It is also possible to assign a keyboard shortcut to a snippet so that it can be entered -with a simple keystroke, without typing the short name. - - - -All changes you make in the dialog are immediately saved. -So clicking Cancel will still keep the changes. -Clicking OK will enter the currently selected snippet in the text editor. -See the "What's This" info (Shift+F1) in the dialog -for more information. - - - -Some quick text expansions have default keyboard shortcuts. -The most important ones are listed below: - - - - - - - -Alt+1 -Enter \voiceOne - - - -Alt+2 -Enter \voiceTwo - - - -Alt+3 -Enter \voiceThree - - - -Alt+4 -Enter \voiceFour - - - -Alt+0 -Enter \oneVoice - - - -Ctrl+3 -Enter \times 2/3 { } and leave the cursor between the brackets - - - -Alt+M, Alt+B -Enter \markup \bold { } and leave the cursor between the brackets - - - -Alt+M, Alt+I -Enter \markup \italic { } and leave the cursor between the brackets - - - - - - - -MIDI input via Rumor (&linux; only) - - -&frescobaldi; can use an external program called -Rumor, enabling you to enter music just by playing it on a -MIDI keyboard (or even your computer keyboard). This has some limitations: you -can only play monophonic music (notes or chords). Rumor also does not support -tuplets. To use Rumor within &frescobaldi;, you must have installed it separately. -Refer to the Rumor homepage -for download and install information. - - - -Setup - -Start the Rumor plugin with Meta+Alt+R or by clicking on its -tab in the bottom of the &frescobaldi; window. The Rumor panel appears at the -bottom. In the panel is a settings button where you can configure which MIDI -input and output you want to use. - - - -If you have a MIDI keyboard controller but no audible output device you can run -an ALSA MIDI-client like &timidity;. Many &linux; distributions already start -&timidity; by default on bootup. But &frescobaldi; can also run it for you when you -press the TiMidity-button. You can configure the command to run -in the main settings dialog under &menu.settings.rumor;. - - - -If you have no MIDI-controller you can also set the MIDI input to 'Computer -Keyboard' in the settings screen of the Rumor plugin. This way you can play on -your computer keyboard like a piano. - - - - -Entering music - -Clicking the Record button starts Rumor. If all is well you hear -a metronome and you can start playing; you'll see the notes appear. Clicking -Record again or pressing Escape stops Rumor. If you already entered the key and -time signature in your document, &frescobaldi; will automatically use it, to -interpret alterations correctly. &frescobaldi; will also output pitches -automatically in the language you use in the document. - - - -You can configure the shortest note value to use using the Quantise option. -If you enable the Step checkbox, Rumor will directly output every note played, -without a duration. -If you enable the Mono checkbox, Rumor will not output chords, but only single -notes. - - - -Under the Settings button you can configure some more settings. -A powerful feature of Rumor is that it can load special scripts that change the Rumor -output. This is useful when you write e.g. music with complicated rhythms. You -can configure which scripts to load, and even put your own Rumor Guile scripts -in ~/.kde/share/apps/frescobaldi/rumor/. -More information about writing Rumor scripts is on the -Rumor homepage. - - - - - -Quick Insert Panel - - -The Quick Insert Panel (Meta+Alt+I) is available in the left dock. -It has panels to add articulations, dynamics and other symbols to your music. -You can use the mouse wheel to quickly flip through the panels. - - - -Some music symbols can be place above the staff or below, or in a neutral (default) position. -If you want to use an explicit position for those symbols, you can adjust the -Direction control to Up, Down -or Neutral before clicking the symbol. - - - -Right-click a button to configure its keyboard shortcut if you want to. -Some buttons have default keyboard shortcuts: - - - - - - - -Alt+' -Enter a breathing sign \breathe - - - -Ctrl+( -Enter a slur over the selected music fragment - - - -Alt+. -Enter a final bar line \bar "|." - - - -Alt+; -Enter a double bar line \bar "||" - - - - - - -The Articulations panel - - -You can just click on a note in the PDF preview and then on an articulation symbol in the -articulations panel. -The articulations panel is smart enough to place the articulation after the current -note or chord and its duration. - - - -If you select a range of text and then click a symbol, the symbol will be added -to all notes or chords in the selected music fragment. - - - -You can select a music fragment using the PDF preview: click the first note of -the range you want to select and then shift-click the second note. - - - - -The Dynamics panel - - -Typing single dynamics in &lilypond; is not difficult at all, but the power of this panel -is the possibility to easily insert crescendos and diminuendos in ranges of music. - - - -If no music is selected the dynamic sign is just placed after the current note or chord. -If a range of music has been selected (e.g. using the preview), you can click -e.g. a dynamic mark, a spanner and another mark, to add them to your music. -If you only click a spanner and a mark, the mark will be added at the end. - - - - - -The Spanners panel - - -This panel lets you add slurs, beams or trills to a selected music fragment. -Arpeggios can be added to the chord the cursor is at, -and glissandos can be added to the current note; &lilypond; will automatically -conenct them with the next note. - - - - -The Bar Lines panel - - -With this panel you can insert many different kinds of bar lines and breathing signs. - - - - - - -Other shortcuts - - - - Ctrl+; - Repeat last note or chord - repeats the last entered note or chord with -all its suffixes (ties, articulations, etc.) - - - - - Ctrl+{ - Insert pair of braces - inserts a pair of braces { } with an empty, -indented line in between and places the cursor there. -If text is selected, it is placed between the braces. - - - - - Ctrl+Y - Special Characters - opens a dialog where characters from the Unicode table can be -browsed and selected. Doubleclick a character (or click Apply) -to insert the currently selected character into the document. It is also possible -to assign a keyboard shortcut to the currently selected character. - - - -
diff -Nru frescobaldi-1.2.0/doc/extras.docbook frescobaldi-2.0.0/doc/extras.docbook --- frescobaldi-1.2.0/doc/extras.docbook 2010-01-10 20:24:29.000000000 +0000 +++ frescobaldi-2.0.0/doc/extras.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ - -Extra Tools - - -Some extra tools that &frescobaldi; provides (besides &lilypond; editing) -are documented here. These tools are accessible via - - &lilypond; - Extra Tools -. - - - -Create blank staff paper - - -With this tool you can create blank music staff paper and print it or save -it to a file. -Of course, &lilypond; is used to create the staff paper. -Above in the window you can choose which type of music paper you want to create. -At the bottom of the window, you can choose what you want to do with -your newly created staff paper, as soon as you click Ok. -Write it to a file, open it in a PDF viewer, directly print it or copy the &lilypond; -source to the editor to customize it further. - - -
- The Blank Staff Paper tool - - - - The Blank Staff Paper tool - - -
- - -Five types of staff paper can be created: - - - - - -Single Staff - - - Creates staff paper with (by default) 12 single staves per page. - You can select the clef you want to use. If you select the TAB clef, tablature - staves are printed (with 6 lines). - - - - - -Piano Staff - - - Creates piano staff paper with (by default) 6 systems per page. - You can check whether you want the default clefs to be printed or not. - - - - - -Organ Staff - - - Creates organ staff paper with (by default) 4 systems per page, consisting - of a braced piano staff and a pedal staff. - You can check whether you want the default clefs to be printed or not. - - - - - -Choir Staff - - - Creates a bracketed staff group with 2 or more staves. - First select the number of staves you want in the system. - Then select the number of systems you want in a page. - Finally, choose which clefs you want to add. - See "Whats This" (Shift+F1) - on the clef entry for more information. - - - - - -Custom Staff - - - This is the most advanced way to create blank staff paper. - You can click one of the three buttons on the left to add a brace, a bracket, - or a staff. You can arrange the staves or the staff groups by dragging them - with the mouse. Multiple groups may be nested. - For each staff you can select a clef and adjust the space you want to leave - above and below it. - The bracket staff group can be configured to print just a square bracket instead - of the usual with curved tips, and you can control whether you want barlines (if you - want them, see below) to be connected between staves in the group or not. - - - - - - - -If you click Try a preview will be shown. -If you click Details, additional settings become visible -to select the staffsize, the number of pages, page numbers and barlines you want to print. -If you don't like the small print "frescobaldi.org" at the bottom -you can remove it by checking Remove default tagline. -This setting is remembered. - - -
- -
\ No newline at end of file Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/doc/first-steps1.png and /tmp/z3itFtculI/frescobaldi-2.0.0/doc/first-steps1.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/doc/first-steps2.png and /tmp/z3itFtculI/frescobaldi-2.0.0/doc/first-steps2.png differ diff -Nru frescobaldi-1.2.0/doc/first-steps.docbook frescobaldi-2.0.0/doc/first-steps.docbook --- frescobaldi-1.2.0/doc/first-steps.docbook 2010-10-05 12:25:07.000000000 +0000 +++ frescobaldi-2.0.0/doc/first-steps.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ - -First Steps - - -After you installed &frescobaldi;, run it from your KDE4 menu (under Audio or Utilities). -You'll see an empty screen like this: - - -
- Empty &frescobaldi; window - - - - Empty &frescobaldi; window - - -
- - -Now write some &lilypond; code, like this: - - - - - - -If you want, save the file by pressing Ctrl+S and enter a name (if you leave out the -extension, &frescobaldi; will add the .ly extension for you). - - - -Then click the &lilypond; toolbar button or press Ctrl+M. If all is good, &lilypond; -starts now and processes your file. At the bottom of the screen you can follow -&lilypond;'s progress. If &lilypond; does not encounter any mistakes on your part, -it will produce a PDF file that will be displayed at the right of the -&frescobaldi; window: - - -
- &frescobaldi; window with Free Software Song - - - - &frescobaldi; window with Free Software Song - - -
- -You can zoom the PDF preview by dragging the middle mouse button or by using the mouse -wheel with Ctrl pressed down. The PDF preview is an embedded Okular, KDE's default PDF viewer. - - - -Everytime you change the &lilypond; document, you must press the button (or -Ctrl+M) to update the PDF preview. - - - -If &lilypond; does not start at all, check if you have installed &lilypond; -correctly and that the lilypond command is in your system's PATH environment -variable. If needed, provide the exact path to your &lilypond; executable under -&menu.settings.lilypond;. - - - -
\ No newline at end of file diff -Nru frescobaldi-1.2.0/doc/index.docbook frescobaldi-2.0.0/doc/index.docbook --- frescobaldi-1.2.0/doc/index.docbook 2010-07-18 21:25:07.000000000 +0000 +++ frescobaldi-2.0.0/doc/index.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ - - - - - - - - - - - - - WilbertBerendsen'> - info@frescobaldi.org'> - - - - - - - - - - - - - - - - Settings - Configure &frescobaldi;... - &lilypond; Preferences - '> - - Settings - Configure &frescobaldi;... - Paths - '> - - Ctrl+L - &lilypond; - Lyrics - Hyphenation - '> - - Settings - Configure &frescobaldi;... - Rumor MIDI input - '> -]> - - - - - The &frescobaldi; User Guide - - - &Wilbert.Berendsen; &Wilbert.Berendsen.mail; - - - - 2008 - 2009 - 2010 - &Wilbert.Berendsen; - - - - 2010-01-09 - 1.1 - - - &frescobaldi; is a &lilypond; sheet music editor. - - - - &lilypond; - Music - - - -&frescobaldi-introduction; -&frescobaldi-first-steps; -&frescobaldi-running; -&frescobaldi-entering; -&frescobaldi-editing; -&frescobaldi-lilydoc; -&frescobaldi-sessions; -&frescobaldi-extras; -&frescobaldi-configuring; -&frescobaldi-about; - - diff -Nru frescobaldi-1.2.0/doc/introduction.docbook frescobaldi-2.0.0/doc/introduction.docbook --- frescobaldi-1.2.0/doc/introduction.docbook 2010-07-18 21:19:20.000000000 +0000 +++ frescobaldi-2.0.0/doc/introduction.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ - -Introduction - - -&lilypond; (lilypond.org) -is an open-source music engraving program, producing very high-quality sheet music -printouts from fairly simple text input files. Those text files can be created with -any text editor, and &lilypond; then loads the text file and outputs a beautiful -engraving, by default in PDF format. - - - -&frescobaldi; is an application designed to make editing &lilypond; music scores -faster and easier. You still will need to learn the &lilypond; input language. -If you read the "First Steps" section of this User Guide, -you'll also pickup some &lilypond; basics. -Then you can continue to learn using the Learning Manual from -LilyPond's excellent online documentation. - - - -Virtually all keyboard shortcuts that are mentioned in this User Guide are the -default ones; you can change them using Settings -Configure shortcuts.... - - - diff -Nru frescobaldi-1.2.0/doc/lilydoc.docbook frescobaldi-2.0.0/doc/lilydoc.docbook --- frescobaldi-1.2.0/doc/lilydoc.docbook 2009-12-26 20:03:05.000000000 +0000 +++ frescobaldi-2.0.0/doc/lilydoc.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ - -The &lilypond; Documentation Browser - - -&frescobaldi; has a built-in browser for &lilypond;'s extensive documentation, -accessible by clicking on its tab at the right or by pressing -Meta+Alt+D. The browser can display locally installed documentation -(e.g. installed in a local directory or via your operating system distribution) -or the documentation at the &lilypond; website. - - - -&frescobaldi; first searches the &lilypond; documentation on the local system; -if it isn't found the documentation pages from -lilypond.org/doc are shown. -You can configure the URL or path to the &lilypond; documentation under -&menu.settings.paths;. If you configure a local path, specify it including the -index.html filename. - - - -The documentation browser works just like a normal browser. The Home button -brings up the documentation start page. By right-clicking the browser view you -can open any page in your default browser. By right-clicking a link in the -browser view you can open the link in a new browser or other suitable application. - - - -You can also get context-sensitive help by right-clicking a &lilypond; statement -in the text editor. The &lilypond; Help context submenu -then displays the relevant entries both from the Learning Manual and the Notation -Reference. - - - -The other small buttons correspond with the so-called "rellinks" (related links) -in the &lilypond; documentation. This way you can easily navigate the documentation -or jump to the table of contents, etcetera. (Different versions of the &lilypond; -documentation have subtle differences in the navigation.) - - - -If you click an image of music that links to a &lilypond; snippet, the snippet is -shown in a read-only editor view with LilyPond syntax highlighting. - - - -Keyboard shortcuts - - -(Click once in the browser view to give it the keyboard focus, by default -the keyboard focus remains in the text editor when the browser is opened.) - - - - - - - -BackSpace - -Go back a page in the browser view. - - - - -/ - -Start entering a short search phrase to search for in the current page. - - - - -ESC - -Quit entering a search phrase. - - - - -Enter - -When in the search phrase entry, finds the next occurence. - - - - -Tab - -Navigate the links in the page. - - - - - -Arrows / PgUp / PgDn - Scroll the page or move the cursor. - - - - - - Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/doc/run-lilypond1.png and /tmp/z3itFtculI/frescobaldi-2.0.0/doc/run-lilypond1.png differ diff -Nru frescobaldi-1.2.0/doc/running.docbook frescobaldi-2.0.0/doc/running.docbook --- frescobaldi-1.2.0/doc/running.docbook 2010-09-29 14:29:58.000000000 +0000 +++ frescobaldi-2.0.0/doc/running.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,250 +0,0 @@ - -Running &lilypond; - - -Creating PDF output - - -There are currently three different ways you can run &lilypond; on your document. - - - -The default one (by pressing the toolbar button or Ctrl+M) is to output a PDF -preview document. This document contains clickable notes and other objects. If -you click on a note or other object, &frescobaldi; will put the text cursor in the -correct place (and even open the document for you if needed). You can also select fragments -of the &lilypond; input by clicking a note and then shift-clicking another one. - - - -In the &lilypond; menu, you can also find the command Run &lilypond; (publish). -This option also runs &lilypond;, but with clickable notes disabled. The resulting PDF -is much smaller and better suitable for distribution via e-mail or the Web. With -large musical scores, disabling the clickable notes can make the PDF many times -smaller. - - - -The third possibility is the command Run &lilypond; (custom). -This option shows a dialog where you can set some parameters for this run, overriding default settings. -If you have multiple versions of &lilypond; installed, -you can choose which &lilypond; you want to run. - - -
- The custom Run LilyPond dialog - - - - The custom Run LilyPond dialog - - -
- - -While &lilypond; is running, you can follow its progress in the log view. If -&lilypond; encounters errors, you can click on the messages to place the text -cursor in the offending line and column. If there are many errors you want to -correct without waiting for &lilypond; to be finished, you can click the &lilypond; -button again to abort the running &lilypond; process. - - - -When you want to run &lilypond; but your document has not been saved yet, -or has been saved to a non-local directory, -&frescobaldi; copies the document contents to a file in a temporary directory -on you local drive, and then runs &lilypond; on it. - - - -If your document is on the local drive but has been modified, -&frescobaldi; asks you to save it first. (&frescobaldi; does not use a temporary directory -for files that are already on the local drive.) -If you want &frescobaldi; to always save your last local modifications before running -&lilypond;, check the box "Don't ask this question again." -(Under - - Settings - Configure &frescobaldi;... - you can re-enable this warning if you want.) - - - -If &lilypond; created a PDF, you can open it in your default PDF viewer -by clicking the Play/View toolbar button -and selecting the file in the drop-down menu. -You can print the PDF using the Print Music button. -You can email all generated files (including source files) using - - File - Email Documents -. - - -
- - -Creating MIDI output - - -If you want &lilypond; to create a MIDI file, add a \midi { } -line in your \score { } section, like this: - - - - - - - -Be sure to also add a \layout { } line if you add a \midi { } line, otherwise -&lilypond; will not generate a PDF. - - - -To play the generated MIDI file(s) in an external MIDI player, -click the Play/View toolbar button and select the file from the drop-down menu. -You can also use the built-in MIDI player. - - - -The built-in MIDI player - - -The built-in MIDI player can be started by clicking its tab at the bottom of the &frescobaldi; window or -by pressing Meta+Alt+M. -If a &lilypond; document generated multiple MIDI files, you can select which one to play. -Use the small play and pause buttons to play the MIDI file. - - - -The media keys (Play/Pause and Stop) and the Pause key can also be used -to start or stop the music. If you pause the music using the Pause key, the music will automatically -rewind a few seconds when you start the playing again. - - - -The built-in MIDI player uses the embeddable MIDI player component of -KMid version 2.4.0 or higher. -If the MIDI player doesn't work it is recommended to run KMid once from the Applications menu to -configure its sound settings. - - - - - - - -&lilypond; files that include other files - - -When working on large music scores, it might be possible that you divide the -musical score in different files, and include them from a "master" file. Such a -master file, named e.g. NewSong.ly, might look like: - - - -> - >> -}]]> - - - -The files SopranoPart.ly and PianoPart.ly just contain the music definitions and -LayoutSettings.ly has some settings for font and page layout etc. Neither one of -them has a \score { } section in it. So pressing Ctrl+M and running &lilypond; -while you are working on such an included document might not make much sense, as -it would probably not generate a PDF output file (the document only contains -music expressions that are assigned to variables). - - - -In such cases, you can tell &frescobaldi; that another file is the "master" file -for the current document. When you run &lilypond;, &frescobaldi; will run &lilypond; -on the master document rather than the current document. So in SopranoPart.ly -and PianoPart.ly you add a special line that is just a &lilypond; comment. But -&frescobaldi; will read the line and understand that you want &lilypond; to be run -on the master file. Here is an example how SopranoPart.ly would look like: - - - - - - -The last line %%master: <filename> directs &frescobaldi; to compile NewSong.ly -instead of the current document when &lilypond; is started. - - - -There are two related special comments: %%master-preview: and %%master-publish:. -Those will only compile the named file in either preview or publish mode. That -can be useful if you include several movements or e.g. hymns in a master file, -where every source file has it's own score section. If you e.g. use -%%master-publish, running in preview mode will just show the current document, -but running in publish mode will compile the master document so you get a view -on the whole score or book. - - - -"Master" and include files only work with documents that are on your local hard drive. - - - - - -Using multiple &lilypond; versions - - -If you have multiple versions of &lilypond; installed you can add them to &frescobaldi; -under &menu.settings.lilypond;. -One of the &lilypond; instances can be set as the default. -It is also possible to automatically start a &lilypond; instance with a version closest -to the \version statement in your document. -You can even download and install different binary releases of &lilypond; from within -&frescobaldi;. -See Settings Dialog, &lilypond; Preferences for more information. - - - - -
Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/doc/scorewiz1.png and /tmp/z3itFtculI/frescobaldi-2.0.0/doc/scorewiz1.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/doc/scorewiz2.png and /tmp/z3itFtculI/frescobaldi-2.0.0/doc/scorewiz2.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/doc/scorewiz3.png and /tmp/z3itFtculI/frescobaldi-2.0.0/doc/scorewiz3.png differ diff -Nru frescobaldi-1.2.0/doc/sessions.docbook frescobaldi-2.0.0/doc/sessions.docbook --- frescobaldi-1.2.0/doc/sessions.docbook 2010-07-19 19:45:08.000000000 +0000 +++ frescobaldi-2.0.0/doc/sessions.docbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ - -Sessions - - -&frescobaldi; supports named sessions. -A session remembers the list of open files and optionally a base directory. -If you are editing a group of files you want to quickly reopen later, you can -create a new session via - - Sessions - New... -. - - - -In the dialog that appears you can enter a name for the session. -The session will automatically remember the list of documents that are currently loaded -in the editor. - - - -By default &frescobaldi; saves the list of open documents when switching to a different session -or when you close &frescobaldi;. -But if you want to keep this list fixed in the session, -even if you later close some documents or open other documents, -uncheck the option Always save the list of documents in this session. -You can always save a session manually via the menu command - Sessions - Save -.) - - - -In the session dialog you can also specify a base directory for the session, -which will be shown if you save a new document. - - - -The new session will automatically be selected, -and it shows up in the Sessions menu. -You can open a session by clicking its name in this menu. -In the same menu there is also the option Manage Sessions..., -that will show the list of sessions. Here you can change, add or delete sessions. -The name of the current session is also visible in the titlebar of the &frescobaldi; window. - - - -You can start &frescobaldi; in a specific session by using the -option on the frescobaldi command line. -In this case, if you specify a non-existing session, it will be created on the fly. - - - -If you switch to a different session, the current list of open documents will be closed. -If you cancel the closing of a modified document, sessions will not be switched, -and all current documents will remain open. - - - -If you switch from a named session to the "No Session" state, -all current documents will remain open. - - - -If you run &frescobaldi; with arguments (e.g. by clicking a &lilypond; file -in the file manager), it will always open without a session. -This way your sessions will not be cluttered with unintended documents. - - - diff -Nru frescobaldi-1.2.0/frescobaldi frescobaldi-2.0.0/frescobaldi --- frescobaldi-1.2.0/frescobaldi 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +#!/usr/bin/python +import sys +import frescobaldi_app.main +import app +sys.exit(app.run()) diff -Nru frescobaldi-1.2.0/frescobaldi_app/about.py frescobaldi-2.0.0/frescobaldi_app/about.py --- frescobaldi-1.2.0/frescobaldi_app/about.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/about.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,184 @@ +# -*- coding: utf-8 -*- +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +About dialog. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings, QSize, Qt, QUrl +from PyQt4.QtGui import ( + QDialog, QDialogButtonBox, QLabel, QLayout, QTabWidget, QTextBrowser, + QVBoxLayout, QWidget) + +import app +import info +import icons +import helpers +import bugreport +import language_names + + +def credits(): + """Iterating over this should return paragraphs for the credits page.""" + yield _( + "{appname} is written in {python} and uses the {qt} toolkit.").format( + appname=info.appname, + # L10N: the Python programming language + python='{0}'.format(_("Python")), + # L10N: the Qt4 application framework + qt='{0}'.format(_("Qt4"))) + yield _( + "The Music View is powered by the {poppler} library by " + "{authors} and others.").format( + poppler='{0}'.format( + # L10N: the Poppler PDF library + _("Poppler")), + authors='Kristian Høgsberg, Albert Astals Cid') + yield _( + "Most of the bundled icons are created by {tango}.").format( + tango='{0}'.format(_( + "The Tango Desktop Project"))) + yield _( + "{appname} is translated into the following languages:").format( + appname=info.appname) + lang = QSettings().value("language", "") or None + langs = [(language_names.languageName(code, lang), names) + for code, names in info.translators.items()] + for lang, names in sorted(langs): + yield lang + ": " + (', '.join(names)) + + +class AboutDialog(QDialog): + """A simple 'About Frescobaldi' dialog. + + Most of the information is taken from the info module. + + """ + def __init__(self, mainwindow): + """Creates the about dialog. You can simply exec_() it.""" + super(AboutDialog, self).__init__(mainwindow) + + self.setWindowTitle(_("About {appname}").format(appname = info.appname)) + layout = QVBoxLayout() + self.setLayout(layout) + + tabw = QTabWidget() + layout.addWidget(tabw) + + tabw.addTab(About(self), _("About")) + tabw.addTab(Credits(self), _("Credits")) + tabw.addTab(Version(self), _("Version")) + + button = QDialogButtonBox(QDialogButtonBox.Ok) + button.setCenterButtons(True) + button.accepted.connect(self.accept) + layout.addWidget(button) + layout.setSizeConstraint(QLayout.SetFixedSize) + + +class About(QWidget): + """About widget.""" + def __init__(self, parent=None): + super(About, self).__init__(parent) + + layout = QVBoxLayout() + self.setLayout(layout) + + size = QSize(100, 100) + pic = QLabel() + pic.setPixmap(icons.get("frescobaldi").pixmap(size)) + pic.setFixedSize(size) + layout.addWidget(pic, 0, Qt.AlignHCenter) + + text = QLabel() + text.setText(html()) + text.linkActivated.connect(self.openLink) + layout.addWidget(text) + + def openLink(self, url): + helpers.openUrl(QUrl(url)) + + +class Credits(QTextBrowser): + """Credits widget.""" + def __init__(self, parent=None): + super(Credits, self).__init__(parent) + self.setOpenLinks(False) + self.anchorClicked.connect(helpers.openUrl) + self.setHtml('\n'.join(map('

{0}

'.format, credits()))) + + +class Version(QTextBrowser): + """Version information.""" + def __init__(self, parent=None): + super(Version, self).__init__(parent) + self.setHtml( + "

{app_name}: {app_version}

\n" + "

Python: {python_version}
" + "Qt: {qt_version}
\n" + "PyQt4: {pyqt_version}
\n" + "sip: {sip_version}

\n" + "

{operating_system}:
\n" + "{osname}

".format( + app_name = info.appname, + app_version = info.version, + operating_system = _("Operating System"), + **bugreport.versionInfo())) + + +def html(): + """Returns a HTML string for the about dialog.""" + appname = info.appname + version = _("Version {version}").format(version = info.version) + description = _("A LilyPond Music Editor") + copyright = _("Copyright (c) {year} by {author}").format( + year = "2008-2011", + author = """{2}""".format( + info.maintainer_email, + _("Send an e-mail message to the maintainers."), + info.maintainer)) + # L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. + translator = _("Translated by Your Name.") + if translator == "Translated by Your Name.": + translator = "" + else: + translator = "

{0}

".format(translator) + license = _("Licensed under the {gpl}.").format( + gpl = """GNU GPL""") + homepage = info.url + + return html_template.format(**locals()) + + +html_template = """ +
+

{appname}

+

{version}

+

{description}

+

{copyright}

+{translator} +

{license}

+

{homepage}

+
+ +""" + diff -Nru frescobaldi-1.2.0/frescobaldi_app/actioncollectionmanager.py frescobaldi-2.0.0/frescobaldi_app/actioncollectionmanager.py --- frescobaldi-1.2.0/frescobaldi_app/actioncollectionmanager.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/actioncollectionmanager.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,140 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages ActionCollections for a MainWindow (and so, effectively, for the whole +application.) + +This makes it possible to edit actions and check whether keyboard shortcuts of +actions conflict with other actions. +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtGui import QMessageBox + +import actioncollection +import plugin +import util + + +def manager(mainwindow): + """Returns the ActionCollectionManager belonging to mainwindow.""" + return ActionCollectionManager.instance(mainwindow) + + +class ActionCollectionManager(plugin.MainWindowPlugin): + """Manages ActionCollections for a MainWindow.""" + def __init__(self, mainwindow): + """Creates the ActionCollectionManager for the given mainwindow.""" + self._actioncollections = [] + + def addActionCollection(self, collection): + """Add an actioncollection to our list (used for changing keyboard shortcuts). + + Does not keep a reference to it. If the ActionCollection gets garbage collected, + it is removed automatically from our list. + + """ + ref = weakref.ref(collection) + if ref not in self._actioncollections: + self._actioncollections.append(ref) + + def removeActionCollection(self, collection): + """Removes the given ActionCollection from our list.""" + ref = weakref.ref(collection) + try: + self._actioncollections.remove(ref) + except ValueError: + pass + + def actionCollections(self): + """Iterate over the ActionCollections in our list.""" + for ref in self._actioncollections[:]: # copy + collection = ref() + if collection: + yield collection + else: + self._actioncollections.remove(ref) + + def editAction(self, parent, action, default=None, skip=None): + """Edits the keyboard shortcut for a single action. + + Returns True if editing was Ok, False if cancelled. + parent is the widget to show the dialog above. + default gives None or a list with QKeySequence objects that are the default shortcut. + + Use skip to give the action to skip (e.g. the action that is about to be changed). + skip can also be a tuple (collection, name) to define the action to skip. + + Just uses the dialog in widgets.shortcuteditdialog but implements conflict checking + (without altering other shortcuts. The implementation of conflict checking in + preferences/shortcuts.py also can change other shortcuts in the prefs dialog.) + + """ + skip_ = lambda: a is skip + if skip is None: + skip = action + elif isinstance(skip, tuple): + skip_ = lambda: (collection, name) == skip + + from widgets import shortcuteditdialog + dlg = shortcuteditdialog.ShortcutEditDialog(parent) + + with util.deleteLater(dlg): + while dlg.editAction(action, default): + # conflict checking + shortcuts = action.shortcuts() + if shortcuts: + conflicts = {} + for collection in self.actionCollections(): + for name, a in collection.actions().items(): + # we use collection.shortcuts(name) instead of a.shortcuts() + # because the (real) actions returned by ShortcutCollection.action() + # don't have the shortcuts set. + if not skip_() and collection.shortcuts(name): + for s1 in collection.shortcuts(name): + for s2 in action.shortcuts(): + if s2.matches(s1) or s1.matches(s2): + # s2 conflicts with a + conflicts.setdefault(a, []).append(s2) + # do shortcuts remain? + if s2 in shortcuts: + shortcuts.remove(s2) + if conflicts: + msg = [_("This shortcut conflicts with the following command:", + "This shortcut conflicts with the following commands:", len(conflicts))] + msg.append("
".join("{name} ({key})".format( + name = actioncollection.removeAccels(a.text()), + key=' \u2014 '.join(s.toString() for s in conflicts[a])) for a in conflicts)) + msg = '

{0}

'.format('

'.join(msg)) + box = QMessageBox(QMessageBox.Warning, _("Shortcut Conflict"), msg, + QMessageBox.Ok | QMessageBox.Cancel, parent) + box.button(QMessageBox.Ok).setText(_("Edit again")) + if box.exec_() == QMessageBox.Ok: + action.setShortcuts(shortcuts) + continue + else: + break + return True + return False + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/actioncollection.py frescobaldi-2.0.0/frescobaldi_app/actioncollection.py --- frescobaldi-1.2.0/frescobaldi_app/actioncollection.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/actioncollection.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,324 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +In this module are two classes, ActionCollection and ShortcutCollection. +Both must be inherited to do something useful. + +ActionCollection keeps a fixed list of QActions, set as instance attributes in +the createActions() method. The icons and default shortcuts may also be set in +the same method. The texts should be set in the translateUI() method. + +The ActionCollection then keeps track of possibly changed keyboard shortcuts by +loading them from the config and connecting to the app.settingsChanged() signal. + +ShortcutCollection keeps a variable list of QActions, for which default +shortcuts must be set in the createDefaultShortcuts() method. + +This actions must not be connected to, but they are only used to set keyboard +shortcuts for a module that needs not to be loaded initially for the shortcuts +to work. If a shortcut is pressed, the real action is queried using the +realAction() method, which should return the corresponding action in the UI. +That one is than triggered. + +The module may provide the user with a means to change the keyboard shortcuts, +which then should call setShortcuts() to do it. The module may also query the +currently set shortcuts for an action using shortcuts(). +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtCore import QSettings, Qt +from PyQt4.QtGui import QAction, QKeySequence + +import app + + +class ActionCollectionBase(object): + """Abstract base class. Can load and keep a list of QActions. + + You must subclass this class and provide a name for the actioncollection + in the 'name' class attribute. + + """ + def __init__(self, widget=None): + self._widget = weakref.ref(widget) if widget else lambda: None + self._actions = {} # maps name to action + self._defaults = {} # maps name to default list of shortcuts + app.settingsChanged.connect(self.load) + + def widget(self): + """Returns the widget given on construction or None.""" + return self._widget() + + def setDefaultShortcuts(self, name, shortcuts): + """Set a default list of QKeySequence objects for the named action.""" + self._defaults[name] = shortcuts + + def actions(self): + """Returns the dictionary with actions.""" + return self._actions + + def defaults(self): + """Returns the dictionary with actions that have a default shortcut.""" + return self._defaults + + def shortcuts(self, name): + """Returns the list of shortcuts for the named action, or None.""" + try: + return self._actions[name].shortcuts() + except KeyError: + pass + + def settingsGroup(self): + """Returns settings group to load/save shortcuts from or to.""" + s = QSettings() + scheme = s.value("shortcut_scheme", "default") + s.beginGroup("shortcuts/{0}/{1}".format(scheme, self.name)) + return s + + def load(self): + """Implement to load shortcuts from our settingsGroup().""" + pass + + def title(self): + """If this returns a meaningful title, actions can be grouped in the shortcut settings dialog.""" + pass + + +class ActionCollection(ActionCollectionBase): + """Keeps a fixed list of QActions as instance attributes. + + Subclass this and add the actions as instance attributes in + the createActions() method. + + You can set the default shortcuts directly in the actions in the + createActions() method, it is not needed to use the setDefaultShortcuts() + method for that. + + Set the titles for the actions in the translateUI() method. + + """ + def __init__(self, parent=None): + """Creates the ActionCollection. + + parent is an optional widget that is also the parent for the created actions. + + """ + super(ActionCollection, self).__init__(parent) + self.createActions(parent) + self._actions = dict(i for i in self.__dict__.items() if not i[0].startswith('_')) + self.storeDefaults() + self.load(False) # load the shortcuts without resettings defaults + app.translateUI(self) + + def createActions(self, parent=None): + """Should add actions as instance attributes. + + The QActions should get icons and shortcuts. Texts should be set + in translateUI(). The actions are created with the parent given on instantiation. + + """ + pass + + def translateUI(self): + """Should (re)translate all the titles of the actions.""" + pass + + def storeDefaults(self): + """Saves the preset default QKeySequence lists for the actions.""" + for name, action in self._actions.items(): + if action.shortcuts(): + self.setDefaultShortcuts(name, action.shortcuts()) + + def load(self, restoreDefaults=True): + """Reads keyboard shortcuts from the settings. + + If restoreDefaults == True, resets the other shortcuts to their default + values. If restoreDefaults == False, does not touch the other shortcuts. + + """ + settings = self.settingsGroup() + keys = settings.allKeys() + for name in keys: + try: + self._actions[name].setShortcuts([QKeySequence(s) for s in settings.value(name) or []]) + except KeyError: + settings.remove(name) + if restoreDefaults: + for name in self._actions: + if name not in keys: + self._actions[name].setShortcuts(self._defaults.get(name) or []) + + +class ShortcutCollection(ActionCollectionBase): + """An ActionCollection type that only saves actions that have a keyboard shortcut. + + Should always be instantiated with a visible widget (preferably MainWindow) + as parent. + + Use the setShortcuts() method to set a list (possibly empty) of QKeySequence + objects. Every change causes other instances of the same-named collection + to reload. + + This serves two purposes: + 1. save keyboard shortcuts for actions created by the user or from a very large list + 2. make the keyboard shortcuts working even if the component the actions are + contained in is not even loaded yet. + + To make this work, implement the realAction() method to instantiate the widget the + action is meant for and then return the real action. + + """ + # save weak references to other instances with the same name and sync then. + others = {} + + # shortcut context to use by default + shortcutContext = Qt.WindowShortcut + + def __init__(self, widget): + """Creates the ShortcutCollection. + + The widget is required as actions are added to it, so their keyboard + shortcuts get triggered. + + """ + super(ShortcutCollection, self).__init__(widget) + self.createDefaultShortcuts() + self.load() + self.others.setdefault(self.name, []).append(weakref.ref(self)) + + def createDefaultShortcuts(self): + """Should set some default shortcut lists using setDefaultShortcuts().""" + pass + + def load(self): + """Reads keyboard shortcuts from the settings. Instantiates QActions as needed.""" + # clears all actions + for a in self._actions.values(): + a.setParent(None) + self._actions = {} + # then set defaults + for name, shortcuts in self.defaults().items(): + self.action(name).setShortcuts(shortcuts) + # then load + settings = self.settingsGroup() + for name in settings.allKeys(): + shortcuts = [QKeySequence(s) for s in settings.value(name) or []] + if not shortcuts: + if not self.removeAction(name): + # if it did not exist, remove key from config + settings.remove(name) + else: + self.action(name).setShortcuts(shortcuts) + + def setShortcuts(self, name, shortcuts): + """Sets the shortcuts list for our action. Use an empty list to remove the shortcuts.""" + if shortcuts: + self.action(name).setShortcuts(shortcuts) + self.settingsGroup().setValue(name, shortcuts) + else: + self.removeAction(name) + if name in self.defaults(): + # save empty list because there exists a default value + self.settingsGroup().setValue(name, []) + else: + self.settingsGroup().remove(name) + self.reloadOthers() + + def removeAction(self, name): + """(Internal) Removes the named action, returning True it it did exist.""" + try: + a = self._actions[name] + except KeyError: + return False + a.setParent(None) + del self._actions[name] + return True + + def action(self, name): + """Returns a QAction for the name, instantiating it if necessary.""" + try: + a = self._actions[name] + except KeyError: + a = self._actions[name] = QAction(self.widget()) + a.setShortcutContext(self.shortcutContext) + a.triggered.connect(lambda: self.triggerAction(name)) + self.widget().addAction(a) + return a + + def triggerAction(self, name): + """Called when the user presses a saved keyboard shortcut.""" + a = self.realAction(name) + if a: + a.trigger() + + def realAction(self, name): + """Implement this to return the real action the name refers to, + + This is called when the text and icon are needed (e.g. when the shortcut + dialog is opened) or when our "shadow" action keyboard shortcut is triggered. + + The function may return None, e.g. when the action our name refers to does + not exist anymore. In that case our action is also removed. + + """ + pass + + def actions(self): + """Returns our real actions instead of the shadow ones.""" + d = {} + changed = False + for name in list(self._actions): + a = self.realAction(name) + if a: + d[name] = a + else: + self.removeAction(name) + changed = True + if changed: + self.reloadOthers() + return d + + def reloadOthers(self): + """Reload others managing the same shortcuts (e.g. in case of multiple mainwindows).""" + for ref in self.others[self.name][:]: + other = ref() + if not other: + self.others[self.name].remove(ref) + elif other is not self: + other.load() + + +def removeShortcut(action, key): + """Removes matching QKeySequence from the list of the action.""" + key = QKeySequence(key) + shortcuts = action.shortcuts() + for s in action.shortcuts(): + if key.matches(s) or s.matches(key): + shortcuts.remove(s) + action.setShortcuts(shortcuts) + + +def removeAccels(s): + """Removes accels from a QAction.text() string.""" + return s.replace('&&', '\0').replace('&', '').replace('\0', '&') + diff -Nru frescobaldi-1.2.0/frescobaldi_app/app.py frescobaldi-2.0.0/frescobaldi_app/app.py --- frescobaldi-1.2.0/frescobaldi_app/app.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/app.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,178 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The global things in Frescobaldi. +""" + +from __future__ import unicode_literals + +import os +import sys + +from PyQt4.QtCore import QSettings, QThread +from PyQt4.QtGui import QApplication + +import info + +qApp = QApplication([os.path.abspath(sys.argv[0])] + sys.argv[1:]) +QApplication.setApplicationName(info.name) +QApplication.setApplicationVersion(info.version) +QApplication.setOrganizationName(info.name) +QApplication.setOrganizationDomain(info.url) + +windows = [] +documents = [] + +from signals import Signal + +# signals +aboutToQuit = Signal() # Use this and not qApp.aboutToQuit +mainwindowCreated = Signal() # MainWindow +mainwindowClosed = Signal() # MainWindow +documentCreated = Signal() # Document +documentUrlChanged = Signal() # Document +documentLoaded = Signal() # Document +documentModificationChanged = Signal() # Document +documentClosed = Signal() # Document +viewCreated = Signal() # View +viewSpaceCreated = Signal() # ViewSpace (see viewmanager.py) +languageChanged = Signal() # (no arguments) +settingsChanged = Signal() # (no arguments) +sessionChanged = Signal() # (name) +saveSessionData = Signal() # (name) +jobStarted = Signal() # (Document, Job) +jobFinished = Signal() # (Document, Job, bool success) + + +def openUrl(url, encoding=None): + """Returns a Document instance for the given QUrl. + + If there is already a document with that url, it is returned. + + """ + d = findDocument(url) + if not d: + # special case if there is only one document: + # if that is empty and unedited, use it. + if (len(documents) == 1 + and documents[0].url().isEmpty() + and documents[0].isEmpty() + and not documents[0].isUndoAvailable() + and not documents[0].isRedoAvailable()): + d = documents[0] + d.setUrl(url) + d.setEncoding(encoding) + d.load() + else: + import document + d = document.Document(url, encoding) + return d + +def findDocument(url): + """Returns a Document instance for the given QUrl if already loaded. + + Returns None if no document with given url exists or if the url is empty. + + """ + if not url.isEmpty(): + for d in documents: + if url == d.url(): + return d + +def run(): + """Enter the Qt event loop.""" + result = qApp.exec_() + aboutToQuit() + return result + +def translateUI(obj, priority=0): + """Translates texts in the object. + + Texts are translated again if the language is changed. + The object must have a translateUI() method. It is + also called by this function. + + """ + languageChanged.connect(obj.translateUI, priority) + obj.translateUI() + +def caption(title): + """Returns a nice dialog or window title with appname appended.""" + return "{0} \u2013 {1}".format(title, info.appname) + +def filetypes(extension=None): + """Returns a list of supported filetypes. + + If a type matches extension, it is placed first. + + """ + have, havenot = [], [] + for patterns, name in ( + ("{0} (*.ly *.lyi *.ily)", _("LilyPond Files")), + ("{0} (*.tex *.lytex *.latex)", _("LaTeX Files")), + ("{0} (*.docbook *.lyxml)", _("DocBook Files")), + ("{0} (*.html *.xml)", _("HTML Files")), + ("{0} (*.itely *.tely *.texi *.texinfo)", _("Texinfo Files")), + ("{0} (*.scm)", _("Scheme Files")), + ("{0} (*)", _("All Files")), + ): + if extension and extension in patterns: + have.append(patterns.format(name)) + else: + havenot.append(patterns.format(name)) + return ";;".join(have + havenot) + +def basedir(): + """Returns a base directory for documents. + + First looks in the session settings, then the default settings. + Returns "" if no directory was set. It is recommended to use the + home directory in that case. + + """ + import sessions + conf = sessions.currentSessionGroup() + if conf: + basedir = conf.value("basedir", "") + if basedir: + return basedir + return QSettings().value("basedir") + +def settings(name): + """Returns a QSettings object referring a file in ~/.config/frescobaldi/""" + s = QSettings(info.name, name) + s.setFallbacksEnabled(False) + return s + +def excepthook(exctype, excvalue, exctb): + """Called when a Python exception goes unhandled.""" + from traceback import format_exception + sys.stderr.write(''.join(format_exception(exctype, excvalue, exctb))) + if exctype != KeyboardInterrupt: + # show dialog, but not when in non-GUI thread + if QThread.currentThread() == qApp.thread(): + import exception + exception.ExceptionDialog(exctype, excvalue, exctb) + +def displayhook(obj): + """Prevent normal displayhook from overwriting __builtin__._""" + if obj is not None: + print repr(obj) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/autocomplete/analyzer.py frescobaldi-2.0.0/frescobaldi_app/autocomplete/analyzer.py --- frescobaldi-1.2.0/frescobaldi_app/autocomplete/analyzer.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/autocomplete/analyzer.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,499 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Analyze text to determine suitable completions. +""" + +from __future__ import unicode_literals + +import re +import os + +import ly.lex as lx +import ly.lex.lilypond as lp +import ly.lex.scheme as scm +import ly.words +import tokeniter + +from . import completiondata +from . import documentdata + + +__all__ = ['completions'] + + +def completions(cursor): + """Analyzes text at cursor and returns a tuple (position, model). + + The position is an integer specifying the column in the line where the last + text starts that should be completed. + + The model list the possible completions. If the model is None, there are no + suitable completions. + + This function does its best to return extremely meaningful completions + for the context the cursor is in. + + """ + analyzer = Analyzer(cursor) + return analyzer.column, analyzer.model + + +class Analyzer(object): + """This does the analyzing work; sets the attributes column and model.""" + def __init__(self, cursor): + self.cursor = cursor + block = cursor.block() + self.column = column = cursor.position() - block.position() + self.text = text = block.text()[:column] + self.model = None + + # make a list of tokens exactly ending at the cursor position + # and let state follow + state = self.state = tokeniter.state(block) + tokens = self.tokens = [] + for t in tokeniter.tokens(cursor.block()): + if t.end > column: + # cut off the last token and run the parser on it + tokens.extend(state.tokens(text, t.pos)) + break + tokens.append(t) + state.follow(t) + if t.end == column: + break + + self.last = tokens[-1] if tokens else '' + self.lastpos = self.last.pos if self.last else column + + parser = state.parser() + + # Map the parser class to a group of tests to return the model. + # Try the tests until a model is returned. + try: + tests = _tests[parser.__class__] + except KeyError: + return + else: + for function in tests: + model = function(self) + if model: + self.model = model + return + + def tokenclasses(self): + """Returns the list of classes of the tokens.""" + return list(map(type, self.tokens)) + + def backuntil(self, *classes): + """Moves self.column back until a token of *classes is encountered.""" + for t in self.tokens[::-1]: + if isinstance(t, classes): + break + self.column = t.pos + + +# Test functions that return a model or None +# self is the Analyzer instance. +def toplevel(self): + """LilyPond toplevel document contents.""" + self.backuntil(lx.Space) + return completiondata.lilypond_toplevel + # maybe: check if behind \version or \language + +def book(self): + """\\book {""" + self.backuntil(lx.Space) + return completiondata.lilypond_book + +def bookpart(self): + """\\bookpart {""" + self.backuntil(lx.Space) + return completiondata.lilypond_bookpart + +def score(self): + """\\score {""" + self.backuntil(lx.Space) + return completiondata.lilypond_score + +def tweak(self): + """complete property after \\tweak""" + if '\\tweak' in self.tokens: + tokenclasses = self.tokenclasses() + test = [lp.Command, lx.Space, lp.SchemeStart, scm.Quote, scm.Word] + if tokenclasses[-3:] == test[:-2] and self.tokens[-3] == '\\tweak': + self.column -= 1 + return completiondata.lilypond_all_grob_properties + elif tokenclasses[-4:] == test[:-1] and self.tokens[-4] == '\\tweak': + self.column -= 2 + return completiondata.lilypond_all_grob_properties + elif tokenclasses[-5:] == test and self.tokens[-5] == '\\tweak': + self.column = self.lastpos - 2 + return completiondata.lilypond_all_grob_properties + +def key(self): + """complete mode argument of '\\key'""" + tokenclasses = self.tokenclasses() + if '\\key' in self.tokens[-5:-2] and lp.Note in tokenclasses[-3:]: + if self.last.startswith('\\'): + self.column = self.lastpos + return completiondata.lilypond_modes + +def clef(self): + """complete \\clef names""" + if '\\clef' in self.tokens[-4:-1]: + self.backuntil(lx.Space, lp.StringQuotedStart) + return completiondata.lilypond_clefs + +def repeat(self): + """complete \\repeat types""" + if '\\repeat' in self.tokens[-4:-1]: + self.backuntil(lx.Space, lp.StringQuotedStart) + return completiondata.lilypond_repeat_types + +def language(self): + """complete \\language "name" """ + if '\\language' in self.tokens[-4:-1]: + self.backuntil(lp.StringQuotedStart) + return completiondata.language_names + +def include(self): + """complete \\include """ + if '\\include' in self.tokens[-4:-2]: + self.backuntil(lp.StringQuotedStart) + dir = self.last[:self.last.rfind(os.sep)] if os.sep in self.last else None + return documentdata.doc(self.cursor.document()).includenames(self.cursor, dir) + +def general_music(self): + """fall back: generic music commands and user-defined commands.""" + if self.last.startswith('\\'): + self.column = self.lastpos + return documentdata.doc(self.cursor.document()).musiccommands(self.cursor) + +def lyricmode(self): + """Commands inside lyric mode.""" + if self.last.startswith('\\'): + self.column = self.lastpos + return documentdata.doc(self.cursor.document()).lyriccommands(self.cursor) + +def music_glyph(self): + """Complete \markup \musicglyph names.""" + try: + i = self.tokens.index('\\musicglyph', -5, -3) + except ValueError: + return + for t, cls in zip(self.tokens[i:], ( + lp.MarkupCommand, lx.Space, lp.SchemeStart, scm.StringQuotedStart, scm.String)): + if type(t) is not cls: + return + if i + 4 < len(self.tokens): + self.column = self.tokens[i + 4].pos + return completiondata.music_glyphs + +def midi_instrument(self): + """Complete midiInstrument = #"... """ + try: + i = self.tokens.index('midiInstrument', -7, -2) + except ValueError: + return + if self.last != '"': + self.column = self.lastpos + return completiondata.midi_instruments + +def font_name(self): + """Complete #'font-name = #"...""" + try: + i = self.tokens.index('font-name', -7, -3) + except ValueError: + return + if self.last != '"': + self.column = self.lastpos + return completiondata.font_names() + +def scheme_word(self): + """Complete scheme word from scheme functions, etc.""" + if isinstance(self.last, scm.Word): + self.column = self.lastpos + return documentdata.doc(self.cursor.document()).schemewords() + +def markup(self): + """\\markup {""" + if self.last.startswith('\\'): + if (self.last[1:] not in ly.words.markupcommands + and self.last != '\\markup'): + self.column = self.lastpos + else: + return completiondata.lilypond_markup_commands + else: + m = re.search(r'\w+$', self.last) + if m: + self.column = self.lastpos + m.start() + return documentdata.doc(self.cursor.document()).markup() + +def header(self): + """\\header {""" + if '=' in self.tokens[-3:] or self.last.startswith('\\'): + if self.last.startswith('\\'): + self.column = self.lastpos + return completiondata.lilypond_markup + if self.last[:1].isalpha(): + self.column = self.lastpos + return completiondata.lilypond_header_variables + +def paper(self): + """\\paper {""" + if '=' in self.tokens[-3:] or self.last.startswith('\\'): + if self.last.startswith('\\'): + self.column = self.lastpos + return completiondata.lilypond_markup + if self.last[:1].isalpha(): + self.column = self.lastpos + return completiondata.lilypond_paper_variables + +def layout(self): + """\\layout {""" + self.backuntil(lx.Space) + return completiondata.lilypond_layout_variables + +def midi(self): + """\\midi {""" + self.backuntil(lx.Space) + return completiondata.lilypond_midi_variables + +def engraver(self): + """Complete engraver names.""" + cmd_in = lambda tokens: '\\remove' in tokens or '\\consists' in tokens + if isinstance(self.state.parser(), lp.ParseString): + if not cmd_in(self.tokens[-5:-2]): + return + if self.last != '"': + if '"' not in self.tokens[-2:-1]: + return + self.column = self.lastpos + return completiondata.lilypond_engravers + if cmd_in(self.tokens[-3:-1]): + self.backuntil(lx.Space) + return completiondata.lilypond_engravers + +def context_variable_set(self): + if '=' in self.tokens[-4:]: + if isinstance(self.last, scm.Word): + self.column = self.lastpos + return documentdata.doc(self.cursor.document()).schemewords() + if self.last.startswith('\\'): + self.column = self.lastpos + return completiondata.lilypond_markup + +def context(self): + self.backuntil(lx.Space) + return completiondata.lilypond_context_contents + +def with_(self): + self.backuntil(lx.Space) + return completiondata.lilypond_with_contents + +def new_context(self): + """complete context name after \\new, \\change or \\context in music""" + for t in self.tokens[-2::-1]: + if isinstance(t, lp.ContextName): + return + elif isinstance(t, lp.New): + break + self.backuntil(lx.Space) + return completiondata.lilypond_contexts + +def override(self): + """\\override and \\revert""" + tokenclasses = self.tokenclasses() + try: + # check if there is a GrobName in the last 5 tokens + i = tokenclasses.index(lp.GrobName, -5) + except ValueError: + # not found, then complete Contexts and or Grobs + # (only if we are in the override parser and there's no "=") + if isinstance(self.state.parser(), scm.ParseScheme): + return + if lp.EqualSignSetOverride in tokenclasses: + # TODO maybe return suitable values for the last property + self.backuntil(lp.EqualSignSetOverride, lx.Space) + return completiondata.lilypond_markup + self.backuntil(lp.DotSetOverride, lx.Space) + if (isinstance(self.state.parsers()[1], ( + lp.ParseWith, + lp.ParseContext, + )) + or lp.DotSetOverride in tokenclasses): + return completiondata.lilypond_grobs + return completiondata.lilypond_contexts_and_grobs + # yes, there is a GrobName at i + count = len(self.tokens) - i - 1 # tokens after grobname + if count == 0: + self.column = self.lastpos + return completiondata.lilypond_grobs + elif count >= 2: + # set the place of the scheme-start "#" as the column + self.column = self.tokens[i+2].pos + test = [lx.Space, lp.SchemeStart, scm.Quote, scm.Word] + if tokenclasses[i+1:] == test[:count]: + return completiondata.lilypond_grob_properties(self.tokens[i]) + +def set_unset(self): + """\\set and \\unset""" + tokenclasses = self.tokenclasses() + self.backuntil(lx.Space, lp.DotSetOverride) + if lp.EqualSignSetOverride in tokenclasses: + # TODO maybe return suitable values for the context property + for t in self.tokens[::-1]: + if isinstance(t, (lp.EqualSignSetOverride, lx.Space)): + break + self.column = t.pos + return completiondata.lilypond_markup + elif lp.ContextProperty in tokenclasses and isinstance(self.last, lx.Space): + return # fall back to music? + elif lp.DotSetOverride in tokenclasses: + return completiondata.lilypond_context_properties + return completiondata.lilypond_contexts_and_properties + +def markup_override(self): + """test for \\markup \\override inside scheme""" + try: + i = self.tokens.index('\\override', -6, -4) + except ValueError: + return + for t, cls in zip(self.tokens[i:], ( + lp.MarkupCommand, lx.Space, lp.SchemeStart, scm.Quote, scm.OpenParen)): + if type(t) is not cls: + return + if len(self.tokens) > i + 5: + self.column = self.lastpos + return completiondata.lilypond_markup_properties + +def scheme_other(self): + """test for other scheme words""" + if isinstance(self.last, ( + lp.SchemeStart, + scm.OpenParen, + scm.Word, + )): + if isinstance(self.last, scm.Word): + self.column = self.lastpos + return documentdata.doc(self.cursor.document()).schemewords() + + +# Mapping from Parsers to the lists of functions to run. +_tests = { + lp.ParseGlobal: ( + repeat, + toplevel, + ), + lp.ParseBook: ( + book, + ), + lp.ParseBookPart: ( + bookpart, + ), + lp.ParseScore: ( + score, + ), + lp.ParseMusic: ( + tweak, + scheme_word, + key, + clef, + repeat, + general_music, + ), + lp.ParseNoteMode: ( + tweak, + scheme_word, + key, + clef, + repeat, + general_music, + ), + lp.ParseMarkup: ( + markup, + ), + lp.ParseHeader: ( + header, + ), + lp.ParsePaper: ( + paper, + ), + lp.ParseLayout: ( + layout, + ), + lp.ParseMidi: ( + midi, + ), + lp.ParseContext: ( + engraver, + context_variable_set, + context, + ), + lp.ParseWith: ( + engraver, + context_variable_set, + with_, + ), + lp.ParseNewContext: ( + new_context, + ), + lp.ParseOverride: ( + override, + ), + lp.ParseRevert: ( + override, + ), + lp.ParseSet: ( + set_unset, + ), + lp.ParseUnset: ( + set_unset, + ), + lp.ParseString: ( + engraver, + clef, + repeat, + midi_instrument, + include, + language, + ), + lp.ParseClef: ( + clef, + ), + lp.ParseRepeat: ( + repeat, + ), + scm.ParseScheme: ( + override, + tweak, + markup_override, + scheme_other, + ), + scm.ParseString: ( + music_glyph, + midi_instrument, + font_name, + ), + lp.ParseLyricMode: ( + lyricmode, + ) +} + diff -Nru frescobaldi-1.2.0/frescobaldi_app/autocomplete/completer.py frescobaldi-2.0.0/frescobaldi_app/autocomplete/completer.py --- frescobaldi-1.2.0/frescobaldi_app/autocomplete/completer.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/autocomplete/completer.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,61 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The completer for Frescobaldi. +""" + +from __future__ import unicode_literals + +import re + +from PyQt4.QtGui import QTextCursor + +import app +import textformats +import widgets.completer + + +class Completer(widgets.completer.Completer): + def __init__(self): + super(Completer, self).__init__() + self.setMaxVisibleItems(16) + self.popup().setMinimumWidth(100) + app.settingsChanged.connect(self.readSettings) + self.readSettings() + + def readSettings(self): + self.popup().setFont(textformats.formatData('editor').font) + self.popup().setPalette(textformats.formatData('editor').palette()) + + def completionCursor(self): + cursor = self.textCursor() + # trick: if we are still visible we don't have to analyze the text again + if not (self.popup().isVisible() and self._pos < cursor.position()): + from . import analyzer + pos, model = analyzer.completions(cursor) + if not model: + return + self._pos = cursor.block().position() + pos + if self.model() != model: + self.setModel(model) + cursor.setPosition(self._pos, QTextCursor.KeepAnchor) + return cursor + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/autocomplete/completiondata.py frescobaldi-2.0.0/frescobaldi_app/autocomplete/completiondata.py --- frescobaldi-1.2.0/frescobaldi_app/autocomplete/completiondata.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/autocomplete/completiondata.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,238 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +All completions data. +""" + +from __future__ import unicode_literals + +import itertools + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QFont, QFontDatabase + +import listmodel +import ly.words +import ly.data +import ly.pitch + +from . import util + + +# some groups of basic lilypond commands + +# markup (toplevel, book and bookpart) +markup = ( + 'markup', + 'markuplines', + 'markuplist', + 'pageBreak', + 'noPageBreak', +) + +# these can occur (almost) everywhere +everywhere = ( + 'language', + 'pointAndClickOn', + 'pointAndClickOff', + 'include', +) + +# commands that change input mode, can introduce a music expression +inputmodes = ( + 'chords', + 'chordmode {', + 'drums', + 'drummode {', + 'figures', + 'figuremode {', + 'lyrics', + 'lyricmode {', + 'addlyrics {', +) + +# commands that only occur at the global file level +toplevel = ( + 'version', + 'sourcefileline', + 'sourcefilename', +) + +# other commands that can start a music expression +start_music = ( + 'repeat', + 'alternative {', + 'relative', + 'transpose', + 'partcombine', + 'keepWithTag #\'', + 'removeWithTag #\'', + 'new', + 'context', + 'with', +) + +# tweak commands may be assigned, in toplevel +tweaks = ( + 'once', + 'override', + 'revert', + 'set', + 'unset', +) + +# modes book, bookpart and score +modes = ( + 'book {', + 'bookpart {', + 'score {', +) + +# blocks: paper, header, layout +blocks = ( + 'paper {', + 'header {', + 'layout {', +) + +# commands that are used in context definitions +cmds_context = ( + 'override', + 'consists', + 'remove', + 'RemoveEmptyStaves', + 'accepts', + 'alias', + 'defaultchild', + 'denies', + 'name', +) + +# in \with { } a smaller set +cmds_with = cmds_context[:3] + + +# variables that make sense to be set at toplevel +toplevel_variables = ( + 'pipeSymbol', + 'showFirstLength', + 'showLastLength', +) + + +lilypond_markup = listmodel.ListModel(['\\markup']) + +lilypond_markup_commands = listmodel.ListModel( + sorted(ly.words.markupcommands), + display = util.command) + +lilypond_header_variables = listmodel.ListModel( + sorted(ly.words.headervariables, key=lambda i: i[:3]), edit = util.variable) + +lilypond_paper_variables = listmodel.ListModel( + sorted(ly.words.papervariables), edit = util.variable) + +lilypond_layout_variables = listmodel.ListModel( + ['\\context {',] + sorted(ly.words.layoutvariables), + edit = util.cmd_or_var) + +lilypond_midi_variables = listmodel.ListModel( + ['\\context {',] + sorted(ly.words.midivariables), + edit = util.cmd_or_var) + +lilypond_contexts = listmodel.ListModel(sorted(ly.words.contexts)) + +lilypond_grobs = listmodel.ListModel(ly.data.grobs()) + +lilypond_contexts_and_grobs = listmodel.ListModel( + sorted(ly.words.contexts) + ly.data.grobs()) + +lilypond_context_properties = listmodel.ListModel( + ly.data.context_properties()) + +lilypond_contexts_and_properties = listmodel.ListModel( + sorted(ly.words.contexts) + ly.data.context_properties()) + +lilypond_context_contents = listmodel.ListModel(sorted(itertools.chain( + util.make_cmds(ly.words.contexts), + ly.data.context_properties(), + util.make_cmds(cmds_context), + )), edit = util.cmd_or_var) + +lilypond_with_contents = listmodel.ListModel(sorted(itertools.chain( + ly.data.context_properties(), + util.make_cmds(cmds_with), + )), edit = util.cmd_or_var) + +lilypond_toplevel = listmodel.ListModel(sorted(itertools.chain(util.make_cmds( + toplevel + everywhere + inputmodes + markup + start_music + tweaks + + modes + blocks + ), toplevel_variables)), edit = util.cmd_or_var) + +lilypond_book = listmodel.ListModel(sorted( + everywhere + inputmodes + markup + start_music + + modes[1:] + blocks + ( + 'bookOutputName', + 'bookOutputSuffix', + )), display = util.command) + +lilypond_bookpart = listmodel.ListModel(sorted( + everywhere + inputmodes + markup + start_music + modes[2:] + blocks + ), display = util.command) + +lilypond_score = listmodel.ListModel(sorted( + everywhere + inputmodes + start_music + blocks[1:] + ( + 'midi {', + )), display = util.command) + +lilypond_engravers = listmodel.ListModel(ly.data.engravers()) + +def lilypond_grob_properties(grob): + return listmodel.ListModel(ly.data.grob_properties(grob), + display = lambda item: "#'" + item) + +lilypond_all_grob_properties = listmodel.ListModel(ly.data.all_grob_properties(), + display = lambda item: "#'" + item) + +lilypond_markup_properties = listmodel.ListModel( + sorted(set(sum(map(ly.data.grob_interface_properties, ( + # see lilypond docs about \markup \override + 'font-interface', + 'text-interface', + 'instrument-specific-markup-interface', + )), [])))) + +lilypond_modes = listmodel.ListModel(ly.words.modes, display = util.command) + +lilypond_clefs = listmodel.ListModel(ly.words.clefs_plain) + +lilypond_repeat_types = listmodel.ListModel(ly.words.repeat_types) + +music_glyphs = listmodel.ListModel(ly.data.music_glyphs()) + +midi_instruments = listmodel.ListModel(ly.words.midi_instruments) + +language_names = listmodel.ListModel(sorted(ly.pitch.pitchInfo)) + +def font_names(): + model = listmodel.ListModel(sorted(QFontDatabase().families())) + model.setRoleFunction(Qt.FontRole, QFont) + return model + diff -Nru frescobaldi-1.2.0/frescobaldi_app/autocomplete/documentdata.py frescobaldi-2.0.0/frescobaldi_app/autocomplete/documentdata.py --- frescobaldi-1.2.0/frescobaldi_app/autocomplete/documentdata.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/autocomplete/documentdata.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,139 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Completions data harvested from a Document. +""" + +from __future__ import unicode_literals + +import itertools +import os + +import listmodel +import plugin +import ly.words + +from . import harvest +from . import util + + +def doc(document): + """Returns the DocumentDataSource for the specified Document.""" + return DocumentDataSource.instance(document) + + +class DocumentDataSource(plugin.DocumentPlugin): + @util.keep + def words(self): + """Returns the list of words in comments, markup etc.""" + return listmodel.ListModel( + sorted(set(harvest.words(self.document())))) + + @util.keep + def schemewords(self): + """Scheme names, including those harvested from document.""" + schemewords = set(itertools.chain( + ly.words.scheme_functions, + ly.words.scheme_values, + (unicode(t) + for t in harvest.schemewords(self.document()) + if len(t) > 2), + )) + return listmodel.ListModel(sorted(schemewords)) + + @util.keep + def markup(self): + """Completes markup commands and normal text from the document.""" + return listmodel.ListModel( + ['\\' + w for w in ly.words.markupcommands] + + sorted(set(harvest.words(self.document())))) + + @util.keep + def musiccommands(self, cursor): + return listmodel.ListModel(sorted(set(itertools.chain( + ly.words.lilypond_keywords, + ly.words.lilypond_music_commands, + ly.words.articulations, + ly.words.ornaments, + ly.words.fermatas, + ly.words.instrument_scripts, + ly.words.repeat_scripts, + harvest.names(cursor)))), display = util.command) + + @util.keep + def lyriccommands(self, cursor): + return listmodel.ListModel(sorted(set(itertools.chain( + ('set stanza = ', 'set', 'override', 'markup', 'notemode'), + harvest.names(cursor)))), display = util.command) + + def includenames(self, cursor, directory=None): + """Finds files relative to the directory of the cursor's document. + + If the document has a local filename, looks in that directory, + also in a subdirectory of it, if the directory argument is given. + + Then looks in the user-set include paths, and finally in LilyPond's + own ly/ folder. + + """ + names = [] + # names in current dir + path = self.document().url().toLocalFile() + if path: + basedir = os.path.dirname(path) + if directory: + basedir = os.path.join(basedir, directory) + names.extend(sorted(os.path.join(directory, f) + for f in get_filenames(basedir, True))) + else: + names.extend(sorted(get_filenames(basedir, True))) + + # names in specified include paths + import documentinfo + for basedir in documentinfo.info(self.document()).includepath(): + names.extend(sorted(get_filenames(basedir))) + + # names from LilyPond itself + import engrave.command + datadir = engrave.command.info(self.document()).datadir + if datadir: + basedir = os.path.join(datadir, 'ly') + # get the filenames but avoid the -init files here + names.extend(sorted(f for f in get_filenames(basedir) + if not f.endswith('init.ly') + and f.islower())) + + return listmodel.ListModel(names) + + +def get_filenames(path, directories = False): + for root, dirs, files in os.walk(path): + for f in files: + if f and f[0] not in '.~': + name, ext = os.path.splitext(f) + if ext.lower() in ('.ly', '.lyi', '.ily'): + yield f + if directories: + for f in dirs: + if f and not f.startswith('.'): + yield f + os.sep + return + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/autocomplete/harvest.py frescobaldi-2.0.0/frescobaldi_app/autocomplete/harvest.py --- frescobaldi-1.2.0/frescobaldi_app/autocomplete/harvest.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/autocomplete/harvest.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,63 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Harvest strings from document for autocompletion purposes. +""" + +from __future__ import unicode_literals + +import re + +import tokeniter +import ly.lex.lilypond +import ly.lex.scheme + + +def names(cursor): + """Harvests names from assignments until the cursor.""" + end = cursor.block() + block = cursor.document().firstBlock() + while block.isValid() and block != end: + for t in tokeniter.tokens(block)[:2]: + if type(t) is ly.lex.lilypond.Name: + yield t + break + block = block.next() + + +def schemewords(document): + """Harvests all schemewords from the document.""" + for t in tokeniter.allTokens(document): + if type(t) is ly.lex.scheme.Word: + yield t + + +_words = re.compile(r'\w{5,}|\w{2,}(?:[:-]\w+)+').finditer +_word_types = ( + ly.lex.String, ly.lex.Comment, ly.lex.Unparsed, + ly.lex.lilypond.MarkupWord, ly.lex.lilypond.LyricText) + +def words(document): + """Harvests words from strings, lyrics, markup and comments.""" + for t in tokeniter.allTokens(document): + if isinstance(t, _word_types): + for m in _words(t): + yield m.group() + diff -Nru frescobaldi-1.2.0/frescobaldi_app/autocomplete/__init__.py frescobaldi-2.0.0/frescobaldi_app/autocomplete/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/autocomplete/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/autocomplete/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,81 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Auto-completes entered text. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings, Qt +from PyQt4.QtGui import QAction, QKeySequence + +import app +import actioncollection +import actioncollectionmanager +import plugin + + +class CompleterManager(plugin.MainWindowPlugin): + def __init__(self, mainwindow): + ac = self.actionCollection = Actions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + ac.autocomplete.toggled.connect(self.setAutoComplete) + ac.popup_completions.triggered.connect(self.showCompletions) + mainwindow.currentViewChanged.connect(self.setView) + if mainwindow.currentView(): + self.setView(mainwindow.currentView()) + complete = QSettings().value("autocomplete", True) not in ('false', False) + ac.autocomplete.setChecked(complete) + + def setView(self, view): + self.completer().setWidget(view) + + def completer(self): + try: + return self._completer + except AttributeError: + from . import completer + self._completer = c = completer.Completer() + c.autoComplete = self.actionCollection.autocomplete.isChecked() + return self._completer + + def setAutoComplete(self, enabled): + QSettings().setValue("autocomplete", enabled) + self.completer().autoComplete = enabled + + def showCompletions(self): + if self.mainwindow().currentView().hasFocus(): + self.completer().showCompletionPopup() + + +app.mainwindowCreated.connect(CompleterManager.instance) + + +class Actions(actioncollection.ActionCollection): + name = 'autocomplete' + def createActions(self, parent): + self.autocomplete = QAction(parent, checkable=True) + self.popup_completions = QAction(parent) + self.popup_completions.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_Space)) + + def translateUI(self): + self.autocomplete.setText(_("Automatic &Completion")) + self.popup_completions.setText(_("Show C&ompletions Popup")) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/autocomplete/util.py frescobaldi-2.0.0/frescobaldi_app/autocomplete/util.py --- frescobaldi-1.2.0/frescobaldi_app/autocomplete/util.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/autocomplete/util.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,71 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Utility functions used in the autocomplete package. +""" + +from __future__ import unicode_literals + +import functools +import time +import weakref + + +def keep(f): + """Returns a decorator that remembers its return value for some time.""" + _delay = 5.0 # sec + _cache = weakref.WeakKeyDictionary() + @functools.wraps(f) + def decorator(self, *args): + try: + result = _cache[self] + except KeyError: + pass + else: + t, ret = result + if (time.time() - t) < _delay: + return ret + ret = f(self, *args) + _cache[self] = (time.time(), ret) + return ret + return decorator + + +# helper functions for displaying data from models +def command(item): + """Prepends '\\' to item.""" + return '\\' + item + + +def variable(item): + """Appends ' = ' to item.""" + return item + " = " + + +def cmd_or_var(item): + """Appends ' = ' to item if it does not start with '\\'.""" + return item if item.startswith('\\') else item + " = " + + +def make_cmds(words): + """Returns generator prepending '\\' to every word.""" + return ('\\' + w for w in words) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/backup.py frescobaldi-2.0.0/frescobaldi_app/backup.py --- frescobaldi-1.2.0/frescobaldi_app/backup.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/backup.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,71 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Backup files before overwriting +""" + +from __future__ import unicode_literals + +import os +import shutil + +from PyQt4.QtCore import QSettings + + +def backup(filename): + """Makes a backup of 'filename'. + + Returns True if the backup succeeded. + + """ + if filename: + try: + shutil.copy(filename, backupName(filename)) + return True + except (IOError, OSError): + pass + return False + + +def removeBackup(filename): + """Removes filename's backup unless the user has configured to keep it.""" + if filename and QSettings().value("backup_keep", False) in (False, 'false'): + try: + os.remove(backupName(filename)) + except (IOError, OSError): + pass + + +def scheme(): + """Returns a string that must contain "FILE". + + Replacing that part yields the backup name. + + """ + s = QSettings().value("backup_scheme", "FILE~") + assert 'FILE' in s and s != 'FILE' + return s + + +def backupName(filename): + """Returns the backup file name for the given filename.""" + return scheme().replace("FILE", filename) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/bookmarkmanager.py frescobaldi-2.0.0/frescobaldi_app/bookmarkmanager.py --- frescobaldi-1.2.0/frescobaldi_app/bookmarkmanager.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/bookmarkmanager.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,118 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages the actions that manipulate the bookmarks (see also bookmarks.py). +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QAction + +import actioncollection +import actioncollectionmanager +import icons +import bookmarks +import plugin + + +class BookmarkManager(plugin.MainWindowPlugin): + def __init__(self, mainwindow): + ac = self.actionCollection = Actions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + ac.view_next_mark.triggered.connect(self.nextMark) + ac.view_previous_mark.triggered.connect(self.previousMark) + ac.view_bookmark.triggered.connect(self.markCurrentLine) + ac.view_clear_error_marks.triggered.connect(self.clearErrorMarks) + ac.view_clear_all_marks.triggered.connect(self.clearAllMarks) + mainwindow.currentViewChanged.connect(self.slotViewChanged) + mainwindow.currentDocumentChanged.connect(self.slotDocumentChanged) + if mainwindow.currentView(): + self.slotViewChanged(mainwindow.currentView()) + self.slotDocumentChanged(mainwindow.currentDocument()) + + def slotViewChanged(self, view, prev=None): + if prev: + prev.cursorPositionChanged.disconnect(self.updateMarkStatus) + view.cursorPositionChanged.connect(self.updateMarkStatus) + + def slotDocumentChanged(self, doc, prev=None): + if prev: + bookmarks.bookmarks(prev).marksChanged.disconnect(self.updateMarkStatus) + bookmarks.bookmarks(doc).marksChanged.connect(self.updateMarkStatus) + + def updateMarkStatus(self): + view = self.mainwindow().currentView() + self.actionCollection.view_bookmark.setChecked( + bookmarks.bookmarks(view.document()).hasMark(view.textCursor().blockNumber(), 'mark')) + + def markCurrentLine(self): + view = self.mainwindow().currentView() + lineNumber = view.textCursor().blockNumber() + bookmarks.bookmarks(view.document()).toggleMark(lineNumber, 'mark') + + def clearErrorMarks(self): + doc = self.mainwindow().currentDocument() + bookmarks.bookmarks(doc).clear('error') + + def clearAllMarks(self): + doc = self.mainwindow().currentDocument() + bookmarks.bookmarks(doc).clear() + + def nextMark(self): + view = self.mainwindow().currentView() + cursor = view.textCursor() + cursor = bookmarks.bookmarks(view.document()).nextMark(cursor) + if cursor: + view.setTextCursor(cursor) + + def previousMark(self): + view = self.mainwindow().currentView() + cursor = view.textCursor() + cursor = bookmarks.bookmarks(view.document()).previousMark(cursor) + if cursor: + view.setTextCursor(cursor) + + +class Actions(actioncollection.ActionCollection): + name = "bookmarkmanager" + def createActions(self, parent): + self.view_bookmark = QAction(parent) + self.view_bookmark.setCheckable(True) + self.view_clear_error_marks = QAction(parent) + self.view_clear_all_marks = QAction(parent) + self.view_next_mark = QAction(parent) + self.view_previous_mark = QAction(parent) + + self.view_bookmark.setShortcut(Qt.CTRL + Qt.Key_B) + self.view_next_mark.setShortcut(Qt.ALT + Qt.Key_PageDown) + self.view_previous_mark.setShortcut(Qt.ALT + Qt.Key_PageUp) + + self.view_bookmark.setIcon(icons.get('bookmark-new')) + self.view_clear_all_marks.setIcon(icons.get('edit-clear')) + + def translateUI(self): + self.view_bookmark.setText(_("&Mark Current Line")) + self.view_clear_error_marks.setText(_("Clear &Error Marks")) + self.view_clear_all_marks.setText(_("Clear &All Marks")) + self.view_next_mark.setText(_("Next Mark")) + self.view_previous_mark.setText(_("Previous Mark")) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/bookmarks.py frescobaldi-2.0.0/frescobaldi_app/bookmarks.py --- frescobaldi-1.2.0/frescobaldi_app/bookmarks.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/bookmarks.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,203 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages marked lines (bookmarks) for a Document. + +A mark is simply a QTextCursor that maintains its position in the document. + +There are different types (categories) of marks, listed in the module-global +types variable. Currently the available types are 'mark' (a normal mark) +and 'error' (marking a line containing an error). + +""" + +from __future__ import unicode_literals + +import bisect +import json + +from PyQt4.QtGui import QTextCursor + +import metainfo +import signals +import plugin + +types = ( + 'mark', + 'error', +) + + +metainfo.define('bookmarks', json.dumps(None), bytes) + + +def bookmarks(document): + """Returns the Bookmarks instance for the document.""" + return Bookmarks.instance(document) + + +class Bookmarks(plugin.DocumentPlugin): + """Manages bookmarks (marked lines) for a Document. + + The marks are stored in the metainfo for the Document. + + """ + marksChanged = signals.Signal() + + def __init__(self, document): + """Creates the Bookmarks instance.""" + document.loaded.connect(self.load) + document.saved.connect(self.save) + document.closed.connect(self.save) + self.load() # initializes self._marks + + def marks(self, type=None): + """Returns marks (QTextCursor instances). + + If type is specified (one of the names in the module-global types variable), + the list of marks of that type is returned. + If type is None, a dictionary listing all types mapped to lists of marks + is returned. + + """ + + return self._marks[type] if type else self._marks + + def setMark(self, linenum, type): + """Marks the given line number with a mark of the given type.""" + nums = [mark.blockNumber() for mark in self._marks[type]] + if linenum in nums: + return + index = bisect.bisect_left(nums, linenum) + mark = QTextCursor(self.document().findBlockByNumber(linenum)) + try: + # only available in very recent PyQt4 versions + mark.setKeepPositionOnInsert(True) + except AttributeError: + pass + self._marks[type].insert(index, mark) + self.marksChanged() + + def unsetMark(self, linenum, type): + """Removes a mark of the given type on the given line.""" + nums = [mark.blockNumber() for mark in self._marks[type]] + if linenum in nums: + # remove double occurrences + while True: + index = bisect.bisect_left(nums, linenum) + del self._marks[type][index] + del nums[index] + if linenum not in nums: + break + self.marksChanged() + + def toggleMark(self, linenum, type): + """Toggles the mark of the given type on the given line.""" + nums = [mark.blockNumber() for mark in self._marks[type]] + index = bisect.bisect_left(nums, linenum) + if linenum in nums: + # remove double occurrences + while True: + del self._marks[type][index] + del nums[index] + if linenum not in nums: + break + index = bisect.bisect_left(nums, linenum) + else: + mark = QTextCursor(self.document().findBlockByNumber(linenum)) + try: + # only available in very recent PyQt4 versions + mark.setKeepPositionOnInsert(True) + except AttributeError: + pass + self._marks[type].insert(index, mark) + self.marksChanged() + + def hasMark(self, linenum, type=None): + """Returns True if the line has a mark (of the given type if specified) else False.""" + for type in types if type is None else (type,): + for mark in self._marks[type]: + if mark.blockNumber() == linenum: + return True + return False + + def clear(self, type=None): + """Removes all marks, or only all marks of the given type. if specified.""" + if type is None: + for type in types: + self._marks[type] = [] + else: + self._marks[type] = [] + self.marksChanged() + + def nextMark(self, cursor, type=None): + """Finds the first mark after the cursor (of the type if specified).""" + if type is None: + marks = [] + for type in types: + marks += self._marks[type] + # sort the marks on line number + marks.sort(key=lambda mark: mark.blockNumber()) + else: + marks = self._marks[type] + nums = [mark.blockNumber() for mark in marks] + index = bisect.bisect_right(nums, cursor.blockNumber()) + if index < len(nums): + return QTextCursor(marks[index].block()) + + def previousMark(self, cursor, type=None): + """Finds the first mark before the cursor (of the type if specified).""" + if type is None: + marks = [] + for type in types: + marks += self._marks[type] + # sort the marks on line number + marks.sort(key=lambda mark: mark.blockNumber()) + else: + marks = self._marks[type] + nums = [mark.blockNumber() for mark in marks] + index = bisect.bisect_left(nums, cursor.blockNumber()) + if index > 0: + return QTextCursor(marks[index-1].block()) + + def load(self): + """Loads the marks from the metainfo.""" + self._marks = dict((type, []) for type in types) + marks = metainfo.info(self.document()).bookmarks + try: + d = json.loads(marks) or {} + except ValueError: + return # No JSON object could be decoded + for type in types: + self._marks[type] = [QTextCursor(self.document().findBlockByNumber(num)) for num in d.get(type, [])] + self.marksChanged() + + def save(self): + """Saves the marks to the metainfo.""" + d = {} + for type in types: + d[type] = lines = [] + for mark in self._marks[type]: + linenum = mark.blockNumber() + if linenum not in lines: + lines.append(linenum) + metainfo.info(self.document()).bookmarks = json.dumps(d) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/bugreport.py frescobaldi-2.0.0/frescobaldi_app/bugreport.py --- frescobaldi-1.2.0/frescobaldi_app/bugreport.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/bugreport.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,80 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Functions to compose a bugreport via e-mail and to get version information. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QUrl + +import helpers +import info + + +def versionInfo(): + """Returns version and platform information as a dict for debugging purposes.""" + try: + import sip + sip_version = sip.SIP_VERSION_STR + except (ImportError, NameError): + sip_version = "unknown" + + try: + import PyQt4.QtCore + pyqt_version = PyQt4.QtCore.PYQT_VERSION_STR + except (ImportError, NameError): + pyqt_version = "unknown" + + try: + qt_version = PyQt4.QtCore.QT_VERSION_STR + except NameError: + qt_version = "unknown" + + try: + import platform + python_version = platform.python_version() + osname = platform.platform() + except (ImportError, NameError): + python_version = "unknown" + osname = "unknown" + + return locals() + + +def versionInfoString(): + """Returns the information from versionInfo() formatted as a terse string.""" + return ( + "Python: {python_version} -- " + "Qt: {qt_version} -- " + "PyQt4: {pyqt_version} -- " + "sip: {sip_version}\n" + "OS: {osname}".format(**versionInfo())) + + +def email(subject, body): + """Opens the e-mail composer with the given subject and body, with version information added to it.""" + subject = "[{0} {1}] {2}".format(info.appname, info.version, subject) + body = "{0}: {1}\n\n{2}\n\n{3}\n\n".format(info.appname, info.version, versionInfoString(), body) + url = QUrl("mailto:" + info.maintainer_email) + url.addQueryItem("subject", subject) + url.addQueryItem("body", body) + helpers.openUrl(url, "email") + diff -Nru frescobaldi-1.2.0/frescobaldi_app/charmap/__init__.py frescobaldi-2.0.0/frescobaldi_app/charmap/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/charmap/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/charmap/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,53 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The special characters tool. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QKeySequence + +import panels + + +class CharMap(panels.Panel): + def __init__(self, mainwindow): + super(CharMap, self).__init__(mainwindow) + self.hide() + self.toggleViewAction().setShortcut(QKeySequence("Meta+Alt+T")) + mainwindow.addDockWidget(Qt.LeftDockWidgetArea, self) + + def translateUI(self): + self.setWindowTitle(_("Special Characters")) + self.toggleViewAction().setText(_("Special Charac&ters")) + + def createWidget(self): + from . import widget + w = widget.Widget(self) + w.charmap.charmap.characterClicked.connect(self.insertCharacter) + return w + + def insertCharacter(self, character): + self.mainwindow().textCursor().insertText(character) + self.mainwindow().currentView().setFocus() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/charmap/widget.py frescobaldi-2.0.0/frescobaldi_app/charmap/widget.py --- frescobaldi-1.2.0/frescobaldi_app/charmap/widget.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/charmap/widget.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,122 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The special characters tool widget. +""" + +from __future__ import unicode_literals + +import sys +import itertools + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import widgets.charmap +import unicode_blocks +import listmodel + + +# avoid handling characters above 0xFFFF in narrow Python builds +_blocks = tuple(itertools.takewhile( + lambda block: block.end < sys.maxunicode, + unicode_blocks.blocks())) + + +class Widget(QWidget): + def __init__(self, tool): + super(Widget, self).__init__(tool) + + layout = QVBoxLayout() + self.setLayout(layout) + layout.setContentsMargins(0, 0, 0, 0) + + self.blockCombo = QComboBox() + self.charmap = CharMapWidget() + + layout.addWidget(self.blockCombo) + layout.addWidget(self.charmap) + + # size policy of combo + p = self.blockCombo.sizePolicy() + p.setHorizontalPolicy(QSizePolicy.Ignored) + self.blockCombo.setSizePolicy(p) + + # size policy of combo popup + p = self.blockCombo.view().sizePolicy() + p.setHorizontalPolicy(QSizePolicy.MinimumExpanding) + self.blockCombo.view().setSizePolicy(p) + + model = listmodel.ListModel(_blocks, + display = lambda b: b.name) + self.blockCombo.setModel(model) + + # load block setting + name = QSettings().value("charmaptool/last_block", "") + if name: + for i, b in enumerate(_blocks): + if b.name == name: + self.blockCombo.setCurrentIndex(i) + break + + self.blockCombo.activated[int].connect(self.updateBlock) + self.updateBlock() + + self.loadSettings() + app.settingsChanged.connect(self.loadSettings) + + def loadSettings(self): + s = QSettings() + s.beginGroup("charmaptool") + font = self.font() + family = s.value("fontfamily", "") + if family: + font.setFamily(family) + self.charmap.charmap.setDisplayFont(font) + size = float(s.value("fontsize", font.pointSizeF())) + self.charmap.charmap.setDisplayFontSizeF(size) + + def updateBlock(self): + i = self.blockCombo.currentIndex() + if 0 <= i < len(_blocks): + first, last, name = _blocks[i] + self.charmap.charmap.setRange(first, last) + QSettings().setValue("charmaptool/last_block", name) + + + + + +class CharMapWidget(QScrollArea): + def __init__(self, parent=None): + super(CharMapWidget, self).__init__(parent) + self.charmap = widgets.charmap.CharMap() + self.setWidget(self.charmap) + # TEMP + self.charmap.setRange(32, 1023) + self.charmap.setColumnCount(8) + + def resizeEvent(self, ev): + self.charmap.setColumnCount( + self.charmap.columnCountForWidth(ev.size().width())) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/colorize.py frescobaldi-2.0.0/frescobaldi_app/colorize.py --- frescobaldi-1.2.0/frescobaldi_app/colorize.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/colorize.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,75 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Colorize a string as HTML using a ly.lex State and highlightformats. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QTextFormat + +import ly.lex +import highlighter +import textformats + + +__all__ = ['colorize'] + + +def colorize(text, state=None): + """Converts the text to HTML using the specified or guessed state.""" + if state is None: + state = ly.lex.guessState(text) + result = [] + h = highlighter.highlightFormats() + d = textformats.formatData('editor') + result.append('

'.format(
+        d.baseColors['text'].name(), d.baseColors['background'].name(),
+        d.font.family(), d.font.pointSizeF()))
+    for t in state.tokens(text):
+        f = h.format(t)
+        if f:
+            s = style(f)
+            if s:
+                result.append('{1}'.format(s, escape(t)))
+                continue
+        result.append(escape(t))
+    result.append('
') + return ''.join(result) + + +def escape(text): + return text.replace('&', '&').replace('<', '<').replace('>', '>') + + +def style(f): + s = [] + if f.hasProperty(QTextFormat.ForegroundBrush): + s.append('color: {0};'.format(f.foreground().color().name())) + if f.hasProperty(QTextFormat.BackgroundBrush): + s.append('color: {0};'.format(f.background().color().name())) + if f.hasProperty(QTextFormat.FontWeight): + s.append('font-weight: {0};'.format(f.fontWeight() * 8)) + if f.fontItalic(): + s.append('font-style: italic;') + return ' '.join(s) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/completionmodel.py frescobaldi-2.0.0/frescobaldi_app/completionmodel.py --- frescobaldi-1.2.0/frescobaldi_app/completionmodel.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/completionmodel.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,78 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A simple persistent completion model (e.g. for QLineEdits). +""" + +import atexit + +from PyQt4.QtCore import QSettings +from PyQt4.QtGui import QStringListModel + +_models = {} + + +def model(key): + """Returns the model for the given settings key. + + A Model is instantiated if necessary. + The model remains alive until the application exits, at which + moment the data is saved. + + """ + try: + return _models[key] + except KeyError: + m = _models[key] = Model(key) + atexit.register(m.save) + return m + + +class Model(QStringListModel): + """A simple model providing a list of strings for a QCompleter. + + Instantiate the model with a QSettings key, e.g. 'somegroup/names'. + Use the addString() method to add a string. + + """ + def __init__(self, key): + super(Model, self).__init__() + self.key = key + self._changed = False + self.load() + + def load(self): + self.setStringList(sorted(QSettings().value(self.key) or [])) + self._changed = False + + def save(self): + if self._changed: + QSettings().setValue(self.key, self.stringList()) + self._changed = False + + def addString(self, text): + strings = self.stringList() + if text not in strings: + strings.append(text) + strings.sort() + self.setStringList(strings) + self._changed = True + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/convert_ly.py frescobaldi-2.0.0/frescobaldi_app/convert_ly.py --- frescobaldi-1.2.0/frescobaldi_app/convert_ly.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/convert_ly.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,275 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Updates a document using convert-ly. +""" + +from __future__ import unicode_literals + +import difflib +import textwrap +import os +import re +import subprocess + +from PyQt4.QtCore import QSettings, QSize +from PyQt4.QtGui import ( + QCheckBox, QDialog, QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, + QTabWidget, QTextBrowser, QVBoxLayout) + +import app +import util +import widgets +import lilypondinfo +import documentinfo +import textformats + + +def convert(mainwindow): + """Shows the dialog.""" + dlg = Dialog(mainwindow) + dlg.addAction(mainwindow.actionCollection.help_whatsthis) + dlg.setLilyPondInfo(lilypondinfo.preferred()) + dlg.setDocument(mainwindow.currentDocument()) + dlg.setModal(True) + dlg.show() + dlg.run() + if dlg.exec_(): + c = mainwindow.textCursor() + c.select(c.Document) + text = dlg.convertedText() + if dlg.copyCheck.isChecked(): + msgs = textwrap.fill(dlg.messages.toPlainText()) + text += '\n\n%{\n' + msgs + '\n%}\n' + c.insertText(text) + dlg.deleteLater() + + +class Dialog(QDialog): + def __init__(self, parent=None): + super(Dialog, self).__init__(parent) + + self._info = None + self._text = '' + self._convertedtext = '' + self._encoding = None + + self.fromVersionLabel = QLabel() + self.fromVersion = QLineEdit() + self.reason = QLabel() + self.toVersionLabel = QLabel() + self.toVersion = QLineEdit() + self.messages = QTextBrowser() + self.diff = QTextBrowser(lineWrapMode=QTextBrowser.NoWrap) + self.copyCheck = QCheckBox(checked= + QSettings().value('convert_ly/copy_messages', True) not in (False, 'false')) + self.tabw = QTabWidget() + + self.tabw.addTab(self.messages, '') + self.tabw.addTab(self.diff, '') + + self.buttons = QDialogButtonBox( + QDialogButtonBox.Reset | + QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + self.buttons.accepted.connect(self.accept) + self.buttons.rejected.connect(self.reject) + self.buttons.button(QDialogButtonBox.Reset).clicked.connect(self.run) + + layout = QVBoxLayout() + self.setLayout(layout) + + top = QHBoxLayout() + top.addWidget(self.fromVersionLabel) + top.addWidget(self.fromVersion) + top.addWidget(self.reason) + top.addStretch() + top.addWidget(self.toVersionLabel) + top.addWidget(self.toVersion) + + layout.addLayout(top) + layout.addWidget(self.tabw) + layout.addWidget(self.copyCheck) + layout.addWidget(widgets.Separator()) + layout.addWidget(self.buttons) + + app.translateUI(self) + util.saveDialogSize(self, 'convert_ly/dialog/size', QSize(600, 300)) + app.settingsChanged.connect(self.readSettings) + self.readSettings() + self.finished.connect(self.saveCopyCheckSetting) + + def translateUI(self): + self.fromVersionLabel.setText(_("From version:")) + self.toVersionLabel.setText(_("To version:")) + self.copyCheck.setText(_("Save convert-ly messages in document")) + self.copyCheck.setToolTip(_( + "If checked, the messages of convert-ly are appended as a " + "comment to the end of the document.")) + self.tabw.setTabText(0, _("&Messages")) + self.tabw.setTabText(1, _("&Changes")) + self.buttons.button(QDialogButtonBox.Reset).setText(_("Run Again")) + self.setCaption() + + def saveCopyCheckSetting(self): + QSettings().setValue('convert_ly/copy_messages', self.copyCheck.isChecked()) + + def readSettings(self): + font = textformats.formatData('editor').font + self.diff.setFont(font) + + def setCaption(self): + version = self._info and self._info.versionString or _("") + title = _("Convert-ly from LilyPond {version}").format(version=version) + self.setWindowTitle(app.caption(title)) + + def setLilyPondInfo(self, info): + self._info = info + self.setCaption() + self.toVersion.setText(info.versionString) + self.setConvertedText() + + def setConvertedText(self, text=''): + self._convertedtext = text + self.buttons.button(QDialogButtonBox.Ok).setEnabled(bool(text)) + if text: + self.diff.setHtml(makeHtmlDiff(self._text, text)) + else: + self.diff.clear() + + def convertedText(self): + return self._convertedtext or '' + + def setDocument(self, doc): + v = documentinfo.info(doc).versionString() + if v: + self.fromVersion.setText(v) + self.reason.setText(_("(set in document)")) + else: + self.reason.clear() + self._text = doc.toPlainText() + self._encoding = doc.encoding() or 'UTF-8' + self.setConvertedText() + + def run(self): + """Runs convert-ly (again).""" + fromVersion = self.fromVersion.text() + toVersion = self.toVersion.text() + if not fromVersion or not toVersion: + self.messages.setPlainText(_( + "Both 'from' and 'to' versions need to be set.")) + return + info = self._info + convert_ly = os.path.join(info.bindir, info.convert_ly) + command = [convert_ly, '-f', fromVersion, '-t', toVersion, '-'] + + with util.busyCursor(): + try: + proc = subprocess.Popen(command, + stdin = subprocess.PIPE, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE) + out, err = proc.communicate(self._text.encode(self._encoding)) + except OSError as e: + self.messages.setPlainText(_( + "Could not start {convert_ly}:\n\n" + "{message}\n").format(convert_ly = convert_ly, message = e)) + return + self.messages.setPlainText(err.decode('UTF-8')) + self.setConvertedText(out.decode('UTF-8')) + if not out or self._convertedtext == self._text: + self.messages.append('\n' + _("The document has not been changed.")) + + +def makeHtmlDiff(old, new): + table = difflib.HtmlDiff(wrapcolumn=100).make_table( + old.splitlines(), new.splitlines(), + _("Current Document"), _("Converted Document"), True, 3) + # overcome a QTextBrowser limitation (no text-align css support) + table = table.replace('\s*', '
', table) + legend = _legend.format( + colors = _("Colors:"), + added = _("Added"), + changed = _("Changed"), + deleted = _("Deleted"), + links = _("Links:"), + first_change = _("First Change"), + next_change = _("Next Change"), + top = _("Top")) + return _htmltemplate.format(diff = table, css = _css, legend = legend) + + +_htmltemplate = """ + + + + + + + + + {diff} + {legend} + +""" + +_css = """ + table.diff { + border:medium; + } + .diff_header { + background-color:#e0e0e0; + } + td.diff_header { + text-align:right; + padding-right: 10px; + color: #606060; + } + .diff_next { + background-color:#c0c0c0; + padding-left: 4px; + padding-right: 4px; + } + .diff_add { + background-color:#aaffaa; + } + .diff_chg { + background-color:#ffff77; + } + .diff_sub { + background-color:#ffaaaa; + } +""" + +_legend = """

+{colors} + {added} , + {changed} , + {deleted}  +
+{links} +f: {first_change}, +n: {next_change}, +t: {top} +

+""" + diff -Nru frescobaldi-1.2.0/frescobaldi_app/css/__init__.py frescobaldi-2.0.0/frescobaldi_app/css/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/css/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/css/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,39 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Resources for styling some widgets. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QDir + +QDir.addSearchPath('css', __path__[0]) + + +lcd_screen = """ +* { + border-width: 4 3 2 4; + border-image: url('css:lcd-borders.png') repeat; + background-image: url('css:lcd-background.png') repeat; + color: #151B19; +} +""" + Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/css/lcd-background.png and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/css/lcd-background.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/css/lcd-borders.png and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/css/lcd-borders.png differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/cursortools.py frescobaldi-2.0.0/frescobaldi_app/cursortools.py --- frescobaldi-1.2.0/frescobaldi_app/cursortools.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/cursortools.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,211 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Function manipulating QTextCursors and their selections. +""" + +from __future__ import unicode_literals + +import contextlib + +from PyQt4.QtGui import QTextCursor + + +def block(cursor): + """Returns the cursor's block. + + If the cursor has a selection, returns the block the selection starts in + (regardless of the cursor's position()). + + """ + if cursor.hasSelection(): + return cursor.document().findBlock(cursor.selectionStart()) + return cursor.block() + + +def allBlocks(document): + """Yields all blocks of the document.""" + block = document.firstBlock() + while block.isValid(): + yield block + block = block.next() + + +def selectedBlocks(cursor): + """Yields the block(s) containing the cursor or selection.""" + d = cursor.document() + block = d.findBlock(cursor.selectionStart()) + end = d.findBlock(cursor.selectionEnd()) + while True: + yield block + if block == end: + break + block = block.next() + + +@contextlib.contextmanager +def editBlock(cursor, joinPrevious = False): + """Returns a context manager to perform operations on cursor as a single undo-item.""" + cursor.joinPreviousEditBlock() if joinPrevious else cursor.beginEditBlock() + try: + yield + finally: + cursor.endEditBlock() + + +@contextlib.contextmanager +def keepSelection(cursor, edit=None): + """Performs operations inside the selection and restore the selection afterwards. + + If edit is given, call setTextCursor(cursor) on the Q(Plain)TextEdit afterwards. + + """ + start, end, pos = cursor.selectionStart(), cursor.selectionEnd(), cursor.position() + cur2 = QTextCursor(cursor) + cur2.setPosition(end) + + try: + yield + finally: + if pos == start: + cursor.setPosition(cur2.position()) + cursor.setPosition(start, QTextCursor.KeepAnchor) + else: + cursor.setPosition(start) + cursor.setPosition(cur2.position(), QTextCursor.KeepAnchor) + if edit: + edit.setTextCursor(cursor) + + +def stripSelection(cursor): + """Adjusts the selection to not include whitespace on both ends.""" + if not cursor.hasSelection(): + return + text = cursor.selection().toPlainText() + if text.isspace(): + return + start, end = cursor.selectionStart(), cursor.selectionEnd() + atStart = start == cursor.position() + + s, e = 0, -1 + while text[s].isspace(): + s += 1 + while text[e].isspace(): + e -= 1 + start += s + end += e + 1 + if atStart: + start, end = end, start + cursor.setPosition(start) + cursor.setPosition(end, QTextCursor.KeepAnchor) + + +def insertText(cursor, text): + """Inserts text and then selects all inserted text in the cursor.""" + pos = cursor.selectionStart() + cursor.insertText(text) + new = cursor.position() + cursor.setPosition(pos) + cursor.setPosition(new, QTextCursor.KeepAnchor) + + +def isBlankBefore(cursor): + """Returns True if there's no text on the current line before the cursor.""" + if cursor.hasSelection(): + return False + if cursor.atBlockStart(): + return True + c = QTextCursor(cursor) + c.movePosition(QTextCursor.StartOfBlock, QTextCursor.KeepAnchor) + return c.selection().toPlainText().isspace() + + +def isBlankAfter(cursor): + """Returns True if there's no text on the current line after the cursor.""" + if cursor.hasSelection(): + return False + if cursor.atBlockEnd(): + return True + c = QTextCursor(cursor) + c.movePosition(QTextCursor.EndOfBlock, QTextCursor.KeepAnchor) + return c.selection().toPlainText().isspace() + + +def isBlankLine(cursor): + """Returns True if the cursor is on an empty or blank line.""" + text = cursor.block().text() + return not text or text.isspace() + + +def stripIndent(cursor): + """Moves the cursor in its block to the first non-space character.""" + text = cursor.block().text() + pos = len(text) - len(text.lstrip()) + cursor.setPosition(cursor.block().position() + pos) + + +class Editor(object): + """A context manager that stores edits until it is exited. + + The edits will not be applied if the context is exited with an exception. + + """ + def __init__(self): + self.edits = [] + + def __enter__(self): + return self + + def insertText(self, cursor, text): + """Stores an insertText operation.""" + self.edits.append((cursor, text)) + + def removeSelectedText(self, cursor): + """Stores a removeSelectedText operation.""" + self.edits.append((cursor, "")) + + def apply(self): + """Applies and clears the stored edits.""" + if self.edits: + # don't use all the cursors directly, but copy and sort the ranges + # otherwise inserts would move the cursor for adjacent edits. + # We could also just start with the first, but that would require + # all cursors to update their position during the process, which + # notably slows down large edits (as there are already many cursors + # used by the point and click feature). + # We could also use QTextCursor.keepPositionOnInsert but that is + # only available in the newest PyQt4 versions. + edits = [(cursor.selectionStart(), cursor.selectionEnd(), text) + for cursor, text in self.edits] + edits.sort(key=lambda e: e[0]) # dont reorder edits at same startpos + edits.reverse() + cursor = self.edits[0][0] + del self.edits[:] + with editBlock(cursor): + for start, end, text in edits: + cursor.setPosition(end) + cursor.setPosition(start, QTextCursor.KeepAnchor) + cursor.insertText(text) + + def __exit__(self, exc_type, exc_val, exc_tb): + if exc_type is None: + self.apply() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/cut_assign.py frescobaldi-2.0.0/frescobaldi_app/cut_assign.py --- frescobaldi-1.2.0/frescobaldi_app/cut_assign.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/cut_assign.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,94 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Cut selected text and assign it to a LilyPond variable. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QTextCursor + +import cursortools +import tokeniter +import ly.lex.lilypond +import metainfo +import indent +import inputdialog + + +def cut_assign(cursor): + """Cuts selected text and assigns it to a LilyPond variable.""" + # ask the variable name + name = inputdialog.getText(None, _("Cut and Assign"), _( + "Please enter the name for the variable to assign the selected " + "text to:"), regexp="[A-Za-z]+") + if not name: + return + + cursortools.stripSelection(cursor) + + # determine state at cursor + block = cursortools.block(cursor) + state = tokeniter.state(block) + for t in tokeniter.partition(cursor).left: + state.follow(t) + + mode = "" + for p in state.parsers(): + if isinstance(p, ly.lex.lilypond.ParseInputMode): + if isinstance(p, ly.lex.lilypond.ParseLyricMode): + mode = " \\lyricmode" + elif isinstance(p, ly.lex.lilypond.ParseChordMode): + mode = " \\chordmode" + elif isinstance(p, ly.lex.lilypond.ParseFigureMode): + mode = " \\figuremode" + elif isinstance(p, ly.lex.lilypond.ParseDrumMode): + mode = " \\drummode" + break + + # find insertion place: + found = False + while block.previous().isValid(): + block = block.previous() + state = tokeniter.state(block) + if isinstance(state.parser(), ly.lex.lilypond.ParseGlobal): + found = True + break + tokens = tokeniter.tokens(block) + for t in tokens: + if isinstance(t, ly.lex.lilypond.Name): + found = True + break + elif not isinstance(t, (ly.lex.Space, ly.lex.Comment)): + break + if found: + break + insert = QTextCursor(block) + text = cursor.selection().toPlainText() + space = '\n' if '\n' in text else ' ' + text = ''.join((name, ' =', mode, ' {', space, text, space, '}\n\n')) + with cursortools.editBlock(cursor): + cursor.insertText('\\' + name) + if metainfo.info(cursor.document()).autoindent: + indent.insertText(insert, text) + else: + insert.insertText(text) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/docbrowser/browser.py frescobaldi-2.0.0/frescobaldi_app/docbrowser/browser.py --- frescobaldi-1.2.0/frescobaldi_app/docbrowser/browser.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/docbrowser/browser.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,227 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The browser widget for the help browser. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import * +from PyQt4.QtGui import * +from PyQt4.QtWebKit import * + +import app +import helpers +import widgets.lineedit +import lilypondinfo +import lilydoc.manager +import lilydoc.network + + +class Browser(QWidget): + """We use an embedded QMainWindow so we can add a toolbar nicely.""" + def __init__(self, dockwidget): + super(Browser, self).__init__(dockwidget) + + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + + self.toolbar = tb = QToolBar() + self.webview = QWebView() + self.chooser = QComboBox(sizeAdjustPolicy=QComboBox.AdjustToContents) + self.search = SearchEntry(maximumWidth=200) + + layout.addWidget(self.toolbar) + layout.addWidget(self.webview) + + ac = dockwidget.actionCollection + ac.help_back.triggered.connect(self.webview.back) + ac.help_forward.triggered.connect(self.webview.forward) + ac.help_home.triggered.connect(self.showHomePage) + + self.webview.page().setNetworkAccessManager(lilydoc.network.accessmanager()) + self.webview.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) + self.webview.page().linkClicked.connect(self.openUrl) + self.webview.page().setForwardUnsupportedContent(True) + self.webview.page().unsupportedContent.connect(self.slotUnsupported) + self.webview.urlChanged.connect(self.slotUrlChanged) + + tb.addAction(ac.help_back) + tb.addAction(ac.help_forward) + tb.addSeparator() + tb.addAction(ac.help_home) + tb.addSeparator() + tb.addWidget(self.chooser) + tb.addWidget(self.search) + + self.chooser.activated[int].connect(self.showHomePage) + self.search.textEdited.connect(self.slotSearchChanged) + self.search.returnPressed.connect(self.slotSearchReturnPressed) + dockwidget.mainwindow().iconSizeChanged.connect(self.updateToolBarSettings) + dockwidget.mainwindow().toolButtonStyleChanged.connect(self.updateToolBarSettings) + + self.loadDocumentation() + self.showInitialPage() + app.settingsChanged.connect(self.loadDocumentation) + app.translateUI(self) + + def keyPressEvent(self, ev): + if ev.text() == "/": + self.search.setFocus() + else: + super(Browser, self).keyPressEvent(ev) + + def translateUI(self): + try: + self.search.setPlaceHolderText(_("Search...")) + except AttributeError: + pass # not in Qt 4.6 + + def showInitialPage(self): + """Shows the preferred start page. + + If a local documentation instance already has a suitable version, + just loads it. Otherwise connects to the allLoaded signal, that is + emitted when all the documentation instances have loaded their version + information and then shows the start page (if another page wasn't yet + loaded). + + """ + if self.webview.url().isEmpty(): + docs = lilydoc.manager.docs() + version = lilypondinfo.preferred().version + index = -1 + if version: + for num, doc in enumerate(docs): + if doc.version() is not None and doc.version() >= version: + index = num # a suitable documentation is found + break + if index == -1: + # nothing found (or LilyPond version not available), + # wait for loading or show the most recent version + if not lilydoc.manager.loaded(): + lilydoc.manager.allLoaded.connect(self.showInitialPage) + return + index = len(docs) - 1 + self.chooser.setCurrentIndex(index) + self.showHomePage() + + def loadDocumentation(self): + """Puts the available documentation instances in the combobox.""" + i = self.chooser.currentIndex() + self.chooser.clear() + for doc in lilydoc.manager.docs(): + v = doc.versionString() + if doc.isLocal(): + t = _("(local)") + else: + t = _("({hostname})").format(hostname=doc.url().host()) + self.chooser.addItem("{0} {1}".format(v or _(""), t)) + self.chooser.setCurrentIndex(i) + if not lilydoc.manager.loaded(): + lilydoc.manager.allLoaded.connect(self.loadDocumentation, -1) + return + + def updateToolBarSettings(self): + mainwin = self.parentWidget().mainwindow() + self.toolbar.setIconSize(mainwin.iconSize()) + self.toolbar.setToolButtonStyle(mainwin.toolButtonStyle()) + + def showManual(self): + """Invoked when the user presses F1.""" + self.slotHomeFrescobaldi() # TEMP + + def slotUrlChanged(self): + ac = self.parentWidget().actionCollection + ac.help_back.setEnabled(self.webview.history().canGoBack()) + ac.help_forward.setEnabled(self.webview.history().canGoForward()) + + def openUrl(self, url): + if url.path().endswith(('.ily', '.lyi', '.ly')): + self.sourceViewer().showReply(lilydoc.network.get(url)) + else: + self.webview.load(url) + + def slotUnsupported(self, reply): + helpers.openUrl(reply.url()) + + def slotSearchChanged(self): + text = self.search.text() + if not text.startswith(':'): + self.webview.page().findText(text, QWebPage.FindWrapsAroundDocument) + + def slotSearchReturnPressed(self): + text = self.search.text() + if not text.startswith(':'): + self.slotSearchChanged() + else: + pass # TODO: implement full doc search + + def sourceViewer(self): + try: + return self._sourceviewer + except AttributeError: + from . import sourceviewer + self._sourceviewer = sourceviewer.SourceViewer(self) + return self._sourceviewer + + def showHomePage(self): + """Shows the homepage of the LilyPond documentation.""" + i = self.chooser.currentIndex() + if i < 0: + i = 0 + doc = lilydoc.manager.docs()[i] + + url = doc.home() + if doc.isLocal(): + path = url.toLocalFile() + langs = lilydoc.network.langs() + if langs: + for lang in langs: + if os.path.exists(path + '.' + lang + '.html'): + path += '.' + lang + break + url = QUrl.fromLocalFile(path + '.html') + self.webview.load(url) + + +class SearchEntry(widgets.lineedit.LineEdit): + """A line edit that clears itself when ESC is pressed.""" + def keyPressEvent(self, ev): + if ev.key() == Qt.Key_Escape: + if self.text(): + self.clear() + else: + webview = self.parentWidget().parentWidget().webview + webview.setFocus() + webview.page().findText(None) + elif any(ev.matches(key) for key in ( + QKeySequence.MoveToNextLine, QKeySequence.MoveToPreviousLine, + QKeySequence.MoveToNextPage, QKeySequence.MoveToPreviousPage, + )): + webview = self.parentWidget().parentWidget().webview + webview.keyPressEvent(ev) + else: + super(SearchEntry, self).keyPressEvent(ev) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/docbrowser/__init__.py frescobaldi-2.0.0/frescobaldi_app/docbrowser/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/docbrowser/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/docbrowser/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,87 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Help browser dockwidget. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QAction, QKeySequence + +import actioncollection +import actioncollectionmanager +import icons +import panels + + +class HelpBrowser(panels.Panel): + def __init__(self, mainwindow): + super(HelpBrowser, self).__init__(mainwindow) + self.toggleViewAction().setShortcut(QKeySequence("Meta+Alt+D")) + self.hide() + mainwindow.addDockWidget(Qt.RightDockWidgetArea, self) + ac = self.actionCollection = Actions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + ac.help_lilypond_doc.triggered.connect(self.activate) + + def translateUI(self): + self.setWindowTitle(_("Documentation Browser")) + self.toggleViewAction().setText(_("&Documentation Browser")) + + def createWidget(self): + from . import browser + return browser.Browser(self) + + def activate(self): + super(HelpBrowser, self).activate() + self.widget().webview.setFocus() + + +class Actions(actioncollection.ActionCollection): + name = "docbrowser" + + def title(self): + return _("Documentation Browser") + + def createActions(self, parent=None): + self.help_back = QAction(parent) + self.help_forward = QAction(parent) + self.help_home = QAction(parent) + self.help_lilypond_doc= QAction(parent) + self.help_lilypond_context = QAction(parent) + + self.help_back.setIcon(icons.get("go-previous")) + self.help_forward.setIcon(icons.get("go-next")) + self.help_home.setIcon(icons.get("go-home")) + self.help_lilypond_doc.setIcon(icons.get("lilypond-run")) + + self.help_lilypond_doc.setShortcut(QKeySequence("F9")) + self.help_lilypond_context.setShortcut(QKeySequence("Shift+F9")) + + def translateUI(self): + self.help_back.setText(_("Back")) + self.help_forward.setText(_("Forward")) + # L10N: Home page of the LilyPond manual + self.help_home.setText(_("Home")) + self.help_lilypond_doc.setText(_("&LilyPond Documentation")) + self.help_lilypond_context.setText(_("&Contextual LilyPond Help")) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/docbrowser/sourceviewer.py frescobaldi-2.0.0/frescobaldi_app/docbrowser/sourceviewer.py --- frescobaldi-1.2.0/frescobaldi_app/docbrowser/sourceviewer.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/docbrowser/sourceviewer.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,83 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A dialog to view LilyPond source. +""" + +from __future__ import unicode_literals + + +from PyQt4.QtCore import QSettings, QSize, Qt +from PyQt4.QtGui import QDialog, QLabel, QSizePolicy, QTextBrowser, QVBoxLayout + + +import app +import util +import highlighter +import textformats + + +class SourceViewer(QDialog): + def __init__(self, browser): + super(SourceViewer, self).__init__(browser.parentWidget()) + + layout = QVBoxLayout() + layout.setContentsMargins(4, 4, 4, 4) + self.setLayout(layout) + + self.urlLabel = QLabel(wordWrap=True) + layout.addWidget(self.urlLabel) + self.textbrowser = QTextBrowser() + layout.addWidget(self.textbrowser) + + self.urlLabel.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) + self.textbrowser.setLineWrapMode(QTextBrowser.NoWrap) + + app.settingsChanged.connect(self.readSettings) + self.readSettings() + app.translateUI(self) + util.saveDialogSize(self, "helpbrowser/sourceviewer/size", QSize(400, 300)) + + def translateUI(self): + self.setWindowTitle(app.caption(_("LilyPond Source"))) + + def readSettings(self): + data = textformats.formatData('editor') + self.textbrowser.setPalette(data.palette()) + self.textbrowser.setFont(data.font) + highlighter.highlight(self.textbrowser.document()) + + def showReply(self, reply): + reply.setParent(self) + self.urlLabel.setText(reply.url().toString()) + reply.finished.connect(self.loadingFinished) + self._reply = reply + self.textbrowser.clear() + self.show() + + def loadingFinished(self): + data = self._reply.readAll() + self._reply.close() + self._reply.deleteLater() + del self._reply + self.textbrowser.clear() + self.textbrowser.setText(unicode(data, 'utf-8', 'replace')) + highlighter.highlight(self.textbrowser.document()) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/doclist/__init__.py frescobaldi-2.0.0/frescobaldi_app/doclist/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/doclist/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/doclist/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,47 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Documents list tool. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QKeySequence + +import panels + +class DocumentList(panels.Panel): + def __init__(self, mainwindow): + super(DocumentList, self).__init__(mainwindow) + self.hide() + self.toggleViewAction().setShortcut(QKeySequence("Meta+Alt+F")) + mainwindow.addDockWidget(Qt.LeftDockWidgetArea, self) + + def translateUI(self): + self.setWindowTitle(_("Documents")) + self.toggleViewAction().setText(_("Docum&ents")) + + def createWidget(self): + from . import widget + w = widget.Widget(self) + return w + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/doclist/widget.py frescobaldi-2.0.0/frescobaldi_app/doclist/widget.py --- frescobaldi-1.2.0/frescobaldi_app/doclist/widget.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/doclist/widget.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,166 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The documents list tool widget. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import util +import icons +import jobmanager + + +def path(url): + """Returns the path, as a string, of the url to group documents. + + Returns None if the document is nameless. + + """ + if url.isEmpty(): + return None + elif url.toLocalFile(): + return util.homify(os.path.dirname(url.toLocalFile())) + else: + return url.resolved(QUrl('.')).toString(QUrl.RemoveUserInfo) + + +class Widget(QTreeWidget): + def __init__(self, tool): + super(Widget, self).__init__(tool, headerHidden=True) + self.setAlternatingRowColors(True) + app.documentCreated.connect(self.addDocument) + app.documentClosed.connect(self.removeDocument) + app.documentLoaded.connect(self.setDocumentStatus) + app.documentModificationChanged.connect(self.setDocumentStatus) + app.documentUrlChanged.connect(self.setDocumentStatus) + app.jobStarted.connect(self.setDocumentStatus) + app.jobFinished.connect(self.setDocumentStatus) + tool.mainwindow().currentDocumentChanged.connect(self.selectDocument) + self.currentItemChanged.connect(self.slotItemActivated) + app.settingsChanged.connect(self.populate) + self.populate() + + def populate(self): + self._group = QSettings().value( + "document_list/group_by_folder", False) in (True, "true") + self.setRootIsDecorated(not self._group) + self.clear() + self._paths = {} + self._items = {} + with util.signalsBlocked(self): + # add all existing docs to the list + for d in app.documents: + self.addDocument(d) + doc = self.parentWidget().mainwindow().currentDocument() + if doc: + self.selectDocument(doc) + + def addDocument(self, doc): + self._items[doc] = QTreeWidgetItem(self) + self.setDocumentStatus(doc) + + def removeDocument(self, doc): + i = self._items.pop(doc) + if not self._group: + self.takeTopLevelItem(self.indexOfTopLevelItem(i)) + return + parent = i.parent() + parent.takeChild(parent.indexOfChild(i)) + if parent.childCount() == 0: + self.takeTopLevelItem(self.indexOfTopLevelItem(parent)) + del self._paths[parent._path] + + def selectDocument(self, doc): + self.setCurrentItem(self._items[doc]) + + def setDocumentStatus(self, doc): + i = self._items[doc] + # set properties according to document + i.setText(0, doc.documentName()) + if jobmanager.isRunning(doc): + icon = 'lilypond-run' + elif doc.isModified(): + icon = 'document-save' + else: + icon = 'text-plain' + i.setIcon(0, icons.get(icon)) + i.setToolTip(0, path(doc.url())) + # handle ordering in groups if desired + if self._group: + self.groupDocument(doc) + else: + self.sortItems(0, Qt.AscendingOrder) + + def groupDocument(self, doc): + """Called, if grouping is enabled, to group the document.""" + i = self._items[doc] + p = path(doc.url()) + new_parent = self._paths.get(p) + if new_parent is None: + new_parent = self._paths[p] = QTreeWidgetItem(self) + new_parent._path = p + new_parent.setText(0, p or _("Untitled")) + new_parent.setIcon(0, icons.get("folder-open")) + new_parent.setFlags(Qt.ItemIsEnabled) + new_parent.setExpanded(True) + self.sortItems(0, Qt.AscendingOrder) + old_parent = i.parent() + if old_parent == new_parent: + return + if old_parent: + old_parent.takeChild(old_parent.indexOfChild(i)) + if old_parent.childCount() == 0: + self.takeTopLevelItem(self.indexOfTopLevelItem(old_parent)) + del self._paths[old_parent._path] + else: + self.takeTopLevelItem(self.indexOfTopLevelItem(i)) + new_parent.addChild(i) + new_parent.sortChildren(0, Qt.AscendingOrder) + + def document(self, item): + """Returns the document for item.""" + for d, i in self._items.items(): + if i == item: + return d + + def slotItemActivated(self, item): + doc = self.document(item) + if doc: + self.parentWidget().mainwindow().setCurrentDocument(doc) + + def contextMenuEvent(self, ev): + item = self.itemAt(ev.pos()) + if item: + doc = self.document(item) + if doc: + import documentcontextmenu + mainwindow = self.parentWidget().mainwindow() + menu = documentcontextmenu.DocumentContextMenu(mainwindow) + menu.exec_(doc, ev.globalPos()) + menu.deleteLater() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/documentactions.py frescobaldi-2.0.0/frescobaldi_app/documentactions.py --- frescobaldi-1.2.0/frescobaldi_app/documentactions.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/documentactions.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,131 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages some actions and per-document preferences that are set in metainfo. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QAction, QKeySequence + +import actioncollection +import actioncollectionmanager +import highlighter +import metainfo +import plugin +import icons + + +def get(mainwindow): + """Returns the DocumentActions instance for the specified MainWindow.""" + return DocumentActions.instance(mainwindow) + + +class DocumentActions(plugin.MainWindowPlugin): + def __init__(self, mainwindow): + ac = self.actionCollection = Actions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + ac.edit_cut_assign.triggered.connect(self.cutAssign) + ac.view_highlighting.triggered.connect(self.toggleHighlighting) + ac.tools_indent_auto.triggered.connect(self.toggleAutoIndent) + ac.tools_indent_indent.triggered.connect(self.reIndent) + ac.tools_reformat.triggered.connect(self.reFormat) + ac.tools_convert_ly.triggered.connect(self.convertLy) + mainwindow.currentDocumentChanged.connect(self.updateDocActions) + mainwindow.selectionStateChanged.connect(self.updateSelectionActions) + + def updateDocActions(self, doc): + minfo = metainfo.info(doc) + if minfo.highlighting: + highlighter.highlighter(doc) + ac = self.actionCollection + ac.view_highlighting.setChecked(minfo.highlighting) + ac.tools_indent_auto.setChecked(minfo.autoindent) + + def updateSelectionActions(self, selection): + self.actionCollection.edit_cut_assign.setEnabled(selection) + + def currentView(self): + return self.mainwindow().currentView() + + def currentDocument(self): + return self.mainwindow().currentDocument() + + def updateOtherDocActions(self): + """Calls updateDocActions() in other instances that show same document.""" + doc = self.currentDocument() + for i in self.instances(): + if i is not self and i.currentDocument() == doc: + i.updateDocActions(doc) + + def cutAssign(self): + import cut_assign + cut_assign.cut_assign(self.currentView().textCursor()) + + def toggleAutoIndent(self): + minfo = metainfo.info(self.currentDocument()) + minfo.autoindent = not minfo.autoindent + self.updateOtherDocActions() + + def reIndent(self): + import indent + indent.reIndent(self.currentView().textCursor()) + + def reFormat(self): + import reformat + reformat.reformat(self.currentView().textCursor()) + + def toggleHighlighting(self): + doc = self.currentDocument() + minfo = metainfo.info(doc) + minfo.highlighting = not minfo.highlighting + highlighter.highlighter(doc).setHighlighting(minfo.highlighting) + self.updateOtherDocActions() + + def convertLy(self): + import convert_ly + convert_ly.convert(self.mainwindow()) + + +class Actions(actioncollection.ActionCollection): + name = "documentactions" + def createActions(self, parent): + self.edit_cut_assign = QAction(parent) + self.view_highlighting = QAction(parent) + self.view_highlighting.setCheckable(True) + self.tools_indent_auto = QAction(parent) + self.tools_indent_auto.setCheckable(True) + self.tools_indent_indent = QAction(parent) + self.tools_reformat = QAction(parent) + self.tools_convert_ly = QAction(parent) + + self.edit_cut_assign.setIcon(icons.get('edit-cut')) + + self.edit_cut_assign.setShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_X)) + + def translateUI(self): + self.edit_cut_assign.setText(_("Cut and Assign...")) + self.view_highlighting.setText(_("Syntax &Highlighting")) + self.tools_indent_auto.setText(_("&Automatic Indent")) + self.tools_indent_indent.setText(_("Re-&Indent")) + self.tools_reformat.setText(_("&Format")) + self.tools_convert_ly.setText(_("&Update with convert-ly...")) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/documentcontextmenu.py frescobaldi-2.0.0/frescobaldi_app/documentcontextmenu.py --- frescobaldi-1.2.0/frescobaldi_app/documentcontextmenu.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/documentcontextmenu.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,81 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A context menu with actions for a Document. +Used by the tabbar and the doclist tool. +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtGui import QMenu + +import app +import icons + + +class DocumentContextMenu(QMenu): + def __init__(self, mainwindow): + super(DocumentContextMenu, self).__init__(mainwindow) + self._doc = lambda: None + + self.createActions() + app.languageChanged.connect(self.translateUI) + self.translateUI() + + def createActions(self): + self.doc_save = self.addAction(icons.get('document-save'), '') + self.doc_save_as = self.addAction(icons.get('document-save-as'), '') + self.addSeparator() + self.doc_close = self.addAction(icons.get('document-close'), '') + + self.doc_save.triggered.connect(self.docSave) + self.doc_save_as.triggered.connect(self.docSaveAs) + self.doc_close.triggered.connect(self.docClose) + + def translateUI(self): + self.doc_save.setText(_("&Save")) + self.doc_save_as.setText(_("Save &As...")) + self.doc_close.setText(_("&Close")) + + def mainwindow(self): + return self.parentWidget() + + def exec_(self, document, pos): + self._doc = weakref.ref(document) + super(DocumentContextMenu, self).exec_(pos) + + def docSave(self): + doc = self._doc() + if doc: + self.mainwindow().saveDocument(doc) + + def docSaveAs(self): + doc = self._doc() + if doc: + self.mainwindow().saveDocumentAs(doc) + + def docClose(self): + doc = self._doc() + if doc: + self.mainwindow().closeDocument(doc) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/documentinfo.py frescobaldi-2.0.0/frescobaldi_app/documentinfo.py --- frescobaldi-1.2.0/frescobaldi_app/documentinfo.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/documentinfo.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,289 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Delivers information about a document. +""" + +from __future__ import unicode_literals + +import itertools +import functools +import os +import re +import weakref + +from PyQt4.QtCore import QSettings, QUrl + +import ly.lex.lilypond +import ly.parse +import ly.pitch +import app +import fileinfo +import cursortools +import tokeniter +import plugin +import variables + + +__all__ = ['info', 'mode'] + + +def info(document): + """Returns a DocumentInfo instance for the given Document.""" + return DocumentInfo.instance(document) + + +def mode(document, guess=True): + """Returns the type of the given document. See DocumentInfo.mode().""" + return info(document).mode(guess) + + +def resetoncontentschanged(func): + """Caches a value until the document emits the contentsChanged signal. + + Use this to decorate methods of the DocumentInfo class. + + """ + _cache = weakref.WeakKeyDictionary() + @functools.wraps(func) + def wrapper(self): + try: + return _cache[self] + except KeyError: + def reset(selfref=weakref.ref(self)): + self = selfref() + if self: + del _cache[self] + self.document().contentsChanged.disconnect(reset) + result = _cache[self] = func(self) + self.document().contentsChanged.connect(reset) + return result + return wrapper + + +class DocumentInfo(plugin.DocumentPlugin): + """Computes and caches various information about a Document.""" + def mode(self, guess=True): + """Returns the type of document ('lilypond, 'html', etc.). + + The mode can be set using the "mode" document variable. + If guess is True (default), the mode is auto-recognized based on the contents + if not set explicitly using the "mode" variable. In this case, this function + always returns an existing mode. + + If guess is False, auto-recognizing is not done and the function returns None + if the mode wasn't set explicitly. + + """ + mode = variables.get(self.document(), "mode") + if mode in ly.lex.modes: + return mode + if guess: + return ly.lex.guessMode(self.document().toPlainText()) + + @resetoncontentschanged + def version(self): + """Returns the LilyPond version if set in the document, as a tuple of ints. + + First the functions searches inside LilyPond syntax. + Then it looks at the 'version' document variable. + Then, if the document is not a LilyPond document, it simply searches for a + \\version command string, possibly embedded in a comment. + + The version is cached until the documents contents change. + + """ + mkver = lambda strings: tuple(map(int, strings)) + + version = ly.parse.version(tokeniter.allTokens(self.document())) + if version: + return mkver(re.findall(r"\d+", version)) + # look at document variables + version = variables.get(self.document(), "version") + if version: + return mkver(re.findall(r"\d+", version)) + # parse whole document for non-lilypond documents + if self.mode() != "lilypond": + m = re.search(r'\\version\s*"(\d+\.\d+(\.\d+)*)"', self.document().toPlainText()) + if m: + return mkver(m.group(1).split('.')) + + def versionString(self): + """Returns the version of the document as a string, or an empty string.""" + return '.'.join(map(str, self.version() or ())) + + @resetoncontentschanged + def pitchLanguage(self): + """Returns the pitchname language used in the document, if defined.""" + languages = ly.pitch.pitchInfo.keys() + for block in cursortools.allBlocks(self.document()): + tokens = tokeniter.tokens(block) + try: + i = tokens.index('\\language') + except ValueError: + try: + i = tokens.index('\\include') + except ValueError: + continue + if isinstance(tokens[i], ly.lex.lilypond.Keyword): + for t in tokens[i+1:]: + if isinstance(t, ly.lex.Space): + continue + elif t == '"': + continue + lang = t[:-3] if t.endswith('.ly') else t[:] + if lang in languages: + return lang + + @resetoncontentschanged + def globalStaffSize(self, default=20): + """Returns the global staff size, if set, else the default value.""" + for block in cursortools.allBlocks(self.document()): + tokens = tokeniter.tokens(block) + try: + i = tokens.index('set-global-staff-size') + except ValueError: + continue + try: + return int(tokens[i+2], 10) + except (IndexError, ValueError): + pass + return default + + def master(self): + """Returns the master filename for the document, if it exists.""" + filename = self.document().url().toLocalFile() + redir = variables.get(self.document(), "master") + if filename and redir: + path = os.path.normpath(os.path.join(os.path.dirname(filename), redir)) + if os.path.exists(path) and path != filename: + return path + + def includepath(self): + """Returns the configured include path. Currently the document does not matter.""" + return QSettings().value("lilypond_settings/include_path", []) or [] + + def jobinfo(self, create=False): + """Returns a three tuple(filename, mode, includepath) based on the given document. + + If the document is a local file, its contents is checked for the 'master' variable + to run the engraver on a different file instead. The mode is then also chosen + based on the contents of that other file. + + If no redirecting variables are found and the document is modified, its text + is saved to a temporary area and that filename is returned. If the 'create' + argument is False (the default), no temporary file is created, and in that + case, the existing filename (may be empty) is returned. + + If a scratch area is used but the document has a local filename and includes + other files, the original directory is given in the includepath list. + + """ + # Determine the filename to run the engraving job on + includepath = [] + filename = self.master() + if filename: + mode_ = fileinfo.mode(filename) + else: + filename = self.document().url().toLocalFile() + mode_ = self.mode() + + if not filename or self.document().isModified(): + # We need to use a scratchdir to save our contents to + import scratchdir + scratch = scratchdir.scratchdir(self.document()) + if create: + scratch.saveDocument() + if filename and self.includeargs(): + includepath.append(os.path.dirname(filename)) + filename = scratch.path() + elif scratch.path() and os.path.exists(scratch.path()): + filename = scratch.path() + + return filename, mode_, includepath + + @resetoncontentschanged + def includeargs(self): + """Returns a list of \\include arguments in our document. + + See ly.parse.includeargs(). + + """ + return list(ly.parse.includeargs(tokeniter.allTokens(self.document()))) + + def includefiles(self): + """Returns a set of filenames that are included by the given document. + + The document's own filename is not added to the set. + The configured include path is used to find files. + Included files are checked recursively, relative to our (master) file, + relative to the including file, and if that still yields no file, relative + to the directories in the includepath(). + + This method uses caching for both the document contents and the other files. + + """ + filename = self.master() + includeargs = None + if not filename: + filename = self.document().url().toLocalFile() + if not filename: + return set() + includeargs = self.includeargs() + files = fileinfo.includefiles(filename, self.includepath(), includeargs) + return files + + @resetoncontentschanged + def outputargs(self): + """Returns a list of output arguments in our document. + + See ly.parse.outputargs(). + + """ + return list(ly.parse.outputargs(tokeniter.allTokens(self.document()))) + + def basenames(self): + """Returns a list of basenames that our document is expected to create. + + The list is created based on include files and the define output-suffix and + \bookOutputName and \bookOutputSuffix commands. + You should add '.ext' and/or '-[0-9]+.ext' to find created files. + + """ + filename, mode = self.jobinfo()[:2] + + if mode == "lilypond": + return fileinfo.basenames(filename, self.includefiles(), self.outputargs()) + + elif mode == "html": + pass + + elif mode == "texinfo": + pass + + elif mode == "latex": + pass + + elif mode == "docbook": + pass + + return [] + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/documentmenu.py frescobaldi-2.0.0/frescobaldi_app/documentmenu.py --- frescobaldi-1.2.0/frescobaldi_app/documentmenu.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/documentmenu.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,123 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Documents menu. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QAction, QActionGroup, QIcon, QMenu + +import app +import icons +import plugin +import engrave +import jobmanager + + +class DocumentMenu(QMenu): + def __init__(self, mainwindow): + super(DocumentMenu, self).__init__(mainwindow) + self.aboutToShow.connect(self.populate) + app.translateUI(self) + + def translateUI(self): + self.setTitle(_('menu title', '&Document')) + + def populate(self): + self.clear() + mainwindow = self.parentWidget() + for a in DocumentActionGroup.instance(mainwindow).actions(): + self.addAction(a) + + +class DocumentActionGroup(QActionGroup, plugin.MainWindowPlugin): + """Maintains a list of actions to set the current document. + + The actions are added to the View->Documents menu in the order + of the tabbar. The actions also get accelerators that are kept + during the lifetime of a document. + + """ + def __init__(self, mainwindow): + super(DocumentActionGroup, self).__init__(mainwindow) + self._acts = {} + self._accels = {} + self.setExclusive(True) + for d in app.documents: + self.addDocument(d) + app.documentCreated.connect(self.addDocument) + app.documentClosed.connect(self.removeDocument) + app.documentUrlChanged.connect(self.setDocumentStatus) + app.documentModificationChanged.connect(self.setDocumentStatus) + app.jobStarted.connect(self.setDocumentStatus) + app.jobFinished.connect(self.setDocumentStatus) + mainwindow.currentDocumentChanged.connect(self.setCurrentDocument) + engrave.engraver(mainwindow).stickyChanged.connect(self.setDocumentStatus) + self.triggered.connect(self.slotTriggered) + + def actions(self): + return [self._acts[doc] for doc in self.mainwindow().documents()] + + def addDocument(self, doc): + a = QAction(self) + a.setCheckable(True) + if doc is self.mainwindow().currentDocument(): + a.setChecked(True) + self._acts[doc] = a + self.setDocumentStatus(doc) + + def removeDocument(self, doc): + self._acts[doc].deleteLater() + del self._acts[doc] + del self._accels[doc] + + def setCurrentDocument(self, doc): + self._acts[doc].setChecked(True) + + def setDocumentStatus(self, doc): + # create accels + accels = [self._accels[d] for d in self._accels if d is not doc] + name = doc.documentName().replace('&', '&&') + for index, char in enumerate(name): + if char.isalnum() and char.lower() not in accels: + name = name[:index] + '&' + name[index:] + self._accels[doc] = char.lower() + break + else: + self._accels[doc] = '' + # add [sticky] mark if necessary + if doc == engrave.engraver(self.mainwindow()).stickyDocument(): + # L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu + name += " " + _("[always engraved]") + self._acts[doc].setText(name) + # set the icon + if jobmanager.isRunning(doc): + icon = icons.get('lilypond-run') + elif doc.isModified(): + icon = icons.get('document-save') + else: + icon = QIcon() + self._acts[doc].setIcon(icon) + + def slotTriggered(self, action): + self.mainwindow().setCurrentDocument(self._acts.keys()[self._acts.values().index(action)]) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/document.py frescobaldi-2.0.0/frescobaldi_app/document.py --- frescobaldi-1.2.0/frescobaldi_app/document.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/document.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,149 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A Frescobaldi (LilyPond) document. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import QUrl +from PyQt4.QtGui import QPlainTextDocumentLayout, QTextDocument + +import app +import util +import variables +import signals + + +class Document(QTextDocument): + + urlChanged = signals.Signal() + closed = signals.Signal() + loaded = signals.Signal() + saved = signals.Signal() + + def __init__(self, url=None, encoding=None): + super(Document, self).__init__() + self.setDocumentLayout(QPlainTextDocumentLayout(self)) + self._encoding = encoding + self._url = url # avoid urlChanged on init + self.setUrl(url) + self.modificationChanged.connect(self.slotModificationChanged) + app.documents.append(self) + app.documentCreated(self) + self.load() + + def slotModificationChanged(self): + app.documentModificationChanged(self) + + def close(self): + app.documents.remove(self) + self.closed() + app.documentClosed(self) + + def load(self): + """Loads the current url. + + Returns True if loading succeeded, False if an error occurred, + and None when the current url is empty or non-local. + Currently only local files are supported. + + """ + fileName = self.url().toLocalFile() + if fileName: + try: + with open(fileName) as f: + data = f.read() + except (IOError, OSError): + return False # errors are caught in MainWindow.openUrl() + + self.setPlainText(util.decode(data)) + self.setModified(False) + self.loaded() + app.documentLoaded(self) + return True + + def save(self): + """Saves the document to the current url. + + Returns True if saving succeeded, False if an error occurred, + and None when the current url is empty or non-local. + Currently only local files are supported. + + """ + fileName = self.url().toLocalFile() + if fileName: + try: + with open(fileName, "w") as f: + f.write(self.encodedText()) + except (IOError, OSError): + return False + self.setModified(False) + self.saved() + return True + + def url(self): + return self._url + + def setUrl(self, url): + """ Change the url for this document. """ + changed = self._url != url + self._url = url or QUrl() + # number for nameless documents + if self._url.isEmpty(): + nums = [0] + nums.extend(doc._num for doc in app.documents if doc is not self) + self._num = max(nums) + 1 + else: + self._num = 0 + if changed: + self.urlChanged() + app.documentUrlChanged(self) + + def encoding(self): + return variables.get(self, "coding") or self._encoding + + def setEncoding(self, encoding): + self._encoding = encoding + + def encodedText(self): + """Returns the text of the document encoded in the correct encoding. + + Useful to save to a file. + + """ + try: + return self.toPlainText().encode(self.encoding() or 'utf-8') + except (UnicodeError, LookupError): + return self.toPlainText().encode('utf-8') + + def documentName(self): + """ Returns a suitable name for this document. """ + if self._url.isEmpty(): + if self._num == 1: + return _("Untitled") + else: + return _("Untitled ({num})").format(num=self._num) + else: + return os.path.basename(self._url.path()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/engrave/command.py frescobaldi-2.0.0/frescobaldi_app/engrave/command.py --- frescobaldi-1.2.0/frescobaldi_app/engrave/command.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/engrave/command.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,66 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Creates the commandline or Job to engrave a music document. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import QSettings + +import job +import documentinfo +import lilypondinfo + + +def info(document): + """Returns a LilyPondInfo instance that should be used by default to engrave the document.""" + version = documentinfo.info(document).version() + if version and QSettings().value("lilypond_settings/autoversion", True) in (True, "true"): + return lilypondinfo.suitable(version) + return lilypondinfo.preferred() + + +def defaultJob(document, preview): + """Returns a default job for the document.""" + filename, mode, includepath = documentinfo.info(document).jobinfo(True) + includepath.extend(documentinfo.info(document).includepath()) + i = info(document) + j = job.Job() + + command = [i.command] + if (QSettings().value("lilypond_settings/delete_intermediate_files", True) + not in (False, "false")): + command.append('-ddelete-intermediate-files') + else: + command.append('-dno-delete-intermediate-files') + command.append('-dpoint-and-click' if preview else '-dno-point-and-click') + command.append('--pdf') + command.extend('-I' + path for path in includepath) + j.directory = os.path.dirname(filename) + command.append(filename) + j.command = command + j.setTitle("{0} {1} [{2}]".format( + os.path.basename(i.command), i.versionString, document.documentName())) + return j + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/engrave/custom.py frescobaldi-2.0.0/frescobaldi_app/engrave/custom.py --- frescobaldi-1.2.0/frescobaldi_app/engrave/custom.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/engrave/custom.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,275 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Custom engraving dialog. +""" + +from __future__ import unicode_literals + +import collections +import os + +from PyQt4.QtCore import QSettings, QSize +from PyQt4.QtGui import (QCheckBox, QComboBox, QDialog, QDialogButtonBox, + QGridLayout, QLabel, QTextEdit) + +import app +import documentinfo +import help +import icons +import job +import jobmanager +import lilypondinfo +import listmodel +import widgets +import util + +from . import command + + +class Dialog(QDialog): + def __init__(self, parent=None): + super(Dialog, self).__init__(parent) + self._document = None + + layout = QGridLayout() + self.setLayout(layout) + + self.versionLabel = QLabel() + self.versionCombo = QComboBox() + + self.outputLabel = QLabel() + self.outputCombo = QComboBox() + + self.resolutionLabel = QLabel() + self.resolutionCombo = QComboBox(editable=True) + + self.previewCheck = QCheckBox() + self.verboseCheck = QCheckBox() + self.deleteCheck = QCheckBox() + + self.commandLineLabel = QLabel() + self.commandLine = QTextEdit(acceptRichText=False) + + self.buttons = QDialogButtonBox( + QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + self.buttons.button(QDialogButtonBox.Ok).setIcon(icons.get("lilypond-run")) + help.addButton(self.buttons, help_engrave_custom) + + self.resolutionCombo.addItems(['100', '200', '300', '600', '1200']) + self.resolutionCombo.setCurrentIndex(2) + + layout.addWidget(self.versionLabel, 0, 0) + layout.addWidget(self.versionCombo, 0, 1) + layout.addWidget(self.outputLabel, 1, 0) + layout.addWidget(self.outputCombo, 1, 1) + layout.addWidget(self.resolutionLabel, 2, 0) + layout.addWidget(self.resolutionCombo, 2, 1) + layout.addWidget(self.previewCheck, 3, 0, 1, 2) + layout.addWidget(self.verboseCheck, 4, 0, 1, 2) + layout.addWidget(self.deleteCheck, 5, 0, 1, 2) + layout.addWidget(self.commandLineLabel, 6, 0, 1, 2) + layout.addWidget(self.commandLine, 7, 0, 1, 2) + layout.addWidget(widgets.Separator(), 8, 0, 1, 2) + layout.addWidget(self.buttons, 9, 0, 1, 2) + + app.translateUI(self) + util.saveDialogSize(self, "engrave/custom/dialog/size", QSize(480, 260)) + self.buttons.accepted.connect(self.accept) + self.buttons.rejected.connect(self.reject) + + model = listmodel.ListModel(formats, display=lambda f: f.title(), + icon=lambda f: icons.file_type(f.type)) + self.outputCombo.setModel(model) + + self.deleteCheck.setChecked(QSettings().value( + "lilypond_settings/delete_intermediate_files", True) not in + (False, "false")) + + self.loadLilyPondVersions() + self.selectLilyPondInfo(lilypondinfo.preferred()) + app.settingsChanged.connect(self.loadLilyPondVersions) + app.jobFinished.connect(self.slotJobFinished) + self.outputCombo.currentIndexChanged.connect(self.makeCommandLine) + self.previewCheck.toggled.connect(self.makeCommandLine) + self.verboseCheck.toggled.connect(self.makeCommandLine) + self.deleteCheck.toggled.connect(self.makeCommandLine) + self.resolutionCombo.editTextChanged.connect(self.makeCommandLine) + self.makeCommandLine() + + def translateUI(self): + self.setWindowTitle(app.caption(_("Engrave custom"))) + self.versionLabel.setText(_("LilyPond Version:")) + self.outputLabel.setText(_("Output Format:")) + self.resolutionLabel.setText(_("Resolution:")) + self.previewCheck.setText(_( + "Run LilyPond in preview mode (with Point and Click)")) + self.verboseCheck.setText(_("Run LilyPond with verbose output")) + self.deleteCheck.setText(_("Delete intermediate output files")) + self.commandLineLabel.setText(_("Command line:")) + self.buttons.button(QDialogButtonBox.Ok).setText(_("Run LilyPond")) + self.outputCombo.update() + + def slotJobFinished(self, doc): + if doc == self._document: + self.buttons.button(QDialogButtonBox.Ok).setEnabled(True) + self._document = None + + def setDocument(self, doc): + self.selectLilyPondInfo(command.info(doc)) + if jobmanager.isRunning(doc): + self._document = doc + self.buttons.button(QDialogButtonBox.Ok).setEnabled(False) + + def loadLilyPondVersions(self): + infos = lilypondinfo.infos() or [lilypondinfo.default()] + infos.sort(key = lambda i: i.version or (999,)) + self._infos = infos + index = self.versionCombo.currentIndex() + self.versionCombo.clear() + for i in infos: + icon = 'lilypond-run' if i.version else 'dialog-error' + text = _("LilyPond {version}").format(version=i.versionString) + self.versionCombo.addItem(icons.get(icon), text) + self.versionCombo.setCurrentIndex(index) + + def selectLilyPondInfo(self, info): + if info in self._infos: + self.versionCombo.setCurrentIndex(self._infos.index(info)) + + def makeCommandLine(self): + """Reads the widgets and builds a command line.""" + f = formats[self.outputCombo.currentIndex()] + self.resolutionCombo.setEnabled('resolution' in f.widgets) + cmd = ["$lilypond"] + if self.verboseCheck.isChecked(): + cmd.append('--verbose') + if self.previewCheck.isChecked(): + cmd.append('-dpoint-and-click') + else: + cmd.append('-dno-point-and-click') + if self.deleteCheck.isChecked(): + cmd.append('-ddelete-intermediate-files') + else: + cmd.append('-dno-delete-intermediate-files') + d = { + 'version': self._infos[self.versionCombo.currentIndex()].version, + 'resolution': self.resolutionCombo.currentText(), + } + cmd.append("$include") + cmd.extend(f.options(d)) + cmd.append("$filename") + self.commandLine.setText(' '.join(cmd)) + + def getJob(self, document): + """Returns a Job to start.""" + filename, mode, includepath = documentinfo.info(document).jobinfo(True) + includepath.extend(documentinfo.info(document).includepath()) + i = self._infos[self.versionCombo.currentIndex()] + cmd = [] + for t in self.commandLine.toPlainText().split(): + if t == '$lilypond': + cmd.append(i.command) + elif t == '$filename': + cmd.append(filename) + elif t == '$include': + cmd.extend('-I' + path for path in includepath) + else: + cmd.append(t) + j = job.Job() + j.directory = os.path.dirname(filename) + j.command = cmd + j.setTitle("{0} {1} [{2}]".format( + os.path.basename(i.command), i.versionString, document.documentName())) + return j + + +class help_engrave_custom(help.page): + def title(): + return _("Engrave custom") + + def body(): + p = '

{0}

\n'.format + text = [p(_("""\ +In this dialog you can set some parameters for the LilyPond command to be used +to engrave your document. +It is even possible to edit the command line itself. +"""))] + text.append(p(_("The following replacements will be made:"))) + text.append('
\n') + for name, msg in ( + ('$lilypond', _("The LilyPond executable")), + ('$include', _("All the include paths")), + ('$filename', _("The filename of the document")), + ): + text.append('
{0}
'.format(name)) + text.append('
{0}
\n'.format(msg)) + text.append('
') + return ''.join(text) + + +Format = collections.namedtuple("Format", "type title options widgets") + +formats = [ + Format( + "pdf", + lambda: _("PDF"), + lambda d: ['--pdf'], + (), + ), + Format( + "ps", + lambda: _("PostScript"), + lambda d: ['--ps'], + (), + ), + Format( + "png", + lambda: _("PNG"), + lambda d: ['--png', '-dresolution={resolution}'.format(**d)], + ('resolution',), + ), + Format( + "svg", + lambda: _("SVG"), + lambda d: ['-dbackend=svg'], + (), + ), + Format( + "pdf", + lambda: _("PDF (EPS Backend)"), + lambda d: ['--pdf', '-dbackend=eps'], + (), + ), + Format( + "eps", + lambda: _("Encapsulated PostScript (EPS Backend)"), + lambda d: ['--ps', '-dbackend=eps'], + (), + ), + Format( + "png", + lambda: _("PNG (EPS Backend)"), + lambda d: ['--png', '-dbackend=eps', '-dresolution={resolution}'.format(**d)], + ('resolution',), + ), +] + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/engrave/__init__.py frescobaldi-2.0.0/frescobaldi_app/engrave/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/engrave/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/engrave/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,207 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Actions to engrave the music in the documents. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings, Qt +from PyQt4.QtGui import QAction, QApplication, QKeySequence + +import app +import actioncollection +import actioncollectionmanager +import jobmanager +import jobattributes +import plugin +import icons +import signals + +def engraver(mainwindow): + return Engraver.instance(mainwindow) + + +class Engraver(plugin.MainWindowPlugin): + + stickyChanged = signals.Signal() + + def __init__(self, mainwindow): + self._currentStickyDocument = None + ac = self.actionCollection = Actions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + ac.engrave_sticky.triggered.connect(self.stickyToggled) + ac.engrave_runner.triggered.connect(self.engraveRunner) + ac.engrave_preview.triggered.connect(self.engravePreview) + ac.engrave_publish.triggered.connect(self.engravePublish) + ac.engrave_custom.triggered.connect(self.engraveCustom) + ac.engrave_abort.triggered.connect(self.engraveAbort) + mainwindow.currentDocumentChanged.connect(self.updateActions) + app.jobStarted.connect(self.updateActions) + app.jobFinished.connect(self.updateActions) + app.languageChanged.connect(self.updateStickyActionText) + self.updateStickyActionText() + + def runningJob(self): + """Returns a Job for the sticky or current document if that is running.""" + doc = self.stickyDocument() or self.mainwindow().currentDocument() + job = jobmanager.job(doc) + if job and job.isRunning(): + return job + + def updateActions(self): + running = bool(self.runningJob()) + ac = self.actionCollection + ac.engrave_preview.setEnabled(not running) + ac.engrave_publish.setEnabled(not running) + ac.engrave_abort.setEnabled(running) + ac.engrave_runner.setIcon(icons.get('process-stop' if running else 'lilypond-run')) + + def engraveRunner(self): + job = self.runningJob() + if job: + job.abort() + elif QApplication.keyboardModifiers() & Qt.SHIFT: + self.engraveCustom() + else: + self.engravePreview() + + def engravePreview(self): + """Starts an engrave job in preview mode (with point and click turned on).""" + self.engrave(True) + + def engravePublish(self): + """Starts an engrave job in publish mode (with point and click turned off).""" + self.engrave(False) + + def engraveCustom(self): + """Opens a dialog to configure the job before starting it.""" + try: + dlg = self._customDialog + except AttributeError: + from . import custom + dlg = self._customDialog = custom.Dialog(self.mainwindow()) + dlg.addAction(self.mainwindow().actionCollection.help_whatsthis) + dlg.setWindowModality(Qt.WindowModal) + doc = self.stickyDocument() or self.mainwindow().currentDocument() + dlg.setDocument(doc) + if dlg.exec_(): + self.runJob(dlg.getJob(doc), doc) + + def engrave(self, preview, document=None): + """Starts a default engraving job. + + The bool preview specifies preview mode. + If document is not specified, it is either the sticky or current + document. + + """ + from . import command + doc = document or self.stickyDocument() or self.mainwindow().currentDocument() + self.runJob(command.defaultJob(doc, preview), doc) + + def engraveAbort(self): + job = self.runningJob() + if job: + job.abort() + + def runJob(self, job, document): + """Runs the engraving job on behalf of document.""" + # save the current document if desired and it makes sense + # (i.e. the document is modified and has a local filename) + if QSettings().value("lilypond_settings/save_on_run", False) in (True, "true"): + doc = self.mainwindow().currentDocument() + if doc.isModified() and doc.url().toLocalFile(): + doc.save() + jobattributes.get(job).mainwindow = self.mainwindow() + jobmanager.manager(document).startJob(job) + + def stickyToggled(self): + """Called when the user toggles the 'Sticky' action.""" + self.setStickyDocument(None if self.stickyDocument() else self.mainwindow().currentDocument()) + + def setStickyDocument(self, doc=None): + """Sticks to the given document or removes the 'stick' when None.""" + cur = self._currentStickyDocument + self._currentStickyDocument = doc + if cur: + cur.closed.disconnect(self.slotUnStickDocument) + cur.loaded.disconnect(self.slotUnStickDocument) + cur.urlChanged.disconnect(self.updateStickyActionText) + self.stickyChanged(cur) + if doc: + doc.closed.connect(self.slotUnStickDocument) + doc.loaded.connect(self.slotUnStickDocument) + doc.urlChanged.connect(self.updateStickyActionText) + self.stickyChanged(doc) + self.actionCollection.engrave_sticky.setChecked(bool(doc)) + self.updateStickyActionText() + self.updateActions() + + def stickyDocument(self): + """Returns the document currently marked as 'Sticky', if any.""" + return self._currentStickyDocument + + def slotUnStickDocument(self): + """Called when the document that is currently sticky closes or reloads.""" + self.setStickyDocument(None) + + def updateStickyActionText(self): + """Called when the sticky action toggles or when the language is changed.""" + doc = self.stickyDocument() + if doc: + text = _("&Always Engrave [{docname}]").format(docname = doc.documentName()) + else: + text = _("&Always Engrave This Document") + self.actionCollection.engrave_sticky.setText(text) + + +class Actions(actioncollection.ActionCollection): + name = "engrave" + + def createActions(self, parent=None): + self.engrave_sticky = QAction(parent) + self.engrave_sticky.setCheckable(True) + self.engrave_runner = QAction(parent) + self.engrave_preview = QAction(parent) + self.engrave_publish = QAction(parent) + self.engrave_custom = QAction(parent) + self.engrave_abort = QAction(parent) + + self.engrave_preview.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_M)) + self.engrave_publish.setShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_P)) + self.engrave_custom.setShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_M)) + self.engrave_abort.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_Pause)) + + self.engrave_sticky.setIcon(icons.get('pushpin')) + self.engrave_preview.setIcon(icons.get('lilypond-run')) + self.engrave_publish.setIcon(icons.get('lilypond-run')) + self.engrave_custom.setIcon(icons.get('lilypond-run')) + self.engrave_abort.setIcon(icons.get('process-stop')) + + + def translateUI(self): + self.engrave_runner.setText(_("Engrave")) + self.engrave_preview.setText(_("&Engrave (preview)")) + self.engrave_publish.setText(_("Engrave (&publish)")) + self.engrave_custom.setText(_("Engrave (&custom)...")) + self.engrave_abort.setText(_("Abort Engraving &Job")) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/engrave/result_menu.py frescobaldi-2.0.0/frescobaldi_app/engrave/result_menu.py --- frescobaldi-1.2.0/frescobaldi_app/engrave/result_menu.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/engrave/result_menu.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,79 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Frescobaldi main menu. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import QUrl +from PyQt4.QtGui import QMenu + +import app +import icons +import util + + +class Menu(QMenu): + def __init__(self, mainwindow): + super(Menu, self).__init__(mainwindow) + self.aboutToShow.connect(self.populate) + app.jobFinished.connect(self.slotJobFinished) + self.triggered.connect(self.actionTriggered) + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Generated &Files")) + + def populate(self): + self.clear() + doc = self.parentWidget().currentDocument() + if doc: + import resultfiles + files = resultfiles.results(doc).files() + first = True + for group in util.group_files(files, + ('pdf', 'mid midi', 'svg svgz', 'png', '!ly ily lyi')): + if group: + if not first: + self.addSeparator() + first = False + for f in group: + name = os.path.split(f)[1] + a = self.addAction(name) + a.setIcon(icons.file_type(f)) + a.filename = f + if not self.actions(): + a = self.addAction(_("No files available")) + a.setEnabled(False) + else: + util.addAccelerators(self.actions()) + + def actionTriggered(self, action): + import helpers + helpers.openUrl(QUrl.fromLocalFile(action.filename)) + + def slotJobFinished(self, doc): + if self.isVisible() and doc == self.parentWidget().currentDocument(): + self.populate() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/exception.py frescobaldi-2.0.0/frescobaldi_app/exception.py --- frescobaldi-1.2.0/frescobaldi_app/exception.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/exception.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,81 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Exception dialog for unhandled Python exceptions +(which are bugs in our program). +""" + +from __future__ import unicode_literals + +import traceback + +from PyQt4.QtGui import ( + QDialog, QDialogButtonBox, QLabel, QTextBrowser, QTextCursor, QVBoxLayout) + +import app +import icons +import widgets +import bugreport + + +class ExceptionDialog(QDialog): + """Single-use dialog displaying a Python exception.""" + def __init__(self, exctype, excvalue, exctb): + super(ExceptionDialog, self).__init__() + + self._tbshort = ''.join(traceback.format_exception_only(exctype, excvalue)) + self._tbfull = ''.join(traceback.format_exception(exctype, excvalue, exctb)) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.errorLabel = QLabel() + layout.addWidget(self.errorLabel) + textview = QTextBrowser() + layout.addWidget(textview) + textview.setText(self._tbfull) + textview.moveCursor(QTextCursor.End) + + layout.addWidget(widgets.Separator()) + + b = self.buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + b.button(QDialogButtonBox.Ok).setIcon(icons.get("tools-report-bug")) + layout.addWidget(b) + + b.accepted.connect(self.accept) + b.rejected.connect(self.reject) + self.resize(600,300) + app.translateUI(self) + self.exec_() + + def translateUI(self): + self.errorLabel.setText(_("An internal error has occurred:")) + self.setWindowTitle(app.caption(_("Internal Error"))) + self.buttons.button(QDialogButtonBox.Ok).setText(_("Email Bug Report...")) + + def done(self, result): + if result: + self.reportBug() + super(ExceptionDialog, self).done(result) + + def reportBug(self): + bugreport.email(self._tbshort, self._tbfull + '\n' + _("Optionally describe below what you were doing:")) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/filecache.py frescobaldi-2.0.0/frescobaldi_app/filecache.py --- frescobaldi-1.2.0/frescobaldi_app/filecache.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/filecache.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,76 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Caches information about files, and checks the mtime upon request. +""" + +from __future__ import unicode_literals + +import os + + +class FileCache(object): + """Caches information about files, and checks the mtime upon request. + + Has __setitem__, __getitem__, __delitem__, clear etc. methods like a dict. + + """ + def __init__(self): + self._cache = {} + + def __getitem__(self, filename): + mtime, value = self._cache[filename] + try: + if mtime == os.path.getmtime(filename): + return value + except (IOError, OSError): + pass + del self._cache[filename] + raise KeyError + + def __setitem__(self, filename, value): + try: + self._cache[filename] = (os.path.getmtime(filename), value) + except (IOError, OSError): + pass + + def __delitem__(self, filename): + del self._cache[filename] + + def __contains__(self, filename): + try: + self[filename] + return True + except KeyError: + return False + + def filenames(self): + """Yields filenames that are still valid in the cache.""" + for filename in list(self._cache): + try: + self[filename] + yield filename + except KeyError: + pass + + def clear(self): + self._cache.clear() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/fileinfo.py frescobaldi-2.0.0/frescobaldi_app/fileinfo.py --- frescobaldi-1.2.0/frescobaldi_app/fileinfo.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/fileinfo.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,201 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Computes and caches various information about files. +""" + +from __future__ import unicode_literals + +import functools +import itertools +import os + +import ly.parse +import ly.lex +import filecache +import util +import variables + + +def _cache(func): + """Wraps a function to make it use a FileCache.""" + cache = filecache.FileCache() + @functools.wraps(func) + def wrapper(filename): + try: + return cache[filename] + except KeyError: + result = cache[filename] = func(filename) + return result + return wrapper + + +def textmode(text, guess=True): + """Returns the type of the given text ('lilypond, 'html', etc.). + + Checks the mode variable and guesses otherwise if guess is True. + + """ + mode = variables.variables(text).get("mode") + if mode in ly.lex.modes: + return mode + if guess: + return ly.lex.guessMode(text) + + +@_cache +def mode(filename): + """Returns the type of the text in the given filename.""" + with open(filename) as f: + text = util.decode(f.read()) + return textmode(text) + + +def tokens(filename): + """Returns a token stream from the given filename.""" + with open(filename) as f: + text = util.decode(f.read()) + return ly.lex.state(textmode(text)).tokens(text) + + +@_cache +def includeargs(filename): + """Returns the list of arguments of \\include commands in the given file. + + The return value is cached until the mtime of the file changes. + + """ + return list(ly.parse.includeargs(tokens(filename))) + + +def includefiles(filename, include_path=[], initial_args=None): + """Returns a set of filenames that are included by the given pathname. + + The specified include path is used to find files. + The filename is NOT itself added to the set. + Included files are checked recursively, relative to our (master) file, + relative to the including file, and if that still yields no file, relative + to the directories in the include_path. + + If initial_args is given, the filename itself is not scanned for include_args. + + """ + files = set() + + def tryarg(directory, arg): + path = os.path.join(directory, arg) + if os.path.exists(path) and path not in files: + files.add(path) + args = includeargs(path) + find(args, os.path.dirname(path)) + return True + + def find(incl_args, directory): + for arg in incl_args: + # new, recursive, relative include + if not (directory and tryarg(directory, arg)): + # old include (relative to master file) + if not (basedir and tryarg(basedir, arg)): + # if path is given, also search there: + for p in include_path: + if tryarg(p, arg): + break + + if initial_args is None: + initial_args = includeargs(filename) + basedir = os.path.dirname(filename) + find(initial_args, basedir) + return files + + +@_cache +def outputargs(filename): + """Returns the list of arguments of \\bookOutputName, \\bookOutputSuffix etc. commands. + + See outputargs(). The return value is cached until the mtime of the file changes. + + """ + return list(ly.parse.outputargs(tokens(filename))) + + +def basenames(filename, includefiles = None, initial_outputargs = None): + """Returns the list of basenames a document is expected to create. + + The list is created based on includefiles and the define output-suffix and + \bookOutputName and \bookOutputSuffix commands. + You should add '.ext' and/or '-[0-9]+.ext' to find created files. + + """ + basenames = [] + basepath = os.path.splitext(filename)[0] + dirname, basename = os.path.split(basepath) + + if basepath: + basenames.append(basepath) + + includes = set(includefiles) if includefiles else set() + + if initial_outputargs is None: + initial_outputargs = outputargs(filename) + + def args(): + yield initial_outputargs + for filename in includes: + yield outputargs(filename) + + for type, arg in itertools.chain.from_iterable(args()): + if type == "suffix": + arg = basename + '-' + arg + path = os.path.normpath(os.path.join(dirname, arg)) + if path not in basenames: + basenames.append(path) + return basenames + +@_cache +def version(filename): + """Returns the LilyPond version if set in the file, as a tuple of ints. + + First the function searches inside LilyPond syntax. + Then it looks at the 'version' document variable. + Then, if the document is not a LilyPond document, it simply searches for a + \\version command string, possibly embedded in a comment. + + The version is cached until the file changes. + + """ + mkver = lambda strings: tuple(map(int, strings)) + with open(filename) as f: + text = util.decode(f.read()) + mode = textmode(text) + tokens_ = list(ly.lex.state(mode).tokens(text)) + + version = ly.parse.version(tokens_) + if version: + return mkver(re.findall(r"\d+", version)) + # look at document variables + version = variables.variables(text).get("version") + if version: + return mkver(re.findall(r"\d+", version)) + # parse whole document for non-lilypond comments + if mode != "lilypond": + m = re.search(r'\\version\s*"(\d+\.\d+(\.\d+)*)"', text) + if m: + return mkver(m.group(1).split('.')) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/fileprinter.py frescobaldi-2.0.0/frescobaldi_app/fileprinter.py --- frescobaldi-1.2.0/frescobaldi_app/fileprinter.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/fileprinter.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,100 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Constructs a printcommand to print a PDF file. +""" + +from __future__ import unicode_literals + +import itertools +import os + +from PyQt4.QtGui import QPrinter + + +def lprCommand(): + """Returns a suitable 'lpr'-like command to send a file to the printer queue. + + Returns None if no such command could be found. + Prefers the CUPS command 'lpr' or 'lp' if it can be found. + + """ + commands = ("lpr-cups", "lpr.cups", "lpr", "lp") + paths = os.environ.get("PATH", os.defpath).split(os.pathsep) + for cmd, path in itertools.product(commands, paths): + if os.access(os.path.join(path, cmd), os.X_OK): + return cmd + + +def printCommand(cmd, printer, filename): + """Returns a commandline (list) to print a PDF file. + + cmd: "lpr" or "lp" (or something like that) + printer: a QPrinter instance + filename: the filename of the PDF document to print. + + """ + command = [cmd] + + # printer name + if cmd == "lp": + command.append('-d') + else: + command.append('-P') + command.append(printer.printerName()) + + # copies + numCopies = 1 + try: + numCopies = printer.copyCount() + except AttributeError: # only in Qt >= 4.7 + try: + numCopies = printer.actualNumCopies() + except AttributeError: # only in Qt >= 4.6 + numCopies = printer.numCopies() + + if cmd == "lp": + command.append('-n') + command.append(format(numCopies)) + else: + command.append('-#{0}'.format(numCopies)) + + # job name + if cmd == "lp": + command.append('-t') + else: + command.append('-J') + command.append(printer.docName() or os.path.basename(filename)) + + # page range + if printer.printRange() == QPrinter.PageRange: + pageRange = "{0}-{1}".format(printer.fromPage(), printer.toPage()) + if cmd == "lp": + command.append('-P') + command.append(pageRange) + else: + command.append('-o') + command.append('page-ranges=' + pageRange) + + command.append(filename) + return command + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/globalfontdialog.py frescobaldi-2.0.0/frescobaldi_app/globalfontdialog.py --- frescobaldi-1.2.0/frescobaldi_app/globalfontdialog.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/globalfontdialog.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,122 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Global Font Dialog, used to set the three fonts for the make-pango-font-tree +command. + +It keeps its settings. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import util +import widgets.dialog + +class GlobalFontDialog(widgets.dialog.Dialog): + def __init__(self, parent=None): + super(GlobalFontDialog, self).__init__(parent) + self._messageLabel.setWordWrap(True) + + layout = QGridLayout() + layout.setContentsMargins(0, 0, 0, 0) + self.mainWidget().setLayout(layout) + + self.romanLabel = QLabel() + self.romanCombo = QFontComboBox() + self.sansLabel = QLabel() + self.sansCombo = QFontComboBox() + self.typewriterLabel = QLabel() + self.typewriterCombo = QFontComboBox(fontFilters=QFontComboBox.MonospacedFonts) + self.staffSizeLabel = QLabel() + self.staffSizeChooser = QSpinBox(minimum=1, maximum=200, value=20) + + layout.addWidget(self.romanLabel, 0, 0) + layout.addWidget(self.romanCombo, 0, 1, 1, 2) + layout.addWidget(self.sansLabel, 1, 0) + layout.addWidget(self.sansCombo, 1, 1, 1, 2) + layout.addWidget(self.typewriterLabel, 2, 0) + layout.addWidget(self.typewriterCombo, 2, 1, 1, 2) + layout.addWidget(self.staffSizeLabel, 3, 0) + layout.addWidget(self.staffSizeChooser, 3, 1) + + self.loadSettings() + self.finished.connect(self.saveSettings) + app.translateUI(self) + util.saveDialogSize(self, "global_font_dialog/dialog/size") + + def translateUI(self): + self.setWindowTitle(app.caption(_("Global Fonts"))) + self.setMessage(_( + "Please select the three global fonts to use for " + r"\roman, \sans, and \typewriter " + "respectively. " + "You should also set the staff size to the global staff size you " + "use in the document (20 by default).")) + self.romanLabel.setText(_("Roman Font:")) + self.sansLabel.setText(_("Sans Font:")) + self.typewriterLabel.setText(_("Typewriter Font:")) + self.staffSizeLabel.setText(_("Staff Size:")) + + def staffSize(self): + return self.staffSizeChooser.value() + + def setStaffSize(self, value): + self.staffSizeChooser.setValue(value) + + def romanFont(self): + return self.romanCombo.currentFont().family() + + def setromanFont(self, family): + self.romanCombo.setCurrentFont(QFont(family)) + + def sansFont(self): + return self.sansCombo.currentFont().family() + + def setSansFont(self, family): + self.sansCombo.setCurrentFont(QFont(family)) + + def typewriterFont(self): + return self.typewriterCombo.currentFont().family() + + def settypewriterFont(self, family): + self.typewriterCombo.setCurrentFont(QFont(family)) + + def loadSettings(self): + s = QSettings() + s.beginGroup("global_font_dialog") + roman = s.value("roman", "Century Schoolbook L") + self.romanCombo.setCurrentFont(QFont(roman)) + sans = s.value("sans", "sans-serif") + self.sansCombo.setCurrentFont(QFont(sans)) + typewriter = s.value("typewriter", "monospace") + self.typewriterCombo.setCurrentFont(QFont(typewriter)) + + def saveSettings(self): + s = QSettings() + s.beginGroup("global_font_dialog") + s.setValue("roman", self.romanCombo.currentFont().family()) + s.setValue("sans", self.sansCombo.currentFont().family()) + s.setValue("typewriter", self.typewriterCombo.currentFont().family()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/guistyle.py frescobaldi-2.0.0/frescobaldi_app/guistyle.py --- frescobaldi-1.2.0/frescobaldi_app/guistyle.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/guistyle.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,48 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Sets the user interface style. +""" + +from __future__ import unicode_literals + + +from PyQt4.QtCore import QSettings +from PyQt4.QtGui import QStyleFactory + +import app + +_system_default = app.qApp.style().objectName() + + +def keys(): + return [name.lower() for name in QStyleFactory.keys()] + + +def setStyle(): + style = QSettings().value("guistyle", "").lower() + if style not in keys(): + style = _system_default + if style != app.qApp.style().objectName(): + app.qApp.setStyle(QStyleFactory.create(style)) + + +app.settingsChanged.connect(setStyle) +setStyle() diff -Nru frescobaldi-1.2.0/frescobaldi_app/help/browser.py frescobaldi-2.0.0/frescobaldi_app/help/browser.py --- frescobaldi-1.2.0/frescobaldi_app/help/browser.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/help/browser.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,133 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The help browser window. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import helpers +import icons + +from . import __path__ +from . import helpimpl + + +class Window(QMainWindow): + """The help browser window.""" + def __init__(self): + super(Window, self).__init__() + self.setAttribute(Qt.WA_QuitOnClose, False) + + self.browser = Browser(self) + self.setCentralWidget(self.browser) + + self._toolbar = tb = self.addToolBar('') + self._back = tb.addAction(icons.get('go-previous'), '') + self._forw = tb.addAction(icons.get('go-next'), '') + self._home = tb.addAction(icons.get('go-home'), '') + self._toc = tb.addAction(icons.get('help-contents'), '') + self._back.triggered.connect(self.browser.backward) + self._forw.triggered.connect(self.browser.forward) + self._home.triggered.connect(self.home) + self._toc.triggered.connect(self.toc) + + self.browser.sourceChanged.connect(self.slotSourceChanged) + self.browser.historyChanged.connect(self.slotHistoryChanged) + app.translateUI(self) + self.loadSettings() + + def closeEvent(self, ev): + self.saveSettings() + super(Window, self).closeEvent(ev) + + def loadSettings(self): + self.resize(QSettings().value("helpbrowser/size", QSize(400, 300))) + + def saveSettings(self): + QSettings().setValue("helpbrowser/size", self.size()) + + def translateUI(self): + self.setCaption() + self._toolbar.setWindowTitle(_("Toolbar")) + self._back.setText(_("Back")) + self._forw.setText(_("Forward")) + self._home.setText(_("Start")) + self._toc.setText(_("Contents")) + + def slotSourceChanged(self): + self.setCaption() + + def setCaption(self): + title = self.browser.documentTitle() or _("Help") + self.setWindowTitle(app.caption(title) + " " + _("Help")) + + def slotHistoryChanged(self): + self._back.setEnabled(self.browser.isBackwardAvailable()) + self._forw.setEnabled(self.browser.isForwardAvailable()) + + def home(self): + self.displayHelp('contents') + + def toc(self): + self.displayHelp('toc') + + def displayHelp(self, page): + """Opens the help browser showing the specified help page (by name or class).""" + if isinstance(page, type) and issubclass(page, helpimpl.page): + page = page.name + self.browser.setSource(QUrl("help:{0}".format(page))) + self.show() + self.activateWindow() + self.raise_() + + +class Browser(QTextBrowser): + def __init__(self, parent): + super(Browser, self).__init__(parent) + app.settingsChanged.connect(self.reload, 1) + self.anchorClicked.connect(self.slotAnchorClicked) + self.setOpenLinks(False) + + def slotAnchorClicked(self, url): + if url.scheme() == "help": + self.setSource(url) + else: + helpers.openUrl(url) + + def loadResource(self, type, url): + if type == QTextDocument.HtmlResource: + return helpimpl.html(url.path()) + elif type == QTextDocument.ImageResource: + url = QUrl.fromLocalFile(os.path.join(__path__[0], url.path())) + return super(Browser, self).loadResource(type, url) + + def keyPressEvent(self, ev): + if ev.key() == Qt.Key_Escape and int(ev.modifiers()) == 0: + self.window().close() + super(Browser, self).keyPressEvent(ev) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/help/contents.py frescobaldi-2.0.0/frescobaldi_app/help/contents.py --- frescobaldi-1.2.0/frescobaldi_app/help/contents.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/help/contents.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,500 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The help contents. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QKeySequence + +from .helpimpl import page, shortcut, menu +from colorize import colorize + +import info + + +class nohelp(page): + """Shown when no help is found.""" + def title(): + return _("No Help") + + def body(): + return _("No help has been found on this topic.") + + +class contents(page): + """Main help contents.""" + def title(): + return _("Frescobaldi Manual") + + def body(): + text = _("""\ +

+Frescobaldi is a light-weight and powerful editor for LilyPond +sheet music documents. +This manual is written by {author} and documents {appname} version {version}. +

+""").format(author=info.maintainer, appname=info.appname, version=info.version) + # L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. + translator = _("Translated by Your Name.") + if translator != "Translated by Your Name.": + text += "

{0}

".format(translator) + text += _("""\ +

How to get help inside Frescobaldi

+ +

+In many dialogs you can click a Help button or press the {key_help} key. +Many user interface items also have "What's This" information which can be +revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}. +

+""").format(key_help = shortcut(QKeySequence.HelpContents), + key_whatsthis = shortcut(QKeySequence.WhatsThis), + menu_whatsthis = menu(_("Help"), _("What's This"))) + return text + + def children(): + import scorewiz.dialog + return ( + introduction, + starting, + scorewiz.dialog.scorewiz_help, + tools, + editor, + about, + toc, + ) + + +class introduction(page): + def title(): + return _("Introduction") + + def body(): + return _("""\ +

+LilyPond +is an open-source music engraving program, producing very high-quality sheet +music printouts from fairly simple text input files. +Those text files can be created with any text editor, and LilyPond then loads +the text file and outputs a beautiful engraving, by default in PDF format. +

+ +

+Frescobaldi is an application designed to make editing LilyPond music scores +faster and easier. You still will need to learn the LilyPond input language. +If you read the {getting_started} section of this User Guide, you'll also pickup +some LilyPond basics. +

+ +

+Then you can continue to learn using the Learning Manual from +LilyPond's excellent online documentation. +

""").format(getting_started=starting.link()) + + + +class starting(page): + def title(): + return _("Getting Started") + + def body(cls): + d = {} + d['example'] = colorize(r"""\relative c'' { + \time 7/4 + c2 bes4 a2 g a bes4 a( g) f2 +} +\addlyrics { + Join us now and share the soft -- ware! +}""") + import engrave + ac = engrave.Engraver.instances()[0].actionCollection + d['key_engrave'] = shortcut(ac.engrave_preview) + import panels + ac = panels.PanelManager.instances()[0].musicview.actionCollection + d['key_jump'] = shortcut(ac.music_jump_to_cursor) + d['key_copy_image'] = shortcut(ac.music_copy_image) + ac = panels.PanelManager.instances()[0].logtool.actionCollection + d['key_error'] = shortcut(ac.log_next_error) + d['menu_engrave'] = menu(_("LilyPond"), _("Engrave (publish)")) + d['menu_preferences_lilypond'] = menu( + _("menu title", "Edit"), + _("Preferences"), + _("LilyPond Preferences")) + d['menu_clear_error_marks'] = menu( + _("menu title", "View"), + _("Clear Error Marks")) + d['menu_copy_image'] = menu( + _("menu title", "Edit"), + _("Copy to Image...")) + return _("""\ +

+The default screen of Frescobaldi shows a text document on the left and an +empty music preview on the right. +

+ +

+Now, in the text view, enter some LilyPond code, like this: +

+ +{example} + +

+Then click the Lily toolbar button or press {key_engrave}. +If all is well, LilyPond starts now and processes your file. +At the bottom of the screen you can follow LilyPond's progress. +If LilyPond does not encounter any mistakes on your part, it will produce a PDF +file that will be displayed in the music preview: +

+ +

+ +

+The Music View has many possibilities: +

+ +

    +
  • +Hovering notes and other objects will highlight them in the text; +click objects to move the text cursor to them +
  • + +
  • +Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer +
  • + +
  • +Ctrl-click on an empty place to show a magnifier glass +
  • + +
  • +Moving the text cursor or selecting text highlights the notes in the preview; +press {key_jump} to explicitly center and highlight a note or other object +in the preview. +
  • + +
  • +Shift-drag a selection and then press {key_copy_image} or {menu_copy_image} +to copy the selected music as a raster image to the clipboard, a file or +another application. +
  • +
+ +

+If your music score is finished, it is recommended to run LilyPond once again +with clickable notes turned off: menu {menu_engrave}. +This will result in much smaller PDF documents. +

+ +

+If LilyPond does not start at all, check if you have installed LilyPond +correctly and that the lilypond command is in your system's PATH environment +variable. If needed, provide the exact path to your LilyPond executable under +{menu_preferences_lilypond}. +

+ +

+If LilyPond encounters errors in your document they will show up in the log, +and Frescobaldi will mark the lines in your document where the errors were +found. Clicking the error in the log or pressing {key_error} immediately +brings the text cursor to the offending place. Pressing {key_error} again +will move to the next error message and so forth. When running LilyPond +again, the error line marks will be removed. +You can manually remove the error line markings with the option +{menu_clear_error_marks}. +

+""").format(**d) + + +class tools(page): + def title(): + return _("Other Tools") + + def body(): + return _("""\ +

Some other important tools are listed here.

+""") + + def children(): + import quickinsert.widget + import snippet.widget + import pitch.pitch + import rhythm.rhythm + import hyphendialog + return ( + quickinsert.widget.quickinsert_help, + snippet.widget.snippet_help, + pitch.pitch.pitch_help, + rhythm.rhythm.rhythm_help, + hyphendialog.lyrics_help, + ) + + +class about(page): + def title(): + return _("About Frescobaldi") + + def body(): + return _("""\ +

+Frescobaldi is named after +Girolamo +Frescobaldi (1583 – 1643), an Italian organist and composer. +

+ +

+Frescobaldi's homepage is at +www.frescobaldi.org +and there is a mailinglist at +frescobaldi@googlegroups.com +(more info). +

+""") + def children(): + return ( + credits, + contributing, + history, + ) + + +class credits(page): + def title(): + return _("Credits") + + def body(): + text = [] + text.append( + _("Frescobaldi's main author is {author}.").format(author=info.maintainer)) + import about + text.extend(about.credits()) + return '\n'.join(map('

{0}

'.format, text)) + + +class contributing(page): + def title(): + return _("Contributing") + + def body(): + return _("""\ +

+Frescobaldi is a Free +Software project to create a user friendly LilyPond music score editor. +The goal is to make Frescobaldi available on all major platforms. +

+ +

+Frescobaldi is developed in a public GitHub repository at {url}. +There you can browse or checkout the source code and report bugs and wishes. +

+ +

+You can contribute by simply using Frescobaldi and reporting bugs and suggestions. +Translations are also very welcome. How to create new translations is described +in the file README-translations in the source distribution of Frescobaldi. +If you want to add functionality you can find information about the source code +structure in the file README-development. +

+""").format(url='' + 'github.com/wbsoft/frescobaldi') + + +class history(page): + def title(): + return _("History of Frescobaldi") + + def body(): + return _("""\ +

+Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor Kate. +LilyKDE was written in Python and released in 2007 on Christmas. +

+ +

+When KDE developed version 4, it was not immediately possible to make Kate +plugins in Python. So LilyKDE became a standalone application, wrapping the +Kate texteditor part, and was renamed to Frescobaldi. It still used the Okular +KDE part to display PDF documents. +Frescobaldi 0.7 was the first public release, on Christmas 2008. +On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version 1.2.0. +

+ +

+At that time it was decided to move away from the KDE4 libraries and just use +Python and Qt4 which are easily available on all major computing platforms. +Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is +targeted at Christmas 2011. +

+""") + + +class editor(page): + def title(): + return _("The editor") + + def body(): + return _("""\ +

+In this part the features of the editor are discussed, +e.g. how to control auto-indenting, how to use search and replace, +etcetera. +

+""") + def children(): + return ( + search_replace, + document_variables, + ) + + +class search_replace(page): + def title(): + return _("Search and replace") + + def body(): + import app + ac = app.windows[0].actionCollection + d = { + 'key_search': shortcut(ac.edit_find), + 'key_replace': shortcut(ac.edit_replace), + 'edit_menu': menu(_("Edit")), + } + return _("""\ +

+In the menu {edit_menu} the commands Find ({key_search}) +and Replace ({key_replace}) can be found, which open a small window at the +bottom of the view. +It is possible to search for plain text or regular expressions. +

+ +

+Regular expressions are advanced search texts that contain characters that can +match multiple characters in the document. +When replacing text, it is also possible to refer to parenthesized parts of the +search text. +

+ +

+In regular expression search mode, some characters have a special meaning: +

+ +
+
*
+
matches the preceding character or group zero or more times
+
+
+
matches the preceding character or group one or more times
+
?
+
matches the preceding character or group zero or one time
+
[ ]
+
matches one of the contained characters
+
( )
+
group characters. This also saves the matched text in the group. +When replacing, you can use characters like \\1, \\2 +etcetera, to write the text of the corresponding group in the replacement text. +
+
\\\\ \\n \\t \\s \\d \\w
+
match, respectively, a backslash, a newline, a tab, any whitespace +character, a digit, a generic word-like character.
+
+ +

+A full discussion on regular expressions can be found in the +Python +documentation. +

+""").format(**d) + + +class document_variables(page): + def title(): + return _("Document variables") + + def body(): + text = [] + text.append('

') + text.append(_("""\ +Document variables are variables that influence the behaviour of Frescobaldi. +They can be written in the first five or last five lines of a document. +If a line contains '-*-', Frescobaldi searches the rest of +the lines for variable definitions like name: value;. +""")) + text.append('

\n

') + text.append(_("The following variables are recognized:")) + text.append('

') + text.append('
') + + for name, arg, description in ( + ('mode', _("mode"), + #L10N: do not translate the mode names lilypond, html, etc. + _("Force mode to be one of lilypond, html, texinfo, latex, " + "docbook or scheme. Default: automatic mode recognition.")), + ('master', _("filename"), + _("Compiles another LilyPond document instead of the current.")), + ('coding', _("encoding"), + _("Use another encoding than the default UTF-8.")), + ('version', _("version"), + _("Set the LilyPond version to use, can be used for " + "non-LilyPond documents.")), + ('tab-width', _("number"), + _("The width of a tab character, by default 8.")), + ('indent-tabs', "yes/no", + _("Whether to use tabs in indent, by default {no}.").format( + no="no")), + ('document-tabs', "yes/no", + _("Whether to use tabs elsewhere in the document, " + "by default {yes}.").format(yes="yes")), + ('indent-width', _("number"), + _("The number of spaces each indent level uses, by default 2.")), + ): + text.append( + '
{0}: {1};
' + '
{2}
\n' + .format(name, arg, description)) + text.append('
\n') + text.append('

') + text.append(_("You can put document variables in comments.")) + text.append('

') + return ''.join(text) + + +class toc(page): + def title(): + return _("Table of Contents") + + def body(): + html = ['
    '] + seen = set() + def addpage(page): + if page not in seen: + seen.add(page) + html.append('
  • ') + html.append(page.link()) + html.append('
  • ') + if page.children(): + html.append('
      ') + for p in page.children(): + addpage(p) + html.append('
    \n') + for page in contents.children(): + addpage(page) + html.append('
\n') + return ''.join(html) + + Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/help/getting_started1.png and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/help/getting_started1.png differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/help/helpimpl.py frescobaldi-2.0.0/frescobaldi_app/help/helpimpl.py --- frescobaldi-1.2.0/frescobaldi_app/help/helpimpl.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/help/helpimpl.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,182 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The help implementation. + +A help page (or 'page') is a class, not an instance. Help pages +are never instantiated. + +You should define the title() and body() methods and may define children() +and seealso(). + +""" + +from __future__ import unicode_literals + +import re + +from PyQt4.QtGui import QAction, QShortcut, QKeySequence + + +all_pages = {} + + +class helpmeta(type): + """Metaclass for the page base class. + + Does the following things to the page class: + - automatically add the page to the all_pages dictionary + - adds the 'name' attribute and set it to the class name + - makes the four methods 'title', 'body', 'children' and 'seealso' + a classmethod if they require one or more arguments, and a staticmethod + if they require no argument. + + """ + def __new__(cls, name, bases, d): + for n in ('title', 'body', 'children', 'seealso'): + if n in d: + if d[n].func_code.co_argcount > 0: + d[n] = classmethod(d[n]) + else: + d[n] = staticmethod(d[n]) + d['name'] = name + page = type.__new__(cls, name, bases, d) + all_pages[name] = page + return page + + +class page(object): + """Base class for help items. + + classes based on help are never instantiated; the class is simply used as a + data container. Some methods should be defined, which are used as classmethod + if they have an argument, or as staticmethod when they accept no arguments. + + The methods may return translated text, when the application changes + language, the methods are called again. + + Set the popup class attribute to True to make the help topic a popup. + """ + popup = False + + @classmethod + def link(cls): + return '{1}'.format(cls.name, cls.title()) + + def title(): + return "" + + def body(): + return "" + + def children(): + return () + + def seealso(): + return () + + +# This syntax to make 'page' use the metaclass works in both Python2 and 3 +page = helpmeta(page.__name__, page.__bases__, dict(page.__dict__)) + + +def html(name): + """Returns the HTML for the named help item.""" + from . import contents + import info + page = all_pages.get(name, contents.nohelp) + html = [] + html.append('{0}'.format(page.title())) + if page.popup: + # make this a popup (see QTextBrowser docs) + html.insert(0, '') + up = () # dont list ancestor pages in popup + else: + # show the title(s) of the pages that have us as child + up = [p for p in all_pages.values() if page in p.children()] + if up: + html.append('

'+ _("Up:")) + html.extend(' ' + p.link() for p in up) + html.append('

') + # body + html.append('

{0}

'.format(page.title())) + html.append(markexternal(page.body())) + # link to child docs + if page.children(): + html.extend('
{0}
'.format(p.link()) for p in page.children()) + elif up: + # give a Next: link if there is a sibling page left + for p in up: + i = p.children().index(page) + if i < len(p.children()) - 1: + html.append('
{0} {1}
'.format( + _("Next:"), p.children()[i+1].link())) + # link to "see also" docs + if page.seealso(): + html.append("

{0}

".format(_("See also:"))) + html.extend('
{0}
'.format(p.link()) for p in page.seealso()) + # nice footer + html.append('

') + html.append('
{0} {1}
'.format(info.appname, info.version)) + html.append('') + return ''.join(html) + + +def markexternal(text): + """Marks http(s)/ftp(s) links as external with an arrow.""" + pat = re.compile(r''']*>''', re.I) + return pat.sub(r'\g<0>⬀', text) + + +def shortcut(item): + """Returns a suitable text for the keyboard shortcut of the given item. + + Item may be a QAction, a QShortcut, a QKeySequence or a + QKeySequence.StandardKey. + + The text is meant to be used in the help docs. + + """ + if isinstance(item, QAction): + seq = item.shortcut() + elif isinstance(item, QShortcut): + seq = item.key() + elif isinstance(item, QKeySequence.StandardKey): + seq = QKeySequence(item) + else: + seq = item + return seq.toString(QKeySequence.NativeText) or _("(no key defined)") + + +def menu(*titles): + """Returns a nicely formatted list describing a menu option. + + e.g. + + menu('Edit', 'Preferences') + + yields something like: + + 'Edit->Preferences' + + """ + return '{0}'.format('→'.join(titles)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/help/__init__.py frescobaldi-2.0.0/frescobaldi_app/help/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/help/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/help/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,66 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The built-in help system. + +Inherit from 'page' to make a help page. +See helpimpl.py. +""" + +from PyQt4.QtGui import QDialogButtonBox, QKeySequence + +from .helpimpl import page, shortcut, menu + + +def help(page): + """Shows the help window with the specified page (class or name).""" + window().displayHelp(page) + + +def window(): + global _browser + try: + return _browser + except NameError: + from . import browser + _browser = browser.Window() + return _browser + + +def addButton(box, page): + """Adds a Help button to the specified QDialogButtonBox. + + When clicked or F1 (the system standard help key) is pressed, + the specified help page (class or name) is opened. + + """ + box.addButton(QDialogButtonBox.Help).setShortcut(QKeySequence.HelpContents) + box.helpRequested.connect(lambda: help(page)) + + +def openWhatsThis(widget, enabled=True): + """Open WhatsThis links in help browser if enabled is True (default).""" + from . import whatsthis + if enabled: + widget.installEventFilter(whatsthis.handler) + else: + widget.removeEventFilter(whatsthis.handler) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/help/whatsthis.py frescobaldi-2.0.0/frescobaldi_app/help/whatsthis.py --- frescobaldi-1.2.0/frescobaldi_app/help/whatsthis.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/help/whatsthis.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,40 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Link help:urls in WhatsThis text to the help browser. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QEvent, QObject, QUrl + +from . import help + + +class WhatsThisHandler(QObject): + def eventFilter(self, obj, ev): + if ev.type() == QEvent.WhatsThisClicked: + if ev.href().startswith("help:"): + help(ev.href()[5:]) + return False + + +handler = WhatsThisHandler() + diff -Nru frescobaldi-1.2.0/frescobaldi_app/helpers.py frescobaldi-2.0.0/frescobaldi_app/helpers.py --- frescobaldi-1.2.0/frescobaldi_app/helpers.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/helpers.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,93 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Helper application stuff. +""" + +from __future__ import unicode_literals + +import os +import re +import subprocess + +from PyQt4.QtCore import QSettings +from PyQt4.QtGui import QDesktopServices + +def command(type): + """Returns the command for the specified type as a list. + + Returns None if no command was specified. + + """ + cmd = QSettings().value("helper_applications/" + type, "") + if not cmd: + return + + if os.path.isabs(cmd) and os.access(cmd, X_OK): + return [cmd] + + # remove double quotes, keeping quoted parts together + # (because shlex does not yet work with unicode...) + command = [item.replace('"', '') for item in + re.findall(r'[^\s"]*"[^"]*"[^\s"]*|[^\s"]+', cmd)] + + return command + + +def openUrl(url, type="browser"): + """Opens the specified QUrl, using the specified type.""" + # be sure to pick a suitable type + if url.scheme() == "mailto": + type = "email" + elif type == "browser" and url.toLocalFile(): + ext = os.path.splitext(url.toLocalFile())[1].lower() + if os.path.isdir(url.toLocalFile()): + type = "directory" + elif ext == '.pdf': + type = "pdf" + elif ext in ('.png', '.jpg', '.jpeg'): + type = "image" + elif ext in ('.midi', '.mid'): + type = "midi" + + # get the command + cmd = command(type) + if not cmd: + QDesktopServices.openUrl(url) + return + + prog = cmd.pop(0) + + workdir = None + if url.toLocalFile(): + workdir = os.path.dirname(url.toLocalFile()) + + if any('$f' in a or '$u' in a for a in cmd): + cmd = [a.replace('$u', url.toString()) + if '$u' in a else a.replace('$f', url.toLocalFile()) + for a in cmd] + elif type in ("browser", "email"): + cmd.append(url.toString()) + elif type != "shell": + cmd.append(url.toLocalFile()) + + subprocess.Popen([prog] + cmd, cwd=workdir) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/highlighter.py frescobaldi-2.0.0/frescobaldi_app/highlighter.py --- frescobaldi-1.2.0/frescobaldi_app/highlighter.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/highlighter.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,281 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Highlighter class provides syntax highlighting and more information +about a document's contents. +""" + +from __future__ import unicode_literals + + +from PyQt4.QtGui import ( + QSyntaxHighlighter, QTextBlockUserData, QTextCursor, QTextDocument) + + +import ly.lex +import ly.lex.lilypond +import ly.lex.scheme +import ly.lex.html +import ly.lex.texinfo + +import app +import textformats +import metainfo +import plugin +import variables +import documentinfo + + +metainfo.define('highlighting', True) + + +def highlighter(document): + """Returns the Highlighter for this document.""" + return Highlighter.instance(document) + + +_highlightFormats = None + +def highlightFormats(): + global _highlightFormats + if _highlightFormats is None: + _highlightFormats = HighlightFormats(textformats.formatData('editor')) + return _highlightFormats + +def _resetHighlightFormats(): + global _highlightFormats + _highlightFormats = None + +app.settingsChanged.connect(_resetHighlightFormats, -100) # before all others + + +# when highlighting, don't test all the Token base classes +_token_mro_slice = slice(1, -len(ly.lex.Token.__mro__)) + + +class HighlightFormats(object): + """Manages a dictionary with all highlightformats coupled to token types.""" + def __init__(self, data): + self._formats = d = {} + + # LilyPond + d[ly.lex.lilypond.Keyword] = data.textFormat('lilypond', 'keyword') + d[ly.lex.lilypond.Command] = data.textFormat('lilypond', 'command') + d[ly.lex.lilypond.Dynamic] = data.textFormat('lilypond', 'dynamic') + d[ly.lex.lilypond.Note] = data.textFormat('lilypond', 'pitch') + d[ly.lex.lilypond.Rest] = data.textFormat('lilypond', 'pitch') + d[ly.lex.lilypond.Skip] = data.textFormat('lilypond', 'pitch') + d[ly.lex.lilypond.Octave] = data.textFormat('lilypond', 'octave') + d[ly.lex.lilypond.Duration] = data.textFormat('lilypond', 'duration') + d[ly.lex.lilypond.OctaveCheck] = data.textFormat('lilypond', 'check') + d[ly.lex.lilypond.Fingering] = data.textFormat('lilypond', 'fingering') + d[ly.lex.lilypond.StringNumber] = data.textFormat('lilypond', 'stringnumber') + d[ly.lex.lilypond.Articulation] = data.textFormat('lilypond', 'articulation') + d[ly.lex.lilypond.Slur] = data.textFormat('lilypond', 'slur') + d[ly.lex.lilypond.Chord] = data.textFormat('lilypond', 'chord') + d[ly.lex.lilypond.PipeSymbol] = data.textFormat('lilypond', 'check') + d[ly.lex.lilypond.Markup] = data.textFormat('lilypond', 'markup') + d[ly.lex.lilypond.LyricMode] = data.textFormat('lilypond', 'lyricmode') + d[ly.lex.lilypond.Lyric] = data.textFormat('lilypond', 'lyrictext') + d[ly.lex.lilypond.LyricTie] = data.textFormat('lilypond', 'slur') + d[ly.lex.lilypond.Repeat] = data.textFormat('lilypond', 'repeat') + d[ly.lex.lilypond.Specifier] = data.textFormat('lilypond', 'specifier') + d[ly.lex.lilypond.UserCommand] = data.textFormat('lilypond', 'usercommand') + d[ly.lex.lilypond.Delimiter] = data.textFormat('lilypond', 'delimiter') + d[ly.lex.lilypond.ContextName] = data.textFormat('lilypond', 'context') + d[ly.lex.lilypond.GrobName] = data.textFormat('lilypond', 'grob') + d[ly.lex.lilypond.ContextProperty] = data.textFormat('lilypond', 'property') + d[ly.lex.lilypond.Variable] = data.textFormat('lilypond', 'variable') + d[ly.lex.lilypond.UserVariable] = data.textFormat('lilypond', 'uservariable') + d[ly.lex.lilypond.Value] = data.textFormat('lilypond', 'value') + d[ly.lex.lilypond.String] = data.textFormat('lilypond', 'string') + d[ly.lex.lilypond.StringQuoteEscape] = data.textFormat('lilypond', 'stringescape') + d[ly.lex.lilypond.Comment] = data.textFormat('lilypond', 'comment') + d[ly.lex.lilypond.Error] = data.textFormat('lilypond', 'error') + d[ly.lex.lilypond.Repeat] = data.textFormat('lilypond', 'repeat') + + + # Scheme + d[ly.lex.lilypond.SchemeStart] = data.textFormat('scheme', 'scheme') + d[ly.lex.scheme.Scheme] = d[ly.lex.lilypond.SchemeStart] + d[ly.lex.scheme.String] = data.textFormat('scheme', 'string') + d[ly.lex.scheme.Comment] = data.textFormat('scheme', 'comment') + d[ly.lex.scheme.Number] = data.textFormat('scheme', 'number') + d[ly.lex.scheme.LilyPond] = data.textFormat('scheme', 'lilypond') + + # HTML + d[ly.lex.html.Tag] = data.textFormat('html', 'tag') + d[ly.lex.html.AttrName] = data.textFormat('html', 'attribute') + d[ly.lex.html.Value] = data.textFormat('html', 'value') + d[ly.lex.html.String] = data.textFormat('html', 'string') + d[ly.lex.html.EntityRef] = data.textFormat('html', 'entityref') + d[ly.lex.html.Comment] = data.textFormat('html', 'comment') + d[ly.lex.html.LilyPondTag] = data.textFormat('html', 'lilypondtag') + + # Texinfo + d[ly.lex.texinfo.Keyword] = data.textFormat('texinfo', 'keyword') + d[ly.lex.texinfo.Block] = data.textFormat('texinfo', 'block') + d[ly.lex.texinfo.Attribute] = data.textFormat('texinfo', 'attribute') + d[ly.lex.texinfo.EscapeChar] = data.textFormat('texinfo', 'escapechar') + d[ly.lex.texinfo.Verbatim] = data.textFormat('texinfo', 'verbatim') + d[ly.lex.texinfo.Comment] = data.textFormat('texinfo', 'comment') + + def format(self, token): + """Returns the format defined in the formats dictionary for the token class. + + Returns None if no format is defined. + Return values are cached to improve the lookup speed. + + """ + d = self._formats + cls = token.__class__ + try: + return d[cls] + except KeyError: + for c in cls.__mro__[_token_mro_slice]: + try: + f = d[c] + break + except KeyError: + pass + else: + f = None + d[cls] = f + return f + + +class Highlighter(QSyntaxHighlighter, plugin.Plugin): + def __init__(self, document): + QSyntaxHighlighter.__init__(self, document) + self.setDocument(document) + self._fridge = ly.lex.Fridge() + app.settingsChanged.connect(self.rehighlight) + self._highlighting = metainfo.info(document).highlighting + document.loaded.connect(self._resetHighlighting) + self._mode = documentinfo.mode(document, False) + variables.manager(document).changed.connect(self._variablesChange) + + def _variablesChange(self): + mode = documentinfo.mode(self.document(), False) + if mode != self._mode: + self._mode = mode + self.rehighlight() + + def _resetHighlighting(self): + """Switches highlighting on or off depending on saved metainfo.""" + self.setHighlighting(metainfo.info(self.document()).highlighting) + + def highlightBlock(self, text): + """Called by Qt when the highlighting of the current line needs updating.""" + # find the state of the previous line + prev = self.previousBlockState() + state = self._fridge.thaw(prev) + blank = not state and (not text or text.isspace()) + if not state: + state = self.initialState() + + # collect and save the tokens + data = userData(self.currentBlock()) + data.tokens = tokens = tuple(state.tokens(text)) + + # if blank thus far, keep the highlighter coming back + # because the parsing state is not yet known; else save the state + self.setCurrentBlockState(prev - 1 if blank else self._fridge.freeze(state)) + + # apply highlighting if desired + if self._highlighting: + setFormat = lambda f: self.setFormat(token.pos, len(token), f) + formats = highlightFormats() + for token in tokens: + f = formats.format(token) + if f: + setFormat(f) + + def setHighlighting(self, enable): + """Enables or disables highlighting.""" + changed = enable != self._highlighting + self._highlighting = enable + if changed: + self.rehighlight() + + def isHighlighting(self): + """Returns whether highlighting is active.""" + return self._highlighting + + def state(self, block): + """Returns a thawn ly.lex.State() object at the beginning of the given QTextBlock. + + This assumes the highlighter has already run through the whole document. + To get the state info please use tokeniter.state() instead of this method. + + """ + userState = block.previous().userState() + return self._fridge.thaw(userState) or self.initialState() + + def initialState(self): + """Returns the initial State for this document.""" + mode = self._mode or ly.lex.guessMode(self.document().toPlainText()) + return ly.lex.state(mode) + + +def userData(block): + """Gets the block data for this block, setting an empty one if not yet set.""" + data = block.userData() + if not data: + data = QTextBlockUserData() + block.setUserData(data) + return data + + +def htmlCopy(document, type='editor'): + """Returns a new QTextDocument with highlighting set as HTML textcharformats.""" + data = textformats.formatData(type) + doc = QTextDocument() + doc.setDefaultFont(data.font) + doc.setPlainText(document.toPlainText()) + highlight(doc, HighlightFormats(data), ly.lex.state(documentinfo.mode(document))) + return doc + + +def highlight(document, formats=None, state=None): + """Highlights a generic QTextDocument once. + + formats is an optional HighlightFormats instance, defaulting to the current + configured editor highlighting formats. + state is an optional ly.lex.State instance. By default the text type + is guessed. + + """ + if formats is None: + formats = highlightFormats() + if state is None: + state = ly.lex.guessState(document.toPlainText()) + cursor = QTextCursor(document) + block = document.firstBlock() + while block.isValid(): + for token in state.tokens(block.text()): + f = formats.format(token) + if f: + cursor.setPosition(block.position() + token.pos) + cursor.setPosition(block.position() + token.end, QTextCursor.KeepAnchor) + cursor.setCharFormat(f) + block = block.next() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/historymanager.py frescobaldi-2.0.0/frescobaldi_app/historymanager.py --- frescobaldi-1.2.0/frescobaldi_app/historymanager.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/historymanager.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,85 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages the history of the open documents of a MainWindow. +Contains smart logic to switch documents if the active document is closed. + +If no documents remain, listen to other HistoryManager instances and +make the document set-current there also current here. +""" + +import weakref + +import app +import signals + +# This signal is emitted whenever a MainWindow sets a document current (active) +# Any HistoryManager can listen to it and follow it if no document is current +_setCurrentDocument = signals.Signal() # Document + + +class HistoryManager(object): + """Keeps the history of document switches by the user. + + If a document is closed, the previously active document is set active. + If no documents remain, nothing is done. + + """ + def __init__(self, mainwindow, othermanager=None): + self.mainwindow = weakref.ref(mainwindow) + self._documents = list(othermanager._documents if othermanager else app.documents) + self._has_current = bool(self._documents) + mainwindow.currentDocumentChanged.connect(self.setCurrentDocument) + app.documentCreated.connect(self.addDocument, 1) + app.documentClosed.connect(self.removeDocument, 1) + _setCurrentDocument.connect(self._listen) + + def addDocument(self, doc): + self._documents.insert(-1, doc) + + def removeDocument(self, doc): + active = doc is self._documents[-1] + if active: + if len(self._documents) > 1: + self.mainwindow().setCurrentDocument(self._documents[-2]) + else: + # last document removed; listen to setCurrentDocument from others + self._has_current = False + self._documents.remove(doc) + + def setCurrentDocument(self, doc): + self._documents.remove(doc) + self._documents.append(doc) + self._has_current = True + # notify possible interested parties + _setCurrentDocument(doc) + + def documents(self): + """Returns the documents in order of most recent been active.""" + return self._documents[::-1] + + def _listen(self, document): + """Called when any MainWindow emits the currentDocumentChanged.""" + if not self._has_current: + # prevent nested emits of this signal from reacting MainWindows + with _setCurrentDocument.blocked(): + self.mainwindow().setCurrentDocument(document) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/hyphdicts/__init__.py frescobaldi-2.0.0/frescobaldi_app/hyphdicts/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/hyphdicts/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/hyphdicts/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,14 @@ +#! python + +""" +In this directory you can place hyphenation dictionaries (with names like +"hyph_nl_NL.dic", e.g. from OpenOffice.org or MySpell), which will then be found +by the Frescobaldi hyphenation dialog (see lyrics.py, hyphendialog.py and +hyphenator.py). +""" + +import os + +path = os.path.abspath(__path__[0]) + +del os diff -Nru frescobaldi-1.2.0/frescobaldi_app/hyphenator.py frescobaldi-2.0.0/frescobaldi_app/hyphenator.py --- frescobaldi-1.2.0/frescobaldi_app/hyphenator.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/hyphenator.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,267 @@ +""" + +This is a Pure Python module to hyphenate text. + +It is inspired by Ruby's Text::Hyphen, but currently reads standard *.dic files, +that must be installed separately. + +In the future it's maybe nice if dictionaries could be distributed together with +this module, in a slightly prepared form, like in Ruby's Text::Hyphen. + +Wilbert Berendsen, March 2008 +info@wilbertberendsen.nl + +License: LGPL. More info: http://python-hyphenator.googlecode.com/ + +""" +from __future__ import unicode_literals + +import codecs +import re + + +__all__ = ["Hyphenator"] + +# cache of per-file HyphenationDictionary objects +_hdcache = {} + +# precompile some regular expressions +parse = re.compile(r'(\d?)(\D?)').findall + + +# Match ^^xx where xx is a two-digit hexadecimal value +_hex_re = re.compile(r'\^{2}([0-9a-f]{2})') + +# replace the matched hex string with the corresponding unicode character +_hex_repl = lambda matchObj: unichr(int(matchObj.group(1), 16)) + +def replace_hex(text): + """Replaces ^^xx (where xx is a two-digit hexadecimal value) occurrences + by the corresponding unicode character. + + """ + return _hex_re.sub(_hex_repl, text) + + +class ParsedAlternative(object): + """Parse nonstandard hyphen pattern alternative. + + when called with an odd value, the instance returns an integer with data + attribute (DataInt) about the current position in the pattern. + + """ + def __init__(self, pat, alt): + alt = alt.split(',') + self.change = alt[0] + if len(alt) > 2: + self.index = int(alt[1]) + self.cut = int(alt[2]) + 1 + else: + self.index = 1 + self.cut = len(re.sub(r'[\d\.]', '', pat)) + 1 + if pat.startswith('.'): + self.index += 1 + + def __call__(self, val): + self.index -= 1 + val = int(val) + if val & 1: + return DataInt(val, (self.change, self.index, self.cut)) + else: + return val + + +class DataInt(int): + """An integer with a data attribute. + + Just an int some other data can be stuck to in a data attribute. + Instantiate with ref=other to use the data from the other DataInt. + + """ + def __new__(cls, value, data=None, ref=None): + obj = int.__new__(cls, value) + if ref and type(ref) is DataInt: + obj.data = ref.data + else: + obj.data = data + return obj + + +class HyphenationDictionary(object): + """Reads a hyph_*.dic file and stores the hyphenation patterns. + + Parameters: + filename : filename of hyph_*.dic pattern file to read + + """ + def __init__(self, filename): + self.patterns = {} + with open(filename) as f: + # use correct encoding, specified in first line + for encoding in f.readline().split(): + if encoding != "charset": + try: + decoder = codecs.getreader(encoding) + break + except LookupError: + pass + else: + decoder = codecs.getreader('latin1') + + for pat in decoder(f): + pat = pat.strip() + if not pat or pat[0] == '%': + continue + # replace ^^hh with the real character + pat = replace_hex(pat) + # read nonstandard hyphen alternatives + if '/' in pat: + pat, alt = pat.split('/', 1) + factory = ParsedAlternative(pat, alt) + else: + factory = int + tag, values = zip(*[(s, factory(i or "0")) + for i, s in parse(pat)]) + # if only zeros, skip this pattern + if any(values): + # strip zeros and store start offset. + start, end = 0, len(values) + while not values[start]: + start += 1 + while not values[end-1]: + end -= 1 + self.patterns[''.join(tag)] = start, values[start:end] + self.cache = {} + self.maxlen = max(map(len, self.patterns)) + + def positions(self, word): + """Returns a list of positions where the word can be hyphenated. + + E.g. for the dutch word 'lettergrepen' this method returns + the list [3, 6, 9]. + + Each position is a 'data int' (DataInt) with a data attribute. + If the data attribute is not None, it contains a tuple with + information about nonstandard hyphenation at that point: + (change, index, cut) + + change: is a string like 'ff=f', that describes how hyphenation + should take place. + index: where to substitute the change, counting from the current + point + cut: how many characters to remove while substituting the nonstandard + hyphenation + + """ + word = word.lower() + try: + return self.cache[word] + except KeyError: + pass + prepWord = '.' + word + '.' + res = [0] * (len(prepWord) + 1) + for i in range(len(prepWord) - 1): + for j in range(i + 1, min(i + self.maxlen, len(prepWord)) + 1): + p = self.patterns.get(prepWord[i:j]) + if p: + offset, values = p + s = slice(i + offset, i + offset + len(values)) + res[s] = map(max, values, res[s]) + + positions = [DataInt(i - 1, ref=r) for i, r in enumerate(res) if r % 2] + self.cache[word] = positions + return positions + + +class Hyphenator(object): + """Reads a hyph_*.dic file and stores the hyphenation patterns. + + Provides methods to hyphenate strings in various ways. + Parameters: + -filename : filename of hyph_*.dic to read + -left: make the first syllabe not shorter than this + -right: make the last syllabe not shorter than this + -cache: if true (default), use a cached copy of the dic file, if possible + + left and right may also later be changed: + h = Hyphenator(file) + h.left = 1 + + """ + def __init__(self, filename, left=2, right=2, cache=True): + self.left = left + self.right = right + if not cache or filename not in _hdcache: + _hdcache[filename] = HyphenationDictionary(filename) + self.hd = _hdcache[filename] + + def positions(self, word): + """Returns a list of positions where the word can be hyphenated. + + See also HyphenationDictionary.positions. The points that are too far to + the left or right are removed. + + """ + right = len(word) - self.right + return [i for i in self.hd.positions(word) if self.left <= i <= right] + + def iterate(self, word): + """Iterate over all hyphenation possibilities, the longest first.""" + for p in reversed(self.positions(word)): + if p.data: + # get the nonstandard hyphenation data + change, index, cut = p.data + if word.isupper(): + change = change.upper() + c1, c2 = change.split('=') + yield word[:p+index] + c1, c2 + word[p+index+cut:] + else: + yield word[:p], word[p:] + + def wrap(self, word, width, hyphen='-'): + """Returns the longest possible first part and the last part of the + hyphenated word. + + The first part has the hyphen already attached. Returns None, if there + is no hyphenation point before width, or if the word could not be + hyphenated. + + """ + width -= len(hyphen) + for w1, w2 in self.iterate(word): + if len(w1) <= width: + return w1 + hyphen, w2 + + def inserted(self, word, hyphen='-'): + """Returns the word as a string with all the possible hyphens inserted. + + E.g. for the dutch word 'lettergrepen' this method returns the string + 'let-ter-gre-pen'. The hyphen string to use can be given as the second + parameter, that defaults to '-'. + + """ + l = list(word) + for p in reversed(self.positions(word)): + if p.data: + # get the nonstandard hyphenation data + change, index, cut = p.data + if word.isupper(): + change = change.upper() + l[p + index : p + index + cut] = change.replace('=', hyphen) + else: + l.insert(p, hyphen) + return ''.join(l) + + __call__ = iterate + + +if __name__ == "__main__": + import sys + dict_file = sys.argv[1] + word = sys.argv[2].decode('latin1') + + h = Hyphenator(dict_file, left=1, right=1) + + for i in h(word): + print i + diff -Nru frescobaldi-1.2.0/frescobaldi_app/hyphendialog.py frescobaldi-2.0.0/frescobaldi_app/hyphendialog.py --- frescobaldi-1.2.0/frescobaldi_app/hyphendialog.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/hyphendialog.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,198 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Dialog for selecting a hyphen language, +and code for finding hyphenation dictionaries to present the user a choice. +""" + +from __future__ import unicode_literals + +import glob +import locale +import os + +from PyQt4.QtCore import QSettings, Qt +from PyQt4.QtGui import QDialog, QDialogButtonBox, QLabel, QListWidget, QVBoxLayout + +import app +import util +import help +import language_names +import widgets +import hyphdicts +import hyphenator + + +# paths to check for hyphen dicts +default_paths = [ + "share/hyphen", + "share/myspell", + "share/myspell/dicts", + "share/dict/ooo", + "share/apps/koffice/hyphdicts", + "lib/scribus/dicts", + "share/scribus/dicts", + "share/scribus-ng/dicts", + "share/hunspell", +] + + +def settings(): + """Returns the QSettings group for our settings.""" + settings = QSettings() + settings.beginGroup("hyphenation") + return settings + +def directories(): + """ Yields a list of existing paths based on config """ + # prefixes to look in for relative paths + prefixes = ['/usr/', '/usr/local/'] + + def gen(): + # if the path is not absolute, add it to all prefixes. + for path in settings().value("paths", default_paths) or []: + if os.path.isabs(path): + yield path + else: + for pref in prefixes: + yield os.path.join(pref, path) + yield hyphdicts.path + return filter(os.path.isdir, gen()) + +def findDicts(): + """ Find installed hyphen dictionary files """ + + # now find the hyph_xx_XX.dic files + dicfiles = (f for p in directories() + for f in glob.glob(os.path.join(p, 'hyph_*.dic')) if os.access(f, os.R_OK)) + + return dict((os.path.basename(dic)[5:-4], dic) for dic in dicfiles) + + +class HyphenDialog(QDialog): + def __init__(self, mainwindow): + super(HyphenDialog, self).__init__(mainwindow) + self.setWindowModality(Qt.WindowModal) + layout = QVBoxLayout() + self.setLayout(layout) + self.topLabel = QLabel() + self.listWidget = QListWidget() + + layout.addWidget(self.topLabel) + layout.addWidget(self.listWidget) + layout.addWidget(widgets.Separator()) + + self.buttons = b = QDialogButtonBox() + layout.addWidget(b) + b.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + help.addButton(b, lyrics_help) + b.rejected.connect(self.reject) + b.accepted.connect(self.accept) + + self.load() + app.translateUI(self) + util.saveDialogSize(self, "hyphenation/dialog/size") + + def translateUI(self): + self.setWindowTitle(app.caption(_("Hyphenate Lyrics Text"))) + self.topLabel.setText(_("Please select a language:")) + + def load(self): + self._langs = [(language_names.languageName(lang), lang, dic) + for lang, dic in findDicts().iteritems()] + self._langs.sort() + for name, lang, dic in self._langs: + self.listWidget.addItem("{0} ({1})".format(name, lang)) + + def select(): + lastused = settings().value("lastused") + if lastused: + yield lastused + try: + lang = locale.getdefaultlocale()[0] + except ValueError: + pass + else: + yield lang + yield lang.split('_')[0] + + langs = [item[1] for item in self._langs] + for preselect in select(): + try: + self.listWidget.setCurrentRow(langs.index(preselect)) + break + except ValueError: + continue + + def hyphenator(self): + if self.exec_() and self._langs: + lang, dic = self._langs[self.listWidget.currentRow()][1:] + result = hyphenator.Hyphenator(dic) + settings().setValue("lastused", lang) + else: + result = None + self.deleteLater() + return result + + +class lyrics_help(help.page): + def title(): + return _("Lyrics") + + def body(): + import lyrics + ac = lyrics.Lyrics.instances()[0].actionCollection + d = { + 'hyphen': " -- ", + 'example': "a -- men", + 'key_hyphen': help.shortcut(ac.lyrics_hyphenate), + 'menu_hyphen': help.menu(_("menu title", "Tools"), _("Lyrics")), + 'menu_settings': help.menu(_("menu title", "Edit"), _("Preferences")), + } + return _("""\ +

+Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make +those texts usable as lyrics. +It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc. +

+ +

+To use this feature you must first select the text you want to hyphenate. Then +press {key_hyphen} or choose {menu_hyphen}. +In the dialog that appears, select the language. +Click OK or press Enter to have the hyphenation take place. +

+ +

+A small limitation is that word processor hyphenation dictionaries often don't +want to break a word right after the first letter (e.g. '{example}'), because that +does not look nice in word processor texts. So it can happen that you +have to add some hyphens after the first letter of such lyrics. +

+ +

+There is also a command to remove hyphenation. This can be useful if you have a +stanza of lyrics that you just want to display as a markup below the music. +Under {menu_settings} you can enter a list of directories to search for +hyphenation pattern files. +

+""").format(**d) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/application-pdf.svg frescobaldi-2.0.0/frescobaldi_app/icons/application-pdf.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/application-pdf.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/application-pdf.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + text + plaintext + regular + document + + + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PDF + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/edit-clear-locationbar-rtl.svg frescobaldi-2.0.0/frescobaldi_app/icons/edit-clear-locationbar-rtl.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/edit-clear-locationbar-rtl.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/edit-clear-locationbar-rtl.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,757 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/icons/frescobaldi.ico and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/icons/frescobaldi.ico differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/frescobaldi.svg frescobaldi-2.0.0/frescobaldi_app/icons/frescobaldi.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/frescobaldi.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/frescobaldi.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/__init__.py frescobaldi-2.0.0/frescobaldi_app/icons/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/icons/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,70 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Icons. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import QDir, QFile, QFileInfo, QSettings, QSize +from PyQt4.QtGui import QFileIconProvider, QIcon + +QDir.setSearchPaths("icons", [ + os.path.join(__path__[0], "tango"), + __path__[0], +]) + +_cache = {} + + +_preferSystemIcons = QSettings().value("system_icons", True) not in (False, "false") + + +def get(name): + """Returns an icon with the specified name.""" + if _preferSystemIcons and QIcon.hasThemeIcon(name): + return QIcon.fromTheme(name) + try: + return _cache[name] + except KeyError: + icon = _cache[name] = QIcon() + # first try SVG + fname = 'icons:{0}.svg'.format(name) + if QFile(fname).exists(): + icon.addFile(fname) + else: + # then try different sizes + for size in (16, 22, 32, 48): + fname = 'icons:{1}x{1}/{0}.png'.format(name, size or '') + if QFile(fname).exists(): + qsize = QSize(size, size) if size else QSize() + icon.addFile(fname, qsize) + return icon + + +def file_type(name): + """Returns an icon for the given filename or extension.""" + if '.' not in name: + name = 'test.' + name + return QFileIconProvider().icon(QFileInfo(name)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/lilypond-run.svg frescobaldi-2.0.0/frescobaldi_app/icons/lilypond-run.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/lilypond-run.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/lilypond-run.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/pushpin.svg frescobaldi-2.0.0/frescobaldi_app/icons/pushpin.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/pushpin.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/pushpin.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/score_wizard.svg frescobaldi-2.0.0/frescobaldi_app/icons/score_wizard.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/score_wizard.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/score_wizard.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,593 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Oxygen team + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/application-exit.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/application-exit.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/application-exit.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/application-exit.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + System Log Out + + + log out + logout + exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/applications-graphics.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/applications-graphics.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/applications-graphics.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/applications-graphics.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Graphics Category + + + + Jakub Steiner + + + + + + graphics + category + pixel + vector + editor + draw + paint + + + http://tango-project.org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/applications-other.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/applications-other.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/applications-other.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/applications-other.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Other applications + + + Jakub Steiner + + + http://jimmac.musichall.cz/ + + + category + applications + other + unspecified + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-input-microphone.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-input-microphone.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-input-microphone.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-input-microphone.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Microphone + + + mic + mike + microphone + input + audio + record + voice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-volume-high.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-volume-high.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-volume-high.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-volume-high.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,645 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Volume - High + + + Jakub Steiner + + + + + Lapo Calamandrei + + + + + + http://www.tango-project.org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-volume-low.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-volume-low.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-volume-low.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-volume-low.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,643 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Volume - Low + + + Jakub Steiner + + + + + Lapo Calamandrei + + + + + + http://www.tango-project.org + + + + + volume + sound + level + low + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-volume-medium.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-volume-medium.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-volume-medium.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-volume-medium.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,648 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Volume - Medium + + + Jakub Steiner + + + + + Lapo Calamandrei + + + + + + http://www.tango-project.org + + + + + volume + sound + level + medium + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-volume-muted.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-volume-muted.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/audio-volume-muted.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/audio-volume-muted.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Volume - Muted + + + Jakub Steiner + + + + + Lapo Calamandrei + + + + + + http://www.tango-project.org + + + + + volume + sound + level + none + mute + muted + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/bookmark-new.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/bookmark-new.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/bookmark-new.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/bookmark-new.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,672 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + New Bookmark + + + bookmark + remember + favorite + + + + + + Andreas Nilsson + + + + + + Jakub Steiner + + + create bookmark action + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/configure-shortcuts.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/configure-shortcuts.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/configure-shortcuts.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/configure-shortcuts.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,837 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Character Map + + + key + map + character + accessory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/dialog-error.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/dialog-error.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/dialog-error.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/dialog-error.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Rodney Dawes + + + + + Jakub Steiner, Garrett LeSage + + + + Dialog Error + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-edit.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-edit.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-edit.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-edit.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,892 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + edit + find + locate + search + + + + + + Garrett LeSage + + + + + + Jakub Steiner, Steven Garrity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-new.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-new.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-new.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-new.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + New Document + + + Jakub Steiner + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-open.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-open.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-open.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-open.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,535 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Folder Icon Accept + 2005-01-31 + + + Jakub Steiner + + + + http://jimmac.musichall.cz + Active state - when files are being dragged to. + + + Novell, Inc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-print.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-print.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-print.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-print.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Print Document + + + Jakub Steiner + + + + http://jimmac.musichall.cz + + + document + lpr + print + local + laser + bubblejet + inkjet + print + output + cups + lpd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-save-all.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-save-all.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-save-all.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-save-all.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,754 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Jakub Steiner + + + + + hdd + hard drive + save + io + store + + + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-save-as.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-save-as.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-save-as.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-save-as.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,663 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Save As + + + Jakub Steiner + + + + + hdd + hard drive + save as + io + store + + + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-save.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-save.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/document-save.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/document-save.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,619 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Save + + + Jakub Steiner + + + + + hdd + hard drive + save + io + store + + + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-clear.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-clear.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-clear.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-clear.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Edit Clear + + + Andreas Nilsson + + + http://www.tango-project.org + + + clear + reset + blank + edit + + + + + + Jakub Steiner (although minimally ;) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-copy.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-copy.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-copy.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-copy.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Edit Copy + 2005-10-15 + + + Andreas Nilsson + + + + + edit + copy + + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-cut.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-cut.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-cut.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-cut.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Edit Cut + + + Garrett Le Sage + + + + + edit + cut + clipboard + + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-delete.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-delete.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-delete.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-delete.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,792 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Delete + + + + Jakub Steiner + + + + + edit + delete + shredder + + + + + Novell, Inc. + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-find-replace.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-find-replace.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-find-replace.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-find-replace.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,974 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Edit Find Replace + + + edit + find + locate + search + + + + + + Garrett LeSage + + + + + + Jakub Steiner, Steven Garrity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-find.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-find.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-find.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-find.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,750 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Edit Find + + + edit + find + locate + search + + + + + + Steven Garrity + + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-paste.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-paste.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-paste.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-paste.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,531 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Edit Paste + 2005-10-10 + + + Andreas Nilsson + + + + + edit + paste + + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-redo.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-redo.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-redo.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-redo.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Edit Redo + + + edit + redo + again + reapply + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-select-all.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-select-all.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-select-all.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-select-all.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Select All + + + + Andreas Nilsson + + + + + select + all + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-undo.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-undo.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/edit-undo.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/edit-undo.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Edit Undo + + + edit + undo + revert + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/folder-open.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/folder-open.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/folder-open.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/folder-open.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,482 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Folder Icon Accept + 2005-01-31 + + + Jakub Steiner + + + + http://jimmac.musichall.cz + Active state - when files are being dragged to. + + + Novell, Inc. + + + + + Garrett LeSage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-down.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-down.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-down.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-down.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Go Down + + + go + lower + down + arrow + pointer + > + + + + + Andreas Nilsson + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-home.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-home.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-home.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-home.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,445 @@ + +image/svg+xmlGo HomeJakub Steinerhttp://jimmac.musichall.czhomereturngodefaultuserdirectoryTuomas Kuosmanen + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-jump.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-jump.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-jump.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-jump.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Go Jump + + + go + jump + seek + arrow + pointer + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-next.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-next.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-next.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-next.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Go Next + + + go + next + right + arrow + pointer + > + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-previous.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-previous.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-previous.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-previous.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,854 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Go Previous + + + go + previous + left + arrow + pointer + < + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-up.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-up.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/go-up.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/go-up.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Go Up + + + go + higher + up + arrow + pointer + > + + + + + Andreas Nilsson + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/help-about.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/help-about.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/help-about.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/help-about.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,1203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Rodney Dawes + + + + + Jakub Steiner, Garrett LeSage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/help-contents.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/help-contents.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/help-contents.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/help-contents.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,701 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Help Contents + + + help + index + contents + + + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/image-x-generic.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/image-x-generic.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/image-x-generic.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/image-x-generic.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,581 @@ + + + + + + image/svg+xml + + + + + + + + Genric Image + + + Jakub Steiner + + + + imagepicturesnapshotphoto + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/list-add.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/list-add.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/list-add.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/list-add.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,436 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Add + 2006-01-04 + + + Andreas Nilsson + + + http://tango-project.org + + + add + plus + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/list-remove.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/list-remove.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/list-remove.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/list-remove.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Remove + 2006-01-04 + + + Andreas Nilsson + + + http://tango-project.org + + + remove + delete + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-eject.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-eject.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-eject.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-eject.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,450 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Media Playback Start + + + Jakub Steiner + + + + + + media + eject + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-playback-pause.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-playback-pause.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-playback-pause.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-playback-pause.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,641 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Media Playback Pause + + + Lapo Calamandrei + + + + + + media + pause + playback + video + music + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-playback-start.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-playback-start.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-playback-start.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-playback-start.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Media Playback Start + + + Lapo Calamandrei + + + + + + play + media + music + video + player + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-playback-stop.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-playback-stop.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-playback-stop.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-playback-stop.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,651 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Media Playback Pause + + + Lapo Calamandrei + + + + + + media + stop + playback + video + music + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-record.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-record.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-record.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-record.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Media Record + + + Lapo Calamandrei + + + + + + media + player + record + music + sound + video + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-seek-backward.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-seek-backward.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-seek-backward.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-seek-backward.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Media Seek Backward + + + Lapo Calamandrei + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-seek-forward.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-seek-forward.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-seek-forward.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-seek-forward.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,383 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Media Seek Forward + + + Lapo Calamandrei + + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-skip-backward.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-skip-backward.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-skip-backward.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-skip-backward.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,1025 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Media Skip Backward + + + Lapo Calamandrei + + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-skip-forward.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-skip-forward.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/media-skip-forward.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/media-skip-forward.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,1013 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Media Skip Forward + + + Lapo Calamandrei + + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/preferences-desktop-font.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/preferences-desktop-font.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/preferences-desktop-font.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/preferences-desktop-font.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Wi-Fi network + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/preferences-other.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/preferences-other.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/preferences-other.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/preferences-other.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,1205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Misc Prefs + + + Lapo Calamandrei + + + + + + box + misc + various + mess + preferences + tools + + + + + + Jakub Steiner + + + 2007-01-12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/preferences-system.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/preferences-system.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/preferences-system.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/preferences-system.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,398 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Preferences System + + + preferences + settings + control panel + tweaks + system + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/process-stop.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/process-stop.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/process-stop.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/process-stop.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,336 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Stop + 2005-10-16 + + + Andreas Nilsson + + + + + stop + halt + error + + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/README frescobaldi-2.0.0/frescobaldi_app/icons/tango/README --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/README 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/README 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,28 @@ +These icons were, with thanks, taken from the Tango Icon Library, version 0.8, from: +http://tango.freedesktop.org/Tango_Desktop_Project + +Changes: +renamed text-x-generic to text-plain +added document-save-all (based on document-save) +renamed system-log-out to application-exit + +Some icons were found elsewhere: + +zoom-in: +http://commons.wikimedia.org/wiki/File:View-zoom-in.svg + +zoom-out: +http://commons.wikimedia.org/wiki/File:View-zoom-out.svg + +configure-shortcuts.svg: +http://commons.wikimedia.org/wiki/File:Preferences-desktop-keyboard-shortcuts.svg + +help-contents: +http://commons.wikimedia.org/wiki/File:Help-contents.svg + +preferences-other: +http://commons.wikimedia.org/wiki/File:Gnome-preferences-other.svg (GPL!) + +document-edit: +http://commons.wikimedia.org/wiki/File:Edit-find-replace.svg (minus magnifiying glass) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/text-plain.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/text-plain.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/text-plain.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/text-plain.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,548 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Generic Text + + + text + plaintext + regular + document + + + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/view-fullscreen.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/view-fullscreen.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/view-fullscreen.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/view-fullscreen.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,522 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + View Fullscreen + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/view-refresh.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/view-refresh.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/view-refresh.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/view-refresh.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,393 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + View Refresh + + + reload + refresh + view + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/window-new.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/window-new.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/window-new.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/window-new.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,292 @@ + + + + + + + image/svg+xml + + New Window + + + Corey Woodworth + + + + http://jimmac.musichall.cz + + + Jakub Steiner + + + + + new + insert + window + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/zoom-in.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/zoom-in.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/zoom-in.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/zoom-in.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,651 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Martin Ruskov + + + http://commons.wikimedia.org/wiki/Tango_icon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tango/zoom-out.svg frescobaldi-2.0.0/frescobaldi_app/icons/tango/zoom-out.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tango/zoom-out.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tango/zoom-out.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,878 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Martin Ruskov + + + http://commons.wikimedia.org/wiki/Tango_icon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/text-x-lilypond.svg frescobaldi-2.0.0/frescobaldi_app/icons/text-x-lilypond.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/text-x-lilypond.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/text-x-lilypond.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + text + plaintext + regular + document + + + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LY + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tools_pitch_language.svg frescobaldi-2.0.0/frescobaldi_app/icons/tools_pitch_language.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tools_pitch_language.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tools_pitch_language.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,237 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tools_pitch.svg frescobaldi-2.0.0/frescobaldi_app/icons/tools_pitch.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tools_pitch.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tools_pitch.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,144 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tools_rhythm.svg frescobaldi-2.0.0/frescobaldi_app/icons/tools_rhythm.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tools_rhythm.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tools_rhythm.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,165 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/icons/tools_transpose.svg frescobaldi-2.0.0/frescobaldi_app/icons/tools_transpose.svg --- frescobaldi-1.2.0/frescobaldi_app/icons/tools_transpose.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/icons/tools_transpose.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,137 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/indent.py frescobaldi-2.0.0/frescobaldi_app/indent.py --- frescobaldi-1.2.0/frescobaldi_app/indent.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/indent.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,310 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Indent and auto-indent. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QTextCursor + +import ly.lex +import ly.lex.scheme +import cursortools +import tokeniter +import variables + + +# scheme commands that can have one argument on the same line and then want the next arguments +# on the next lines at the same position. +scheme_sync_args = ( + 'if', 'and', 'or', 'set!', + '=', '<', '<=', '>', '>=', + 'eq?', 'eqv?', 'equal?', + 'filter', +) + + +def autoIndentBlock(block): + """Auto-indents the given block.""" + setIndent(block, computeIndent(block)) + + +def computeIndent(block): + """Returns the indent the given block should have.""" + + # get some variables from the document + indent_vars = indentVariables(block.document()) + + # count the dedent tokens at the beginning of the block + indents = 0 + for token in tokeniter.tokens(block): + # dont dedent scheme dedent tokens at beginning of lines (unusual) + if isinstance(token, ly.lex.Dedent) and not isinstance(token, ly.lex.scheme.CloseParen): + indents -= 1 + elif not isinstance(token, ly.lex.Space): + break + + # these variables control the position (yet to be translated to tabbed (real) columns) + # and how much to add + indent_pos = None + indent_add = 0 + + # look backwards for the token that starts this indent + prev = block.previous() + while prev.isValid(): + + # skip empty blocks + if prev.length() <= 1: + prev = prev.previous() + continue + + closers = 0 + found = False + lasttokens = [] + + token = None # in case of empty line + for token in reversed(tokeniter.tokens(prev)): + if isinstance(token, ly.lex.Dedent): + indents -= 1 + if isinstance(token, ly.lex.scheme.CloseParen): + closers = 0 # scheme close parens are not moved + else: + closers += 1 + elif isinstance(token, ly.lex.Indent): + indents += 1 + closers = 0 + if not found: + if indents == 1: + found = token + else: + lasttokens.append(token) + elif not isinstance(token, ly.lex.Space): + closers = 0 + if not found: + lasttokens.append(token) + + if found: + # the token that started the current indent has been found + # if there are no tokens after the indent-opener, take indent of current line and increase, + # else set indent to the same indent of the token after the indent-opener. + if isinstance(found, ly.lex.scheme.OpenParen): + # scheme + if lasttokens: + if len(lasttokens) == 1 or isinstance(lasttokens[-1], ly.lex.Indent): + indent_pos = lasttokens[-1].pos + elif lasttokens[-1] in scheme_sync_args: + indent_pos = lasttokens[-2].pos + else: + indent_pos = found.pos + indent_add = indent_vars['indent-width'] + else: + indent_pos = found.pos + indent_add = 1 + else: + # no scheme (lilypond) + if lasttokens: + indent_pos = lasttokens[-1].pos + else: + # just use current indent + INDENT_WIDTH + indent_pos = token.end if isinstance(token, ly.lex.Space) else 0 + indent_add = indent_vars['indent-width'] + elif indents + closers == 0: + # take over indent of current line + indent_pos = token.end if isinstance(token, ly.lex.Space) else 0 + else: + prev = prev.previous() + continue + + # translate indent to real columns (expanding tabs) + return columnPosition(prev.text(), indent_pos, indent_vars['tab-width']) + indent_add + # e.g. on first line + return 0 + + +def indentable(cursor): + """Returns True if the cursor is at a dedent token and running the auto-indenter makes sense.""" + block = cursor.block() + pos = cursor.position() - block.position() + for token in tokeniter.tokens(block): + if token.end >= pos: + return isinstance(token, ly.lex.Dedent) + elif not isinstance(token, ly.lex.Space): + return + + +def increaseIndent(cursor): + """Increases the indent of the line the cursor is at (or the selected lines). + + If there is no selection or the cursor is not in the first indent space, + just inserts a Tab (or spaces). + + """ + if not changeIndent(cursor, 1): + # just insert a tab + indent_vars = indentVariables(cursor.document()) + if indent_vars['document-tabs']: + cursor.insertText('\t') + else: + block = cursor.block() + tabwidth = indent_vars['tab-width'] + pos = columnPosition(block.text(), cursor.position() - block.position(), tabwidth) + spaces = tabwidth - pos % tabwidth + cursor.insertText(' ' * spaces) + + +def decreaseIndent(cursor): + """Decreases the indent of the line the cursor is at (or the selected lines).""" + changeIndent(cursor, -1) + + +def changeIndent(cursor, direction): + """Changes the indent in the desired direction (-1 for left and +1 for right). + + Returns True if the indent operation was applied. + The cursor may contain a selection. + + """ + # get some variables from the document + indent_vars = indentVariables(cursor.document()) + + blocks = list(cursortools.selectedBlocks(cursor)) + block = blocks[0] + pos = cursor.selectionStart() - block.position() + token = tokeniter.tokens(block)[0] if tokeniter.tokens(block) else None + if cursor.hasSelection() or pos == 0 or (token and isinstance(token, ly.lex.Space) and token.end >= pos): + # decrease the indent + state = tokeniter.state(block) + current_indent = getIndent(block) + new_indent = current_indent + direction * indent_vars['indent-width'] + if state.mode() in ('lilypond', 'scheme'): + computed_indent = computeIndent(block) + if cmp(computed_indent, new_indent) == direction: + new_indent = computed_indent + diff = new_indent - current_indent + with cursortools.editBlock(cursor): + for block in blocks: + setIndent(block, getIndent(block) + diff) + return True + + +def reIndent(cursor): + """Re-indents the selected region or the whole document.""" + if cursor.hasSelection(): + blocks = cursortools.selectedBlocks(cursor) + else: + blocks = cursortools.allBlocks(cursor.document()) + with cursortools.editBlock(cursor): + for block in blocks: + tokeniter.update(block) + if tokeniter.state(block).mode() in ('lilypond', 'scheme'): + indent = computeIndent(block) + else: + indent = getIndent(block) + if setIndent(block, indent): + tokeniter.update(block) # force token update if changed + + +def getIndent(block): + """Returns the indent of the given block.""" + + # get some variables from the document + indent_vars = indentVariables(block.document()) + + tokens = tokeniter.tokens(block) + if tokens and isinstance(tokens[0], ly.lex.Space): + return columnPosition(tokens[0], tabwidth = indent_vars['tab-width']) + return 0 + + +def setIndent(block, indent): + """Sets the indent of block to tabs/spaces of length indent. + + Does not change the document if the indent does not need a change. + Returns True if the indent was changed. + + """ + # get some variables from the document + indent_vars = indentVariables(block.document()) + + space = makeIndent(indent, indent_vars['tab-width'], indent_vars['indent-tabs']) + tokens = tokeniter.tokens(block) + if tokens and isinstance(tokens[0], ly.lex.Space): + changed = tokens[0] != space + cursor = tokeniter.cursor(block, tokens[0]) + else: + changed = indent != 0 + cursor = QTextCursor(block) + if changed: + cursor.insertText(space) + return changed + + +def indentVariables(document): + """Returns a dictionary with some variables regarding document indenting.""" + return variables.update(document, { + 'indent-width': 2, + 'tab-width': 8, + 'indent-tabs': False, + 'document-tabs': True, + }) + + +def columnPosition(text, position=None, tabwidth = 8): + """Converts position (or the length of the text) to real column position, expanding tabs.""" + column, pos = 0, 0 + end = len(text) if position is None else position + while True: + try: + tab = text.index('\t', pos, end) + except ValueError: + return column + end - pos + column = (column + tab - pos + tabwidth) & -tabwidth + pos = tab + 1 + + +def makeIndent(indent, tabwidth = 8, allowTabs = False): + """Creates a string of indent length indent, using spaces (and tabs if allowTabs).""" + if indent <= 0: + return '' + elif allowTabs: + tabs, spaces = divmod(indent, tabwidth) + return '\t' * tabs + ' ' * spaces + else: + return ' ' * indent + + +def insertText(cursor, text): + """Inserts text and indents it if there are newlines in it.""" + if '\n' not in text: + cursor.insertText(text) + return + line = cursor.document().findBlock(cursor.selectionStart()).blockNumber() + with cursortools.editBlock(cursor): + cursor.insertText(text) + block = cursor.document().findBlockByNumber(line) + last = cursor.block() + tokeniter.update(block) # tokenize inserted lines + while last != block: + block = block.next() + if setIndent(block, computeIndent(block)): + tokeniter.update(block) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/info.py frescobaldi-2.0.0/frescobaldi_app/info.py --- frescobaldi-1.2.0/frescobaldi_app/info.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/info.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Information about the Frescobaldi application. +""" + +from __future__ import unicode_literals + +# these variables are also used by the distutils setup +name = "frescobaldi" +version = "2.0.0" +description = "LilyPond Music Editor" +long_description = \ + "Frescobaldi is an advanced text editor to edit LilyPond sheet music files. " \ + "Features include an integrated PDF preview and a powerful Score Wizard." +maintainer = "Wilbert Berendsen" +maintainer_email = "info@frescobaldi.org" +url = "http://www.frescobaldi.org/" +license = "GPL" + +# these are used in the application +appname = "Frescobaldi" + +# mapping from language code to list of translator names +translators = { + 'nl': [ + "Wilbert Berendsen", + ], + 'fr': [ + "Raphaël Doursenaud", + "Philippe Massart", + "Valentin Villenave", + "Yann Collette", + "David Bouriaud", + "Ryan Kavanagh", + ], + 'tr': [ + "Server ACİM", + ], + 'es': [ + "Francisco Vila", + ], + 'ru': [ + "Sergey Poltavski", + "Artem Zolochevskiy", + ], + 'it': [ + "Gianluca D'Orazio", + ], + 'de': [ + "Henrik Evers", + "Georg Hennig", + ], + 'cs': [ + "Pavel Fric", + ], + 'pl': [ + "Piotr Komorowski", + ], + 'gl': [ + "Manuel A. Vázquez", + ], +} + diff -Nru frescobaldi-1.2.0/frescobaldi_app/__init__.py frescobaldi-2.0.0/frescobaldi_app/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,27 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Frescobaldi, a LilyPond sheet music editor. +""" + +# Note: if you import toplevel.py, all modules and packages inside this +# package will become available as toplevel modules and packages rather +# than as submodules and subpackages of this package. Some nested +# packages of Frescobaldi expect this. diff -Nru frescobaldi-1.2.0/frescobaldi_app/inputdialog.py frescobaldi-2.0.0/frescobaldi_app/inputdialog.py --- frescobaldi-1.2.0/frescobaldi_app/inputdialog.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/inputdialog.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,108 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Simple dialogs to ask input from the user. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings, Qt +from PyQt4.QtGui import QCompleter, QColor, QColorDialog, QWidget + +import app +import widgets.dialog +import help as help_ + + +def getText( + parent = None, + title = "", + message = "", + text = "", + icon = None, + help = None, + validate = None, + regexp = None, + wordWrap = True, + complete = None, + ): + """Asks a string of text from the user. + + Arguments: + + parent: parent widget or None + title: dialog window title (without appname) + message: message, question + text: pre-entered text in the line edit + icon: which icon to show + help: help page or name + validate: a function that accepts text and returns whether it is valid. + regexp: a regular expression string. If given it provides an alternate + validation method using a QRegExpValidator. + wordWrap: whether to word-wrap the message text (default: True). + complete: a string list or QAbstractItemModel to provide completions. + + """ + dlg = widgets.dialog.TextDialog(parent, + title=app.caption(title), message=message, icon=icon) + dlg.setText(text) + dlg.setMinimumWidth(320) + dlg.messageLabel().setWordWrap(wordWrap) + if help is not None: + help_.addButton(dlg.buttonBox(), help) + dlg.setWindowModality(Qt.WindowModal) + else: + dlg.setWindowModality(Qt.ApplicationModal) + if regexp: + dlg.setValidateRegExp(regexp) + elif validate: + dlg.setValidateFunction(validate) + if complete: + c = QCompleter(complete, dlg.lineEdit()) + dlg.lineEdit().setCompleter(c) + if dlg.exec_(): + return dlg.text() + + +def getColor( + parent = None, + title = "", + color = None, + alpha = False, + ): + """Ask the user a color.""" + global _savedColor + if color is None: + color = _savedColor + dlg = QColorDialog(color, parent) + options = QColorDialog.ColorDialogOptions() + if alpha: + options |= QColorDialog.ShowAlphaChannel + if QSettings().value("native_dialogs/colordialog", True) in ('false', False): + options |= QColorDialog.DontUseNativeDialog + dlg.setOptions(options) + dlg.setWindowTitle(title or app.caption(_("Select Color"))) + if dlg.exec_(): + _savedColor = dlg.selectedColor() + return _savedColor + +_savedColor = QColor(Qt.white) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/jobattributes.py frescobaldi-2.0.0/frescobaldi_app/jobattributes.py --- frescobaldi-1.2.0/frescobaldi_app/jobattributes.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/jobattributes.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,52 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages a collection of attributes that can be set on a Job. + +E.g. from which mainwindow it was started, etc. +""" + +import plugin + + +def get(job): + """Returns the JobAttributes for the specified Job.""" + return JobAttributes.instance(job) + + +class JobAttributes(plugin.AttributePlugin): + """Manages attributes of a Job. + + The attributes can be set simply as instance attributes. + If possible, weak references are made so the attributes do not keep + references to the objects they refer to. + + If an attribute is requested but not set, None is returned. + + Usage e.g.: + + attrs = jobattributes.get(job) + attrs.mainwindow = mainwindow + + """ + def job(self): + return self._parent() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/jobmanager.py frescobaldi-2.0.0/frescobaldi_app/jobmanager.py --- frescobaldi-1.2.0/frescobaldi_app/jobmanager.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/jobmanager.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,79 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A JobManager exists for every Document, and ensures no two jobs are running +at the same time. + +It also sends the app-wide signals jobStarted() and jobFinished(). + +""" + +from __future__ import unicode_literals + +import app +import plugin +import signals + + +def manager(document): + return JobManager.instance(document) + + +def job(document): + return JobManager.instance(document).job() + + +def isRunning(document): + if job(document): + return job(document).isRunning() + return False + + +class JobManager(plugin.DocumentPlugin): + + stateChanged = signals.Signal() # Job (started) or False (finished) + + def __init__(self, document): + self._job = None + + def startJob(self, job): + """Starts a Job on our behalf.""" + if not self.isRunning(): + self._job = job + job.done.connect(self._finished) + job.start() + self.stateChanged(job) + app.jobStarted(self.document(), job) + + def _finished(self, success): + self.stateChanged(False) + app.jobFinished(self.document(), self._job, success) + + def job(self): + """Returns the last job if any.""" + return self._job + + def isRunning(self): + """Returns True when a job is running.""" + if self._job: + return self._job.isRunning() + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/job.py frescobaldi-2.0.0/frescobaldi_app/job.py --- frescobaldi-1.2.0/frescobaldi_app/job.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/job.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,232 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A Job runs LilyPond (or another process) and captures the output +to get it later or to have a log follow it. +""" + +from __future__ import unicode_literals + +import codecs +import os +import time + +from PyQt4.QtCore import QCoreApplication, QProcess + +import signals + + +# message status: +STDOUT = 1 +STDERR = 2 +NEUTRAL = 4 +SUCCESS = 8 +FAILURE = 16 + +# output from the process +OUTPUT = STDERR | STDOUT + +# status messages +STATUS = NEUTRAL | SUCCESS | FAILURE + +# all +ALL = OUTPUT | STATUS + + +class Job(object): + """Manages a process. + + Set the command attribute to a list of strings describing the program and its arguments. + Set the directory attribute to a working directory. + The decoder attribute may be set to a decoder function, it defaults to + codecs.getdecoder('utf-8'). It is used to decode the output from the process + to python (unicode) strings. + + Call start() to start the process. + The output() signal emits output (stderr or stdout) from the process. + The done() signal is always emitted when the process has ended. + The history() method returns all status messages and output so far. + + The status messages and output all are in one of five categories: + STDERR, STDOUT (output from the process) or NEUTRAL, FAILURE or SUCCESS + (status messages). When displaying these messages in a log, it is advised + to take special care for newlines, esp when a status message is displayed. + Status messages normally have no newlines, so you must add them if needed, + while output coming from the process may continue in the same line. + + """ + output = signals.Signal() + done = signals.Signal() + titleChanged = signals.Signal() # title (string) + + def __init__(self): + self.command = [] + self.directory = "" + self.decoder = codecs.getdecoder("utf-8") + + self._title = "" + self._aborted = False + self._process = None + self._history = [] + self._starttime = 0.0 + self._elapsed = 0.0 + + def title(self): + """Returns the job title, set with setTitle(), defaults to an empty string.""" + return self._title + + def setTitle(self, title): + """Sets the title and if changed, emits the titleChanged(title) signal.""" + old, self._title = self._title, title + if title != old: + self.titleChanged(title) + + def start(self): + """Starts the process.""" + self._aborted = False + self._history = [] + self._elapsed = 0.0 + self._starttime = time.time() + if self._process is None: + self.setProcess(QProcess()) + self.startMessage() + if os.path.isdir(self.directory): + self._process.setWorkingDirectory(self.directory) + self._process.start(self.command[0], self.command[1:]) + + def elapsed(self): + """Returns how many seconds this process has been running.""" + if self._elapsed: + return self._elapsed + elif self._starttime: + return time.time() - self._starttime + return 0.0 + + def abort(self): + """Aborts the process.""" + if self._process: + self._aborted = True + self.abortMessage() + self._process.terminate() + + def isAborted(self): + """Returns True if the job was aborted by calling abort().""" + return self._aborted + + def isRunning(self): + """Returns True if this job is running.""" + return bool(self._process) + + def setProcess(self, process): + """Sets a QProcess instance and connects the signals.""" + self._process = process + if process.parent() is None: + process.setParent(QCoreApplication.instance()) + process.finished.connect(self._finished) + process.error.connect(self._error) + process.readyReadStandardError.connect(self._readstderr) + process.readyReadStandardOutput.connect(self._readstdout) + + def message(self, text, type=NEUTRAL): + """Outputs some text as the given type (NEUTRAL, SUCCESS, FAILURE, STDOUT or STDERR).""" + self.output(text, type) + self._history.append((text, type)) + + def history(self, types=ALL): + """Yields the output messages as two-tuples (text, type) since the process started. + + If types is given, it should be an OR-ed combination of the status types + STDERR, STDOUT, NEUTRAL, SUCCESS or FAILURE. + + """ + for msg, type in self._history: + if type & types: + yield msg, type + + def _finished(self, exitCode, exitStatus): + """Called when the process has finished.""" + self.finishMessage(exitCode, exitStatus) + success = exitCode == 0 and exitStatus == QProcess.NormalExit + self._bye(success) + + def _error(self, error): + """Called when an error occurs.""" + self.errorMessage(error) + if self._process.state() == QProcess.NotRunning: + self._bye(False) + + def _bye(self, success): + """Ends and emits the done() signal.""" + self._elapsed = time.time() - self._starttime + self._process.deleteLater() + self._process = None + self.done(success) + + def _readstderr(self): + """Called when STDERR can be read.""" + output = self._process.readAllStandardError() + self.message(self.decoder(output)[0], STDERR) + + def _readstdout(self): + """Called when STDOUT can be read.""" + output = self._process.readAllStandardOutput() + self.message(self.decoder(output)[0], STDOUT) + + def startMessage(self): + """Outputs a message the process has started.""" + name = self.title() or os.path.basename(self.command[0]) + self.message(_("Starting {job}...").format(job=name), NEUTRAL) + + def abortMessage(self): + """Outputs a message the process has been aborted.""" + name = self.title() or os.path.basename(self.command[0]) + self.message(_("Aborting {job}...").format(job=name), NEUTRAL) + + def errorMessage(self, error): + """Outputs a message describing the given QProcess.Error.""" + if error == QProcess.FailedToStart: + self.message(_( + "Could not start {program}.\n" + "Please check path and permissions.").format(program = self.command[0]), FAILURE) + elif error == QProcess.ReadError: + self.message(_("Could not read from the process."), FAILURE) + elif self._process.state() == QProcess.NotRunning: + self.message(_("An unknown error occured."), FAILURE) + + def finishMessage(self, exitCode, exitStatus): + """Outputs a message on completion of the process.""" + if exitCode: + self.message(_("Exited with return code {code}.").format(code=exitCode), FAILURE) + elif exitStatus: + self.message(_("Exited with exit status {status}.").format(status=exitStatus), FAILURE) + else: + time = elapsed2str(self.elapsed()) + self.message(_("Completed successfully in {time}.").format(time=time), SUCCESS) + + + +def elapsed2str(seconds): + """Returns a short display for the given time period (in seconds).""" + minutes, seconds = divmod(seconds, 60) + if minutes: + return "{0:.0f}'{1:.0f}\"".format(minutes, seconds) + return '{0:.1f}"'.format(seconds) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/language_names/data.py frescobaldi-2.0.0/frescobaldi_app/language_names/data.py --- frescobaldi-1.2.0/frescobaldi_app/language_names/data.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/language_names/data.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,2670 @@ +#! python +# -*- coding: utf-8; + +# Do not edit, this file is generated. See generate.py. + +from __future__ import unicode_literals + + +language_names = { +"C": { + "aa":"Afar", + "ab":"Abkhazian", + "ae":"Avestan", + "af":"Afrikaans", + "am":"Amharic", + "ar":"Arabic", + "as":"Assamese", + "ast":"Asturian", + "ay":"Aymara", + "az":"Azerbaijani", + "ba":"Bashkir", + "be":"Belarusian", + "be@latin":"Belarusian (Latin)", + "bg":"Bulgarian", + "bh":"Bihari", + "bi":"Bislama", + "bn":"Bengali", + "bn_IN":"Bengali (India)", + "bo":"Tibetan", + "br":"Breton", + "bs":"Bosnian", + "ca":"Catalan", + "ca@valencia":"Catalan (Valencian)", + "ce":"Chechen", + "ch":"Chamorro", + "co":"Corsican", + "crh":"Crimean Tatar", + "cs":"Czech", + "csb":"Kashubian", + "cu":"Church Slavic", + "cv":"Chuvash", + "cy":"Welsh", + "da":"Danish", + "de":"German", + "dsb":"Lower Sorbian", + "dz":"Dzongkha", + "el":"Greek", + "en":"English", + "en_GB":"British English", + "en_US":"American English", + "eo":"Esperanto", + "es":"Spanish", + "et":"Estonian", + "eu":"Basque", + "fa":"Farsi (Persian)", + "fi":"Finnish", + "fj":"Fijian", + "fo":"Faroese", + "fr":"French", + "fy":"Frisian", + "ga":"Irish Gaelic", + "gd":"Gaelic", + "gl":"Galician", + "gn":"Guarani", + "gu":"Gujarati", + "gv":"Manx", + "ha":"Hausa", + "he":"Hebrew", + "hi":"Hindi", + "hne":"Chhattisgarhi", + "ho":"Hiri Motu", + "hr":"Croatian", + "hsb":"Upper Sorbian", + "hu":"Hungarian", + "hy":"Armenian", + "hz":"Herero", + "ia":"Interlingua", + "id":"Indonesian", + "ie":"Interlingue", + "ik":"Inupiaq", + "io":"Ido", + "is":"Icelandic", + "it":"Italian", + "iu":"Inuktitut", + "ja":"Japanese", + "jv":"Javanese", + "ka":"Georgian", + "ki":"Kikuyu", + "kk":"Kazakh", + "kl":"Kalaallisut", + "km":"Khmer", + "kn":"Kannada", + "ko":"Korean", + "ks":"Kashmiri", + "ku":"Kurdish", + "kv":"Komi", + "kw":"Cornish", + "ky":"Kirghiz", + "la":"Latin", + "lb":"Luxembourgish", + "li":"Limburgan", + "ln":"Lingala", + "lo":"Lao", + "lt":"Lithuanian", + "lv":"Latvian", + "mai":"Maithili", + "mg":"Malagasy", + "mh":"Marshallese", + "mi":"Maori", + "mk":"Macedonian", + "ml":"Malayalam", + "mn":"Mongolian", + "mo":"Moldavian", + "mr":"Marathi", + "ms":"Malay", + "mt":"Maltese", + "my":"Burmese", + "na":"Nauru", + "nb":"Norwegian Bokmål", + "nd":"Ndebele, North", + "nds":"Low Saxon", + "ne":"Nepali", + "ng":"Ndonga", + "nl":"Dutch", + "nn":"Norwegian Nynorsk", + "nr":"Ndebele, South", + "nso":"Northern Sotho", + "nv":"Navajo", + "ny":"Chichewa", + "oc":"Occitan", + "om":"Oromo", + "or":"Oriya", + "os":"Ossetian", + "pa":"Punjabi/Panjabi", + "pi":"Pali", + "pl":"Polish", + "ps":"Pushto", + "pt":"Portuguese", + "pt_BR":"Brazilian Portuguese", + "qu":"Quechua", + "rn":"Rundi", + "ro":"Romanian", + "rom":"Romany", + "ru":"Russian", + "rw":"Kinyarwanda", + "sa":"Sanskrit", + "sc":"Sardinian", + "sd":"Sindhi", + "se":"Northern Sami", + "sg":"Sango", + "si":"Sinhala", + "sk":"Slovak", + "sl":"Slovenian", + "sm":"Samoan", + "sn":"Shona", + "so":"Somali", + "sq":"Albanian", + "sr":"Serbian", + "sr@ijekavian":"Serbian Ijekavian", + "sr@ijekavianlatin":"Serbian Ijekavian Latin", + "sr@latin":"Serbian Latin", + "ss":"Swati", + "st":"Sotho, Southern", + "su":"Sundanese", + "sv":"Swedish", + "sw":"Swahili", + "ta":"Tamil", + "te":"Telugu", + "tg":"Tajik", + "th":"Thai", + "ti":"Tigrinya", + "tk":"Turkmen", + "tn":"Tswana", + "to":"Tonga", + "tr":"Turkish", + "ts":"Tsonga", + "tt":"Tatar", + "tw":"Twi", + "ty":"Tahitian", + "ug":"Uighur", + "uk":"Ukrainian", + "ur":"Urdu", + "uz":"Uzbek", + "uz@cyrillic":"Uzbek (Cyrillic)", + "ven":"Venda", + "vi":"Vietnamese", + "vo":"Volapük", + "wa":"Walloon", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Yiddish", + "yo":"Yoruba", + "za":"Zhuang", + "zh":"Chinese", + "zh_CN":"Chinese Simplified", + "zh_HK":"Chinese (Hong Kong)", + "zh_TW":"Chinese Traditional", + "zu":"Zulu", +}, +"cs": { + "aa":"Afar", + "ab":"Abcházský", + "ae":"Avestánský", + "af":"Afrikánský", + "am":"Amharský", + "ar":"Arabský", + "as":"Asamský", + "ast":"Asturijský", + "ay":"Aymara", + "az":"Ázerbajdžánský", + "ba":"Baškirský", + "be":"Běloruský", + "be@latin":"Běloruský (latinka)", + "bg":"Bulharský", + "bh":"Bihari", + "bi":"Bislama", + "bn":"Bengálský", + "bn_IN":"Bengálský (Indie)", + "bo":"Tibetský", + "br":"Bretonský", + "bs":"Bosenský", + "ca":"Katalánský", + "ca@valencia":"Katalánský (Valencie)", + "ce":"Čečenský", + "ch":"Chamorro", + "co":"Korsický", + "crh":"Krymská tatarština", + "cs":"Český", + "csb":"Kašubský", + "cu":"Staroslověnský", + "cv":"Čuvašský", + "cy":"Welšský", + "da":"Dánský", + "de":"Německý", + "dsb":"Dolnolužicko srbský", + "dz":"Dzongkha", + "el":"Řecký", + "en":"Anglický", + "en_GB":"Britská angličtina", + "en_US":"Americká angličtina", + "eo":"Esperanto", + "es":"Španělský", + "et":"Estonský", + "eu":"Baskický", + "fa":"Farsi (Perský)", + "fi":"Finský", + "fj":"Fidžijský", + "fo":"Faerský", + "fr":"Francouzský", + "fy":"Fríský", + "ga":"Galský (irština)", + "gd":"Galský", + "gl":"Haličský", + "gn":"Guarani", + "gu":"Gujarati", + "gv":"Manx", + "ha":"Hausa", + "he":"Hebrejský", + "hi":"Hindský", + "hne":"Chhattisgarhi", + "ho":"Hiri Motu", + "hr":"Chorvatský", + "hsb":"Hornolužicko srbský", + "hu":"Maďarský", + "hy":"Arménský", + "hz":"Herero", + "ia":"Interlingua", + "id":"Indonéský", + "ie":"Interlingue", + "ik":"Inupiaq", + "io":"Ido", + "is":"Islandský", + "it":"Italský", + "iu":"Inuktitut", + "ja":"Japonský", + "jv":"Jávský", + "ka":"Gruzínský", + "ki":"Kikuyu", + "kk":"Kazašský", + "kl":"Kalaallisut", + "km":"Kmérský", + "kn":"Kannada", + "ko":"Korejský", + "ks":"Kašmírský", + "ku":"Kurdský", + "kv":"Komi", + "kw":"Kornišský", + "ky":"Kyrgizský", + "la":"Latina", + "lb":"Lucemburský", + "li":"Limburgan", + "ln":"Lingala", + "lo":"Laoský", + "lt":"Litevský", + "lv":"Lotyšský", + "mai":"Maithili", + "mg":"Malagasy", + "mh":"Marshallský", + "mi":"Maorský", + "mk":"Makedonský", + "ml":"Malayalam", + "mn":"Mongolský", + "mo":"Moldavský", + "mr":"Marathi", + "ms":"Malajský", + "mt":"Maltézský", + "my":"Burmský", + "na":"Nauru", + "nb":"Norský (Bokmål)", + "nd":"Ndebele, Severní", + "nds":"Dolnosaský", + "ne":"Nepálský", + "ng":"Ndonga", + "nl":"Holandský", + "nn":"Norský (Nynorsk)", + "nr":"Ndebele, Jižní", + "nso":"Severní Sotho", + "nv":"Navajo", + "ny":"Chichewa", + "oc":"Okcitánský", + "om":"Oromo", + "or":"Oriya", + "os":"Osetský", + "pa":"Pandžábský", + "pi":"Pali", + "pl":"Polský", + "ps":"Pushto", + "pt":"Portugalský", + "pt_BR":"Portugalský (Brazílie)", + "qu":"Quechua", + "rn":"Rundi", + "ro":"Rumunský", + "rom":"Romský", + "ru":"Ruský", + "rw":"Kinyarwanda", + "sa":"Sanskrit", + "sc":"Sardinský", + "sd":"Sindhi", + "se":"Severní Sami", + "sg":"Sango", + "si":"Sinhalský", + "sk":"Slovenský", + "sl":"Slovinský", + "sm":"Samojský", + "sn":"Shona", + "so":"Somálský", + "sq":"Albánský", + "sr":"Srbský", + "sr@latin":"Srbský (latinka)", + "ss":"Swati", + "st":"Sotho, Jižní", + "su":"Sundanský", + "sv":"Švédský", + "sw":"Svahilský", + "ta":"Tamilský", + "te":"Telugu", + "tg":"Tádžikský", + "th":"Thajský", + "ti":"Tigrinya", + "tk":"Turkmenský", + "tn":"Tswana", + "to":"Tonga", + "tr":"Turecký", + "ts":"Tsonga", + "tt":"Tatarský", + "tw":"Twi", + "ty":"Tahitský", + "ug":"Uighur", + "uk":"Ukrajinský", + "ur":"Urdu", + "uz":"Uzbecký", + "uz@cyrillic":"Uzbecký (azbuka)", + "ven":"Venda", + "vi":"Vietnamský", + "vo":"Volapük", + "wa":"Wallonský", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Jidiš", + "yo":"Yoruba", + "za":"Zhuang", + "zh":"Čínský", + "zh_CN":"Čínský (zjednodušená)", + "zh_HK":"Čínský (Hong Kong)", + "zh_TW":"Čínský (tradiční)", + "zu":"Zulu", +}, +"de": { + "aa":"Afar", + "ab":"Abhasisch", + "ae":"Avestisch", + "af":"Afrikaans", + "am":"Amharisch", + "ar":"Arabisch", + "as":"Assamesisch", + "ast":"Asturisch", + "ay":"Aimara", + "az":"Aserbaidschanisch", + "ba":"Baschkirisch", + "be":"Weißrussisch", + "be@latin":"Weißrussisch (lat. Alphabet)", + "bg":"Bulgarisch", + "bh":"Biharisch", + "bi":"Bislama", + "bn":"Bengalisch", + "bn_IN":"Bengalisch (Indien)", + "bo":"Tibetisch", + "br":"Bretonisch", + "bs":"Bosnisch", + "ca":"Katalanisch", + "ca@valencia":"Katalanisch (Valenciana)", + "ce":"Tschetschenisch", + "ch":"Chamorro", + "co":"Korsisch", + "crh":"Krimtatarisch", + "cs":"Tschechisch", + "csb":"Kaschubisch", + "cu":"Kirchenslawisch", + "cv":"Tschuwaschisch", + "cy":"Walisisch", + "da":"Dänisch", + "de":"Deutsch", + "dsb":"Niedersorbisch", + "dz":"Dzongkha", + "el":"Griechisch", + "en":"Englisch", + "en_GB":"Englisch (UK)", + "en_US":"Englisch (US)", + "eo":"Esperanto", + "es":"Spanisch", + "et":"Estnisch", + "eu":"Baskisch", + "fa":"Farsi (Persisch)", + "fi":"Finnisch", + "fj":"Fidschi", + "fo":"Färöisch", + "fr":"Französisch", + "fy":"Friesisch", + "ga":"Irisches Gälisch", + "gd":"Gälisch", + "gl":"Galicisch", + "gn":"Guarani", + "gu":"Gujarati", + "gv":"Manx", + "ha":"Hausa", + "he":"Hebräisch", + "hi":"Hindi", + "hne":"Chhattisgarhi", + "ho":"Hiri Motu", + "hr":"Kroatisch", + "hsb":"Obersorbisch", + "hu":"Ungarisch", + "hy":"Armenisch", + "hz":"Herero", + "ia":"Interlingua", + "id":"Indonesisch", + "ie":"Interlingue", + "ik":"Inupiaq", + "io":"Ido", + "is":"Isländisch", + "it":"Italienisch", + "iu":"Inuktitut", + "ja":"Japanisch", + "jv":"Javanisch", + "ka":"Georgisch", + "ki":"Kikuyu", + "kk":"Kasachisch", + "kl":"Kalaallisut", + "km":"Khmer", + "kn":"Kannada", + "ko":"Koreanisch", + "ks":"Kashmiri", + "ku":"Kurdisch", + "kv":"Komi", + "kw":"Kornisch", + "ky":"Kirgisisch", + "la":"Latein", + "lb":"Luxemburgisch", + "li":"Limburgisch", + "ln":"Lingala", + "lo":"Laotisch", + "lt":"Litauisch", + "lv":"Lettisch", + "mai":"Maithili", + "mg":"Madagassisch", + "mh":"Marshallisch", + "mi":"Maori", + "mk":"Mazedonisch", + "ml":"Malayalam", + "mn":"Mongolisch", + "mo":"Moldawisch", + "mr":"Marathi", + "ms":"Malaiisch", + "mt":"Maltesisch", + "my":"Burmesisch", + "na":"Nauruisch", + "nb":"Norwegisch (Bokmål)", + "nd":"Ndebele (nördliches)", + "nds":"Niederdeutsch", + "ne":"Nepali", + "ng":"Oshivambo", + "nl":"Niederländisch", + "nn":"Norwegisch (Nynorsk)", + "nr":"Ndebele (südliches)", + "nso":"Nord-Sotho", + "nv":"Navajo", + "ny":"Nyanja", + "oc":"Okzitanisch", + "om":"Oromo", + "or":"Oriya", + "os":"Ossetisch", + "pa":"Pandschabi", + "pi":"Pali", + "pl":"Polnisch", + "ps":"Paschtu", + "pt":"Portugiesisch", + "pt_BR":"Brasilianisches Portugiesisch", + "qu":"Quechua", + "rn":"Rundi", + "ro":"Rumänisch", + "rom":"Romani", + "ru":"Russisch", + "rw":"Kinyarwanda", + "sa":"Sanskrit", + "sc":"Sardisch", + "sd":"Sindhi", + "se":"Nördliches Sami", + "sg":"Sango", + "si":"Singhalesisch", + "sk":"Slowakisch", + "sl":"Slowenisch", + "sm":"Samoanisch", + "sn":"Shona", + "so":"Somali", + "sq":"Albanisch", + "sr":"Serbisch", + "sr@ijekavian":"Štokavisch", + "sr@ijekavianlatin":"Štokavisch (lat. Alphabet)", + "sr@latin":"Serbisch (lat. Alphabet)", + "ss":"Swati", + "st":"Südliches Sotho", + "su":"Sundanesisch", + "sv":"Schwedisch", + "sw":"Swahili", + "ta":"Tamil", + "te":"Telugu", + "tg":"Tadschikisch", + "th":"Thailändisch", + "ti":"Tigrinja", + "tk":"Turkmenisch", + "tn":"Tswana", + "to":"Tonga", + "tr":"Türkisch", + "ts":"Tsonga", + "tt":"Tatarisch", + "tw":"Twi", + "ty":"Tahitianisch", + "ug":"Uigurisch", + "uk":"Ukrainisch", + "ur":"Urdu", + "uz":"Usbekisch", + "uz@cyrillic":"Usbekisch (Kyrillisch)", + "ven":"Tshivenda", + "vi":"Vietnamesisch", + "vo":"Volapük", + "wa":"Wallonisch", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Jiddish", + "yo":"Yoruba", + "za":"Zhuang", + "zh":"Chinesisch", + "zh_CN":"Chinesisch (Kurzzeichen)", + "zh_HK":"Chinesisch (Hongkong)", + "zh_TW":"Chinesisch (Langzeichen)", + "zu":"Zulu", +}, +"es": { + "aa":"Afar", + "ab":"Abjaso", + "ae":"Avéstico", + "af":"Afrikaans", + "am":"Amárico", + "ar":"Árabe", + "as":"Asamés", + "ast":"Asturiano", + "ay":"Aymara", + "az":"Azerbayano", + "ba":"Baskir", + "be":"Bielorruso", + "be@latin":"Bielorruso (Latino)", + "bg":"Búlgaro", + "bh":"Bihari", + "bi":"Bislama", + "bn":"Bengalí", + "bn_IN":"Bengalí (India)", + "bo":"Tibetano", + "br":"Bretón", + "bs":"Bosnio", + "ca":"Catalán", + "ca@valencia":"Catalán (Valenciano)", + "ce":"Checheno", + "ch":"Chamorro", + "co":"Corso", + "crh":"Tártaro de Crimea", + "cs":"Checo", + "csb":"Casubio", + "cu":"Eslavo eclesiástico", + "cv":"Chuvasio", + "cy":"Galés", + "da":"Danés", + "de":"Alemán", + "dsb":"Bajo sorabo", + "dz":"Dzongkha", + "el":"Griego", + "en":"Inglés", + "en_GB":"Inglés británico", + "en_US":"Inglés americano", + "eo":"Esperanto", + "es":"Español", + "et":"Estonio", + "eu":"Euskera", + "fa":"Persa", + "fi":"Finés", + "fj":"Fiyiano", + "fo":"Feroés", + "fr":"Francés", + "fy":"Frisio", + "ga":"Gaélico irlandés", + "gd":"Gaélico", + "gl":"Gallego", + "gn":"Guaraní", + "gu":"Gujarati", + "gv":"Manés", + "ha":"Hausa", + "he":"Hebreo", + "hi":"Hindi", + "hne":"Chhattisgarhi", + "ho":"Hiri Motu", + "hr":"Croata", + "hsb":"Alto sorabo", + "hu":"Húngaro", + "hy":"Armenio", + "hz":"Herero", + "ia":"Interlingua", + "id":"Indonesio", + "ie":"Idioma occidental", + "ik":"Inupiaq", + "io":"Ido", + "is":"Islandés", + "it":"Italiano", + "iu":"Inuktitut", + "ja":"Japonés", + "jv":"Javanés", + "ka":"Georgiano", + "ki":"Kikuyu", + "kk":"Kazajo", + "kl":"Kalaallisut", + "km":"Camboyano", + "kn":"Kannada", + "ko":"Coreano", + "ks":"Kashmiri", + "ku":"Kurdo", + "kv":"Komi", + "kw":"Cornuallés", + "ky":"Kirguiz", + "la":"Latín", + "lb":"Luxemburgués", + "li":"Limburgano", + "ln":"Lingala", + "lo":"Laosiano", + "lt":"Lituano", + "lv":"Letón", + "mai":"Maithili", + "mg":"Malagasio", + "mh":"Marshalés", + "mi":"Maorí", + "mk":"Macedonio", + "ml":"Malabar", + "mn":"Mongol", + "mo":"Moldavo", + "mr":"Maratí", + "ms":"Malayo", + "mt":"Maltés", + "my":"Burmés", + "na":"Nauru", + "nb":"Noruego Bokmål", + "nd":"Ndebele del norte", + "nds":"Bajo sajón", + "ne":"Nepalí", + "ng":"Ndonga", + "nl":"Holandés", + "nn":"Noruego Nynorsk", + "nr":"Ndebele del sur", + "nso":"Sotho del norte", + "nv":"Navajo", + "ny":"Chichewa", + "oc":"Occitano", + "om":"Oromo", + "or":"Oriya", + "os":"Osetio", + "pa":"Punjabi", + "pi":"Palí", + "pl":"Polaco", + "ps":"Pastún", + "pt":"Portugués", + "pt_BR":"Portugués brasileño", + "qu":"Quechua", + "rn":"Rundi", + "ro":"Rumano", + "rom":"Rumaní", + "ru":"Ruso", + "rw":"Kinyarwanda", + "sa":"Sánscrito", + "sc":"Sardo", + "sd":"Sindhi", + "se":"Samí del norte", + "sg":"Sango", + "si":"Cingalés", + "sk":"Eslovaco", + "sl":"Esloveno", + "sm":"Samoano", + "sn":"Shona", + "so":"Somalí", + "sq":"Albanés", + "sr":"Serbio", + "sr@ijekavian":"Serbio ijekaviano", + "sr@ijekavianlatin":"Serbio latino ijekaviano", + "sr@latin":"Serbio latino", + "ss":"Swati", + "st":"Sotho del sur", + "su":"Sudanés", + "sv":"Sueco", + "sw":"Suahili", + "ta":"Tamil", + "te":"Telugu", + "tg":"Tayiko", + "th":"Tailandés", + "ti":"Tigrinya", + "tk":"Turkmenio", + "tn":"Tswana", + "to":"Tonga", + "tr":"Turco", + "ts":"Tsonga", + "tt":"Tatar", + "tw":"Twi", + "ty":"Tahitiano", + "ug":"Uighur", + "uk":"Ucraniano", + "ur":"Urdu", + "uz":"Uzbeko", + "uz@cyrillic":"Uzbeko (Cirílico)", + "ven":"Venda", + "vi":"Vietnamita", + "vo":"Volapük", + "wa":"Walloon", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Yiddish", + "yo":"Yoruba", + "za":"Zhuang", + "zh":"Chino", + "zh_CN":"Chino simplificado", + "zh_HK":"Chino (Hong Kong)", + "zh_TW":"Chino tradicional", + "zu":"Zulú", +}, +"fr": { + "aa":"Afar", + "ab":"Abkhaze", + "ae":"Avestan", + "af":"Afrikaans", + "am":"Amharique", + "ar":"Arabe", + "as":"Assamais", + "ast":"Asturien", + "ay":"Aymara", + "az":"Azerbaïdjanais", + "ba":"Bachkir", + "be":"Biélorusse", + "be@latin":"Biélorusse (Latin)", + "bg":"Bulgare", + "bh":"Bihari", + "bi":"Bichlamar", + "bn":"Bengalî", + "bn_IN":"Bengali (Inde)", + "bo":"Tibétain", + "br":"Breton", + "bs":"Bosniaque", + "ca":"Catalan", + "ca@valencia":"Catalan (Valence)", + "ce":"Tchétchène", + "ch":"Chamorro", + "co":"Corse", + "crh":"Tatars de Crimée", + "cs":"Tchèque", + "csb":"Kachoube", + "cu":"Slavon d'égise", + "cv":"Tchouvache", + "cy":"Gallois", + "da":"Danois", + "de":"Allemand", + "dsb":"Bas-Sorabe", + "dz":"Dzongkha", + "el":"Grec", + "en":"Anglais", + "en_GB":"Anglais britannique", + "en_US":"Anglais américain", + "eo":"Espéranto", + "es":"Espagnol", + "et":"Estonien", + "eu":"Basque", + "fa":"Persan", + "fi":"Finnois", + "fj":"Fidjien", + "fo":"Féroïen", + "fr":"Français", + "fy":"Frison", + "ga":"Gaélique irlandais", + "gd":"Gaélique", + "gl":"Gaélicien", + "gn":"Guarani", + "gu":"Gujarati", + "gv":"Mannois", + "ha":"Haoussa", + "he":"Hébreu", + "hi":"Hindi", + "hne":"Chhattisgarhi", + "ho":"Hiri motu", + "hr":"Croate", + "hsb":"Haut-Sorabe", + "hu":"Hongrois", + "hy":"Arménien", + "hz":"Herero", + "ia":"Interlingua", + "id":"Indonésien", + "ie":"Interlingue", + "ik":"Inupiaq", + "io":"Ido", + "is":"Islandais", + "it":"Italien", + "iu":"Inuktitut", + "ja":"Japonais", + "jv":"Javanais", + "ka":"Géorgien", + "ki":"Kikuyu", + "kk":"Kazakh", + "kl":"Kalaallisut", + "km":"Khmer", + "kn":"Kannada", + "ko":"Coréen", + "ks":"Kashmiri", + "ku":"Kurde", + "kv":"Komi", + "kw":"Cornique", + "ky":"Kirghize", + "la":"Latin", + "lb":"Luxembourgeois", + "li":"Limbourgeois", + "ln":"Lingala", + "lo":"Lao", + "lt":"Lituanien", + "lv":"Letton", + "mai":"Maïthili", + "mg":"Malgache", + "mh":"Marshall", + "mi":"Maori", + "mk":"Macédonien", + "ml":"Malayalam", + "mn":"Mongol", + "mo":"Moldave", + "mr":"Marathe", + "ms":"Malais", + "mt":"Maltais", + "my":"Birman", + "na":"Nauruan", + "nb":"Norvégien Bokmaal", + "nd":"Ndébélé du Nord", + "nds":"Bas saxon", + "ne":"Népalais", + "ng":"Ndonga", + "nl":"Hollandais", + "nn":"Norvégien Nynorsk", + "nr":"Ndébélé du Sud", + "nso":"Sotho du Nord", + "nv":"Navaho", + "ny":"Chichewa", + "oc":"Occitan", + "om":"Oromo", + "or":"Oriya", + "os":"Ossète", + "pa":"Panjabi / Punjabi", + "pi":"Pali", + "pl":"Polonais", + "ps":"Pushto", + "pt":"Portugais", + "pt_BR":"Portugais Brésilien", + "qu":"Quechua", + "rn":"Rundi", + "ro":"Roumain", + "rom":"Rromani", + "ru":"Russe", + "rw":"Kinyarwanda", + "sa":"Sanskrit", + "sc":"Sarde", + "sd":"Sindhi", + "se":"Sami du Nord", + "sg":"Sango", + "si":"Cingalais", + "sk":"Slovaque", + "sl":"Slovène", + "sm":"Samoan", + "sn":"Shona", + "so":"Somali", + "sq":"Albanais", + "sr":"Serbe", + "sr@ijekavian":"Serbe Ijékavien", + "sr@ijekavianlatin":"Serbe Ijékavien Latin", + "sr@latin":"Serbe Latin", + "ss":"Swati", + "st":"Sotho du Sud", + "su":"Soudanais", + "sv":"Suédois", + "sw":"Swahili", + "ta":"Tamoul", + "te":"Télougou", + "tg":"Tadjik", + "th":"Thaïlandais", + "ti":"Tigrigna", + "tk":"Turkmène", + "tn":"Tswana", + "to":"Tonga", + "tr":"Turc", + "ts":"Tsonga", + "tt":"Tatar", + "tw":"Twi", + "ty":"Tahitien", + "ug":"Uighur", + "uk":"Ukrainien", + "ur":"Urdu", + "uz":"Ouzbek", + "uz@cyrillic":"Ouzbek (Cyrillique)", + "ven":"Venda", + "vi":"Vietnamien", + "vo":"Volapük", + "wa":"Wallon", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Yiddish", + "yo":"Yoruba", + "za":"Zhuang", + "zh":"Chinois", + "zh_CN":"Chinois simplifié", + "zh_HK":"Chinois (Hong Kong)", + "zh_TW":"Chinois traditionnel", + "zu":"Zoulou", +}, +"gl": { + "aa":"Afar", + "ab":"Abxasio", + "ae":"Avestaní", + "af":"Africáner", + "am":"Amharic", + "ar":"Árabe", + "as":"Asamixa", + "ast":"Asturiano", + "ay":"Aimará", + "az":"Azerí", + "ba":"Bashquir", + "be":"Bielorruso", + "be@latin":"Bielorruso (Latino)", + "bg":"Búlgaro", + "bh":"Bihari", + "bi":"Bislama", + "bn":"Bengalí", + "bn_IN":"Bengalí (India)", + "bo":"Tibetano", + "br":"Bretón", + "bs":"Bosnio", + "ca":"Catalán", + "ca@valencia":"Catalán (Valenciano)", + "ce":"Checheno", + "ch":"Chamorro", + "co":"Corso", + "crh":"Tártaro da Crimea", + "cs":"Checo", + "csb":"Kashubí", + "cu":"Eslavo eclesiástico", + "cv":"Chuvash", + "cy":"Galés", + "da":"Dinamarqués", + "de":"Alemán", + "dsb":"Baixo sórabo", + "dz":"Dzongca", + "el":"Grego", + "en":"Inglés", + "en_GB":"Inglés de GB", + "en_US":"Inglés americano", + "eo":"Esperanto", + "es":"Castelán", + "et":"Estoniano", + "eu":"Vasco", + "fa":"Frisón (Parsi)", + "fi":"Finlandés", + "fj":"Fixiano", + "fo":"Feroés", + "fr":"Francés", + "fy":"Frisio", + "ga":"Gaélico de Irlanda", + "gd":"Gaélico", + "gl":"Galego", + "gn":"Guaraní", + "gu":"Guxarati", + "gv":"Manx", + "ha":"Hausa", + "he":"Hebraico", + "hi":"Hindi", + "hne":"Chhattisgarhi", + "ho":"Hiri Motu", + "hr":"Croata", + "hsb":"Alto sórabo", + "hu":"Húngaro", + "hy":"Armenio", + "hz":"Herero", + "ia":"Interlingua", + "id":"Indonesio", + "ie":"Interlingua", + "ik":"Inupiaq", + "io":"Ido", + "is":"Islandés", + "it":"Italiano", + "iu":"Inuktitut", + "ja":"Xaponés", + "jv":"Xavanés", + "ka":"Xeorxiano", + "ki":"Kikuyu", + "kk":"Cazaxo", + "kl":"Groenlandés", + "km":"Khmer", + "kn":"Kannada", + "ko":"Coreano", + "ks":"Caxemir", + "ku":"Kurdo", + "kv":"Komi", + "kw":"Córnico", + "ky":"Quirguiz", + "la":"Latín", + "lb":"Luxemburgués", + "li":"Limburgano", + "ln":"Lingala", + "lo":"Lao", + "lt":"Lituano", + "lv":"Letón", + "mai":"Maithili", + "mg":"Malgaxe", + "mh":"Marshalés", + "mi":"Maorí", + "mk":"Macedonio", + "ml":"Malaialam", + "mn":"Mongol", + "mo":"Moldavo", + "mr":"Marata", + "ms":"Malaio", + "mt":"Maltés", + "my":"Burmés", + "na":"Nauru", + "nb":"Noruegués (Bokmaal)", + "nd":"Ndebele do norte", + "nds":"Baixo saxón", + "ne":"Nepalí", + "ng":"Ndonga", + "nl":"Holandés", + "nn":"Noruegués (Nynorsk)", + "nr":"Ndebele do sur", + "nso":"Sotho do norte", + "nv":"Navaxo", + "ny":"Chichewa", + "oc":"Occitano", + "om":"Oromo", + "or":"Orisa", + "os":"Oseto", + "pa":"Punxabí/Panxabí", + "pi":"Pali", + "pl":"Polaco", + "ps":"Pushto", + "pt":"Portugués", + "pt_BR":"Portugués do Brasil", + "qu":"Quechua", + "rn":"Rundi", + "ro":"Romanés", + "rom":"Romaní", + "ru":"Ruso", + "rw":"Quiñaruanda", + "sa":"Sánscrito", + "sc":"Sardo", + "sd":"Sindhi", + "se":"Sami do norte", + "sg":"Sango", + "si":"Sinhala", + "sk":"Eslovaco", + "sl":"Esloveno", + "sm":"Samoano", + "sn":"Shona", + "so":"Somalí", + "sq":"Albanés", + "sr":"Serbio", + "sr@ijekavian":"Serbio ixtocavio", + "sr@ijekavianlatin":"Serbio ishtocavio Latino", + "sr@latin":"Serbio latino", + "ss":"Swati", + "st":"Sotho do sur", + "su":"Sudanés", + "sv":"Sueco", + "sw":"Swahili", + "ta":"Tamil", + "te":"Telugu", + "tg":"Taxico", + "th":"Tailandés", + "ti":"Tigrignan", + "tk":"Turquemeno", + "tn":"Tswana", + "to":"Tonga", + "tr":"Turco", + "ts":"Tsonga", + "tt":"Tártaro", + "tw":"Twi", + "ty":"Tahitiano", + "ug":"Uighur", + "uk":"Ucraíno", + "ur":"Urdú", + "uz":"Usbeco", + "uz@cyrillic":"Usbeco (Cirílico)", + "ven":"Venda", + "vi":"Vietnamita", + "vo":"Volapük", + "wa":"Valón", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Iídiche", + "yo":"Yorubá", + "za":"Chuan", + "zh":"Chinés", + "zh_CN":"Chinés simplificado", + "zh_HK":"Chinés (Hong Kong)", + "zh_TW":"Chinés Tradicional", + "zu":"Zulú", +}, +"hu": { + "aa":"Afar", + "ab":"Abház", + "ae":"Avesztáni", + "af":"Afrikaans", + "am":"Amhár", + "ar":"Arab", + "as":"Asszámi", + "ast":"Asztúriai", + "ay":"Ajmara", + "az":"Azerbajdzsán", + "ba":"Baskír", + "be":"Belorusz", + "be@latin":"Belorusz (latin betűs)", + "bg":"Bolgár", + "bh":"Bihari", + "bi":"Biszlama", + "bn":"Bengáli", + "bn_IN":"Bengáli (India)", + "bo":"Tibeti", + "br":"Breton", + "bs":"Bosnyák", + "ca":"Katalán", + "ca@valencia":"Katalán (valenciai)", + "ce":"Csecsen", + "ch":"Chamorro", + "co":"Korzikai", + "crh":"Krími tatár", + "cs":"Cseh", + "csb":"Kasub", + "cu":"Szláv (egyházi)", + "cv":"Csuvas", + "cy":"Velszi", + "da":"Dán", + "de":"Német", + "dsb":"Alsó szorb", + "dz":"Dzongkha", + "el":"Görög", + "en":"Angol", + "en_GB":"Angol (brit)", + "en_US":"Angol (amerikai)", + "eo":"Eszperantó", + "es":"Spanyol", + "et":"Észt", + "eu":"Baszk", + "fa":"Fárszi (perzsa)", + "fi":"Finn", + "fj":"Fidzsi", + "fo":"Faröei", + "fr":"Francia", + "fy":"Fríz", + "ga":"Gall (ír)", + "gd":"Gall", + "gl":"Galíciai", + "gn":"Guarani", + "gu":"Gudzsarati", + "gv":"Manx", + "ha":"Hausa", + "he":"Héber", + "hi":"Hindi", + "hne":"Cshattíszgarhi", + "ho":"Hiri motu", + "hr":"Horvát", + "hsb":"Felső szorb", + "hu":"Magyar", + "hy":"Örmény", + "hz":"Hereró", + "ia":"Interlingua", + "id":"Indonéz", + "ie":"Interlingue", + "ik":"Inupiak", + "io":"Ido", + "is":"Izlandi", + "it":"Olasz", + "iu":"Inuktitut", + "ja":"Japán", + "jv":"Jávai", + "ka":"Grúz", + "ki":"Kikuju", + "kk":"Kazah", + "kl":"Kalaalliszut", + "km":"Khmer", + "kn":"Kannada", + "ko":"Koreai", + "ks":"Kasmír", + "ku":"Kurd", + "kv":"Komi", + "kw":"Korn", + "ky":"Kirgiz", + "la":"Latin", + "lb":"Luxemburgi", + "li":"Limburgi", + "ln":"Lingala", + "lo":"Lao", + "lt":"Litván", + "lv":"Lett", + "mai":"Maithili", + "mg":"Malagazi", + "mh":"Marsalli", + "mi":"Maori", + "mk":"Macedón", + "ml":"Malajalam", + "mn":"Mongol", + "mo":"Moldáv", + "mr":"Marati", + "ms":"Maláj", + "mt":"Máltai", + "my":"Burmai", + "na":"Nauru", + "nb":"Norvég (bokmal)", + "nd":"Ndebele (északi)", + "nds":"Alsószász", + "ne":"Nepáli", + "ng":"Ndonga", + "nl":"Holland", + "nn":"Norvég (nynorsk)", + "nr":"Ndebele (déli)", + "nso":"Északi sotho", + "nv":"Navajo", + "ny":"Csicseva", + "oc":"Okcitán", + "om":"Oromo", + "or":"Orija", + "os":"Oszét", + "pa":"Pandzsabi", + "pi":"Pali", + "pl":"Lengyel", + "ps":"Pusto", + "pt":"Portugál", + "pt_BR":"Portugál (brazil)", + "qu":"Kecsua", + "rn":"Rundi", + "ro":"Román", + "rom":"Lovári cigány", + "ru":"Orosz", + "rw":"Kinjarvanda", + "sa":"Szanszkrit", + "sc":"Szardíniai", + "sd":"Szindi", + "se":"Északi szami", + "sg":"Szangó", + "si":"Szingaléz", + "sk":"Szlovák", + "sl":"Szlovén", + "sm":"Szamoai", + "sn":"Sona", + "so":"Szomáli", + "sq":"Albán", + "sr":"Szerb", + "sr@ijekavian":"Szerb (ijekavica)", + "sr@ijekavianlatin":"Szerb (ijekavica, latin betűs)", + "sr@latin":"Szerb (latin betűs)", + "ss":"Szvati", + "st":"Sotho (déli)", + "su":"Szundanéz", + "sv":"Svéd", + "sw":"Szvahili", + "ta":"Tamil", + "te":"Telugu", + "tg":"Tádzsik", + "th":"Thai", + "ti":"Tigrinja", + "tk":"Türkmén", + "tn":"Tszvana", + "to":"Tonga", + "tr":"Török", + "ts":"Tsonga", + "tt":"Tatár", + "tw":"Tvi", + "ty":"Tahiti", + "ug":"Ujgur", + "uk":"Ukrán", + "ur":"Urdu", + "uz":"Üzbég", + "uz@cyrillic":"Üzbég (cirill)", + "ven":"Venda", + "vi":"Vietnami", + "vo":"Volapük", + "wa":"Vallon", + "wo":"Volof", + "xh":"Xhosza", + "yi":"Jiddis", + "yo":"Joruba", + "za":"Zhuang", + "zh":"Kínai", + "zh_CN":"Kínai (egyszerűsített)", + "zh_HK":"Kínai (hongkongi)", + "zh_TW":"Kínai (hagyományos)", + "zu":"Zulu", +}, +"it": { + "aa":"Afar", + "ab":"Abcaso", + "ae":"Avestano", + "af":"Afrikaans", + "am":"Amarico", + "ar":"Arabo", + "as":"Assamese", + "ast":"Asturiano", + "ay":"Aymara", + "az":"Azero", + "ba":"Baškiro", + "be":"Bielorusso", + "be@latin":"Bielorusso (Latino)", + "bg":"Bulgaro", + "bh":"Bihari", + "bi":"Bislama", + "bn":"Bengalese", + "bn_IN":"Bengalese (India)", + "bo":"Tibetano", + "br":"Bretone", + "bs":"Bosniaco", + "ca":"Catalano", + "ca@valencia":"Catalano (Valenziano)", + "ce":"Ceceno", + "ch":"Chamorro", + "co":"Corso", + "crh":"Tataro di Crimea", + "cs":"Ceco", + "csb":"Casciubico", + "cu":"Slavo ecclesiastico", + "cv":"Ciuvascio", + "cy":"Gallese", + "da":"Danese", + "de":"Tedesco", + "dsb":"Basso sorabo", + "dz":"Dzongkha", + "el":"Greco", + "en":"Inglese", + "en_GB":"Inglese britannico", + "en_US":"Inglese americano", + "eo":"Esperanto", + "es":"Spagnolo", + "et":"Estone", + "eu":"Basco", + "fa":"Farsi (Persiano)", + "fi":"Finlandese", + "fj":"Figiano", + "fo":"Faroese", + "fr":"Francese", + "fy":"Frisone", + "ga":"Gaelico irlandese", + "gd":"Gaelico", + "gl":"Gallego", + "gn":"Guaraní", + "gu":"Gujarati", + "gv":"Mannese", + "ha":"Hausa", + "he":"Ebraico", + "hi":"Hindi", + "hne":"Chhattisgarhi", + "ho":"Hiri motu", + "hr":"Croato", + "hsb":"Alto sorabo", + "hu":"Ungherese", + "hy":"Armeno", + "hz":"Herero", + "ia":"Interlingua", + "id":"Indonesiano", + "ie":"Interlingue", + "ik":"Inupiak", + "io":"Ido", + "is":"Islandese", + "it":"Italiano", + "iu":"Inuktitut", + "ja":"Giapponese", + "jv":"Giavanese", + "ka":"Georgiano", + "ki":"Kikuyu", + "kk":"Kazako", + "kl":"Groenlandese", + "km":"Khmer", + "kn":"Kannada", + "ko":"Coreano", + "ks":"Kašmiro", + "ku":"Curdo", + "kv":"Komi", + "kw":"Cornico", + "ky":"Kirghiso", + "la":"Latino", + "lb":"Lussemburghese", + "li":"Limburghese", + "ln":"Lingala", + "lo":"Lao", + "lt":"Lituano", + "lv":"Lettone", + "mai":"Maithili", + "mg":"Malgascio", + "mh":"Marsciallese", + "mi":"Maori", + "mk":"Macedone", + "ml":"Malayalam", + "mn":"Mongolo", + "mo":"Moldavo", + "mr":"Marathi", + "ms":"Malese", + "mt":"Maltese", + "my":"Birmano", + "na":"Nauruano", + "nb":"Norvegese bokmål", + "nd":"Ndebele settentrionale", + "nds":"Basso sassone", + "ne":"Nepalese", + "ng":"Ndonga", + "nl":"Nederlandese", + "nn":"Norvegese nynorsk", + "nr":"Ndebele meridionale", + "nso":"Sesotho del nord", + "nv":"Navajo", + "ny":"Chichewa", + "oc":"Occitano", + "om":"Oromo", + "or":"Oriya", + "os":"Osseto", + "pa":"Panjabi", + "pi":"Pali", + "pl":"Polacco", + "ps":"Paštu", + "pt":"Portoghese", + "pt_BR":"Portoghese brasiliano", + "qu":"Quechua", + "rn":"Kirundi", + "ro":"Rumeno", + "rom":"Romaní", + "ru":"Russo", + "rw":"Kinyarwanda", + "sa":"Sanscrito", + "sc":"Sardo", + "sd":"Sindhi", + "se":"Sami settentrionale", + "sg":"Sango", + "si":"Singalese", + "sk":"Slovacco", + "sl":"Sloveno", + "sm":"Samoano", + "sn":"Shona", + "so":"Somalo", + "sq":"Albanese", + "sr":"Serbo", + "sr@ijekavian":"Serbo ijekavo", + "sr@ijekavianlatin":"Serbo ijekavo latino", + "sr@latin":"Serbo latino", + "ss":"Swati", + "st":"Sesotho meridionale", + "su":"Sondanese", + "sv":"Svedese", + "sw":"Swahili", + "ta":"Tamil", + "te":"Telugu", + "tg":"Tagico", + "th":"Thailandese", + "ti":"Tigrino", + "tk":"Turkmeno", + "tn":"Tswana", + "to":"Tonga", + "tr":"Turco", + "ts":"Tsonga", + "tt":"Tataro", + "tw":"Twi", + "ty":"Tahitiano", + "ug":"Uiguro", + "uk":"Ucraino", + "ur":"Urdu", + "uz":"Usbeco", + "uz@cyrillic":"Usbeco (cirillico)", + "ven":"Venda", + "vi":"Vietnamita", + "vo":"Volapük", + "wa":"Vallone", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Yiddish", + "yo":"Yoruba", + "za":"Zhuang", + "zh":"Cinese", + "zh_CN":"Cinese semplificato", + "zh_HK":"Cinese (Hong Kong)", + "zh_TW":"Cinese tradizionale", + "zu":"Zulu", +}, +"ja": { + "aa":"アファル語", + "ab":"アブハズ語", + "ae":"アベスタ語", + "af":"アフリカーンス語", + "am":"アムハラ語", + "ar":"アラビア語", + "as":"アッサム語", + "ast":"アストゥリアス語", + "ay":"アイマラ語", + "az":"アゼルバイジャン語", + "ba":"バシュキール語", + "be":"ベラルーシ語", + "be@latin":"ベラルーシ語 (ラテン文字)", + "bg":"ブルガリア語", + "bh":"ビハール語", + "bi":"ビスラマ語", + "bn":"ベンガル語", + "bn_IN":"ベンガル語 (インド)", + "bo":"チベット語", + "br":"ブルトン語", + "bs":"ボスニア語", + "ca":"カタロニア語", + "ca@valencia":"バレンシア語", + "ce":"チェチェン語", + "ch":"チャモロ語", + "co":"コルシカ語", + "crh":"クリミア・タタール語", + "cs":"チェコ語", + "csb":"カシューブ語", + "cu":"教会スラブ語", + "cv":"チュワシュ語", + "cy":"ウェールズ語", + "da":"デンマーク語", + "de":"ドイツ語", + "dsb":"下ソルブ語", + "dz":"ゾンカ語", + "el":"ギリシャ語", + "en":"英語", + "en_GB":"イギリス英語", + "en_US":"アメリカ英語", + "eo":"エスペラント語", + "es":"スペイン語", + "et":"エストニア語", + "eu":"バスク語", + "fa":"ペルシア語", + "fi":"フィンランド語", + "fj":"フィジー語", + "fo":"フェーロー語", + "fr":"フランス語", + "fy":"フリジア語", + "ga":"アイルランド系ゲール語", + "gd":"ゲール語", + "gl":"ガリシア語", + "gn":"グァラニ語", + "gu":"グジャラート語", + "gv":"マン島語", + "ha":"ハウサ語", + "he":"ヘブライ語", + "hi":"ヒンディー語", + "hne":"チャッティースガリー語", + "ho":"ヒリモトゥ語", + "hr":"クロアチア語", + "hsb":"上ソルブ語", + "hu":"ハンガリー語", + "hy":"アルメニア語", + "hz":"ヘレロ語", + "ia":"インターリンガ", + "id":"インドネシア語", + "ie":"インターリング", + "ik":"イヌピアック語", + "io":"イド語", + "is":"アイスランド語", + "it":"イタリア語", + "iu":"イヌイット語", + "ja":"日本語", + "jv":"ジャワ語", + "ka":"グルジア語", + "ki":"キクユ語", + "kk":"カザフ語", + "kl":"グリーンランド語", + "km":"クメール語", + "kn":"カンナダ語", + "ko":"韓国語・朝鮮語", + "ks":"カシュミール語", + "ku":"クルド語", + "kv":"コミ語", + "kw":"コーンウォール語", + "ky":"キルギス語", + "la":"ラテン語", + "lb":"ルクセンブルク語", + "li":"リグリア語", + "ln":"リンガラ語", + "lo":"ラオ語", + "lt":"リトアニア語", + "lv":"ラトビア語", + "mai":"マイティリー語", + "mg":"マラガシ語", + "mh":"マーシャル語", + "mi":"マオリ語", + "mk":"マケドニア語", + "ml":"マラヤーラム語", + "mn":"モンゴル語", + "mo":"モルダビア語", + "mr":"マラーティー語", + "ms":"マレー語", + "mt":"マルタ語", + "my":"ビルマ語", + "na":"ナウル語", + "nb":"ノルウェー語 (ブークモール)", + "nd":"北ンデベレ語", + "nds":"低ザクセン語", + "ne":"ネパール語", + "ng":"ンドゥンガ語", + "nl":"オランダ語", + "nn":"ノルウェー語 (ニーノシュク)", + "nr":"南ンデベレ語", + "nso":"北ソト語", + "nv":"ナバホ語", + "ny":"チェワ語", + "oc":"オック語", + "om":"オロモ語", + "or":"オリヤー語", + "os":"オセット語", + "pa":"パンジャーブ語", + "pi":"パーリ語", + "pl":"ポーランド語", + "ps":"パシュトー語", + "pt":"ポルトガル語", + "pt_BR":"ブラジル ポルトガル語", + "qu":"ケチュア語", + "rn":"ルンディ語", + "ro":"ルーマニア語", + "rom":"ロマ語", + "ru":"ロシア語", + "rw":"ルワンダ語", + "sa":"サンスクリット語", + "sc":"サルデーニャ語", + "sd":"シンド語", + "se":"北サーミ語", + "sg":"サンゴ語", + "si":"シンハラ語", + "sk":"スロバキア語", + "sl":"スロベニア語", + "sm":"サモア語", + "sn":"ショナ語", + "so":"ソマリ語", + "sq":"アルバニア語", + "sr":"セルビア語", + "sr@ijekavian":"セルビア語イェ方言", + "sr@ijekavianlatin":"セルビア語イェ方言 (ラテン文字)", + "sr@latin":"セルビア語 (ラテン文字)", + "ss":"スワティ語", + "st":"南ソト語", + "su":"スンダ語", + "sv":"スウェーデン語", + "sw":"スワヒリ語", + "ta":"タミル語", + "te":"テルグ語", + "tg":"タジク語", + "th":"タイ語", + "ti":"ティグリニア語", + "tk":"トルクメン語", + "tn":"ツワナ語", + "to":"トンガ語", + "tr":"トルコ語", + "ts":"ツォンガ語", + "tt":"タタール語", + "tw":"チュイ語", + "ty":"タヒチ語", + "ug":"ウイグル語", + "uk":"ウクライナ語", + "ur":"ウルドゥー語", + "uz":"ウズベク語", + "uz@cyrillic":"ウズベク語 (キリル文字)", + "ven":"ベンダ語", + "vi":"ベトナム語", + "vo":"ボラピューク語", + "wa":"ワロン語", + "wo":"ウォロフ語", + "xh":"コサ語", + "yi":"イディッシュ語", + "yo":"ヨルバ語", + "za":"チュワン語", + "zh":"中国語", + "zh_CN":"中国語 簡体字", + "zh_HK":"中国語 (香港)", + "zh_TW":"中国語 繁体字", + "zu":"ズールー語", +}, +"nl": { + "aa":"Afar", + "ab":"Abkhazian", + "ae":"Avestan", + "af":"Afrikaans", + "am":"Amharisch", + "ar":"Arabisch", + "as":"Assamees", + "ast":"Asturisch", + "ay":"Aymara", + "az":"Azerbeidjaans", + "ba":"Bashkir", + "be":"Wit-Rusland", + "be@latin":"Wit-Rusland (Latijn)", + "bg":"Bulgaars", + "bh":"Bihari", + "bi":"Bislama", + "bn":"Bengali", + "bn_IN":"Bengali (India)", + "bo":"Tibetaans", + "br":"Bretons", + "bs":"Bosnisch", + "ca":"Catalaans", + "ca@valencia":"Catalaans (Valentiaans)", + "ce":"Chechen", + "ch":"Chamorro", + "co":"Corsicaans", + "crh":"Krimtartaar", + "cs":"Tsjechisch", + "csb":"Kashubian", + "cu":"Kerk Slavisch", + "cv":"Chuvash", + "cy":"Welsh", + "da":"Deens", + "de":"Duits", + "dsb":"Nedersorbisch", + "dz":"Dzongkha", + "el":"Grieks", + "en":"Engels", + "en_GB":"Engels (Brits)", + "en_US":"Engels (Amerikaans)", + "eo":"Esperanto", + "es":"Spaans", + "et":"Ests", + "eu":"Baskisch", + "fa":"Farsi (Perzisch)", + "fi":"Fins", + "fj":"Fijisch", + "fo":"Faroese", + "fr":"Frans", + "fy":"Frysk", + "ga":"Gaelic (Iers)", + "gd":"Gaelic", + "gl":"Galicisch", + "gn":"Guarani", + "gu":"Gujarati", + "gv":"Manx", + "ha":"Hausa", + "he":"Hebreeuws", + "hi":"Hindi", + "hne":"Chhattisgarhi", + "ho":"Hiri Motu", + "hr":"Kroatisch", + "hsb":"Opper Sorbian", + "hu":"Hongaars", + "hy":"Armeens", + "hz":"Herero", + "ia":"Interlingua", + "id":"Indonesisch", + "ie":"Interlingue", + "ik":"Inupiaq", + "io":"Ido", + "is":"IJslands", + "it":"Italiaans", + "iu":"Inuktitut", + "ja":"Japans", + "jv":"Javaans", + "ka":"Georgisch", + "ki":"Kikuyu", + "kk":"Kazakh", + "kl":"Kalaallisut", + "km":"Khmer", + "kn":"Kannada", + "ko":"Koreaans", + "ks":"Kashmiri", + "ku":"Koerdisch", + "kv":"Komi", + "kw":"Cornish", + "ky":"Kirghizisch", + "la":"Latijn", + "lb":"Letzenburgs", + "li":"Limburgs", + "ln":"Lingala", + "lo":"Lao", + "lt":"Litouws", + "lv":"Lets", + "mai":"Maithili", + "mg":"Malagasy", + "mh":"Marshallees", + "mi":"Maori", + "mk":"Macedonisch", + "ml":"Malayalam", + "mn":"Mongolisch", + "mo":"Moldavisch", + "mr":"Marathi", + "ms":"Malay", + "mt":"Maltees", + "my":"Burmees", + "na":"Nauru", + "nb":"Noors Bokmål", + "nd":"Ndebele, Noord", + "nds":"Nedersaksisch", + "ne":"Nepalees", + "ng":"Ndonga", + "nl":"Nederlands", + "nn":"Noors, Nynorsk", + "nr":"Ndebele, Zuid", + "nso":"Noord-Sotho", + "nv":"Navajo", + "ny":"Chichewa", + "oc":"Occitan", + "om":"Oromo", + "or":"Oriya", + "os":"Ossetisch", + "pa":"Panjabi", + "pi":"Pali", + "pl":"Pools", + "ps":"Pushto", + "pt":"Portugees", + "pt_BR":"Braziliaans Portugees", + "qu":"Quechua", + "rn":"Rundi", + "ro":"Roemeens", + "rom":"Roma", + "ru":"Russisch", + "rw":"Kinyarwanda", + "sa":"Sanskrit", + "sc":"Sardinisch", + "sd":"Sindhi", + "se":"Noord Sami", + "sg":"Sango", + "si":"Singalees", + "sk":"Slowaaks", + "sl":"Sloweens", + "sm":"Samoaans", + "sn":"Shona", + "so":"Somalisch", + "sq":"Albanisch", + "sr":"Servisch", + "sr@ijekavian":"Servisch Ijekavian", + "sr@ijekavianlatin":"Servisch Ijekavian Latijn", + "sr@latin":"Servisch Latijn", + "ss":"Swati", + "st":"Sotho, Zuid", + "su":"Sundanees", + "sv":"Zweeds", + "sw":"Swahili", + "ta":"Tamil", + "te":"Telugu", + "tg":"Tajiks", + "th":"Thais", + "ti":"Tigrinya", + "tk":"Turkmeens", + "tn":"Tswana", + "to":"Tonga", + "tr":"Turks", + "ts":"Tsonga", + "tt":"Tatar", + "tw":"Twi", + "ty":"Tahitiaans", + "ug":"Uighur", + "uk":"Oekraïns", + "ur":"Urdu", + "uz":"Oezbeeks", + "uz@cyrillic":"Oezbeeks (Cyrilisch)", + "ven":"Venda", + "vi":"Vietnamees", + "vo":"Volapúk", + "wa":"Waals", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Yiddish", + "yo":"Yoruba", + "za":"Zhuang", + "zh":"Chinees", + "zh_CN":"Chinees (Vereenvoudigd)", + "zh_HK":"Chinees (Hong Kong)", + "zh_TW":"Chinees (Traditioneel)", + "zu":"Zulu", +}, +"pl": { + "aa":"Afarski", + "ab":"Abchaski", + "ae":"Awestański (Irański)", + "af":"Afrykanerski", + "am":"Etiopski", + "ar":"Arabski", + "as":"Assamijski", + "ast":"Asturyjski", + "ay":"Aymara", + "az":"Azerbejdżański", + "ba":"Baszkirski", + "be":"Białoruski", + "be@latin":"Białoruski (alfabet łaciński)", + "bg":"Bułgarski", + "bh":"Bihari", + "bi":"Bislama", + "bn":"Bengalski", + "bn_IN":"Bengalski (Indie)", + "bo":"Tybetański", + "br":"Bretoński", + "bs":"Bośniacki", + "ca":"Kataloński", + "ca@valencia":"Kataloński (walencki)", + "ce":"Czeczeński", + "ch":"Chamorro", + "co":"Korsykański", + "crh":"Tatarski (Krymski)", + "cs":"Czeski", + "csb":"Kaszubski", + "cu":"Starocerkiewno-słowiański", + "cv":"Czuwaski", + "cy":"Walijski", + "da":"Duński", + "de":"Niemiecki", + "dsb":"Dolnołużycki", + "dz":"Dzongkha", + "el":"Grecki", + "en":"Angielski", + "en_GB":"Angielski brytyjski", + "en_US":"Angielski amerykański", + "eo":"Esperanto", + "es":"Hiszpański", + "et":"Estoński", + "eu":"Baskijski", + "fa":"Farsi (Perski)", + "fi":"Fiński", + "fj":"z Fiji", + "fo":"z Wysp Owczych", + "fr":"Francuski", + "fy":"Fryzyjski", + "ga":"Irlandzki Gaelic", + "gd":"celtycki (gaelic)", + "gl":"Galicyjski", + "gn":"Guarani", + "gu":"Gujarati", + "gv":"Manx", + "ha":"Hausa", + "he":"Hebrajski", + "hi":"Hindi", + "hne":"Chhattisgarhi", + "ho":"Hiri Motu", + "hr":"Chorwacki", + "hsb":"Górnołużycki", + "hu":"Węgierski", + "hy":"Ormiański", + "hz":"Herero", + "ia":"Interlingua", + "id":"Indonezyjski", + "ie":"Interlingue", + "ik":"Inupiaq", + "io":"Ido", + "is":"Islandzki", + "it":"Włoski", + "iu":"Inuktitut", + "ja":"Japoński", + "jv":"Jawański", + "ka":"Gruziński", + "ki":"Kikuyu", + "kk":"Kazachski", + "kl":"Kalaallisut", + "km":"Khmerski", + "kn":"Kannada", + "ko":"Koreański", + "ks":"Kaszmirski", + "ku":"Kurdyjski", + "kv":"z Komi", + "kw":"Kornwalijski", + "ky":"Kirgiski", + "la":"Łaciński", + "lb":"Luksemburski", + "li":"Limburgiański", + "ln":"Lingala", + "lo":"Laotański", + "lt":"Litewski", + "lv":"Łotewski", + "mai":"Maithili", + "mg":"Madagaskarski", + "mh":"z Wysp Marshalla", + "mi":"Maoryjski", + "mk":"Macedoński", + "ml":"Malajalam", + "mn":"Mongolski", + "mo":"Mołdawski", + "mr":"Marathi (Hinduski)", + "ms":"Malajski", + "mt":"Maltański", + "my":"Birmański", + "na":"Nauru", + "nb":"Norweski Bokmaal", + "nd":"Ndebele, Północ", + "nds":"Dolnosaksoński", + "ne":"Nepalski", + "ng":"Ndonga", + "nl":"Holenderski", + "nn":"Norweski Nynorsk", + "nr":"Ndebele, Południe", + "nso":"Północne Sotho", + "nv":"Navajo", + "ny":"Chichewa", + "oc":"Okcytański", + "om":"Oromo", + "or":"Oriya", + "os":"Osetański", + "pa":"Pendżabski", + "pi":"Pali", + "pl":"Polski", + "ps":"Pushto", + "pt":"Portugalski", + "pt_BR":"Portugalski (brazylijski)", + "qu":"Quechua", + "rn":"Rundi", + "ro":"Rumuński", + "rom":"Romski", + "ru":"Rosyjski", + "rw":"Kinyarwanda", + "sa":"Sanskryt", + "sc":"Sardyński", + "sd":"Sindhi", + "se":"Północny Sami", + "sg":"Sango", + "si":"Sinhala", + "sk":"Słowacki", + "sl":"Słoweński", + "sm":"Samoański", + "sn":"Shona", + "so":"Somalijski", + "sq":"Albański", + "sr":"Serbski", + "sr@ijekavian":"Serbski ijekawski", + "sr@ijekavianlatin":"Serbski ijekawski łaciński", + "sr@latin":"Serbski łaciński", + "ss":"Swati", + "st":"Sotho, Południowy", + "su":"Sudański", + "sv":"Szwedzki", + "sw":"Swahili", + "ta":"Tamiljski", + "te":"Telugu", + "tg":"Tadżycki", + "th":"Tajski", + "ti":"Tigrinya", + "tk":"Turkmeński", + "tn":"Tswana", + "to":"Tonga", + "tr":"Turecki", + "ts":"Tsonga", + "tt":"Tatarski", + "tw":"Twi", + "ty":"Tahitański", + "ug":"Ujgurski", + "uk":"Ukraiński", + "ur":"Urdu", + "uz":"Uzbecki", + "uz@cyrillic":"Uzbecki (cyrlica)", + "ven":"Venda", + "vi":"Wietnamski", + "vo":"Volapük", + "wa":"Waloński", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Jidysz", + "yo":"Yoruba", + "za":"Zhuang", + "zh":"Chiński", + "zh_CN":"Chiński uproszczony", + "zh_HK":"Chiński (Hong Kong)", + "zh_TW":"Chiński tradycyjny", + "zu":"Zuluski", +}, +"ru": { + "aa":"Афарский", + "ab":"Абхазский", + "ae":"Авестийский", + "af":"Африкаанс", + "am":"Амхарский", + "ar":"Арабский", + "as":"Ассамский", + "ast":"Астурийский", + "ay":"Аймарский", + "az":"Азербайджанский", + "ba":"Башкирский", + "be":"Белорусский", + "be@latin":"Белорусский (латиница)", + "bg":"Болгарский", + "bh":"Бихарский", + "bi":"Бислама", + "bn":"Бенгальский", + "bn_IN":"Бенгальский (Индия)", + "bo":"Тибетский", + "br":"Бретонский", + "bs":"Боснийский", + "ca":"Каталонский", + "ca@valencia":"Каталонский (Валенсия)", + "ce":"Чеченский", + "ch":"Чаморро", + "co":"Корсиканский", + "crh":"Крымско-татарский", + "cs":"Чешский", + "csb":"Кашубский", + "cu":"Церковнославянский", + "cv":"Чувашский", + "cy":"Валлийский", + "da":"Датский", + "de":"Немецкий", + "dsb":"Нижнелужицкий", + "dz":"Дзонгка (Бутан)", + "el":"Греческий", + "en":"Английский", + "en_GB":"Английский (Великобритания)", + "en_US":"Английский (США)", + "eo":"Эсперанто", + "es":"Испанский", + "et":"Эстонский", + "eu":"Баскский", + "fa":"Персидский", + "fi":"Финский", + "fj":"Фиджи", + "fo":"Фарерский", + "fr":"Французский", + "fy":"Фризский", + "ga":"Ирландский", + "gd":"Шотландский", + "gl":"Галисийский", + "gn":"Гуарани", + "gu":"Гуджарати", + "gv":"Мэнский", + "ha":"Хауса", + "he":"Иврит", + "hi":"Хинди", + "hne":"Чхаттисгархи", + "ho":"Хири-моту", + "hr":"Хорватский", + "hsb":"Верхнелужицкий", + "hu":"Венгерский", + "hy":"Армянский", + "hz":"Эреро", + "ia":"Интерлингва", + "id":"Индонезийский", + "ie":"Окциденталь", + "ik":"Инупиак", + "io":"Идо", + "is":"Исландский", + "it":"Итальянский", + "iu":"Инуктитут", + "ja":"Японский", + "jv":"Яванский", + "ka":"Грузинский", + "ki":"Кикуйю", + "kk":"Казахский", + "kl":"Гренландский", + "km":"Кхмерский", + "kn":"Каннада", + "ko":"Корейский", + "ks":"Кашмирский", + "ku":"Курдский", + "kv":"Коми", + "kw":"Корнский", + "ky":"Киргизский", + "la":"Латинский", + "lb":"Люксембургский", + "li":"Лимбуржский", + "ln":"Лингала", + "lo":"Лаосский", + "lt":"Литовский", + "lv":"Латышский", + "mai":"Майтхили", + "mg":"Мальгашский", + "mh":"Маршалльский", + "mi":"Маори", + "mk":"Македонский", + "ml":"Малаялам", + "mn":"Монгольский", + "mo":"Молдавский", + "mr":"Маратхи", + "ms":"Малайский", + "mt":"Мальтийский", + "my":"Бирманский", + "na":"Науру", + "nb":"Норвежский (литературный)", + "nd":"Северный ндебеле", + "nds":"Нижнесаксонский", + "ne":"Непальский", + "ng":"Ндонга", + "nl":"Голландский", + "nn":"Норвежский (нюнорск)", + "nr":"Южный ндебеле", + "nso":"Северный сото", + "nv":"Навахо", + "ny":"Чичева", + "oc":"Окситанский", + "om":"Оромо", + "or":"Ория", + "os":"Осетинский", + "pa":"Панджаби", + "pi":"Пали", + "pl":"Польский", + "ps":"Пушту", + "pt":"Португальский", + "pt_BR":"Португальский (Бразилия)", + "qu":"Кечуа", + "rn":"Рунди", + "ro":"Румынский", + "rom":"Цыганский", + "ru":"Русский", + "rw":"Киньяруанда", + "sa":"Санскрит", + "sc":"Сардинский", + "sd":"Синдхи", + "se":"Северносаамский", + "sg":"Санго", + "si":"Сингальский", + "sk":"Словацкий", + "sl":"Словенский", + "sm":"Самоанский", + "sn":"Шона", + "so":"Сомалийский", + "sq":"Албанский", + "sr":"Сербский", + "sr@ijekavian":"Сербский (иекавский)", + "sr@ijekavianlatin":"Сербский (иекавский, латиница)", + "sr@latin":"Сербский (латиница)", + "ss":"Свати", + "st":"Южный сото", + "su":"Сунданский", + "sv":"Шведский", + "sw":"Суахили", + "ta":"Тамильский", + "te":"Телугу", + "tg":"Таджикский", + "th":"Тайский", + "ti":"Тигринья", + "tk":"Туркменский", + "tn":"Тсвана", + "to":"Тонганский", + "tr":"Турецкий", + "ts":"Тсонга", + "tt":"Татарский", + "tw":"Тви", + "ty":"Таитянский", + "ug":"Уйгурский", + "uk":"Украинский", + "ur":"Урду", + "uz":"Узбекский", + "uz@cyrillic":"Узбекский (кириллица)", + "ven":"Венда", + "vi":"Вьетнамский", + "vo":"Волапюк", + "wa":"Валлонский", + "wo":"Волоф", + "xh":"Коса", + "yi":"Идиш", + "yo":"Йоруба", + "za":"Чжуанский", + "zh":"Китайский", + "zh_CN":"Китайский (Китай)", + "zh_HK":"Китайский (Гонконг)", + "zh_TW":"Китайский (Тайвань)", + "zu":"Зулусский", +}, +"tr": { + "aa":"Afar", + "ab":"Abkhazian", + "ae":"Avestan", + "af":"Afrika Dili", + "am":"Amharic", + "ar":"Arapça", + "as":"Assamese", + "ast":"Avusturya Dili", + "ay":"Aymara", + "az":"Azerbeycanca", + "ba":"Bashkir", + "be":"Belarus Dili", + "be@latin":"Belarus Dili (Latin)", + "bg":"Bulgarca", + "bh":"Bihari", + "bi":"Bislama", + "bn":"Bengalce", + "bn_IN":"Bengalce (Hindistan)", + "bo":"Tibetan", + "br":"Britanya Dili", + "bs":"Boşnakça", + "ca":"Katalan Dili", + "ca@valencia":"Katalan (Valencia)", + "ce":"Çeçen", + "ch":"Chamorro", + "co":"Korsikaca", + "crh":"Kırım Tatarcası", + "cs":"Çekçe", + "csb":"Kashubian", + "cu":"Church Slavic", + "cv":"Çuvaşça", + "cy":"Gallerce", + "da":"Danimarka Dili", + "de":"Almanca", + "dsb":"Aşağı Sırpça", + "dz":"Dzongkha", + "el":"Yunanca", + "en":"İngilizce", + "en_GB":"İngiliz İngilizcesi", + "en_US":"Amerikan İngilizcesi", + "eo":"Esperanto", + "es":"İspanyolca", + "et":"Estonya Dili", + "eu":"Bask Dili", + "fa":"Farsça (İran)", + "fi":"Fince", + "fj":"Fijian", + "fo":"Faroese", + "fr":"Fransızca", + "fy":"Frisian", + "ga":"İrlanda Galik", + "gd":"Galik", + "gl":"Galce", + "gn":"Guarani", + "gu":"Gujarati", + "gv":"Manx", + "ha":"Hausa", + "he":"İbranice", + "hi":"Hintçe", + "hne":"Chhattisgarhi", + "ho":"Hiri Motu", + "hr":"Hırvatça", + "hsb":"Yukarı Sırpça", + "hu":"Macarca", + "hy":"Ermenice", + "hz":"Herero", + "ia":"Interlingua", + "id":"İndonezya Dili", + "ie":"Interlingue", + "ik":"Inupiaq", + "io":"Ido", + "is":"İzlanda Dili", + "it":"İtalyanca", + "iu":"Inuktitut", + "ja":"Japonca", + "jv":"Javanese", + "ka":"Gürcüce", + "ki":"Kikuyu", + "kk":"Kazakça", + "kl":"Kalaallisut", + "km":"Khmer", + "kn":"Kannada", + "ko":"Korece", + "ks":"Kashmiri", + "ku":"Kürtçe", + "kv":"Komi", + "kw":"Cornish", + "ky":"Kırgız", + "la":"Latin", + "lb":"Luxembourgish", + "li":"Limburgan", + "ln":"Lingala", + "lo":"Lao", + "lt":"Litvanya Dili", + "lv":"Litvanya Dili", + "mai":"Maithili", + "mg":"Malagasy", + "mh":"Marshallese", + "mi":"Maori Dili", + "mk":"Makedonca", + "ml":"Malayalam", + "mn":"Moğolca", + "mo":"Moldavya Dili", + "mr":"Marathi", + "ms":"Malay", + "mt":"Malta Dili", + "my":"Burmese", + "na":"Nauru", + "nb":"Norveççe Bokmål", + "nd":"Ndebele, North", + "nds":"Aşağı Saksonca", + "ne":"Nepalce", + "ng":"Ndonga", + "nl":"Flamanca", + "nn":"Norveççe Nynorsk", + "nr":"Ndebele, South", + "nso":"Northern Sotho", + "nv":"Navajo", + "ny":"Chichewa", + "oc":"Oksitan dili", + "om":"Oromo", + "or":"Oriya", + "os":"Ossetian", + "pa":"Punjabi/Panjabi", + "pi":"Pali", + "pl":"Lehçe", + "ps":"Pushto", + "pt":"Portekizce", + "pt_BR":"Brezilya Portekizcesi", + "qu":"Quechua", + "rn":"Rundi", + "ro":"Romence", + "rom":"Çingene Dili", + "ru":"Rusça", + "rw":"Kinyarwanda", + "sa":"Sanskrit", + "sc":"Sardinian", + "sd":"Sindhi", + "se":"Northern Sami", + "sg":"Sango", + "si":"Sinhala", + "sk":"Slovakça", + "sl":"Slovence", + "sm":"Samoan", + "sn":"Shona", + "so":"Somalice", + "sq":"Albanian", + "sr":"Sırpça", + "sr@ijekavian":"Sırpça Ijekavian", + "sr@ijekavianlatin":"Sırpça Ijekavian Latin", + "sr@latin":"Sırpça Latin", + "ss":"Swati", + "st":"Sotho, Southern", + "su":"Sundanese", + "sv":"İsveççe", + "sw":"Swahili", + "ta":"Tamil Dili", + "te":"Telugu", + "tg":"Tajik", + "th":"Thai", + "ti":"Tigrinya", + "tk":"Türkmence", + "tn":"Tswana", + "to":"Tonga", + "tr":"Türkçe", + "ts":"Tsonga", + "tt":"Tatar", + "tw":"Twi", + "ty":"Tahitian", + "ug":"Uygurca", + "uk":"Ukrayna Dili", + "ur":"Urdu", + "uz":"Özbek", + "uz@cyrillic":"Özbekçe (Kiril)", + "ven":"Venda", + "vi":"Vietnamca", + "vo":"Volapük", + "wa":"Valonca", + "wo":"Wolof", + "xh":"Xhosa", + "yi":"Yiddish", + "yo":"Yoruba", + "za":"Zhuang", + "zh":"Çince", + "zh_CN":"Basitleştirilmiş Çince", + "zh_HK":"Çince (Hong Kong)", + "zh_TW":"Geleneksel Çince", + "zu":"Zulu", +}, +"zh": { + "aa":"阿法尔语", + "ab":"阿布哈西亚语", + "ae":"阿维斯陀语", + "af":"南非荷兰语", + "am":"阿比西尼亚语", + "ar":"阿拉伯语", + "as":"阿萨姆语", + "ast":"阿斯图里亚斯语", + "ay":"艾马拉语", + "az":"阿塞拜疆语", + "ba":"巴什基尔语", + "be":"白俄罗斯语", + "be@latin":"白俄罗斯语(拉丁语系)", + "bg":"保加利亚语", + "bh":"比哈尔语", + "bi":"比斯拉马语", + "bn":"孟加拉语", + "bn_IN":"孟加拉语(印度)", + "bo":"藏语", + "br":"布里多尼语", + "bs":"波斯尼亚语", + "ca":"加泰罗尼亚语", + "ca@valencia":"加泰罗尼亚(瓦伦西亚)语", + "ce":"车臣语", + "ch":"查莫罗语", + "co":"科西嘉语", + "crh":"克里米亚鞑靼语", + "cs":"捷克语", + "csb":"卡舒比语", + "cu":"古教会斯拉夫语", + "cv":"楚瓦什语", + "cy":"威尔士语", + "da":"丹麦语", + "de":"德语", + "dsb":"下索布语", + "dz":"不丹语", + "el":"希腊语", + "en":"英语", + "en_GB":"英国英语", + "en_US":"美国英语", + "eo":"世界语", + "es":"西班牙语", + "et":"爱沙尼亚语", + "eu":"巴斯克语", + "fa":"波斯语", + "fi":"芬兰语", + "fj":"斐济语", + "fo":"法罗群岛语", + "fr":"法语", + "fy":"弗里斯兰语", + "ga":"爱尔兰盖尔语", + "gd":"盖尔语", + "gl":"加利西亚语", + "gn":"瓜拉尼语", + "gu":"古吉拉特语", + "gv":"马恩语", + "ha":"豪撒语", + "he":"希伯来语", + "hi":"印度语", + "hne":"恰蒂斯加尔语", + "ho":"希里莫图语", + "hr":"克罗地亚语", + "hsb":"上索布语", + "hu":"匈牙利语", + "hy":"亚美尼亚语", + "hz":"赫雷罗语", + "ia":"拉丁国际语", + "id":"印度尼西亚语", + "ie":"国际语", + "ik":"因纽皮特语", + "io":"伊多语", + "is":"冰岛语", + "it":"意大利语", + "iu":"因纽特语", + "ja":"日语", + "jv":"爪哇语", + "ka":"乔治亚语", + "ki":"基库尤语", + "kk":"哈萨克语", + "kl":"格陵兰语", + "km":"高棉语", + "kn":"卡纳达语", + "ko":"韩语", + "ks":"克什米尔语", + "ku":"库尔德语", + "kv":"科米语", + "kw":"康沃尔语", + "ky":"吉尔吉斯语", + "la":"拉丁语", + "lb":"卢森堡语", + "li":"林堡语", + "ln":"林加拉语", + "lo":"老挝语", + "lt":"立陶宛语", + "lv":"拉脱维亚语", + "mai":"迈蒂利语", + "mg":"马尔加什语", + "mh":"马绍尔语", + "mi":"毛利语", + "mk":"马其顿语", + "ml":"马拉亚拉姆语", + "mn":"蒙古语", + "mo":"摩尔多瓦语", + "mr":"马拉提语", + "ms":"马来语", + "mt":"马耳他语", + "my":"缅甸语", + "na":"瑙鲁语", + "nb":"挪威语(博克马尔语)", + "nd":"恩德贝莱语(北部)", + "nds":"下撒克逊语", + "ne":"尼泊尔语", + "ng":"恩东加语", + "nl":"荷兰语", + "nn":"挪威语(尼诺斯克语)", + "nr":"恩德贝莱语(南部)", + "nso":"北索托语", + "nv":"纳瓦霍语", + "ny":"齐佩瓦语", + "oc":"欧西坦语", + "om":"奥罗莫语", + "or":"奥利亚语", + "os":"奥塞梯语", + "pa":"旁遮普语", + "pi":"巴利语", + "pl":"波兰语", + "ps":"普什图语", + "pt":"葡萄牙语", + "pt_BR":"巴西葡萄牙语", + "qu":"盖丘亚语", + "rn":"隆迪语", + "ro":"罗马尼亚语", + "rom":"吉普赛语", + "ru":"俄语", + "rw":"基尼亚卢旺达语", + "sa":"梵文", + "sc":"撒丁语", + "sd":"信德语", + "se":"北萨米语", + "sg":"桑戈语", + "si":"僧伽罗语", + "sk":"斯洛伐克语", + "sl":"斯洛文尼亚语", + "sm":"萨摩亚语", + "sn":"修纳语", + "so":"索马里语", + "sq":"阿尔巴尼亚语", + "sr":"塞尔维亚语", + "sr@ijekavian":"塞尔维亚 Ijekavian 口音语言", + "sr@ijekavianlatin":"塞尔维亚 Ijekavian 口音拉丁语", + "sr@latin":"塞尔维亚拉丁语", + "ss":"斯瓦蒂语", + "st":"索托语(南部)", + "su":"巽他语", + "sv":"瑞典语", + "sw":"斯瓦希里语", + "ta":"泰米尔语", + "te":"泰卢固语", + "tg":"塔吉克语", + "th":"泰语", + "ti":"提格里尼亚语", + "tk":"土库曼语", + "tn":"茨瓦纳语", + "to":"汤加语", + "tr":"土耳其语", + "ts":"聪加语", + "tt":"鞑靼语", + "tw":"特威语", + "ty":"塔希提语", + "ug":"维吾尔语", + "uk":"乌克兰语", + "ur":"乌尔都语", + "uz":"乌兹别克语", + "uz@cyrillic":"乌兹别克语(西里尔语系)", + "ven":"文达语", + "vi":"越南语", + "vo":"沃拉普克语", + "wa":"瓦龙语", + "wo":"沃洛夫语", + "xh":"科萨语", + "yi":"依地语", + "yo":"约鲁巴语", + "za":"壮语", + "zh":"中文", + "zh_CN":"简体中文", + "zh_HK":"繁体中文(香港)", + "zh_TW":"繁体中文", + "zu":"祖鲁语", +}, +} + +# End of data.py diff -Nru frescobaldi-1.2.0/frescobaldi_app/language_names/generate.py frescobaldi-2.0.0/frescobaldi_app/language_names/generate.py --- frescobaldi-1.2.0/frescobaldi_app/language_names/generate.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/language_names/generate.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,99 @@ +#!/usr/bin/python + +from __future__ import unicode_literals + +import codecs +import collections +import re + +""" +This script van generate a dictionary of language names. +This dictionary looks as follows: + +language_names = { + "C": { + "nl": "Dutch", + "de": "German", + "en": "English", + }, + "nl": { + "nl": "Nederlands", + "de": "Duits", + "en": "Engels", + }, +} + +Etcetera. + +It can be created from: + +- the 'all_languages' file that is part of KDE (currently the only option). + + +This generate.py script writes the dictionary to a file named +data.py. + +This script needs not to be installed to be able to use the language_names package. + +""" + +# Here you should name the language names to be extracted. +# If empty, all are used. "C" must be named. + +# lang_names = [] +lang_names = ["C", "en", "de", "fr", "es", "nl", "pl", "cs", "ru", "hu", "gl", "it", "tr", "ja", "zh"] + + +def generate_kde(fileName="/usr/share/locale/all_languages"): + """Uses the KDE file to extract languge names. + + Returns the dictionary. All strings are in unicode form. + + """ + langs = collections.defaultdict(dict) + + group = None + for line in codecs.open(fileName, "r", "utf-8"): + line = line.strip() + m = re.match(r"\[([^]]+)\]", line) + if m: + group = m.group(1) + elif group: + m = re.match(r"Name(?:\[([^]]+)\])?\s*=(.*)$", line) + if m: + lang, name = m.group(1) or "C", m.group(2) + langs[lang][group] = name + + return dict(langs) + + +def makestring(text): + """Returns the text wrapped in quotes, usable as Python input (expecting unicode_literals).""" + return '"' + re.sub(r'([\\"])', r'\\\1', text) + '"' + + +def write_dict(langs): + """Writes the dictionary file to the 'data.py' file.""" + + keys = sorted(filter(lambda k: k in langs, lang_names) if lang_names else langs) + + with codecs.open("data.py", "w", "utf-8") as output: + output.write("#! python\n# -*- coding: utf-8;\n\n") + output.write("# Do not edit, this file is generated. See generate.py.\n") + output.write("\nfrom __future__ import unicode_literals\n") + output.write("\n\n") + + output.write("language_names = {\n") + for key in keys: + output.write('{0}: {{\n'.format(makestring(key))) + for lang in sorted(langs[key]): + output.write(' {0}:{1},\n'.format(makestring(lang), makestring(langs[key][lang]))) + output.write('},\n') + output.write("}\n\n# End of data.py\n") + + +if __name__ == "__main__": + langs = generate_kde() + langs['zh'] = langs['zh_CN'] + write_dict(langs) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/language_names/__init__.py frescobaldi-2.0.0/frescobaldi_app/language_names/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/language_names/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/language_names/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,48 @@ +#! python + +""" +This module provides one function, languageName(), that returns +the human-readable name of a language from a codename (like 'nl'). + +The data is in the data.py file. +The file generate.py can be used by developers to (re-)generate +the data file. + +Thanks go to the KDE developers for their translated language names +which are used currently in data.py. + +""" + +import itertools +import locale +from .data import language_names + +__all__ = ['languageName'] + + +def languageName(code, language=None): + """Returns a human-readable name for a language. + + The language must be given in the 'code' attribute. + The 'language' attribute specifies in which language + the name must be translated and defaults to the current locale. + + """ + if language is None: + language = locale.getdefaultlocale()[0] or "C" + + for lang in (language, language.split('_')[0], "C"): + try: + d = language_names[lang] + except KeyError: + continue + + for c in (code, code.split('_')[0]): + try: + return d[c] + except KeyError: + continue + break + return code + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/lilydoc/documentation.py frescobaldi-2.0.0/frescobaldi_app/lilydoc/documentation.py --- frescobaldi-1.2.0/frescobaldi_app/lilydoc/documentation.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/lilydoc/documentation.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,114 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manage access to LilyPond documentation. +""" + +from __future__ import unicode_literals + +import os +import re + +from PyQt4.QtCore import pyqtSignal, QObject, QUrl +from PyQt4.QtNetwork import QNetworkRequest + +import network + + +class Documentation(QObject): + """An instance of LilyPond documentation.""" + versionLoaded = pyqtSignal(bool) + + def __init__(self, url): + QObject.__init__(self) + self._url = url + self._localFile = url.toLocalFile() + self._versionString = None + + # determine version + url = self.url() + sep = '/' if not url.path().endswith('/') else '' + url.setPath(url.path() + sep + 'VERSION') + self._request(url) + + def _request(self, url): + """Request a URL to read the version from.""" + reply = self._reply = network.get(url) + if reply.isFinished(): + self._handleReply() + else: + reply.finished.connect(self._handleReply) + + def _handleReply(self): + self._reply.deleteLater() + if self._reply.error(): + self._versionString = '' + else: + # HTTP redirect? + url = self._reply.attribute(QNetworkRequest.RedirectionTargetAttribute) + if url is not None: + if url.path().endswith('/VERSION'): + self._request(self._reply.url().resolved(url)) + return + else: + # the redirect was not to a VERSION file, discard it + self._versionString = '' + else: + self._versionString = str(self._reply.readAll()).strip() + self.versionLoaded.emit(bool(self._versionString)) + + def url(self): + return QUrl(self._url) + + def home(self): + """Returns the url with 'Documentation' appended.""" + url = self.url() + sep = '/' if not url.path().endswith('/') else '' + url.setPath(url.path() + sep + 'Documentation') + if self.version() is not None and self.version() >= (2, 13, 8): + url.setPath(url.path() + '/web/manuals') + else: + url.setPath(url.path() + '/index') + return url + + def versionString(self): + """Returns the version as a string. + + If the version is not yet determined, returns None. + If the version could not be determined, returns the empty string. + + """ + return self._versionString + + def version(self): + """Returns the version as a tuple of ints. + + If the version is not yet determined, returns None. + If the version could not be determined, returns the empty tuple. + + """ + if self._versionString is not None: + return tuple(map(int, re.findall(br"\d+", self._versionString))) + + def isLocal(self): + """Returns True if the documentation is on the local system.""" + return bool(self._localFile) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/lilydoc/__init__.py frescobaldi-2.0.0/frescobaldi_app/lilydoc/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/lilydoc/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/lilydoc/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,29 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages LilyPond Documentation. +""" + +from __future__ import unicode_literals + +# languages the LilyPond documentation is translated in: +translations = ['cs', 'de', 'es', 'fr', 'hu', 'it', 'ja', 'nl', 'zh'] + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/lilydoc/manager.py frescobaldi-2.0.0/frescobaldi_app/lilydoc/manager.py --- frescobaldi-1.2.0/frescobaldi_app/lilydoc/manager.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/lilydoc/manager.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,174 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manage access to LilyPond documentation. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import QSettings, QUrl + +import app +import util +import signals + +from . import documentation + + +# cache the LilyPond Documentation instances +_documentations = None + + +allLoaded = signals.Signal() + + +def docs(): + """Returns the list of Documentation instances that are found.""" + global _documentations + if _documentations is None: + _documentations = [documentation.Documentation(url) for url in urls()] + _sort_docs() + # check whether they need to fully load their version number yet + _check_doc_versions() + return list(_documentations) + + +def clear(): + """Clears the cached documentation instances.""" + global _documentations + _documentations = None + + +app.settingsChanged.connect(clear, -100) + + +def loaded(): + """Returns True if all Documentation are loaded (i.e. know their version). + + If this function returns False, you can connect to the allLoaded signal + to get a notification when all Documentation instances have loaded their + version information. This signal will only be emitted once, after that all + connections will be removed from the signal. + + """ + for d in docs(): + if d.versionString() is None: + return False + return True + + +def _check_doc_versions(): + """Checks if all documentation instances have their version loaded. + + Emits the allLoaded signal when all are loaded, also sorts the documentation + instances then on local/remote and then version number. + + """ + for d in _documentations: + if d.versionString() is None: + def makefunc(doc): + def func(): + doc.versionLoaded.disconnect(func) + _check_doc_versions() + return func + d.versionLoaded.connect(makefunc(d)) + return + _sort_docs() + allLoaded.emit() + allLoaded.clear() + + +def _sort_docs(): + """Sorts all documentation instances on local/remote and then version.""" + _documentations.sort(key = lambda d: (not d.isLocal(), d.version() or ())) + + +def urls(): + """Returns a list of QUrls where documentation can be found. + + Remote urls (from the users settings) are not checked but simply returned. + For user-set local directories, if the directory itself does not contain + LilyPond documentation, all directories one level deep are searched. + + This makes it possible to set one directory for local documentation and + put there multiple sets of documentation in subdirectories (e.g. with the + version number in the path name). + + The paths in the settings are read, and also the usual system directories + are scanned. + + """ + user_paths = QSettings().value("documentation/paths", []) or [] + system_prefixes = [p for p in ( + '/usr', + '/usr/local', + '/usr/share/doc', + '/usr/doc', + ) if os.path.isdir(p)] + # split in local and non-local ones (local are preferred) + user_prefixes = [] + local = [] + remote = [] + for p in user_paths: + user_prefixes.append(p) if os.path.isdir(p) else remote.append(p) + remote.sort(key=util.naturalsort) + + # now find all instances of LilyPond documentation in the local paths + def paths(path): + """Yields possible places where LilyPond documentation could live.""" + yield path + path = os.path.join(path, 'share', 'doc', 'lilypond', 'html') + yield path + yield os.path.join(path, 'offline-root') + + def find(path): + """Finds LilyPond documentation.""" + for p in paths(path): + if os.path.isdir(os.path.join(p, 'Documentation')): + return p + + # search in the user-set directories, if no docs, scan one level deeper + for p in user_prefixes: + n = find(p) + if n: + local.append(n) + elif p not in system_prefixes: + for name, dirs, files in os.walk(p): + for d in sorted(dirs, key=util.naturalsort): + n = find(os.path.join(p, d)) + if n: + local.append(n) + break + # now add the system directories if documentation is found there + for p in system_prefixes: + if p not in user_prefixes: + n = find(p) + if n: + local.append(n) + urls = [] + urls.extend(map(QUrl.fromLocalFile, local)) + urls.extend(map(QUrl, remote)) + if not urls: + urls.append(QUrl("http://lilypond.org/doc/stable")) + return urls + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/lilydoc/manual.py frescobaldi-2.0.0/frescobaldi_app/lilydoc/manual.py --- frescobaldi-1.2.0/frescobaldi_app/lilydoc/manual.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/lilydoc/manual.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,55 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A Manual manages a searchable index for a LilyPond manual. +""" + +from __future__ import unicode_literals + + +from PyQt4.QtCore import QObject, QUrl, pyqtSignal + + +class Manual(QObject): + + loaded = pyqtSignal(bool) + + def __init__(self, lilydoc): + self._loaded = None + + def isLoaded(self): + """True: successfully loaded, False: load failed, None: load pending.""" + return self._loaded + + + +class NotationManual(Manual): + """Represents the Notation Manual.""" + + +class LearningManual(Manual): + """Represents the Learning Manual.""" + + +class InternalsReference(Manual): + """Represents the Internals Reference.""" + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/lilydoc/network.py frescobaldi-2.0.0/frescobaldi_app/lilydoc/network.py --- frescobaldi-1.2.0/frescobaldi_app/lilydoc/network.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/lilydoc/network.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,88 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Network-related utility functions for LilyPond Documentation. +""" + +import locale + +from PyQt4.QtCore import QSettings +from PyQt4.QtNetwork import QNetworkReply, QNetworkRequest + +import app +import networkaccessmanager + + +def accessmanager(): + """Returns a global NetworkAccessManager.""" + global _accessmanager + try: + _accessmanager + except NameError: + _accessmanager = NetworkAccessManager() + return _accessmanager + + +def get(url): + """Downloads a URL, returns a QNetworkReply.""" + request = QNetworkRequest(url) + return accessmanager().get(request) + + +def langs(): + """Returns a list of language codes wished for documentation. + + If the list is empty, english (untranslated) is assumed. + + """ + s = QSettings() + lang = s.value("documentation/language", "default") + if lang == "C": + return [] + elif lang == "default": + lang = s.value("language", "") + if not lang: + try: + lang = locale.getdefaultlocale()[0] + except ValueError: + return [] + elif lang == "none": + return [] + if '_' in lang: + return [lang, lang.split('_')[0]] + else: + return [lang] + + +class NetworkAccessManager(networkaccessmanager.NetworkAccessManager): + """A NetworkAccessManager that maintains some settings from the preferences.""" + def __init__(self, parent=None): + super(NetworkAccessManager, self).__init__(parent) + app.settingsChanged.connect(self.readSettings) + self.readSettings() + + def readSettings(self): + l = langs() + if 'en' not in l: + l.append('en') + self.headers['Accept-Language'] = ','.join(l) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/lilypondinfo.py frescobaldi-2.0.0/frescobaldi_app/lilypondinfo.py --- frescobaldi-1.2.0/frescobaldi_app/lilypondinfo.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/lilypondinfo.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,150 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Settings stuff and handling for different LilyPond versions. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import QSettings + +import ly.info +import app + + +_infos = None # this can hold a list of configured LilyPondInfo instances + + +def infos(): + """Returns all configured LilyPondInfo for the different used LilyPond versions.""" + global _infos + if _infos is None: + s = QSettings() + _infos = [] + for i in range(s.beginReadArray("lilypondinfo")): + s.setArrayIndex(i) + info = LilyPondInfo.read(s) + if info: + _infos.append(info) + s.endArray() + app.aboutToQuit.connect(saveinfos) + return _infos + + +def setinfos(infos): + """Sets the info's to the given list of LilyPondInfo instances.""" + global _infos + _infos = infos + + +def saveinfos(): + """Saves the info's.""" + s = QSettings() + s.beginWriteArray("lilypondinfo") + for i, info in enumerate(infos()): + s.setArrayIndex(i) + info.write(s) + s.endArray() + + +def default(): + """Returns a default LilyPondInfo instance with the default LilyPond command. + + On Windows, the default command is "lilypond-windows.exe", + on other platforms simply "lilypond". + + """ + lilypond = "lilypond-windows.exe" if os.name == "nt" else "lilypond" + return LilyPondInfo(lilypond) + + +def preferred(): + """Returns the preferred (user set default) LilyPondInfo instance.""" + infos_ = infos() + if not infos_: + return default() + elif len(infos_) == 1: + return infos_[0] + s = QSettings() + s.beginGroup("lilypond_settings") + # find default version + defaultCommand = "lilypond-windows.exe" if os.name == "nt" else "lilypond" + userDefault = s.value("default", defaultCommand) + if userDefault != defaultCommand: + for info in infos_: + if info.command == userDefault: + return info + for info in infos_: + if info.command == defaultCommand: + return info + return infos_[0] + + +def suitable(version): + """Returns a LilyPondInfo with a suitable version if found, else returns preferred().""" + for i in sorted(infos(), key=lambda i: i.version): + if i.version >= version: + return i + return preferred() + + +class LilyPondInfo(ly.info.LilyPondInfo): + """Manages information about a LilyPond instance, partially cached to speed up Frescobaldi.""" + def __init__(self, command): + super(LilyPondInfo, self).__init__(command) + self.auto = True + self.lilypond_book = 'lilypond-book' + self.convert_ly = 'convert-ly' + + @classmethod + def read(cls, settings): + """Returns a new LilyPondInfo instance, filled from a QSettings instance. + + May return None, if the command is not existing. + + """ + cmd = settings.value("command", "") + if cmd: + info = cls(cmd) + if info.abscommand: + info.auto = settings.value("auto", True) in (True, "true") + info.lilypond_book = settings.value("lilypond-book", "lilypond-book") + info.convert_ly = settings.value("convert-ly", "convert-ly") + if int(os.path.getmtime(info.abscommand)) == int(float(settings.value("mtime", 0))): + info.versionString = settings.value("version") + datadir = settings.value("datadir") + if datadir and os.path.isdir(datadir): + info.datadir = settings.value("datadir") + return info + + def write(self, settings): + """Writes ourselves to a QSettings instance. We should be valid.""" + settings.setValue("command", self.command) + settings.setValue("version", self.versionString) + settings.setValue("datadir", self.datadir) + if self.abscommand: + settings.setValue("mtime", int(os.path.getmtime(self.abscommand))) + settings.setValue("auto", self.auto) + settings.setValue("lilypond-book", self.lilypond_book) + settings.setValue("convert-ly", self.convert_ly) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/listmodel.py frescobaldi-2.0.0/frescobaldi_app/listmodel.py --- frescobaldi-1.2.0/frescobaldi_app/listmodel.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/listmodel.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,109 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Simple readonly subclass of QAbstractListModel around a Python sequence. + +Functions are used to present the data from an item for a role. +There are some predefined functions to use in this module. +""" + +from PyQt4.QtCore import QAbstractListModel, Qt + + +def display(item): + """Displays an item unchanged.""" + return item + +def translate(item): + """Calls an item (normally returning a translation of the item).""" + return item() + +def display_index(index): + """Returns a function that displays the given index of an item.""" + return lambda item: item[index] + +def translate_index(index): + """Returns a function that translates the given index of an item.""" + return lambda item: item[index]() + + +class ListModel(QAbstractListModel): + """A simple QAbstractListModel around a Python list.""" + def __init__(self, data, parent=None, display=display, edit=None, tooltip=None, icon=None): + """Initializes the list. + + parent may be a parent QObject. + display, tooltip and icon may be functions that extract the data from an item + for the respective role (DisplayRole, ToolTipRole or DecorationRole). + + The original data can be found in the _data attribute. + + """ + super(ListModel, self).__init__(parent) + self._data = data + self._roles = {} + if edit is None: + edit = display + if display: + self._roles[Qt.DisplayRole] = display + if edit: + self._roles[Qt.EditRole] = edit + if tooltip: + self._roles[Qt.ToolTipRole] = tooltip + if icon: + self._roles[Qt.DecorationRole] = icon + + def setRoleFunction(self, role, function): + """Sets a function that returns a value for a Qt.ItemDataRole. + + The function accepts an item in the data list given on construction + as argument. If function is None, deletes a previously set function. + + """ + if function: + self._roles[role] = function + elif role in self._roles: + del self._roles[role] + + def rowCount(self, parent): + return 0 if parent.isValid() else len(self._data) + + def data(self, index, role): + try: + data = self._data[index.row()] + except IndexError: + return + try: + f = self._roles[role] + except KeyError: + return + return f(data) + + def update(self): + """Emits the dataChanged signal for all entries. + + This can e.g. be used to request that translated strings are redisplayed. + + """ + self.dataChanged.emit( + self.createIndex(0, 0), + self.createIndex(len(self._data) - 1, 0)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/log.py frescobaldi-2.0.0/frescobaldi_app/log.py --- frescobaldi-1.2.0/frescobaldi_app/log.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/log.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,137 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A Log shows the output of a Job. +""" + +from __future__ import unicode_literals + +import contextlib + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import job +import util + + +class Log(QTextBrowser): + """Widget displaying output from a Job.""" + def __init__(self, parent=None): + super(Log, self).__init__(parent) + self.setOpenLinks(False) + self.cursor = QTextCursor(self.document()) + self._lasttype = None + self._formats = self.logformats() + + def connectJob(self, job): + """Gives us the output from the Job (past and upcoming).""" + for msg, type in job.history(): + self.write(msg, type) + job.output.connect(self.write) + + def textFormat(self, type): + """Returns a QTextFormat() for the given type.""" + return self._formats[type] + + def write(self, message, type): + """Writes the given message with the given type to the log. + + The keepScrolledDown context manager is used to scroll the log further + down if it was scrolled down at that moment. + + If two messages of a different type are written after each other a newline + is inserted if otherwise the message would continue on the same line. + + """ + with self.keepScrolledDown(): + changed = type != self._lasttype + self._lasttype = type + if changed and self.cursor.block().text() and not message.startswith('\n'): + self.cursor.insertText('\n') + self.writeMessage(message, type) + + def writeMessage(self, message, type): + """Inserts the given message in the text with the textformat belonging to type.""" + self.cursor.insertText(message, self.textFormat(type)) + + @contextlib.contextmanager + def keepScrolledDown(self): + """Performs a function, ensuring the log stays scrolled down if it was scrolled down on start.""" + vbar = self.verticalScrollBar() + scrolleddown = vbar.value() == vbar.maximum() + try: + yield + finally: + if scrolleddown: + vbar.setValue(vbar.maximum()) + + def logformats(self): + """Returns a dictionary with QTextCharFormats for the different types of messages. + + Besides the STDOUT, STDERR, NEUTRAL, FAILURE and SUCCESS formats there is also + a "link" format, that looks basically the same as the output formats, but blueish + and underlined, to make parts of the output (e.g. filenames) look clickable. + + """ + textColor = QApplication.palette().color(QPalette.WindowText) + successColor = util.addcolor(textColor, 0, 128, 0) # more green + failureColor = util.addcolor(textColor, 128, 0, 0) # more red + linkColor = util.addcolor(textColor, 0, 0, 128) # more blue + stdoutColor = util.addcolor(textColor, 64, 64, 0) # more purple + + s = QSettings() + s.beginGroup("log") + outputFont = QFont(s.value("fontfamily", "monospace")) + outputFont.setPointSizeF(float(s.value("fontsize", 9.0))) + + output = QTextCharFormat() + output.setFont(outputFont) + + stdout = QTextCharFormat(output) + stdout.setForeground(stdoutColor) + + stderr = QTextCharFormat(output) + link = QTextCharFormat(output) + link.setForeground(linkColor) + link.setFontUnderline(True) + + status = QTextCharFormat() + status.setFontWeight(QFont.Bold) + + neutral = QTextCharFormat(status) + + success = QTextCharFormat(status) + success.setForeground(successColor) + + failure = QTextCharFormat(status) + failure.setForeground(failureColor) + + return { + job.STDOUT: stdout, + job.STDERR: stderr, + job.NEUTRAL: neutral, + job.SUCCESS: success, + job.FAILURE: failure, + 'link': link, + } + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/logtool/errors.py frescobaldi-2.0.0/frescobaldi_app/logtool/errors.py --- frescobaldi-1.2.0/frescobaldi_app/logtool/errors.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/logtool/errors.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,177 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages cursor positions of file-references in error messages. +""" + +from __future__ import unicode_literals + +import re + +from PyQt4.QtCore import QUrl +from PyQt4.QtGui import QTextCursor + +import app +import bookmarks +import plugin +import job +import jobmanager +import scratchdir + + +# finds file references (filename:line:col:) in messages +message_re = re.compile(r"^((.*?):(\d+)(?::(\d+))?)(?=:)", re.M) + + +def errors(document): + return Errors.instance(document) + + +class Errors(plugin.DocumentPlugin): + """Maintains the list of references (errors/warnings) to documents after a Job run.""" + + def __init__(self, document): + self._refs = {} + mgr = jobmanager.manager(document) + if mgr.job(): + self.connectJob(mgr.job()) + mgr.stateChanged.connect(self.slotJobManagerStateChanged) + + def slotJobManagerStateChanged(self, job): + """Called when a job starts or stops. + + On start, we connect to it immediately. + + """ + if job: + self.connectJob(job) + + def connectJob(self, job): + """Starts collecting the references of a started Job. + + Output already created by the Job is read and we start + listening for new output. + + """ + # clear earlier set error marks + docs = set([self.document()]) + for ref in self._refs.values(): + c = ref.cursor(False) + if c: + docs.add(c.document()) + for doc in docs: + bookmarks.bookmarks(doc).clear("error") + self._refs.clear() + # take over history and connect + for msg, type in job.history(): + self.slotJobOutput(msg, type) + job.output.connect(self.slotJobOutput) + + def slotJobOutput(self, message, type): + """Called wheneven the job has output. + + The output is checked for errormessages that contain + a filename:line:column expression. + + """ + if type == job.STDERR: + for m in message_re.finditer(message): + url, filename = m.group(1, 2) + line, column = int(m.group(3)), int(m.group(4) or "0") + self._refs[url] = Reference(filename, line, column) + + def cursor(self, url, load=False): + """Returns a QTextCursor belonging to the url (string). + + If load (defaulting to False) is True, the document is loaded + if it wasn't already loaded. + Returns None if the url was not valid or the document could not be loaded. + + """ + return self._refs[url].cursor(load) + + +class Reference(object): + """Represents a reference to a line/column pair (a cursor position) in a Document.""" + def __init__(self, filename, line, column): + """Creates the reference to filename, line and column. + + lines start numbering with 1, columns with 0 (LilyPond convention). + + If a document with the given filename is already loaded (or the filename + refers to the scratchdir for a document) a QTextCursor is created immediately. + + Otherwise, when a Document is loaded later with our filename, a QTextCursor + is created then (by the bind() method). + + """ + self._filename = filename + self._line = line + self._column = column + self._cursor = None + + app.documentLoaded.connect(self.trybind) + for d in app.documents: + if (scratchdir.scratchdir(d).path() == filename + or d.url().toLocalFile() == filename): + self.bind(d) + break + + def bind(self, document): + """Called when a document is loaded this Reference points to. + + Creates a QTextCursor so the position is maintained even if the document + changes. + + """ + b = document.findBlockByNumber(max(0, self._line - 1)) + if b.isValid(): + self._cursor = c = QTextCursor(document) + c.setPosition(b.position() + self._column) + document.closed.connect(self.unbind) + if self._line > 0: + bookmarks.bookmarks(document).setMark(self._line - 1, "error") + else: + self._cursor = None + + def unbind(self): + """Called when previously "bound" document is closed.""" + self._cursor = None + + def trybind(self, document): + """Called whenever a new Document is loaded, checks the filename.""" + if document.url().toLocalFile() == self._filename: + self.bind(document) + + def cursor(self, load): + """Returns a QTextCursor for this reference. + + load should be True or False and determines if a not-loaded document should be loaded. + Returns None if the document could not be loaded. + + """ + if self._cursor: + return self._cursor + if load: + app.openUrl(QUrl.fromLocalFile(self._filename)) # also calls bind + if self._cursor: + return self._cursor + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/logtool/__init__.py frescobaldi-2.0.0/frescobaldi_app/logtool/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/logtool/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/logtool/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,100 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The log dockwindow. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings, Qt +from PyQt4.QtGui import QAction, QKeySequence + +import actioncollection +import actioncollectionmanager +import app +import panels + + +class LogTool(panels.Panel): + """A dockwidget showing the log of running Jobs.""" + def __init__(self, mainwindow): + super(LogTool, self).__init__(mainwindow) + self.hide() + self.toggleViewAction().setShortcut(QKeySequence("Meta+Alt+L")) + ac = self.actionCollection = Actions() + ac.log_next_error.triggered.connect(self.slotNextError) + ac.log_previous_error.triggered.connect(self.slotPreviousError) + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + mainwindow.addDockWidget(Qt.BottomDockWidgetArea, self) + app.jobStarted.connect(self.slotJobStarted) + app.jobFinished.connect(self.slotJobFinished) + + def translateUI(self): + self.setWindowTitle(_("LilyPond Log")) + self.toggleViewAction().setText(_("LilyPond &Log")) + + def createWidget(self): + from . import logwidget + return logwidget.LogWidget(self) + + def slotJobStarted(self, doc, job): + """Called whenever job starts, decides whether to follow it and show the log.""" + import jobattributes + if doc == self.mainwindow().currentDocument() or self.mainwindow() == jobattributes.get(job).mainwindow: + self.widget().switchDocument(doc) + if QSettings().value("log/show_on_start", True) not in (False, "false"): + self.show() + + def slotJobFinished(self, document, job, success): + if (not success and not job.isAborted() + and document == self.mainwindow().currentDocument()): + self.show() + + def slotNextError(self): + """Jumps to the position pointed to by the next error message.""" + self.activate() + self.widget().gotoError(1) + + def slotPreviousError(self): + """Jumps to the position pointed to by the next error message.""" + self.activate() + self.widget().gotoError(-1) + + +class Actions(actioncollection.ActionCollection): + name = "logtool" + def createActions(self, parent=None): + self.log_next_error = QAction(parent) + self.log_previous_error = QAction(parent) + + self.log_next_error.setShortcut(QKeySequence("Ctrl+E")) + self.log_previous_error.setShortcut(QKeySequence("Ctrl+Shift+E")) + + def translateUI(self): + self.log_next_error.setText(_("Next Error Message")) + self.log_previous_error.setText(_("Previous Error Message")) + + +# log errors by initializing Errors instance +@app.jobStarted.connect +def _log_errors(document): + from . import errors + errors.errors(document) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/logtool/logwidget.py frescobaldi-2.0.0/frescobaldi_app/logtool/logwidget.py --- frescobaldi-1.2.0/frescobaldi_app/logtool/logwidget.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/logtool/logwidget.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,156 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The LogWidget. +""" + +from __future__ import unicode_literals + +import itertools +import os +import re +import weakref + +from PyQt4.QtCore import QSettings +from PyQt4.QtGui import ( + QColor, QTextCharFormat, QTextCursor, QTextEdit, QTextFormat) + +import app +import log +import job +import jobmanager +import util + +from . import errors + + +class LogWidget(log.Log): + """A Log widget that tracks document changes in the MainWindow.""" + def __init__(self, logtool): + super(LogWidget, self).__init__(logtool) + self._rawView = True + self._document = lambda: None + self._errors = [] + self._currentErrorIndex = -1 + self.readSettings() + self.anchorClicked.connect(self.slotAnchorClicked) + logtool.mainwindow().currentDocumentChanged.connect(self.switchDocument) + app.documentClosed.connect(self.documentClosed) + app.settingsChanged.connect(self.readSettings) + doc = logtool.mainwindow().currentDocument() + if doc: + self.switchDocument(doc) + + def readSettings(self): + self._formats = self.logformats() + self._rawView = QSettings().value("log/rawview", True) not in (False, "false") + if self._document(): + self.switchDocument(self._document()) # reload + + def switchDocument(self, doc): + """Called when the document is changed.""" + job = jobmanager.job(doc) + if job: + prevDoc = self._document() + if prevDoc and prevDoc != doc: + prevJob = jobmanager.job(prevDoc) + if prevJob: + prevJob.output.disconnect(self.write) + self._document = weakref.ref(doc) + self.clear() + self.connectJob(job) + + def documentClosed(self, doc): + if doc == self._document(): + self.clear() + + def clear(self): + self._errors = [] + self._currentErrorIndex = -1 + self.setExtraSelections([]) + super(LogWidget, self).clear() + + def writeMessage(self, message, type): + if type == job.STDERR: + # find filenames in message: + parts = iter(errors.message_re.split(message)) + self.cursor.insertText(next(parts), self.textFormat(type)) + + for url, path, line, col, msg in zip(*itertools.repeat(parts, 5)): + + if self._rawView: + fmt = QTextCharFormat(self.textFormat(type)) + display_url = url + else: + fmt = QTextCharFormat(self.textFormat("link")) + display_url = os.path.basename(path) + fmt.setAnchor(True) + fmt.setAnchorHref(str(len(self._errors))) + fmt.setToolTip(_("Click to edit this file")) + + pos = self.cursor.position() + self.cursor.insertText(display_url, fmt) + self.cursor.insertText(msg, self.textFormat(type)) + self._errors.append((pos, self.cursor.position(), url)) + + else: + super(LogWidget, self).writeMessage(message, type) + + def slotAnchorClicked(self, url): + """Called when the user clicks a filename in the log.""" + index = int(url.toString()) + if 0 <= index < len(self._errors): + self.highlightError(index) + + def gotoError(self, direction): + """Jumps to the next (1) or previous (-1) error message.""" + if self._errors: + i = self._currentErrorIndex + direction + if i < 0: + i = len(self._errors) - 1 + elif i >= len(self._errors): + i = 0 + self.highlightError(i) + + def highlightError(self, index): + """Hihglights the error message at the given index and jumps to its location.""" + self._currentErrorIndex = index + # set text format + pos, anchor, url = self._errors[index] + es = QTextEdit.ExtraSelection() + es.cursor = QTextCursor(self.document()) + es.cursor.setPosition(pos) + es.cursor.setPosition(anchor, QTextCursor.KeepAnchor) + bg = util.mixcolor(self.palette().highlight().color(), self.palette().base().color(), 0.4) + es.format.setBackground(bg) + es.format.setProperty(QTextFormat.FullWidthSelection, True) + self.setExtraSelections([es]) + # scroll log to the message + cursor = QTextCursor(self.document()) + cursor.setPosition(anchor) + self.setTextCursor(cursor) + cursor.setPosition(pos) + self.setTextCursor(cursor) + # jump to the error location + cursor = errors.errors(self._document()).cursor(url, True) + if cursor: + self.parentWidget().mainwindow().setTextCursor(cursor, findOpenView=True) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/data/_data.py frescobaldi-2.0.0/frescobaldi_app/ly/data/_data.py --- frescobaldi-1.2.0/frescobaldi_app/ly/data/_data.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/data/_data.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,2441 @@ +#! python +# generated by LilyPond 2.14.1 + +version = "2.14.1" + +interfaces = { + "accidental-interface": [ + "alteration", + "avoid-slur", + "glyph-name-alist", + "hide-tied-accidental-after-break", + "parenthesized", + "restore-first", + ], + "accidental-placement-interface": [ + "direction", + "padding", + "positioning-done", + "right-padding", + "script-priority", + ], + "accidental-suggestion-interface": [], + "align-interface": [ + "align-dir", + "axes", + "padding", + "positioning-done", + "stacking-dir", + ], + "ambitus-interface": [ + "gap", + "thickness", + ], + "arpeggio-interface": [ + "arpeggio-direction", + "dash-definition", + "positions", + "script-priority", + ], + "axis-group-interface": [ + "axes", + "default-staff-staff-spacing", + "max-stretch", + "no-alignment", + "nonstaff-nonstaff-spacing", + "nonstaff-relatedstaff-spacing", + "nonstaff-unrelatedstaff-spacing", + "staff-affinity", + "staff-staff-spacing", + "vertical-skylines", + ], + "balloon-interface": [ + "annotation-balloon", + "annotation-line", + "padding", + "text", + ], + "bar-line-interface": [ + "allow-span-bar", + "gap", + "glyph", + "glyph-name", + "hair-thickness", + "kern", + "thick-thickness", + "thin-kern", + ], + "bass-figure-alignment-interface": [], + "bass-figure-interface": [ + "implicit", + ], + "beam-interface": [ + "annotation", + "auto-knee-gap", + "beam-thickness", + "beamed-stem-shorten", + "beaming", + "break-overshoot", + "clip-edges", + "collision-interfaces", + "collision-voice-only", + "concaveness", + "damping", + "details", + "direction", + "gap", + "gap-count", + "grow-direction", + "inspect-quants", + "knee", + "length-fraction", + "neutral-direction", + "positions", + ], + "bend-after-interface": [ + "thickness", + ], + "break-alignable-interface": [ + "break-align-symbols", + "non-break-align-symbols", + ], + "break-aligned-interface": [ + "break-align-anchor", + "break-align-anchor-alignment", + "break-align-symbol", + "space-alist", + ], + "break-alignment-interface": [ + "break-align-orders", + "positioning-done", + ], + "breathing-sign-interface": [ + "direction", + ], + "chord-name-interface": [], + "clef-interface": [ + "full-size-change", + "glyph", + "glyph-name", + "non-default", + ], + "cluster-beacon-interface": [ + "positions", + ], + "cluster-interface": [ + "padding", + "style", + ], + "custos-interface": [ + "neutral-direction", + "neutral-position", + "style", + ], + "dot-column-interface": [ + "direction", + "positioning-done", + ], + "dots-interface": [ + "direction", + "dot-count", + "style", + ], + "dynamic-interface": [], + "dynamic-line-spanner-interface": [ + "avoid-slur", + ], + "dynamic-text-interface": [ + "right-padding", + ], + "dynamic-text-spanner-interface": [ + "text", + ], + "enclosing-bracket-interface": [ + "bracket-flare", + "edge-height", + "padding", + "shorten-pair", + "thickness", + ], + "episema-interface": [], + "figured-bass-continuation-interface": [ + "padding", + "thickness", + ], + "finger-interface": [], + "font-interface": [ + "font-encoding", + "font-family", + "font-name", + "font-series", + "font-shape", + "font-size", + ], + "footnote-interface": [ + "footnote-text", + ], + "footnote-spanner-interface": [ + "footnote-text", + ], + "fret-diagram-interface": [ + "align-dir", + "dot-placement-list", + "fret-diagram-details", + "size", + "thickness", + ], + "glissando-interface": [], + "grace-spacing-interface": [ + "common-shortest-duration", + ], + "gregorian-ligature-interface": [], + "grid-line-interface": [ + "thickness", + ], + "grid-point-interface": [], + "grob-interface": [ + "X-extent", + "X-offset", + "Y-extent", + "Y-offset", + "after-line-breaking", + "avoid-slur", + "before-line-breaking", + "color", + "cross-staff", + "extra-X-extent", + "extra-Y-extent", + "extra-offset", + "layer", + "minimum-X-extent", + "minimum-Y-extent", + "outside-staff-horizontal-padding", + "outside-staff-padding", + "outside-staff-priority", + "rotation", + "springs-and-rods", + "stencil", + "transparent", + "whiteout", + ], + "hairpin-interface": [ + "bound-padding", + "circled-tip", + "grow-direction", + "height", + ], + "hara-kiri-group-spanner-interface": [ + "remove-empty", + "remove-first", + ], + "horizontal-bracket-interface": [ + "bracket-flare", + "connect-to-neighbor", + "edge-height", + "shorten-pair", + ], + "inline-accidental-interface": [], + "instrument-specific-markup-interface": [ + "fret-diagram-details", + "graphical", + "harp-pedal-details", + "size", + "thickness", + ], + "item-interface": [ + "break-visibility", + "extra-spacing-height", + "extra-spacing-width", + "non-musical", + ], + "key-cancellation-interface": [], + "key-signature-interface": [ + "alteration-alist", + "c0-position", + "glyph-name-alist", + "padding", + "padding-pairs", + ], + "ledger-line-spanner-interface": [ + "gap", + "length-fraction", + "minimum-length-fraction", + "thickness", + ], + "ledgered-interface": [ + "no-ledgers", + ], + "ligature-bracket-interface": [ + "height", + "thickness", + "width", + ], + "ligature-interface": [], + "line-interface": [ + "arrow-length", + "arrow-width", + "dash-fraction", + "dash-period", + "style", + "thickness", + "zigzag-length", + "zigzag-width", + ], + "line-spanner-interface": [ + "bound-details", + "extra-dy", + "gap", + "left-bound-info", + "right-bound-info", + "thickness", + "to-barline", + ], + "lyric-extender-interface": [ + "left-padding", + "next", + "right-padding", + "thickness", + ], + "lyric-hyphen-interface": [ + "dash-period", + "height", + "length", + "minimum-distance", + "minimum-length", + "padding", + "thickness", + ], + "lyric-interface": [], + "lyric-syllable-interface": [], + "mark-interface": [], + "measure-grouping-interface": [ + "height", + "style", + "thickness", + ], + "melody-spanner-interface": [ + "neutral-direction", + ], + "mensural-ligature-interface": [ + "thickness", + ], + "metronome-mark-interface": [], + "multi-measure-interface": [ + "bound-padding", + ], + "multi-measure-rest-interface": [ + "bound-padding", + "expand-limit", + "hair-thickness", + "measure-count", + "minimum-length", + "spacing-pair", + "thick-thickness", + ], + "note-collision-interface": [ + "merge-differently-dotted", + "merge-differently-headed", + "positioning-done", + "prefer-dotted-right", + ], + "note-column-interface": [ + "force-hshift", + "horizontal-shift", + "ignore-collision", + ], + "note-head-interface": [ + "glyph-name", + "note-names", + "stem-attachment", + "style", + ], + "note-name-interface": [], + "note-spacing-interface": [ + "knee-spacing-correction", + "same-direction-correction", + "space-to-barline", + "stem-spacing-correction", + ], + "only-prebreak-interface": [], + "ottava-bracket-interface": [ + "bracket-flare", + "edge-height", + "minimum-length", + "shorten-pair", + ], + "paper-column-interface": [ + "between-cols", + "full-measure-extra-space", + "labels", + "line-break-penalty", + "line-break-permission", + "line-break-system-details", + "page-break-penalty", + "page-break-permission", + "page-turn-penalty", + "page-turn-permission", + "rhythmic-location", + "shortest-playing-duration", + "shortest-starter-duration", + "used", + "when", + ], + "parentheses-interface": [ + "padding", + "stencils", + ], + "percent-repeat-interface": [ + "dot-negative-kern", + "slash-negative-kern", + "slope", + "thickness", + ], + "percent-repeat-item-interface": [ + "dot-negative-kern", + "slash-negative-kern", + "slope", + "thickness", + ], + "piano-pedal-bracket-interface": [ + "bound-padding", + "bracket-flare", + "edge-height", + "shorten-pair", + ], + "piano-pedal-interface": [], + "piano-pedal-script-interface": [], + "pitched-trill-interface": [], + "rest-collision-interface": [ + "minimum-distance", + "positioning-done", + ], + "rest-interface": [ + "direction", + "minimum-distance", + "style", + ], + "rhythmic-grob-interface": [], + "rhythmic-head-interface": [ + "duration-log", + ], + "script-column-interface": [], + "script-interface": [ + "add-stem-support", + "avoid-slur", + "positioning-done", + "script-priority", + "side-relative-direction", + "slur-padding", + "toward-stem-shift", + ], + "self-alignment-interface": [ + "self-alignment-X", + "self-alignment-Y", + ], + "semi-tie-column-interface": [ + "head-direction", + "positioning-done", + "tie-configuration", + ], + "semi-tie-interface": [ + "control-points", + "details", + "direction", + "head-direction", + "thickness", + ], + "separation-item-interface": [ + "X-extent", + "horizontal-skylines", + "padding", + "skyline-vertical-padding", + ], + "side-position-interface": [ + "direction", + "minimum-space", + "padding", + "side-axis", + "slur-padding", + "staff-padding", + ], + "slur-interface": [ + "annotation", + "avoid-slur", + "control-points", + "dash-definition", + "details", + "direction", + "eccentricity", + "height-limit", + "inspect-index", + "inspect-quants", + "line-thickness", + "positions", + "ratio", + "thickness", + ], + "spaceable-grob-interface": [ + "allow-loose-spacing", + "keep-inside-line", + "measure-length", + ], + "spacing-interface": [], + "spacing-options-interface": [ + "shortest-duration-space", + "spacing-increment", + ], + "spacing-spanner-interface": [ + "average-spacing-wishes", + "base-shortest-duration", + "common-shortest-duration", + "packed-spacing", + "shortest-duration-space", + "spacing-increment", + "strict-grace-spacing", + "strict-note-spacing", + "uniform-stretching", + ], + "span-bar-interface": [ + "glyph-name", + ], + "spanner-interface": [ + "minimum-length", + "normalized-endpoints", + "to-barline", + ], + "staff-grouper-interface": [ + "staff-staff-spacing", + "staffgroup-staff-spacing", + ], + "staff-spacing-interface": [ + "stem-spacing-correction", + ], + "staff-symbol-interface": [ + "ledger-line-thickness", + "line-count", + "line-positions", + "staff-space", + "thickness", + "width", + ], + "staff-symbol-referencer-interface": [ + "staff-position", + ], + "stanza-number-interface": [], + "stem-interface": [ + "avoid-note-head", + "beaming", + "beamlet-default-length", + "beamlet-max-length-proportion", + "default-direction", + "details", + "direction", + "duration-log", + "flag", + "flag-style", + "french-beaming", + "length", + "length-fraction", + "max-beam-connect", + "neutral-direction", + "no-stem-extend", + "positioning-done", + "stem-end-position", + "stemlet-length", + "stroke-style", + "thickness", + ], + "stem-tremolo-interface": [ + "beam-thickness", + "beam-width", + "flag-count", + "length-fraction", + "slope", + "style", + ], + "string-number-interface": [], + "stroke-finger-interface": [ + "digit-names", + ], + "system-interface": [ + "labels", + "skyline-horizontal-padding", + ], + "system-start-delimiter-interface": [ + "collapse-height", + "style", + "thickness", + ], + "system-start-text-interface": [ + "long-text", + "self-alignment-X", + "self-alignment-Y", + "text", + ], + "tab-note-head-interface": [ + "details", + ], + "text-interface": [ + "baseline-skip", + "text", + "text-direction", + "word-space", + ], + "text-script-interface": [ + "add-stem-support", + "avoid-slur", + "script-priority", + ], + "tie-column-interface": [ + "positioning-done", + "tie-configuration", + ], + "tie-interface": [ + "annotation", + "avoid-slur", + "control-points", + "dash-definition", + "details", + "direction", + "head-direction", + "line-thickness", + "neutral-direction", + "staff-position", + "thickness", + ], + "time-signature-interface": [ + "fraction", + "style", + ], + "trill-pitch-accidental-interface": [], + "trill-spanner-interface": [], + "tuplet-bracket-interface": [ + "bracket-flare", + "bracket-visibility", + "break-overshoot", + "connect-to-neighbor", + "control-points", + "direction", + "edge-height", + "edge-text", + "full-length-padding", + "full-length-to-extent", + "gap", + "padding", + "positions", + "shorten-pair", + "staff-padding", + "thickness", + ], + "tuplet-number-interface": [ + "avoid-slur", + ], + "unbreakable-spanner-interface": [ + "breakable", + ], + "vaticana-ligature-interface": [ + "glyph-name", + "thickness", + ], + "volta-bracket-interface": [ + "height", + "thickness", + ], + "volta-interface": [], +} + + +grobs = { + "Accidental": [ + "accidental-interface", + "font-interface", + "grob-interface", + "inline-accidental-interface", + "item-interface", + ], + "AccidentalCautionary": [ + "accidental-interface", + "font-interface", + "grob-interface", + "inline-accidental-interface", + "item-interface", + ], + "AccidentalPlacement": [ + "accidental-placement-interface", + "grob-interface", + "item-interface", + ], + "AccidentalSuggestion": [ + "accidental-interface", + "accidental-suggestion-interface", + "font-interface", + "grob-interface", + "item-interface", + "script-interface", + "self-alignment-interface", + "side-position-interface", + ], + "Ambitus": [ + "ambitus-interface", + "axis-group-interface", + "break-aligned-interface", + "grob-interface", + "item-interface", + ], + "AmbitusAccidental": [ + "accidental-interface", + "break-aligned-interface", + "font-interface", + "grob-interface", + "item-interface", + "side-position-interface", + ], + "AmbitusLine": [ + "ambitus-interface", + "font-interface", + "grob-interface", + "item-interface", + ], + "AmbitusNoteHead": [ + "ambitus-interface", + "font-interface", + "grob-interface", + "item-interface", + "ledgered-interface", + "note-head-interface", + "rhythmic-head-interface", + "staff-symbol-referencer-interface", + ], + "Arpeggio": [ + "arpeggio-interface", + "font-interface", + "grob-interface", + "item-interface", + "side-position-interface", + "staff-symbol-referencer-interface", + ], + "BalloonTextItem": [ + "balloon-interface", + "font-interface", + "grob-interface", + "item-interface", + "text-interface", + ], + "BarLine": [ + "bar-line-interface", + "break-aligned-interface", + "font-interface", + "grob-interface", + "item-interface", + ], + "BarNumber": [ + "break-alignable-interface", + "font-interface", + "grob-interface", + "item-interface", + "self-alignment-interface", + "side-position-interface", + "text-interface", + ], + "BassFigure": [ + "bass-figure-interface", + "font-interface", + "grob-interface", + "item-interface", + "rhythmic-grob-interface", + "text-interface", + ], + "BassFigureAlignment": [ + "align-interface", + "axis-group-interface", + "bass-figure-alignment-interface", + "grob-interface", + "spanner-interface", + ], + "BassFigureAlignmentPositioning": [ + "axis-group-interface", + "grob-interface", + "side-position-interface", + "spanner-interface", + ], + "BassFigureBracket": [ + "enclosing-bracket-interface", + "grob-interface", + "item-interface", + ], + "BassFigureContinuation": [ + "figured-bass-continuation-interface", + "grob-interface", + "spanner-interface", + ], + "BassFigureLine": [ + "axis-group-interface", + "grob-interface", + "spanner-interface", + ], + "Beam": [ + "beam-interface", + "font-interface", + "grob-interface", + "spanner-interface", + "staff-symbol-referencer-interface", + "unbreakable-spanner-interface", + ], + "BendAfter": [ + "bend-after-interface", + "grob-interface", + "spanner-interface", + ], + "BreakAlignGroup": [ + "axis-group-interface", + "break-aligned-interface", + "grob-interface", + "item-interface", + ], + "BreakAlignment": [ + "axis-group-interface", + "break-alignment-interface", + "grob-interface", + "item-interface", + ], + "BreathingSign": [ + "break-aligned-interface", + "breathing-sign-interface", + "font-interface", + "grob-interface", + "item-interface", + "text-interface", + ], + "ChordName": [ + "chord-name-interface", + "font-interface", + "grob-interface", + "item-interface", + "rhythmic-grob-interface", + "text-interface", + ], + "Clef": [ + "break-aligned-interface", + "clef-interface", + "font-interface", + "grob-interface", + "item-interface", + "staff-symbol-referencer-interface", + ], + "ClusterSpanner": [ + "cluster-interface", + "grob-interface", + "spanner-interface", + ], + "ClusterSpannerBeacon": [ + "cluster-beacon-interface", + "grob-interface", + "item-interface", + "rhythmic-grob-interface", + ], + "CombineTextScript": [ + "font-interface", + "grob-interface", + "item-interface", + "side-position-interface", + "text-interface", + "text-script-interface", + ], + "CueClef": [ + "break-aligned-interface", + "clef-interface", + "font-interface", + "grob-interface", + "item-interface", + "staff-symbol-referencer-interface", + ], + "CueEndClef": [ + "break-aligned-interface", + "clef-interface", + "font-interface", + "grob-interface", + "item-interface", + "staff-symbol-referencer-interface", + ], + "Custos": [ + "break-aligned-interface", + "custos-interface", + "font-interface", + "grob-interface", + "item-interface", + "staff-symbol-referencer-interface", + ], + "DotColumn": [ + "axis-group-interface", + "dot-column-interface", + "grob-interface", + "item-interface", + ], + "Dots": [ + "dots-interface", + "font-interface", + "grob-interface", + "item-interface", + "staff-symbol-referencer-interface", + ], + "DoublePercentRepeat": [ + "break-aligned-interface", + "font-interface", + "grob-interface", + "item-interface", + "percent-repeat-interface", + "percent-repeat-item-interface", + ], + "DoublePercentRepeatCounter": [ + "font-interface", + "grob-interface", + "item-interface", + "percent-repeat-interface", + "percent-repeat-item-interface", + "self-alignment-interface", + "side-position-interface", + "text-interface", + ], + "DoubleRepeatSlash": [ + "font-interface", + "grob-interface", + "item-interface", + "percent-repeat-interface", + "percent-repeat-item-interface", + "rhythmic-grob-interface", + ], + "DynamicLineSpanner": [ + "axis-group-interface", + "dynamic-interface", + "dynamic-line-spanner-interface", + "grob-interface", + "side-position-interface", + "spanner-interface", + ], + "DynamicText": [ + "dynamic-interface", + "dynamic-text-interface", + "font-interface", + "grob-interface", + "item-interface", + "script-interface", + "self-alignment-interface", + "text-interface", + ], + "DynamicTextSpanner": [ + "dynamic-interface", + "dynamic-text-spanner-interface", + "font-interface", + "grob-interface", + "line-interface", + "line-spanner-interface", + "spanner-interface", + "text-interface", + ], + "Episema": [ + "episema-interface", + "font-interface", + "grob-interface", + "line-interface", + "line-spanner-interface", + "side-position-interface", + "spanner-interface", + ], + "Fingering": [ + "finger-interface", + "font-interface", + "grob-interface", + "item-interface", + "self-alignment-interface", + "side-position-interface", + "text-interface", + "text-script-interface", + ], + "FootnoteItem": [ + "balloon-interface", + "font-interface", + "footnote-interface", + "grob-interface", + "item-interface", + "text-interface", + ], + "FootnoteSpanner": [ + "balloon-interface", + "font-interface", + "footnote-interface", + "footnote-spanner-interface", + "grob-interface", + "spanner-interface", + "text-interface", + ], + "FretBoard": [ + "chord-name-interface", + "font-interface", + "fret-diagram-interface", + "grob-interface", + "item-interface", + "rhythmic-grob-interface", + ], + "Glissando": [ + "glissando-interface", + "grob-interface", + "line-interface", + "line-spanner-interface", + "spanner-interface", + "unbreakable-spanner-interface", + ], + "GraceSpacing": [ + "grace-spacing-interface", + "grob-interface", + "spacing-options-interface", + "spanner-interface", + ], + "GridLine": [ + "grid-line-interface", + "grob-interface", + "item-interface", + "self-alignment-interface", + ], + "GridPoint": [ + "grid-point-interface", + "grob-interface", + "item-interface", + ], + "Hairpin": [ + "dynamic-interface", + "grob-interface", + "hairpin-interface", + "line-interface", + "self-alignment-interface", + "spanner-interface", + ], + "HorizontalBracket": [ + "grob-interface", + "horizontal-bracket-interface", + "line-interface", + "side-position-interface", + "spanner-interface", + ], + "InstrumentName": [ + "font-interface", + "grob-interface", + "self-alignment-interface", + "side-position-interface", + "spanner-interface", + "system-start-text-interface", + ], + "InstrumentSwitch": [ + "font-interface", + "grob-interface", + "item-interface", + "self-alignment-interface", + "side-position-interface", + "text-interface", + ], + "KeyCancellation": [ + "break-aligned-interface", + "font-interface", + "grob-interface", + "item-interface", + "key-cancellation-interface", + "key-signature-interface", + "staff-symbol-referencer-interface", + ], + "KeySignature": [ + "break-aligned-interface", + "font-interface", + "grob-interface", + "item-interface", + "key-signature-interface", + "staff-symbol-referencer-interface", + ], + "LaissezVibrerTie": [ + "grob-interface", + "item-interface", + "semi-tie-interface", + ], + "LaissezVibrerTieColumn": [ + "grob-interface", + "item-interface", + "semi-tie-column-interface", + ], + "LedgerLineSpanner": [ + "grob-interface", + "ledger-line-spanner-interface", + "spanner-interface", + ], + "LeftEdge": [ + "break-aligned-interface", + "grob-interface", + "item-interface", + ], + "LigatureBracket": [ + "grob-interface", + "line-interface", + "spanner-interface", + "tuplet-bracket-interface", + ], + "LyricExtender": [ + "grob-interface", + "lyric-extender-interface", + "lyric-interface", + "spanner-interface", + ], + "LyricHyphen": [ + "font-interface", + "grob-interface", + "lyric-hyphen-interface", + "lyric-interface", + "spanner-interface", + ], + "LyricSpace": [ + "grob-interface", + "lyric-hyphen-interface", + "spanner-interface", + ], + "LyricText": [ + "font-interface", + "grob-interface", + "item-interface", + "lyric-syllable-interface", + "rhythmic-grob-interface", + "self-alignment-interface", + "text-interface", + ], + "MeasureGrouping": [ + "grob-interface", + "measure-grouping-interface", + "side-position-interface", + "spanner-interface", + ], + "MelodyItem": [ + "grob-interface", + "item-interface", + "melody-spanner-interface", + ], + "MensuralLigature": [ + "font-interface", + "grob-interface", + "mensural-ligature-interface", + "spanner-interface", + ], + "MetronomeMark": [ + "break-alignable-interface", + "font-interface", + "grob-interface", + "item-interface", + "metronome-mark-interface", + "self-alignment-interface", + "side-position-interface", + "text-interface", + ], + "MultiMeasureRest": [ + "font-interface", + "grob-interface", + "multi-measure-interface", + "multi-measure-rest-interface", + "rest-interface", + "spanner-interface", + "staff-symbol-referencer-interface", + ], + "MultiMeasureRestNumber": [ + "font-interface", + "grob-interface", + "multi-measure-interface", + "self-alignment-interface", + "side-position-interface", + "spanner-interface", + "text-interface", + ], + "MultiMeasureRestText": [ + "font-interface", + "grob-interface", + "multi-measure-interface", + "self-alignment-interface", + "side-position-interface", + "spanner-interface", + "text-interface", + ], + "NonMusicalPaperColumn": [ + "axis-group-interface", + "font-interface", + "grob-interface", + "item-interface", + "paper-column-interface", + "separation-item-interface", + "spaceable-grob-interface", + ], + "NoteCollision": [ + "axis-group-interface", + "grob-interface", + "item-interface", + "note-collision-interface", + ], + "NoteColumn": [ + "axis-group-interface", + "grob-interface", + "item-interface", + "note-column-interface", + "separation-item-interface", + ], + "NoteHead": [ + "font-interface", + "gregorian-ligature-interface", + "grob-interface", + "item-interface", + "ledgered-interface", + "mensural-ligature-interface", + "note-head-interface", + "rhythmic-grob-interface", + "rhythmic-head-interface", + "staff-symbol-referencer-interface", + "vaticana-ligature-interface", + ], + "NoteName": [ + "font-interface", + "grob-interface", + "item-interface", + "note-name-interface", + "text-interface", + ], + "NoteSpacing": [ + "grob-interface", + "item-interface", + "note-spacing-interface", + "spacing-interface", + ], + "OctavateEight": [ + "font-interface", + "grob-interface", + "item-interface", + "self-alignment-interface", + "side-position-interface", + "text-interface", + ], + "OttavaBracket": [ + "font-interface", + "grob-interface", + "horizontal-bracket-interface", + "line-interface", + "ottava-bracket-interface", + "side-position-interface", + "spanner-interface", + "text-interface", + ], + "PaperColumn": [ + "axis-group-interface", + "font-interface", + "grob-interface", + "item-interface", + "paper-column-interface", + "separation-item-interface", + "spaceable-grob-interface", + ], + "ParenthesesItem": [ + "font-interface", + "grob-interface", + "item-interface", + "parentheses-interface", + ], + "PercentRepeat": [ + "font-interface", + "grob-interface", + "multi-measure-rest-interface", + "percent-repeat-interface", + "spanner-interface", + ], + "PercentRepeatCounter": [ + "font-interface", + "grob-interface", + "percent-repeat-interface", + "self-alignment-interface", + "side-position-interface", + "spanner-interface", + "text-interface", + ], + "PhrasingSlur": [ + "grob-interface", + "slur-interface", + "spanner-interface", + ], + "PianoPedalBracket": [ + "grob-interface", + "line-interface", + "piano-pedal-bracket-interface", + "piano-pedal-interface", + "spanner-interface", + ], + "RehearsalMark": [ + "break-alignable-interface", + "font-interface", + "grob-interface", + "item-interface", + "mark-interface", + "self-alignment-interface", + "side-position-interface", + "text-interface", + ], + "RepeatSlash": [ + "grob-interface", + "item-interface", + "percent-repeat-interface", + "percent-repeat-item-interface", + "rhythmic-grob-interface", + ], + "RepeatTie": [ + "grob-interface", + "item-interface", + "semi-tie-interface", + ], + "RepeatTieColumn": [ + "grob-interface", + "item-interface", + "semi-tie-column-interface", + ], + "Rest": [ + "font-interface", + "grob-interface", + "item-interface", + "rest-interface", + "rhythmic-grob-interface", + "rhythmic-head-interface", + "staff-symbol-referencer-interface", + ], + "RestCollision": [ + "grob-interface", + "item-interface", + "rest-collision-interface", + ], + "Script": [ + "font-interface", + "grob-interface", + "item-interface", + "script-interface", + "side-position-interface", + ], + "ScriptColumn": [ + "grob-interface", + "item-interface", + "script-column-interface", + ], + "ScriptRow": [ + "grob-interface", + "item-interface", + "script-column-interface", + ], + "Slur": [ + "grob-interface", + "slur-interface", + "spanner-interface", + ], + "SostenutoPedal": [ + "font-interface", + "grob-interface", + "item-interface", + "piano-pedal-script-interface", + "self-alignment-interface", + "text-interface", + ], + "SostenutoPedalLineSpanner": [ + "axis-group-interface", + "grob-interface", + "piano-pedal-interface", + "side-position-interface", + "spanner-interface", + ], + "SpacingSpanner": [ + "grob-interface", + "spacing-options-interface", + "spacing-spanner-interface", + "spanner-interface", + ], + "SpanBar": [ + "bar-line-interface", + "font-interface", + "grob-interface", + "item-interface", + "span-bar-interface", + ], + "StaffGrouper": [ + "grob-interface", + "spanner-interface", + "staff-grouper-interface", + ], + "StaffSpacing": [ + "grob-interface", + "item-interface", + "spacing-interface", + "staff-spacing-interface", + ], + "StaffSymbol": [ + "grob-interface", + "spanner-interface", + "staff-symbol-interface", + ], + "StanzaNumber": [ + "font-interface", + "grob-interface", + "item-interface", + "side-position-interface", + "stanza-number-interface", + "text-interface", + ], + "Stem": [ + "font-interface", + "grob-interface", + "item-interface", + "stem-interface", + ], + "StemTremolo": [ + "grob-interface", + "item-interface", + "stem-tremolo-interface", + ], + "StringNumber": [ + "font-interface", + "grob-interface", + "item-interface", + "self-alignment-interface", + "side-position-interface", + "string-number-interface", + "text-interface", + "text-script-interface", + ], + "StrokeFinger": [ + "font-interface", + "grob-interface", + "item-interface", + "self-alignment-interface", + "side-position-interface", + "stroke-finger-interface", + "text-interface", + "text-script-interface", + ], + "SustainPedal": [ + "font-interface", + "grob-interface", + "item-interface", + "piano-pedal-interface", + "piano-pedal-script-interface", + "self-alignment-interface", + "text-interface", + ], + "SustainPedalLineSpanner": [ + "axis-group-interface", + "grob-interface", + "piano-pedal-interface", + "side-position-interface", + "spanner-interface", + ], + "System": [ + "axis-group-interface", + "grob-interface", + "spanner-interface", + "system-interface", + ], + "SystemStartBar": [ + "grob-interface", + "side-position-interface", + "spanner-interface", + "system-start-delimiter-interface", + ], + "SystemStartBrace": [ + "font-interface", + "grob-interface", + "side-position-interface", + "spanner-interface", + "system-start-delimiter-interface", + ], + "SystemStartBracket": [ + "font-interface", + "grob-interface", + "side-position-interface", + "spanner-interface", + "system-start-delimiter-interface", + ], + "SystemStartSquare": [ + "font-interface", + "grob-interface", + "side-position-interface", + "spanner-interface", + "system-start-delimiter-interface", + ], + "TabNoteHead": [ + "font-interface", + "grob-interface", + "item-interface", + "note-head-interface", + "rhythmic-grob-interface", + "rhythmic-head-interface", + "staff-symbol-referencer-interface", + "tab-note-head-interface", + "text-interface", + ], + "TextScript": [ + "font-interface", + "grob-interface", + "instrument-specific-markup-interface", + "item-interface", + "self-alignment-interface", + "side-position-interface", + "text-interface", + "text-script-interface", + ], + "TextSpanner": [ + "font-interface", + "grob-interface", + "line-interface", + "line-spanner-interface", + "side-position-interface", + "spanner-interface", + ], + "Tie": [ + "grob-interface", + "spanner-interface", + "tie-interface", + ], + "TieColumn": [ + "grob-interface", + "spanner-interface", + "tie-column-interface", + ], + "TimeSignature": [ + "break-aligned-interface", + "font-interface", + "grob-interface", + "item-interface", + "time-signature-interface", + ], + "TrillPitchAccidental": [ + "accidental-interface", + "font-interface", + "grob-interface", + "inline-accidental-interface", + "item-interface", + "side-position-interface", + "trill-pitch-accidental-interface", + ], + "TrillPitchGroup": [ + "axis-group-interface", + "font-interface", + "grob-interface", + "item-interface", + "note-head-interface", + "parentheses-interface", + "side-position-interface", + ], + "TrillPitchHead": [ + "font-interface", + "grob-interface", + "item-interface", + "ledgered-interface", + "pitched-trill-interface", + "rhythmic-head-interface", + "staff-symbol-referencer-interface", + ], + "TrillSpanner": [ + "font-interface", + "grob-interface", + "line-interface", + "line-spanner-interface", + "side-position-interface", + "spanner-interface", + "trill-spanner-interface", + ], + "TupletBracket": [ + "grob-interface", + "line-interface", + "spanner-interface", + "tuplet-bracket-interface", + ], + "TupletNumber": [ + "font-interface", + "grob-interface", + "spanner-interface", + "text-interface", + "tuplet-number-interface", + ], + "UnaCordaPedal": [ + "font-interface", + "grob-interface", + "item-interface", + "piano-pedal-script-interface", + "self-alignment-interface", + "text-interface", + ], + "UnaCordaPedalLineSpanner": [ + "axis-group-interface", + "grob-interface", + "piano-pedal-interface", + "side-position-interface", + "spanner-interface", + ], + "VaticanaLigature": [ + "font-interface", + "grob-interface", + "spanner-interface", + "vaticana-ligature-interface", + ], + "VerticalAlignment": [ + "align-interface", + "axis-group-interface", + "grob-interface", + "spanner-interface", + ], + "VerticalAxisGroup": [ + "axis-group-interface", + "grob-interface", + "hara-kiri-group-spanner-interface", + "spanner-interface", + ], + "VoiceFollower": [ + "grob-interface", + "line-interface", + "line-spanner-interface", + "spanner-interface", + ], + "VoltaBracket": [ + "font-interface", + "grob-interface", + "horizontal-bracket-interface", + "line-interface", + "side-position-interface", + "spanner-interface", + "text-interface", + "volta-bracket-interface", + "volta-interface", + ], + "VoltaBracketSpanner": [ + "axis-group-interface", + "grob-interface", + "side-position-interface", + "spanner-interface", + "volta-interface", + ], +} + + +contextproperties = [ + "aDueText", + "alignAboveContext", + "alignBassFigureAccidentals", + "alignBelowContext", + "associatedVoice", + "autoAccidentals", + "autoBeamCheck", + "autoBeaming", + "autoCautionaries", + "automaticBars", + "barAlways", + "barCheckSynchronize", + "barNumberVisibility", + "baseMoment", + "bassFigureFormatFunction", + "bassStaffProperties", + "beamExceptions", + "beatStructure", + "chordChanges", + "chordNameExceptions", + "chordNameExceptionsFull", + "chordNameExceptionsPartial", + "chordNameFunction", + "chordNameLowercaseMinor", + "chordNameSeparator", + "chordNoteNamer", + "chordPrefixSpacer", + "chordRootNamer", + "clefGlyph", + "clefOctavation", + "clefPosition", + "completionBusy", + "connectArpeggios", + "countPercentRepeats", + "createKeyOnClefChange", + "createSpacing", + "crescendoSpanner", + "crescendoText", + "cueClefGlyph", + "cueClefOctavation", + "cueClefPosition", + "currentBarNumber", + "decrescendoSpanner", + "decrescendoText", + "defaultBarType", + "defaultStrings", + "doubleRepeatType", + "doubleSlurs", + "drumPitchTable", + "drumStyleTable", + "explicitClefVisibility", + "explicitCueClefVisibility", + "explicitKeySignatureVisibility", + "extendersOverRests", + "extraNatural", + "figuredBassAlterationDirection", + "figuredBassCenterContinuations", + "figuredBassFormatter", + "figuredBassPlusDirection", + "fingeringOrientations", + "firstClef", + "followVoice", + "fontSize", + "forbidBreak", + "forceClef", + "fretLabels", + "glissandoMap", + "gridInterval", + "handleNegativeFrets", + "harmonicAccidentals", + "harmonicDots", + "highStringOne", + "ignoreBarChecks", + "ignoreFiguredBassRest", + "ignoreMelismata", + "implicitBassFigures", + "implicitTimeSignatureVisibility", + "includeGraceNotes", + "instrumentCueName", + "instrumentEqualizer", + "instrumentName", + "instrumentTransposition", + "internalBarNumber", + "keepAliveInterfaces", + "keyAlterationOrder", + "keySignature", + "lyricMelismaAlignment", + "majorSevenSymbol", + "markFormatter", + "maximumFretStretch", + "measureLength", + "measurePosition", + "melismaBusyProperties", + "metronomeMarkFormatter", + "middleCClefPosition", + "middleCCuePosition", + "middleCOffset", + "middleCPosition", + "midiChannelMapping", + "midiInstrument", + "midiMaximumVolume", + "midiMinimumVolume", + "minimumFret", + "minimumPageTurnLength", + "minimumRepeatLengthForPageTurn", + "noChordSymbol", + "noteToFretFunction", + "ottavation", + "output", + "partCombineTextsOnNote", + "pedalSostenutoStrings", + "pedalSostenutoStyle", + "pedalSustainStrings", + "pedalSustainStyle", + "pedalUnaCordaStrings", + "pedalUnaCordaStyle", + "predefinedDiagramTable", + "printKeyCancellation", + "printOctaveNames", + "printPartCombineTexts", + "proportionalNotationDuration", + "rehearsalMark", + "repeatCommands", + "repeatCountVisibility", + "restCompletionBusy", + "restNumberThreshold", + "searchForVoice", + "shapeNoteStyles", + "shortInstrumentName", + "shortVocalName", + "skipBars", + "skipTypesetting", + "soloIIText", + "soloText", + "squashedPosition", + "staffLineLayoutFunction", + "stanza", + "stemLeftBeamCount", + "stemRightBeamCount", + "stringNumberOrientations", + "stringOneTopmost", + "stringTunings", + "strokeFingerOrientations", + "subdivideBeams", + "suggestAccidentals", + "systemStartDelimiter", + "systemStartDelimiterHierarchy", + "tabStaffLineLayoutFunction", + "tablatureFormat", + "tempoHideNote", + "tempoWholesPerMinute", + "tieWaitForNote", + "timeSignatureFraction", + "timeSignatureSettings", + "timing", + "tonic", + "topLevelAlignment", + "trebleStaffProperties", + "tremoloFlags", + "tupletFullLength", + "tupletFullLengthNote", + "tupletSpannerDuration", + "useBassFigureExtenders", + "vocalName", + "voltaSpannerDuration", + "whichBar", +] + + +engravers = [ + "Accidental_engraver", + "Ambitus_engraver", + "Arpeggio_engraver", + "Auto_beam_engraver", + "Axis_group_engraver", + "Balloon_engraver", + "Bar_engraver", + "Bar_number_engraver", + "Beam_collision_engraver", + "Beam_engraver", + "Beam_performer", + "Bend_engraver", + "Break_align_engraver", + "Breathing_sign_engraver", + "Chord_name_engraver", + "Chord_tremolo_engraver", + "Clef_engraver", + "Cluster_spanner_engraver", + "Collision_engraver", + "Completion_heads_engraver", + "Completion_rest_engraver", + "Control_track_performer", + "Cue_clef_engraver", + "Custos_engraver", + "Default_bar_line_engraver", + "Dot_column_engraver", + "Dots_engraver", + "Double_percent_repeat_engraver", + "Drum_note_performer", + "Drum_notes_engraver", + "Dynamic_align_engraver", + "Dynamic_engraver", + "Dynamic_performer", + "Engraver", + "Episema_engraver", + "Extender_engraver", + "Figured_bass_engraver", + "Figured_bass_position_engraver", + "Fingering_engraver", + "Font_size_engraver", + "Footnote_engraver", + "Forbid_line_break_engraver", + "Fretboard_engraver", + "Glissando_engraver", + "Grace_beam_engraver", + "Grace_engraver", + "Grace_spacing_engraver", + "Grid_line_span_engraver", + "Grid_point_engraver", + "Grob_pq_engraver", + "Hara_kiri_engraver", + "Horizontal_bracket_engraver", + "Hyphen_engraver", + "Instrument_name_engraver", + "Instrument_switch_engraver", + "Keep_alive_together_engraver", + "Key_engraver", + "Key_performer", + "Laissez_vibrer_engraver", + "Ledger_line_engraver", + "Ligature_bracket_engraver", + "Lyric_engraver", + "Lyric_performer", + "Mark_engraver", + "Measure_grouping_engraver", + "Melody_engraver", + "Mensural_ligature_engraver", + "Metronome_mark_engraver", + "Multi_measure_rest_engraver", + "New_dynamic_engraver", + "New_fingering_engraver", + "Note_head_line_engraver", + "Note_heads_engraver", + "Note_name_engraver", + "Note_performer", + "Note_spacing_engraver", + "Ottava_spanner_engraver", + "Output_property_engraver", + "Page_turn_engraver", + "Paper_column_engraver", + "Parenthesis_engraver", + "Part_combine_engraver", + "Percent_repeat_engraver", + "Phrasing_slur_engraver", + "Piano_pedal_align_engraver", + "Piano_pedal_engraver", + "Piano_pedal_performer", + "Pitch_squash_engraver", + "Pitched_trill_engraver", + "Repeat_acknowledge_engraver", + "Repeat_tie_engraver", + "Rest_collision_engraver", + "Rest_engraver", + "Rhythmic_column_engraver", + "Scheme_engraver", + "Script_column_engraver", + "Script_engraver", + "Script_row_engraver", + "Separating_line_group_engraver", + "Slash_repeat_engraver", + "Slur_engraver", + "Slur_performer", + "Spacing_engraver", + "Span_arpeggio_engraver", + "Span_bar_engraver", + "Spanner_break_forbid_engraver", + "Staff_collecting_engraver", + "Staff_performer", + "Staff_symbol_engraver", + "Stanza_number_align_engraver", + "Stanza_number_engraver", + "Stem_engraver", + "System_start_delimiter_engraver", + "Tab_note_heads_engraver", + "Tab_staff_symbol_engraver", + "Tab_tie_follow_engraver", + "Tempo_performer", + "Text_engraver", + "Text_spanner_engraver", + "Tie_engraver", + "Tie_performer", + "Time_signature_engraver", + "Time_signature_performer", + "Timing_translator", + "Translator", + "Trill_spanner_engraver", + "Tuplet_engraver", + "Tweak_engraver", + "Vaticana_ligature_engraver", + "Vertical_align_engraver", + "Volta_engraver", +] + + +musicglyphs = [ + "accidentals.doublesharp", + "accidentals.flat", + "accidentals.flat.arrowboth", + "accidentals.flat.arrowdown", + "accidentals.flat.arrowup", + "accidentals.flat.slash", + "accidentals.flat.slashslash", + "accidentals.flatflat", + "accidentals.flatflat.slash", + "accidentals.hufnagelM1", + "accidentals.leftparen", + "accidentals.medicaeaM1", + "accidentals.mensural1", + "accidentals.mensuralM1", + "accidentals.mirroredflat", + "accidentals.mirroredflat.backslash", + "accidentals.mirroredflat.flat", + "accidentals.natural", + "accidentals.natural.arrowboth", + "accidentals.natural.arrowdown", + "accidentals.natural.arrowup", + "accidentals.rightparen", + "accidentals.sharp", + "accidentals.sharp.arrowboth", + "accidentals.sharp.arrowdown", + "accidentals.sharp.arrowup", + "accidentals.sharp.slashslash.stem", + "accidentals.sharp.slashslash.stemstemstem", + "accidentals.sharp.slashslashslash.stem", + "accidentals.sharp.slashslashslash.stemstem", + "accidentals.vaticana0", + "accidentals.vaticanaM1", + "accordion.bayanbass", + "accordion.discant", + "accordion.dot", + "accordion.freebass", + "accordion.oldEE", + "accordion.pull", + "accordion.push", + "accordion.stdbass", + "arrowheads.close.01", + "arrowheads.close.0M1", + "arrowheads.close.11", + "arrowheads.close.1M1", + "arrowheads.open.01", + "arrowheads.open.0M1", + "arrowheads.open.11", + "arrowheads.open.1M1", + "brackettips.down", + "brackettips.up", + "clefs.C", + "clefs.C_change", + "clefs.F", + "clefs.F_change", + "clefs.G", + "clefs.G_change", + "clefs.hufnagel.do", + "clefs.hufnagel.do.fa", + "clefs.hufnagel.do.fa_change", + "clefs.hufnagel.do_change", + "clefs.hufnagel.fa", + "clefs.hufnagel.fa_change", + "clefs.medicaea.do", + "clefs.medicaea.do_change", + "clefs.medicaea.fa", + "clefs.medicaea.fa_change", + "clefs.mensural.c", + "clefs.mensural.c_change", + "clefs.mensural.f", + "clefs.mensural.f_change", + "clefs.mensural.g", + "clefs.mensural.g_change", + "clefs.neomensural.c", + "clefs.neomensural.c_change", + "clefs.percussion", + "clefs.percussion_change", + "clefs.petrucci.c1", + "clefs.petrucci.c1_change", + "clefs.petrucci.c2", + "clefs.petrucci.c2_change", + "clefs.petrucci.c3", + "clefs.petrucci.c3_change", + "clefs.petrucci.c4", + "clefs.petrucci.c4_change", + "clefs.petrucci.c5", + "clefs.petrucci.c5_change", + "clefs.petrucci.f", + "clefs.petrucci.f_change", + "clefs.petrucci.g", + "clefs.petrucci.g_change", + "clefs.tab", + "clefs.tab_change", + "clefs.vaticana.do", + "clefs.vaticana.do_change", + "clefs.vaticana.fa", + "clefs.vaticana.fa_change", + "comma", + "custodes.hufnagel.d0", + "custodes.hufnagel.d1", + "custodes.hufnagel.d2", + "custodes.hufnagel.u0", + "custodes.hufnagel.u1", + "custodes.hufnagel.u2", + "custodes.medicaea.d0", + "custodes.medicaea.d1", + "custodes.medicaea.d2", + "custodes.medicaea.u0", + "custodes.medicaea.u1", + "custodes.medicaea.u2", + "custodes.mensural.d0", + "custodes.mensural.d1", + "custodes.mensural.d2", + "custodes.mensural.u0", + "custodes.mensural.u1", + "custodes.mensural.u2", + "custodes.vaticana.d0", + "custodes.vaticana.d1", + "custodes.vaticana.d2", + "custodes.vaticana.u0", + "custodes.vaticana.u1", + "custodes.vaticana.u2", + "dots.dot", + "dots.dotvaticana", + "eight", + "f", + "five", + "flags.d3", + "flags.d4", + "flags.d5", + "flags.d6", + "flags.d7", + "flags.dgrace", + "flags.mensurald03", + "flags.mensurald04", + "flags.mensurald05", + "flags.mensurald06", + "flags.mensurald13", + "flags.mensurald14", + "flags.mensurald15", + "flags.mensurald16", + "flags.mensurald23", + "flags.mensurald24", + "flags.mensurald25", + "flags.mensurald26", + "flags.mensuralu03", + "flags.mensuralu04", + "flags.mensuralu05", + "flags.mensuralu06", + "flags.mensuralu13", + "flags.mensuralu14", + "flags.mensuralu15", + "flags.mensuralu16", + "flags.mensuralu23", + "flags.mensuralu24", + "flags.mensuralu25", + "flags.mensuralu26", + "flags.u3", + "flags.u4", + "flags.u5", + "flags.u6", + "flags.u7", + "flags.ugrace", + "four", + "hyphen", + "m", + "nine", + "noteheads.d0doFunk", + "noteheads.d0fa", + "noteheads.d0faFunk", + "noteheads.d0faThin", + "noteheads.d0miFunk", + "noteheads.d0reFunk", + "noteheads.d0tiFunk", + "noteheads.d1do", + "noteheads.d1doFunk", + "noteheads.d1doThin", + "noteheads.d1doWalker", + "noteheads.d1fa", + "noteheads.d1faFunk", + "noteheads.d1faThin", + "noteheads.d1faWalker", + "noteheads.d1miFunk", + "noteheads.d1re", + "noteheads.d1reFunk", + "noteheads.d1reThin", + "noteheads.d1reWalker", + "noteheads.d1ti", + "noteheads.d1tiFunk", + "noteheads.d1tiThin", + "noteheads.d1tiWalker", + "noteheads.d1triangle", + "noteheads.d2do", + "noteheads.d2doFunk", + "noteheads.d2doThin", + "noteheads.d2doWalker", + "noteheads.d2fa", + "noteheads.d2faFunk", + "noteheads.d2faThin", + "noteheads.d2faWalker", + "noteheads.d2re", + "noteheads.d2reFunk", + "noteheads.d2reThin", + "noteheads.d2reWalker", + "noteheads.d2ti", + "noteheads.d2tiFunk", + "noteheads.d2tiThin", + "noteheads.d2tiWalker", + "noteheads.d2triangle", + "noteheads.dM2", + "noteheads.s0", + "noteheads.s0blackmensural", + "noteheads.s0blackpetrucci", + "noteheads.s0cross", + "noteheads.s0diamond", + "noteheads.s0do", + "noteheads.s0doThin", + "noteheads.s0doWalker", + "noteheads.s0faWalker", + "noteheads.s0harmonic", + "noteheads.s0la", + "noteheads.s0laFunk", + "noteheads.s0laThin", + "noteheads.s0laWalker", + "noteheads.s0mensural", + "noteheads.s0mi", + "noteheads.s0miMirror", + "noteheads.s0miThin", + "noteheads.s0miWalker", + "noteheads.s0neomensural", + "noteheads.s0petrucci", + "noteheads.s0re", + "noteheads.s0reThin", + "noteheads.s0reWalker", + "noteheads.s0slash", + "noteheads.s0sol", + "noteheads.s0solFunk", + "noteheads.s0ti", + "noteheads.s0tiThin", + "noteheads.s0tiWalker", + "noteheads.s0triangle", + "noteheads.s1", + "noteheads.s1blackpetrucci", + "noteheads.s1cross", + "noteheads.s1diamond", + "noteheads.s1la", + "noteheads.s1laFunk", + "noteheads.s1laThin", + "noteheads.s1laWalker", + "noteheads.s1mensural", + "noteheads.s1mi", + "noteheads.s1miMirror", + "noteheads.s1miThin", + "noteheads.s1miWalker", + "noteheads.s1neomensural", + "noteheads.s1petrucci", + "noteheads.s1slash", + "noteheads.s1sol", + "noteheads.s1solFunk", + "noteheads.s2", + "noteheads.s2blackpetrucci", + "noteheads.s2cross", + "noteheads.s2diamond", + "noteheads.s2harmonic", + "noteheads.s2la", + "noteheads.s2laFunk", + "noteheads.s2laThin", + "noteheads.s2laWalker", + "noteheads.s2mensural", + "noteheads.s2mi", + "noteheads.s2miFunk", + "noteheads.s2miMirror", + "noteheads.s2miThin", + "noteheads.s2miWalker", + "noteheads.s2neomensural", + "noteheads.s2petrucci", + "noteheads.s2slash", + "noteheads.s2sol", + "noteheads.s2solFunk", + "noteheads.s2xcircle", + "noteheads.sM1", + "noteheads.sM1blackmensural", + "noteheads.sM1double", + "noteheads.sM1mensural", + "noteheads.sM1neomensural", + "noteheads.sM1semimensural", + "noteheads.sM2blackmensural", + "noteheads.sM2mensural", + "noteheads.sM2neomensural", + "noteheads.sM2semimensural", + "noteheads.sM3blackligmensural", + "noteheads.sM3blackmensural", + "noteheads.sM3ligmensural", + "noteheads.sM3mensural", + "noteheads.sM3neomensural", + "noteheads.sM3semiligmensural", + "noteheads.sM3semimensural", + "noteheads.shufnagel.lpes", + "noteheads.shufnagel.punctum", + "noteheads.shufnagel.virga", + "noteheads.slmensural", + "noteheads.slneomensural", + "noteheads.smedicaea.inclinatum", + "noteheads.smedicaea.punctum", + "noteheads.smedicaea.rvirga", + "noteheads.smedicaea.virga", + "noteheads.ssolesmes.auct.asc", + "noteheads.ssolesmes.auct.desc", + "noteheads.ssolesmes.incl.auctum", + "noteheads.ssolesmes.incl.parvum", + "noteheads.ssolesmes.oriscus", + "noteheads.ssolesmes.stropha", + "noteheads.ssolesmes.stropha.aucta", + "noteheads.svaticana.cephalicus", + "noteheads.svaticana.epiphonus", + "noteheads.svaticana.inclinatum", + "noteheads.svaticana.inner.cephalicus", + "noteheads.svaticana.linea.punctum", + "noteheads.svaticana.linea.punctum.cavum", + "noteheads.svaticana.lpes", + "noteheads.svaticana.plica", + "noteheads.svaticana.punctum", + "noteheads.svaticana.punctum.cavum", + "noteheads.svaticana.quilisma", + "noteheads.svaticana.reverse.plica", + "noteheads.svaticana.reverse.vplica", + "noteheads.svaticana.upes", + "noteheads.svaticana.vepiphonus", + "noteheads.svaticana.vlpes", + "noteheads.svaticana.vplica", + "noteheads.svaticana.vupes", + "noteheads.u0doFunk", + "noteheads.u0fa", + "noteheads.u0faFunk", + "noteheads.u0faThin", + "noteheads.u0miFunk", + "noteheads.u0reFunk", + "noteheads.u0tiFunk", + "noteheads.u1do", + "noteheads.u1doFunk", + "noteheads.u1doThin", + "noteheads.u1doWalker", + "noteheads.u1fa", + "noteheads.u1faFunk", + "noteheads.u1faThin", + "noteheads.u1faWalker", + "noteheads.u1miFunk", + "noteheads.u1re", + "noteheads.u1reFunk", + "noteheads.u1reThin", + "noteheads.u1reWalker", + "noteheads.u1ti", + "noteheads.u1tiFunk", + "noteheads.u1tiThin", + "noteheads.u1tiWalker", + "noteheads.u1triangle", + "noteheads.u2do", + "noteheads.u2doFunk", + "noteheads.u2doThin", + "noteheads.u2doWalker", + "noteheads.u2fa", + "noteheads.u2faFunk", + "noteheads.u2faThin", + "noteheads.u2faWalker", + "noteheads.u2re", + "noteheads.u2reFunk", + "noteheads.u2reThin", + "noteheads.u2reWalker", + "noteheads.u2ti", + "noteheads.u2tiFunk", + "noteheads.u2tiThin", + "noteheads.u2tiWalker", + "noteheads.u2triangle", + "noteheads.uM2", + "one", + "p", + "pedal.*", + "pedal..", + "pedal.M", + "pedal.P", + "pedal.Ped", + "pedal.d", + "pedal.e", + "period", + "plus", + "r", + "rests.0", + "rests.0mensural", + "rests.0neomensural", + "rests.0o", + "rests.1", + "rests.1mensural", + "rests.1neomensural", + "rests.1o", + "rests.2", + "rests.2classical", + "rests.2mensural", + "rests.2neomensural", + "rests.3", + "rests.3mensural", + "rests.3neomensural", + "rests.4", + "rests.4mensural", + "rests.4neomensural", + "rests.5", + "rests.6", + "rests.7", + "rests.M1", + "rests.M1mensural", + "rests.M1neomensural", + "rests.M2", + "rests.M2mensural", + "rests.M2neomensural", + "rests.M3", + "rests.M3mensural", + "rests.M3neomensural", + "s", + "scripts.arpeggio", + "scripts.arpeggio.arrow.1", + "scripts.arpeggio.arrow.M1", + "scripts.augmentum", + "scripts.caesura.curved", + "scripts.caesura.straight", + "scripts.circulus", + "scripts.coda", + "scripts.daccentus", + "scripts.dfermata", + "scripts.dlongfermata", + "scripts.dmarcato", + "scripts.downbow", + "scripts.downmordent", + "scripts.downprall", + "scripts.dpedalheel", + "scripts.dpedaltoe", + "scripts.dportato", + "scripts.dsemicirculus", + "scripts.dshortfermata", + "scripts.dsignumcongruentiae", + "scripts.dstaccatissimo", + "scripts.dverylongfermata", + "scripts.espr", + "scripts.flageolet", + "scripts.halfopen", + "scripts.ictus", + "scripts.lcomma", + "scripts.lineprall", + "scripts.lvarcomma", + "scripts.mordent", + "scripts.open", + "scripts.prall", + "scripts.pralldown", + "scripts.prallmordent", + "scripts.prallprall", + "scripts.prallup", + "scripts.rcomma", + "scripts.reverseturn", + "scripts.rvarcomma", + "scripts.segno", + "scripts.sforzato", + "scripts.snappizzicato", + "scripts.staccato", + "scripts.stopped", + "scripts.tenuto", + "scripts.thumb", + "scripts.trilelement", + "scripts.trill", + "scripts.trill_element", + "scripts.turn", + "scripts.uaccentus", + "scripts.ufermata", + "scripts.ulongfermata", + "scripts.umarcato", + "scripts.upbow", + "scripts.upedalheel", + "scripts.upedaltoe", + "scripts.upmordent", + "scripts.uportato", + "scripts.upprall", + "scripts.usemicirculus", + "scripts.ushortfermata", + "scripts.usignumcongruentiae", + "scripts.ustaccatissimo", + "scripts.uverylongfermata", + "scripts.varcoda", + "scripts.varsegno", + "seven", + "six", + "space", + "three", + "timesig.C22", + "timesig.C44", + "timesig.mensural22", + "timesig.mensural24", + "timesig.mensural32", + "timesig.mensural34", + "timesig.mensural44", + "timesig.mensural48", + "timesig.mensural64", + "timesig.mensural68", + "timesig.mensural68alt", + "timesig.mensural94", + "timesig.mensural98", + "timesig.neomensural22", + "timesig.neomensural24", + "timesig.neomensural32", + "timesig.neomensural34", + "timesig.neomensural44", + "timesig.neomensural48", + "timesig.neomensural64", + "timesig.neomensural68", + "timesig.neomensural68alt", + "timesig.neomensural94", + "timesig.neomensural98", + "two", + "z", + "zero", +] + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/data/getdata.ly frescobaldi-2.0.0/frescobaldi_app/ly/data/getdata.ly --- frescobaldi-1.2.0/frescobaldi_app/ly/data/getdata.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/data/getdata.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,177 @@ +\version "2.14.1" +%{ + Outputs data retrieved from LilyPond as Python code: + + - version: the lilypond version string + - interfaces: maps interface names to the list of their properties + - grobs: maps grob names to the list of interfaces they implement + - contextproperties: the list of all-user-translation-properties + - musicglyphs: the list of all glyphs in the feta font + +%} + +#(begin + + (define (sort-symbol-list list) + "sort a list of symbols" + (sort list (lambda (s1 s2) + (string< + (symbol->string s1) + (symbol->string s2))))) + + (define (hash-keys h) + "returns the list of keys of a hash table" + (hash-fold + (lambda (k v p) + (append p (list k))) + '() + h)) + + ;; the list of properties we also want to complete, besides all + ;; user properties + (define accepted-properties + '( + cross-staff + positioning-done + )) + + (define (user-property? prop) + "is the property a user property?" + (or (memq prop accepted-properties) + (memq prop all-user-grob-properties))) + + (define (format-string-list list indent) + "formats a list of strings as a python list" + (cond + ((null? list) "[]") + (else + (string-append + "[\n" + (string-join + (map (lambda (s) + (string-append + (make-string (+ 4 indent) #\space) + "\"" + s + "\",\n")) + list) + "") + (make-string indent #\space) + "]")))) + + (define (format-dict-entry k v indent) + "formats a dictionary entry: key and value are string" + (string-append + (make-string indent #\space) + "\"" k "\": " v ",\n")) + + (define (format-interfaces h) + "formats the interfaces from ly:all-grob-interfaces as a Python dict" + (string-append + (fold (lambda (k p) + (string-append + p + (format-dict-entry + (symbol->string k) + (format-string-list + (sort + (map symbol->string + (filter user-property? + (list-ref (hashq-ref h k) 2))) + string<) + 4) + 4))) + "interfaces = {\n" + (sort-symbol-list (hash-keys h))) + "}\n")) + + (define (alist-keys alist) + "returns the list of keys of the specified alist" + (fold + (lambda (l p) + (append p (list (car l)))) + '() + alist)) + + (define (format-grob-interfaces) + "writes out all grob interfaces as a Python dict" + (string-append + (fold (lambda (k p) + (string-append + p + (format-dict-entry + (symbol->string k) + (format-string-list + (sort + (map symbol->string + (assq-ref + (assq-ref + (assq-ref all-grob-descriptions k) + 'meta) + 'interfaces)) + string<) + 4) + 4))) + "grobs = {\n" + (sort-symbol-list (alist-keys all-grob-descriptions))) + "}\n")) + + (define (format-context-properties) + "writes out the list of context (translation) properties" + (string-append + "contextproperties = " + (format-string-list + (sort + (map symbol->string all-user-translation-properties) + string<) + 0) + "\n")) + + (define (get-translator-names) + "returns the list of names of all engravers" + (map + (lambda (t) + (symbol->string + (ly:translator-name t))) + (ly:get-all-translators))) + + (define (format-translators) + "writes the list of engravers and performers" + (string-append + "engravers = " + (format-string-list + (sort (get-translator-names) string-ci l: + yield i + l = len(s) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/data/Makefile frescobaldi-2.0.0/frescobaldi_app/ly/data/Makefile --- frescobaldi-1.2.0/frescobaldi_app/ly/data/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/data/Makefile 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,8 @@ +# MakeFile + +# Which LilyPond executable to use +LILYPOND=~/lilypond_bin/2.14.1-1/bin/lilypond + +_data.py: getdata.ly + $(LILYPOND) -dno-print-pages $< > $@ + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/dom.py frescobaldi-2.0.0/frescobaldi_app/ly/dom.py --- frescobaldi-1.2.0/frescobaldi_app/ly/dom.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/dom.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,917 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +LilyPond DOM + +(c) 2008-2011 Wilbert Berendsen +License: GPL. + +A simple Document Object Model for LilyPond documents. + +The purpose is to easily build a LilyPond document with good syntax, +not to fully understand all features LilyPond supports. (This DOM does +not enforce a legal LilyPond file.) + +All elements of a LilyPond document inherit Node. + +Note: elements keep a weak reference to their parent. + +""" + +from __future__ import unicode_literals + +import fractions +import re + +import ly.pitch +import ly.duration + +from .node import Node + + +class LyNode(Node): + """ + Base class for LilyPond objects, based on Node, + which takes care of the tree structure. + """ + + ## + # True if this element is single LilyPond atom, word, note, etc. + # When it is the only element inside { }, the brackets can be removed. + isAtom = False + + ## + # The number of newlines this object wants before it. + before = 0 + + ## + # The number of newlines this object wants after it. + after = 0 + + def ly(self, printer): + """ + Returns printable output for this object. + Can ask printer for certain settings, e.g. pitch language etc. + """ + return '' + + def concat(self, other): + """ + Returns a string with newlines to concat this node to another one. + If zero newlines are requested, an empty string is returned. + """ + return '\n' * max(self.after, other.before) + + +## +# Leaf and Container are the two base classes the rest of the LilyPond +# element classes is based on. +# +class Leaf(LyNode): + """ A leaf node without children """ + pass + + +class Container(LyNode): + """ A node that concatenates its children on output """ + + ## + # default character to concatenate children with + defaultSpace = " " + + @property + def before(self): + if self.children(): + return self[0].before + else: + return 0 + + @property + def after(self): + if self.children(): + return self[-1].after + else: + return 0 + + def ly(self, printer): + if len(self) == 0: + return '' + else: + n = self[0] + res = [n.ly(printer)] + for m in self[1:]: + res.append(n.concat(m) or self.defaultSpace) + res.append(m.ly(printer)) + n = m + return "".join(res) + + +## +# Helper classes +# +class Printer(object): + """ + Performs certain operations on behalf of a LyNode tree, + like quoting strings or translating pitch names, etc. + """ + def __init__(self): + self.typographicalQuotes = True + self.language = "nederlands" + self.indentString = ' ' + + def quoteString(self, text): + if self.typographicalQuotes: + text = re.sub(r'"(.*?)"', '\u201C\\1\u201D', text) + text = re.sub(r"'(.*?)'", '\u2018\\1\u2019', text) + text = text.replace("'", '\u2018') + # escape regular double quotes + text = text.replace('"', '\\"') + # quote the string + return '"{0}"'.format(text) + + def indentGen(self, node, startIndent = 0): + """ + A generator that walks on the output of the given node, + and returns properly indented LilyPond code. + """ + d = startIndent + for t in node.ly(self).splitlines() + [''] * node.after: + if d and re.match(r'#?}|>|%}', t): + d -= 1 + yield self.indentString * d + t + if re.search(r'(\{|<|%{)$', t): + d += 1 + + def indent(self, node): + """ + Return a formatted printout of node (and its children) + """ + return '\n'.join(self.indentGen(node)) + + +class Reference(object): + """ + A simple object that keeps a name, to use as a (context) + identifier. Set the name attribute to the name you want + to display, and on all places in the document the name + will show up. + """ + def __init__(self, name=""): + self.name = name + + def __unicode__(self): + return self.name + + +class Named(object): + """ + Mixin to print a \\name before the contents of the container. + unicode() is called on the self.name attribute, so it may also + be a Reference. + """ + name = "" + + def ly(self, printer): + return "\\{0} {1}".format(unicode(self.name), super(Named, self).ly(printer)) + + +class HandleVars(object): + """ + A powerful mixin class that makes handling unique variable assignments + inside a Container more easy. + E.g.: + >>> h = Header() + >>> h['composer'] = "Johann Sebastian Bach" + creates a subnode (by default Assignment) with the name 'composer', and + that node again gets an autogenerated subnode of type QuotedString (If the + argument wasn't already a Node). + """ + childClass = None # To be filled in later + + def ifbasestring(func): + """ + Ensure that the method is only called for basestring objects. + Otherwise the same method from the super class is called. + """ + def newfunc(obj, name, *args): + if isinstance(name, basestring): + return func(obj, name, *args) + else: + f = getattr(super(HandleVars, obj), func.func_name) + return f(name, *args) + return newfunc + + @ifbasestring + def __getitem__(self, name): + for node in self.findChildren(self.childClass, 1): + if node.name == name: + return node + + @ifbasestring + def __setitem__(self, name, valueObj): + if not isinstance(valueObj, LyNode): + valueObj = self.importNode(valueObj) + assignment = self[name] + if assignment: + assignment.setValue(valueObj) + else: + self.childClass(name, self, valueObj) + + @ifbasestring + def __contains__(self, name): + return bool(self[name]) + + @ifbasestring + def __delitem__(self, name): + h = self[name] + if h: + self.remove(h) + + def importNode(self, obj): + """ + Try to interpret the object and transform it into a Node object + of the right species. + """ + return QuotedString(obj) + + +class AddDuration(object): + """ Mixin to add a duration (as child). """ + def ly(self, printer): + s = super(AddDuration, self).ly(printer) + dur = self.findChild(Duration, 1) + if dur: + s += dur.ly(printer) + return s + + +class Block(Container): + """ + A vertical container type that puts everything on a new line. + """ + defaultSpace = "\n" + before, after = 1, 1 + + +class Document(Container): + """ + A container type that puts everything on a new line. + To be used as a full LilyPond document. + """ + defaultSpace = "\n" + after = 1 + + +## +# These classes correspond to real LilyPond data. +# +class Text(Leaf): + """ A leaf node with arbitrary text """ + def __init__(self, text="", parent=None): + super(Text, self).__init__(parent) + if not isinstance(text, basestring): + text = unicode(text) + self.text = text + + def ly(self, printer): + return self.text + + +class TextDur(AddDuration, Text): + """ A text note with an optional duration as child. """ + pass + + +class Line(Text): + """ A text node that claims its own line. """ + before, after = 1, 1 + + +class Comment(Text): + """ A LilyPond comment at the end of a line """ + after = 1 + + def ly(self, printer): + return re.compile('^', re.M).sub('% ', self.text) + + +class LineComment(Comment): + """ A LilyPond comment that takes a full line """ + before = 1 + + +class BlockComment(Comment): + """ A block comment between %{ and %} """ + @property + def before(self): + return '\n' in self.text and 1 or 0 + + @property + def after(self): + return '\n' in self.text and 1 or 0 + + def ly(self, printer): + text = self.text.replace('%}', '') + f = "%{{\n{0}\n%}}" if '\n' in text else "%{{ {0} %}}" + return f.format(text) + + +class QuotedString(Text): + """ A string that is output inside double quotes. """ + isAtom = True + def ly(self, printer): + return printer.quoteString(self.text) + + +class Newline(LyNode): + """ A newline. """ + after = 1 + + +class BlankLine(Newline): + """ A blank line. """ + before = 1 + + +class Scheme(Text): + """ A Scheme expression, without the extra # prepended """ + isAtom = True + + def ly(self, printer): + return '#' + self.text + + +class Version(Line): + """ a LilyPond version instruction """ + def ly(self, printer): + return r'\version "{0}"'.format(self.text) + + +class Include(Line): + """ a LilyPond \\include statement """ + def ly(self, printer): + return r'\include "{0}"'.format(self.text) + + +class Assignment(Container): + """ + A varname = value construct with it's value as its first child + The name can be a string or a Reference object: so that everywhere + where this varname is referenced, the name is the same. + """ + before, after = 1, 1 + + def __init__(self, name=None, parent=None, valueObj=None): + super(Assignment, self).__init__(parent) + self.name = name + if valueObj: + self.append(valueObj) + + # Convenience methods: + def setValue(self, obj): + if len(self): + self[0] = obj + else: + self.append(obj) + + def value(self): + if len(self): + return self[0] + + def ly(self, printer): + return "{0} = {1}".format( + unicode(self.name), super(Assignment, self).ly(printer)) + + +HandleVars.childClass = Assignment + + +class Identifier(Leaf): + """ + An identifier, prints as \\name. + Name may be a string or a Reference object. + """ + isAtom = True + + def __init__(self, name=None, parent=None): + super(Identifier, self).__init__(parent) + self.name = name + + def ly(self, printer): + return "\\" + unicode(self.name) + + +class Statement(Named, Container): + """ + Base class for statements with arguments. The statement is read in the + name attribute, the arguments are the children. + """ + before = 0 # do not read property from container + isAtom = True + + +class Command(Statement): + """ + Use this to create a LilyPond command supplying the name (or a Reference) + when instantiating. + """ + def __init__(self, name, parent=None): + super(Command, self).__init__(parent) + self.name = name + + +class Enclosed(Container): + """ + Encloses all children between brackets: { ... } + If may_remove_brackets is True in subclasses, the brackets are + removed if there is only one child and that child is an atom (i.e. + a single LilyPond expression. + """ + may_remove_brackets = False + pre, post = "{", "}" + before, after = 0, 0 + isAtom = True + + def ly(self, printer): + if len(self) == 0: + return " ".join((self.pre, self.post)) + sup = super(Enclosed, self) + text = sup.ly(printer) + if self.may_remove_brackets and len(self) == 1 and self[0].isAtom: + return text + elif sup.before or sup.after or '\n' in text: + return "".join((self.pre, "\n" * max(sup.before, 1), text, + "\n" * max(sup.after, 1), self.post)) + else: + return " ".join((self.pre, text, self.post)) + + +class Seq(Enclosed): + """ An SequentialMusic expression between { } """ + pre, post = "{", "}" + + +class Sim(Enclosed): + """ An SimultaneousMusic expression between << >> """ + pre, post = "<<", ">>" + + +class Seqr(Seq): may_remove_brackets = True +class Simr(Sim): may_remove_brackets = True + + +class SchemeLily(Enclosed): + """ A LilyPond expression between #{ #} (inside scheme) """ + pre, post = "#{", "#}" + + +class SchemeList(Enclosed): + """ A list of items enclosed in parentheses """ + pre, post = "(", ")" + + def ly(self, printer): + return self.pre + super(Enclosed, self).ly(printer) + self.post + + +class StatementEnclosed(Named, Enclosed): + """ + Base class for LilyPond commands that have a single bracket-enclosed + list of arguments. + """ + may_remove_brackets = True + + +class CommandEnclosed(StatementEnclosed): + """ + Use this to print LilyPond commands that have a single + bracket-enclosed list of arguments. The command name is supplied to + the constructor. + """ + def __init__(self, name, parent=None): + super(CommandEnclosed, self).__init__(parent) + self.name = name + + +class Section(StatementEnclosed): + """ + Very much like a Statement. Use as base class for \\book { }, \\score { } + etc. By default never removes the brackets and always starts on a new line. + """ + may_remove_brackets = False + before, after = 1, 1 + + +class Book(Section): name = 'book' +class BookPart(Section): name = 'bookpart' +class Score(Section): name = 'score' +class Paper(HandleVars, Section): name = 'paper' +class Layout(HandleVars, Section): name = 'layout' +class Midi(HandleVars, Section): name = 'midi' +class Header(HandleVars, Section): name = 'header' + + +class With(HandleVars, Section): + """ If this item has no children, it prints nothing. """ + name = 'with' + before, after = 0, 0 + + def ly(self, printer): + if len(self): + return super(With, self).ly(printer) + else: + return '' + + +class ContextName(Text): + """ + Used to print a context name, like \\Score. + """ + def ly(self, printer): + return "\\" + self.text + + +class Context(HandleVars, Section): + """ + A \\context section for use inside Layout or Midi sections. + """ + name = 'context' + + def __init__(self, contextName="", parent=None): + super(Context, self).__init__(parent) + if contextName: + ContextName(contextName, self) + + +class ContextType(Container): + """ + \\new or \\context Staff = 'bla' \\with { } << music >> + + A \\with (With) element is added automatically as the first child as soon + as you use our convenience methods that manipulate the variables + in \\with. If the \\with element is empty, it does not print anything. + You should add one other music object to this. + """ + before, after = 1, 1 + isAtom = True + ctype = None + + def __init__(self, cid=None, new=True, parent=None): + super(ContextType, self).__init__(parent) + self.new = new + self.cid = cid + + def ly(self, printer): + res = [] + res.append(self.new and "\\new" or "\\context") + res.append(self.ctype or self.__class__.__name__) + if self.cid: + res.append("=") + res.append(printer.quoteString(unicode(self.cid))) + res.append(super(ContextType, self).ly(printer)) + return " ".join(res) + + def getWith(self): + """ + Gets the attached with clause. Creates it if not there. + """ + for node in self: + if isinstance(node, With): + return node + self.insert(0, With()) + return self[0] + + def addInstrumentNameEngraverIfNecessary(self): + """ + Adds the Instrument_name_engraver to the node if it would need it + to print instrument names. + """ + if not isinstance(self, + (Staff, RhythmicStaff, PianoStaff, Lyrics, FretBoards)): + Line('\\consists "Instrument_name_engraver"', self.getWith()) + + +class ChoirStaff(ContextType): pass +class ChordNames(ContextType): pass +class CueVoice(ContextType): pass +class Devnull(ContextType): pass +class DrumStaff(ContextType): pass +class DrumVoice(ContextType): pass +class Dynamics(ContextType): pass +class FiguredBass(ContextType): pass +class FretBoards(ContextType): pass +class Global(ContextType): pass +class GrandStaff(ContextType): pass +class GregorianTranscriptionStaff(ContextType): pass +class GregorianTranscriptionVoice(ContextType): pass +class InnerChoirStaff(ContextType): pass +class InnerStaffGroup(ContextType): pass +class Lyrics(ContextType): pass +class MensuralStaff(ContextType): pass +class MensuralVoice(ContextType): pass +class NoteNames(ContextType): pass +class PianoStaff(ContextType): pass +class RhythmicStaff(ContextType): pass +class ScoreContext(ContextType): + """ + Represents the Score context in LilyPond, but the name would + collide with the Score class that represents \\score { } constructs. + + Because the latter is used more often, use ScoreContext to get + \\new Score etc. + """ + ctype = 'Score' + +class Staff(ContextType): pass +class StaffGroup(ContextType): pass +class TabStaff(ContextType): pass +class TabVoice(ContextType): pass +class VaticanaStaff(ContextType): pass +class VaticanaVoice(ContextType): pass +class Voice(ContextType): pass + + +class UserContext(ContextType): + """ + Represents a context the user creates. + e.g. \\new MyStaff = cid << music >> + """ + def __init__(self, ctype, cid=None, new=True, parent=None): + super(UserContext, self).__init__(cid, new, parent) + self.ctype = ctype + + +class ContextProperty(Leaf): + """ + A Context.property or Context.layoutObject construct. + Call e.g. ContextProperty('aDueText', 'Staff') to get 'Staff.aDueText'. + """ + def __init__(self, prop, context=None, parent=None): + self.prop = prop + self.context = context + + def ly(self, printer): + if self.context: + # In \lyrics or \lyricmode: put spaces around dot. + p = self.findParent(InputMode) + if p and isinstance(p, LyricMode): + f = '{0} . {1}' + else: + f = '{0}.{1}' + return f.format(self.context, self.prop) + else: + return self.prop + + +class InputMode(StatementEnclosed): + """ + The abstract base class for input modes such as lyricmode/lyrics, + chordmode/chords etc. + """ + pass + + +class ChordMode(InputMode): name = 'chordmode' +class InputChords(ChordMode): name = 'chords' +class LyricMode(InputMode): name = 'lyricmode' +class InputLyrics(LyricMode): name = 'lyrics' +class NoteMode(InputMode): name = 'notemode' +class InputNotes(NoteMode): name = 'notes' +class FigureMode(InputMode): name = 'figuremode' +class InputFigures(FigureMode): name = 'figures' +class DrumMode(InputMode): name = 'drummode' +class InputDrums(DrumMode): name = 'drums' + + +class AddLyrics(InputLyrics): + name = 'addlyrics' + may_remove_brackets = False + before, after = 1, 1 + + +class LyricsTo(LyricMode): + name = 'lyricsto' + + def __init__(self, cid, parent=None): + super(LyricsTo, self).__init__(parent) + self.cid = cid + + def ly(self, printer): + res = ["\\" + self.name] + res.append(printer.quoteString(unicode(self.cid))) + res.append(super(Named, self).ly(printer)) + return " ".join(res) + + +class Pitch(Leaf): + """ + A pitch with octave, note, alter. + octave is specified by an integer, zero for the octave containing middle C. + note is a number from 0 to 6, with 0 corresponding to pitch C and 6 + corresponding to pitch B. + alter is the number of whole tones for alteration (can be int or Fraction) + """ + + def __init__(self, octave=0, note=0, alter=0, parent=None): + super(Pitch, self).__init__(parent) + self.octave = octave + self.note = note + self.alter = fractions.Fraction(alter) + + def ly(self, printer): + """ + Print the pitch in the preferred language. + """ + p = ly.pitch.pitchWriter(printer.language)(self.note, self.alter) + if self.octave < -1: + return p + ',' * (-self.octave - 1) + elif self.octave > -1: + return p + "'" * (self.octave + 1) + return p + + +class Duration(Leaf): + """ + A duration with duration (in logarithmical form): (-2 ... 8), + where -2 = \\longa, -1 = \\breve, 0 = 1, 1 = 2, 2 = 4, 3 = 8, 4 = 16, etc, + dots (number of dots), + factor (Fraction giving the scaling of the duration). + """ + def __init__(self, dur, dots=0, factor=1, parent=None): + super(Duration, self).__init__(parent) + self.dur = dur # log + self.dots = dots + self.factor = fractions.Fraction(factor) + + def ly(self, printer): + return ly.duration.duration(self.dur, self.dots, self.factor) + + +class Chord(Container): + """ + A chord containing one of more Pitches and optionally one Duration. + This is a bit of a hack, awaiting real music object support. + """ + def ly(self, printer): + pitches = list(self.findChildren(Pitch, 1)) + if len(pitches) == 1: + s = pitches[0].ly(printer) + else: + s = "<{0}>".format(' '.join(p.ly(printer) for p in pitches)) + duration = self.findChild(Duration, 1) + if duration: + s += duration.ly(printer) + return s + + +class Relative(Statement): + """ + \\relative music + + You should add a Pitch (optionally) and another music object, + e.g. Sim or Seq, etc. + """ + name = 'relative' + + +class Transposition(Statement): + """ + \\transposition + You should add a Pitch. + """ + name = 'transposition' + + +class KeySignature(Leaf): + """ + A key signature expression, like: + + \\key c \\major + The pitch should be given in the arguments note and alter and is written + out in the document's language. + """ + def __init__(self, note=0, alter=0, mode="major", parent=None): + super(KeySignature, self).__init__(parent) + self.note = note + self.alter = fractions.Fraction(alter) + self.mode = mode + + def ly(self, printer): + pitch = ly.pitch.pitchWriter(printer.language)(self.note, self.alter) + return "\\key {0} \\{1}".format(pitch, self.mode) + + +class TimeSignature(Leaf): + """ + A time signature, like: \\time 4/4 + """ + def __init__(self, num, beat, parent=None): + super(TimeSignature, self).__init__(parent) + self.num = num + self.beat = beat + + def ly(self, printer): + return "\\time {0}/{1}".format(self.num, self.beat) + + +class Partial(Named, Duration): + """ + \\partial + You should add a Duration element + """ + name = "partial" + before, after = 1, 1 + + +class Tempo(Container): + """ + A tempo setting, like: \\tempo 4 = 100 + May have a child markup or quoted string. + """ + def __init__(self, duration, value, parent=None): + super(Tempo, self).__init__(parent) + self.duration = duration + self.value = value + + def ly(self, printer): + result = ['\\tempo'] + if len(self) > 0: + result.append(super(Tempo, self).ly(printer)) + if self.value: + result.append("{0}={1}".format(self.duration, self.value)) + return ' '.join(result) + + +class Clef(Leaf): + """ + A clef. + """ + def __init__(self, clef, parent=None): + super(Clef, self).__init__(parent) + self.clef = clef + + def ly(self, printer): + clef = self.clef if self.clef.isalpha() else '"{0}"'.format(self.clef) + return "\\clef " + clef + + +class VoiceSeparator(Leaf): + """ + A Voice Separator: \\\\ + """ + def ly(self, printer): + return r'\\' + + +class Mark(Statement): + """ + The \\mark command. + """ + name = 'mark' + + +class Markup(StatementEnclosed): + """ + The \\markup command. + You can add many children, in that case Markup automatically prints + { and } around them. + """ + name = 'markup' + + +class MarkupEnclosed(CommandEnclosed): + """ + A markup that auto-encloses all its arguments, like 'italic', 'bold' + etc. You must supply the name. + """ + pass + + +class MarkupCommand(Command): + """ + A markup command with more or no arguments, that does not auto-enclose + its arguments. Useful for commands like note-by-number or hspace. + + You must supply the name. Its arguments are its children. + If one argument can be a markup list, use a Enclosed() construct for that. + """ + pass + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/duration.py frescobaldi-2.0.0/frescobaldi_app/ly/duration.py --- frescobaldi-1.2.0/frescobaldi_app/ly/duration.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/duration.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,48 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +LilyPond information and logic concerning durations +""" + +from __future__ import unicode_literals + + +durations = [ + '\\maxima', '\\longa', '\\breve', + '1', '2', '4', '8', '16', '32', '64', '128', '256', '512', '1024', '2048' +] + + +def duration(dur, dots=0, factor=1): + """Returns the LilyPond string representation of a given logarithmic duration. + + Supports values from -3 upto and including 11. + -2 = '\\longa', 0 = '1' (whole note), etc. + + Adds the number of dots (defaults to 0) and the fraction factor if given. + + """ + s = durations[dur + 3] + '.' * dots + if factor != 1: + s += '*{0}'.format(factor) + return s + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/info.py frescobaldi-2.0.0/frescobaldi_app/ly/info.py --- frescobaldi-1.2.0/frescobaldi_app/ly/info.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/info.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,126 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Information about LilyPond instances. +""" + +from __future__ import unicode_literals + +import re +import os +import subprocess + +from . import util + + +class LilyPondInfo(object): + """Encapsulates information about a runnable LilyPond instance. + + You should instantiate a LilyPondInfo object with the command + you would give when running LilyPond, either 'lilypond' or a full path. + + If no full path is given, the executable is searched for in the system's PATH. + + """ + def __init__(self, command): + """The path should point to an existing, executable LilyPond instance.""" + self._command = command + + @property + def command(self): + """Returns the command given at instantiation.""" + return self._command + + @util.cachedproperty + def abscommand(self): + """Returns the full absolute path of our LilyPond command. + + May return None if LilyPond is not found. + + """ + return util.findexe(self._command) + + @util.cachedproperty + def versionString(self): + """Returns the version of this LilyPond instance as a string.""" + if self.abscommand: + try: + output = subprocess.Popen( + (self.abscommand, '-v'), + stdin = subprocess.PIPE if os.name == "nt" else None, + stdout = subprocess.PIPE, stderr = subprocess.STDOUT).communicate()[0] + except OSError: + pass + else: + m = re.search(r"\d+\.\d+(.\d+)?", output) + if m: + return m.group() + return "" + + @property + def version(self): + """Returns the version as a tuple of ints.""" + if self.versionString: + return tuple(map(int, self.versionString.split('.'))) + + @property + def bindir(self): + """Returns the directory the LilyPond command is in.""" + if self.abscommand: + return os.path.dirname(self.abscommand) + + @property + def prefix(self): + """Returns the prefix LilyPond was installed to.""" + if self.bindir: + return os.path.dirname(self.bindir) + + @util.cachedproperty + def datadir(self): + """Returns the datadir of this LilyPond instance. + + Most times this is something like "/usr/share/lilypond/2.13.3/" + If this method returns None, the datadir could not be determined. + + """ + if self.abscommand: + # First ask LilyPond itself. + try: + args = dict(stdout = subprocess.PIPE) + if os.name == "nt": + args.update(stdin = subprocess.PIPE, stderr = subprocess.PIPE) + d = subprocess.Popen((self.abscommand, '-e', + "(display (ly:get-option 'datadir)) (newline) (exit)"), + **args).communicate()[0].strip() + if os.path.isabs(d) and os.path.isdir(d): + return d + except OSError: + pass + # Then find out via the prefix. + version, prefix = self.versionString, self.prefix + if prefix: + dirs = ['current'] + if version: + dirs.append(version) + for suffix in dirs: + d = os.path.join(prefix, 'share', 'lilypond', suffix) + if os.path.isdir(d): + return d + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/__init__.py frescobaldi-2.0.0/frescobaldi_app/ly/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/ly/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,27 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A package of modules dealing with LilyPond and the LilyPond format. + +This package does not depend on PyQt4. +Some modules however expect the _ (underscore) builtin to translate strings. + +""" + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/lex/docbook.py frescobaldi-2.0.0/frescobaldi_app/ly/lex/docbook.py --- frescobaldi-1.2.0/frescobaldi_app/ly/lex/docbook.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/lex/docbook.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,35 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Parses and tokenizes DocBook input, recognizing LilyPond in DocBook. +""" + +from __future__ import unicode_literals + +from . import _token +from . import Parser + + +class ParseDocBook(Parser): + mode = "docbook" + items = ( + _token.Space, + ) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/lex/html.py frescobaldi-2.0.0/frescobaldi_app/ly/lex/html.py --- frescobaldi-1.2.0/frescobaldi_app/ly/lex/html.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/lex/html.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,240 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Parses and tokenizes HTML input, recognizing LilyPond in HTML. +""" + +from __future__ import unicode_literals + +from . import _token +from . import Parser, FallthroughParser + +import lilypond + + +class Comment(_token.Comment): + pass + + +class CommentStart(Comment, _token.BlockCommentStart): + rx = r"" + + +class String(_token.String): + pass + + +class Tag(_token.Token): + pass + + +class TagStart(Tag): + rx = r"" + + +class AttrName(_token.Token): + rx = r"\w+([-_:]\w+)?" + + +class EqualSign(_token.Token): + rx = "=" + def updateState(self, state): + state.enter(ParseValue()) + + +class Value(_token.Leaver): + rx = r"\w+" + + +class StringDQStart(String, _token.StringStart): + rx = r'"' + def updateState(self, state): + state.enter(ParseStringDQ()) + + +class StringSQStart(String, _token.StringStart): + rx = r"'" + def updateState(self, state): + state.enter(ParseStringSQ()) + + +class StringDQEnd(String, _token.StringEnd, _token.Leaver): + rx = r'"' + + +class StringSQEnd(String, _token.StringEnd, _token.Leaver): + rx = r"'" + + +class EntityRef(_token.Character): + rx = r"\&(#\d+|#[xX][0-9A-Fa-f]+|[A-Za-z_:][\w.:_-]*);" + + +class LilyPondTag(Tag): + pass + + +class LilyPondVersionTag(LilyPondTag): + rx = r"" + + +class LilyPondFileTag(LilyPondTag): + rx = r"" + + +class LilyPondInlineTag(LilyPondTag): + rx = r"" + + +class LilyPondTagEnd(LilyPondTag): + rx = r">" + def updateState(self, state): + state.replace(ParseLilyPond()) + + +class LilyPondInlineTagEnd(LilyPondTag, _token.Leaver): + rx = r"/?>" + + +class SemiColon(_token.Token): + rx = r":" + def updateState(self, state): + state.replace(ParseLilyPondInline()) + + + +# Parsers: + +class ParseHTML(Parser): + mode = "html" + items = ( + _token.Space, + LilyPondVersionTag, + LilyPondFileTag, + LilyPondInlineTag, + CommentStart, + TagStart, + EntityRef, + ) + + +class ParseAttr(Parser): + items = ( + _token.Space, + TagEnd, + AttrName, + EqualSign, + StringDQStart, + StringSQStart, + ) + + +class ParseStringDQ(Parser): + default = String + items = ( + StringDQEnd, + EntityRef, + ) + + +class ParseStringSQ(Parser): + default = String + items = ( + StringSQEnd, + EntityRef, + ) + + +class ParseComment(Parser): + default = Comment + items = ( + CommentEnd, + ) + + +class ParseValue(FallthroughParser): + """Finds a value or drops back.""" + items = ( + _token.Space, + Value, + ) + def fallthrough(self, state): + state.leave() + + +class ParseLilyPondAttr(Parser): + items = ( + _token.Space, + AttrName, + EqualSign, + StringDQStart, + StringSQStart, + LilyPondTagEnd, + SemiColon, + ) + + +class ParseLilyPondFileOptions(Parser): + items = ( + _token.Space, + AttrName, + EqualSign, + StringDQStart, + StringSQStart, + LilyPondFileTagEnd, + ) + + +class ParseLilyPond(lilypond.ParseGlobal): + items = ( + LilyPondCloseTag, + ) + lilypond.ParseGlobal.items + + +class ParseLilyPondInline(lilypond.ParseMusic): + items = ( + LilyPondInlineTagEnd, + ) + lilypond.ParseMusic.items + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/lex/__init__.py frescobaldi-2.0.0/frescobaldi_app/ly/lex/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/ly/lex/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/lex/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,170 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +r""" +This module is built on top of slexer and can parse LilyPond input and other +formats. + +The base functionality is delegated to modules with an underscore in this package. +The modules describing parsing modes (filetypes) are the files without underscore. + +Currently available are modes for lilypond, latex, html, texinfo, scheme, and docbook. + +The 'underscored' modules should not be imported in application code. What is +needed from them is available here, in the ly.lex namespace. + +If you add new files for parsing other file types, you should add them in _mode.py. +The _token.py module contains base Token types and Token mixin classes. + +The State, Parser, FallthroughParser and Fridge classes from slexer are all +slightly extended here, + +Usage: + +>>> import ly.lex +>>> txt = r"\relative c' { c d e f-^ g }" +>>> s = ly.lex.state("lilypond") +>>> for t in s.tokens(txt): +... print t, t.__class__.__name__ + +\relative Command + Space +c Name +' Unparsed + Space +{ SequentialStart + Space +c Note + Space +d Note + Space +e Note + Space +f Note +- Direction +^ ScriptAbbreviation + Space +g Note + Space +} SequentialEnd + +A State() is used to parse text. The text is given to the tokens() method, that +returns an iterator iterating over Token instances as they are found. Each token +has a 'pos' and an 'end' attribute describing its position in the original +string. + +While iterating over the tokens(), the State maintains information about what +kind of text is parsed. (So don't iterate over more than one call to tokens() of +the same State object at the same time.) + +Use ly.lex.state("name") to get a state for a specific mode to start parsing with. +If you don't know the type of text, you can use ly.lex.guessState(text), where +text is the text you want to parse. A quick heuristic is then used to determine +the type of the text. + +See for more information the documentation of the slexer module. + +""" + +from __future__ import unicode_literals + +import slexer +from ._token import * +from ._mode import extensions, modes, guessMode + + +__all__ = [ + 'State', + 'Parser', 'FallthroughParser', + 'Fridge', + 'extensions', 'modes', 'guessMode', + 'state', 'guessState', + 'Token', + 'Unparsed', + 'Space', + 'Newline', + 'Comment', + 'LineComment', + 'BlockComment', + 'BlockCommentStart', + 'BlockCommentEnd', + 'String', + 'StringStart', + 'StringEnd', + 'Character', + 'Numeric', + 'Error', + 'MatchStart', + 'MatchEnd', + 'Indent', + 'Dedent', +] + + +class Parser(slexer.Parser): + argcount = 0 + default = Unparsed + mode = None + + def __init__(self, argcount = None): + if argcount is not None: + self.argcount = argcount + + def freeze(self): + return (self.argcount,) + + +class FallthroughParser(Parser, slexer.FallthroughParser): + pass + + +class State(slexer.State): + def endArgument(self): + """Decrease argcount and leave the parser if it would reach 0.""" + while self.depth() > 1: + p = self.parser() + if p.argcount == 1: + self.leave() + else: + if p.argcount > 0: + p.argcount -= 1 + return + + def mode(self): + """Returns the mode attribute of the first parser (from current parser) that has it.""" + for parser in self.state[::-1]: + if parser.mode: + return parser.mode + + +class Fridge(slexer.Fridge): + def __init__(self, stateClass = State): + super(Fridge, self).__init__(stateClass) + + +def state(mode): + """Returns a State instance for the given mode.""" + return State(modes[mode]()) + + +def guessState(text): + """Returns a State instance, guessing the type of text.""" + return State(modes[guessMode(text)]()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/lex/latex.py frescobaldi-2.0.0/frescobaldi_app/ly/lex/latex.py --- frescobaldi-1.2.0/frescobaldi_app/ly/lex/latex.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/lex/latex.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,36 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Parses and tokenizes LaTeX input, recognizing LilyPond in LaTeX. +""" + +from __future__ import unicode_literals + +from . import _token +from . import Parser + + +class ParseLaTeX(Parser): + mode = "latex" + items = ( + _token.Space, + ) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/lex/lilypond.py frescobaldi-2.0.0/frescobaldi_app/ly/lex/lilypond.py --- frescobaldi-1.2.0/frescobaldi_app/ly/lex/lilypond.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/lex/lilypond.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,1214 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Parses and tokenizes LilyPond input. +""" + +from __future__ import unicode_literals + +import itertools + +from . import _token +from . import Parser, FallthroughParser + + +re_articulation = r"[-_^][_.>|+^-]" +re_dynamic = ( + r"\\[]|" + r"\\(f{1,5}|p{1,5}" + r"|mf|mp|fp|spp?|sff?|sfz|rfz" + r"|cresc|decresc|dim|cr|decr" + r")(?![A-Za-z])") + +re_duration = r"(\\(maxima|longa|breve)\b|(1|2|4|8|16|32|64|128|256|512|1024|2048)(?!\d))" +re_dot = r"\." +re_scaling = r"\*[\t ]*\d+(/\d+)?" + + +class Variable(_token.Token): + pass + + +class UserVariable(_token.Token): + pass + + +class Value(_token.Item, _token.Numeric): + pass + + +class DecimalValue(Value): + rx = r"-?\d+(\.\d+)?" + + +class Fraction(Value): + rx = r"\d+/\d+" + + +class Error(_token.Error): + pass + + +class Comment(_token.Comment): + pass + + +class BlockCommentStart(Comment, _token.BlockCommentStart, _token.Indent): + rx = r"%{" + def updateState(self, state): + state.enter(ParseBlockComment()) + + +class BlockCommentEnd(Comment, _token.BlockCommentEnd, _token.Leaver, _token.Dedent): + rx = r"%}" + + +class BlockCommentSpace(Comment, _token.BlockComment, _token.Space): + pass + + +class LineComment(Comment, _token.LineComment): + rx = r"%.*$" + + +class String(_token.String): + pass + + +class StringQuotedStart(String, _token.StringStart): + rx = r'"' + def updateState(self, state): + state.enter(ParseString()) + + +class StringQuotedEnd(String, _token.StringEnd): + rx = r'"' + def updateState(self, state): + state.leave() + state.endArgument() + + +class StringQuoteEscape(_token.Character): + rx = r'\\[\\"]' + + +class Skip(_token.Token): + rx = r"s(?![A-Za-z])" + + +class Rest(_token.Token): + rx = r"[Rr](?![A-Za-z])" + + +class Note(_token.Token): + rx = r"[a-x]+(?![A-Za-z])" + + +class Octave(_token.Token): + rx = r",+|'+" + + +class OctaveCheck(_token.Token): + rx = r"=(,+|'+)?" + + +class Accidental(_token.Token): + pass + + +class AccidentalReminder(Accidental): + rx = r"!" + + +class AccidentalCautionary(Accidental): + rx = r"\?" + + +class Duration(_token.Token): + pass + + +class Length(Duration): + rx = re_duration + def updateState(self, state): + state.enter(ParseDuration()) + + +class Dot(Duration): + rx = re_dot + + +class Scaling(Duration): + rx = re_scaling + + +class Delimiter(_token.Token): + pass + + +class OpenBracket(Delimiter, _token.MatchStart, _token.Indent): + """An open bracket, does not enter different parser, subclass or reimplement Parser.updateState().""" + rx = r"\{" + matchname = "bracket" + + +class CloseBracket(Delimiter, _token.MatchEnd, _token.Dedent): + rx = r"\}" + matchname = "bracket" + def updateState(self, state): + state.leave() + state.endArgument() + + +class OpenSimultaneous(Delimiter, _token.MatchStart, _token.Indent): + """An open double French quote, does not enter different parser, subclass or reimplement Parser.updateState().""" + rx = r"<<" + matchname = "simultaneous" + + +class CloseSimultaneous(Delimiter, _token.MatchEnd, _token.Dedent): + rx = r">>" + matchname = "simultaneous" + def updateState(self, state): + state.leave() + state.endArgument() + + +class SequentialStart(OpenBracket): + def updateState(self, state): + state.enter(ParseMusic()) + + +class SequentialEnd(CloseBracket): + pass + + +class SimultaneousStart(OpenSimultaneous): + def updateState(self, state): + state.enter(ParseMusic()) + + +class SimultaneousEnd(CloseSimultaneous): + pass + + +class PipeSymbol(Delimiter): + rx = r"\|" + + +class IntegerValue(Value): + rx = r"\d+" + + +class Articulation(_token.Token): + @_token.patternproperty + def rx(): + from .. import words + return r"\\({0})(?![A-Za-z])".format("|".join(itertools.chain( + words.articulations, + words.ornaments, + words.fermatas, + words.instrument_scripts, + words.repeat_scripts, + words.ancient_scripts, + ))) + + +class Direction(Articulation): + rx = r"[-_^]" + def updateState(self, state): + state.enter(ParseScriptAbbreviationOrFingering()) + + +class ScriptAbbreviation(Articulation, _token.Leaver): + rx = r"[+|>._^-]" + + +class Fingering(Articulation, _token.Leaver): + rx = r"\d" + + +class StringNumber(Articulation): + rx = r"\\\d+" + + +class Slur(_token.Token): + pass + + +class SlurStart(Slur, _token.MatchStart): + rx = r"\(" + matchname = "slur" + + +class SlurEnd(Slur, _token.MatchEnd): + rx = r"\)" + matchname = "slur" + + +class PhrasingSlurStart(SlurStart): + rx = r"\\\(" + matchname = "phrasingslur" + + +class PhrasingSlurEnd(SlurEnd): + rx = r"\\\)" + matchname = "phrasingslur" + + +class Tie(Slur): + rx = r"~" + + +class Beam(_token.Token): + pass + + +class BeamStart(Beam, _token.MatchStart): + rx = r"\[" + matchname = "beam" + + +class BeamEnd(Beam, _token.MatchEnd): + rx = r"\]" + matchname = "beam" + + +class Ligature(_token.Token): + pass + + +class LigatureStart(Ligature, _token.MatchStart): + rx = r"\\\[" + matchname = "ligature" + + +class LigatureEnd(Ligature, _token.MatchEnd): + rx = r"\\\]" + matchname = "ligature" + + +class Keyword(_token.Item): + @_token.patternproperty + def rx(): + from .. import words + return r"\\({0})(?![A-Za-z])".format("|".join(words.lilypond_keywords)) + + +class VoiceSeparator(Delimiter): + rx = r"\\\\" + + +class Dynamic(_token.Token): + rx = re_dynamic + + +class Command(_token.Item): + @_token.patternproperty + def rx(): + from .. import words + return r"\\({0})(?![A-Za-z])".format("|".join(words.lilypond_music_commands)) + + +class Specifier(_token.Token): + # a specifier of a command e.g. the name of clef or repeat style. + pass + + +class Score(Keyword): + rx = r"\\score\b" + def updateState(self, state): + state.enter(ExpectScore()) + + +class Book(Keyword): + rx = r"\\book\b" + def updateState(self, state): + state.enter(ExpectBook()) + + +class BookPart(Keyword): + rx = r"\\bookpart\b" + def updateState(self, state): + state.enter(ExpectBookPart()) + + +class Paper(Keyword): + rx = r"\\paper\b" + def updateState(self, state): + state.enter(ExpectPaper()) + + +class Header(Keyword): + rx = r"\\header\b" + def updateState(self, state): + state.enter(ExpectHeader()) + + +class Layout(Keyword): + rx = r"\\layout\b" + def updateState(self, state): + state.enter(ExpectLayout()) + + +class Midi(Keyword): + rx = r"\\midi\b" + def updateState(self, state): + state.enter(ExpectMidi()) + + +class With(Keyword): + rx = r"\\with\b" + def updateState(self, state): + state.enter(ExpectWith()) + + +class LayoutContext(Keyword): + rx = r"\\context\b" + def updateState(self, state): + state.enter(ExpectContext()) + + +class Markup(Command): + rx = r"\\markup(?![A-Za-z])" + def updateState(self, state): + state.enter(ParseMarkup(1)) + + +class MarkupLines(Markup): + rx = r"\\markuplines(?![A-Za-z])" + def updateState(self, state): + state.enter(ParseMarkup(1)) + + +class MarkupList(Markup): + rx = r"\\markuplist(?![A-Za-z])" + def updateState(self, state): + state.enter(ParseMarkup(1)) + + +class MarkupCommand(Markup): + rx = r"\\[A-Za-z]+(-[A-Za-z]+)*(?![A-Za-z])" + def updateState(self, state): + import ly.words + command = self[1:] + if command in ly.words.markupcommands_nargs[0]: + state.endArgument() + else: + for argcount in 2, 3, 4, 5: + if command in ly.words.markupcommands_nargs[argcount]: + break + else: + argcount = 1 + state.enter(ParseMarkup(argcount)) + + +class MarkupScore(Markup): + rx = r"\\score\b" + def updateState(self, state): + state.enter(ExpectScore()) + + +class MarkupWord(_token.Item): + rx = r'[^{}"\\\s#%]+' + + +class OpenBracketMarkup(OpenBracket): + def updateState(self, state): + state.enter(ParseMarkup()) + + +class CloseBracketMarkup(CloseBracket): + def updateState(self, state): + state.endArgument() + state.leave() + state.endArgument() + + +class Repeat(Command): + rx = r"\\repeat(?![A-Za-z])" + def updateState(self, state): + state.enter(ParseRepeat()) + + +class RepeatSpecifier(Specifier): + @_token.patternproperty + def rx(): + from .. import words + return r"\b({0})(?![A-Za-z])".format("|".join(words.repeat_types)) + + +class RepeatStringSpecifier(String, Specifier): + @_token.patternproperty + def rx(): + from .. import words + return r'"({0})"'.format("|".join(words.repeat_types)) + + +class RepeatCount(IntegerValue, _token.Leaver): + pass + + +class Override(Keyword): + rx = r"\\override\b" + def updateState(self, state): + state.enter(ParseOverride()) + + +class Set(Override): + rx = r"\\set\b" + def updateState(self, state): + state.enter(ParseSet()) + + +class Revert(Override): + rx = r"\\revert\b" + def updateState(self, state): + state.enter(ParseRevert()) + + +class DotSetOverride(Delimiter): + rx = r"\." + + +class Unset(Keyword): + rx = r"\\unset\b" + def updateState(self, state): + state.enter(ParseUnset()) + + +class New(Command): + rx = r"\\new\b" + def updateState(self, state): + state.enter(ParseNewContext()) + + +class Context(New): + rx = r"\\context\b" + + +class Change(New): + rx = r"\\change\b" + + +class Clef(Command): + rx = r"\\clef\b" + def updateState(self, state): + state.enter(ParseClef()) + + +class ClefSpecifier(Specifier): + @_token.patternproperty + def rx(): + from .. import words + return r"\b({0})\b".format("|".join(words.clefs_plain)) + + def updateState(self, state): + state.leave() + + +class PitchCommand(Command): + rx = r"\\(relative|transpose|transposition|key|octaveCheck)\b" + def updateState(self, state): + argcount = 2 if self == '\\transpose' else 1 + state.enter(ParsePitchCommand(argcount)) + + +class Unit(Command): + rx = r"\\(mm|cm|in|pt)\b" + + +class InputMode(Command): + pass + + +class LyricMode(InputMode): + rx = r"\\(lyricmode|((old)?add)?lyrics|lyricsto)\b" + def updateState(self, state): + state.enter(ExpectLyricMode()) + + +class Lyric(_token.Item): + """Base class for Lyric items.""" + + +class LyricText(Lyric): + rx = r"[^\\\s\d~\"]+" + + +class LyricHyphen(Lyric): + rx = r"--" + + +class LyricExtender(Lyric): + rx = r"__" + + +class LyricSkip(Lyric): + rx = r"_" + + +class LyricTie(Lyric): + rx = r"~" + + +class NoteMode(InputMode): + rx = r"\\(notes|notemode)\b" + def updateState(self, state): + state.enter(ExpectNoteMode()) + + +class ChordMode(InputMode): + rx = r"\\(chords|chordmode)\b" + def updateState(self, state): + state.enter(ExpectChordMode()) + + +class DrumMode(InputMode): + rx = r"\\(drums|drummode)\b" + def updateState(self, state): + state.enter(ExpectDrumMode()) + + +class FigureMode(InputMode): + rx = r"\\(figures|figuremode)\b" + def updateState(self, state): + state.enter(ExpectFigureMode()) + + +class UserCommand(_token.Token): + rx = r"\\[A-Za-z]+(?![A-Za-z])" + + +class SchemeStart(_token.Item): + rx = "[#$]" + def updateState(self, state): + import scheme + state.enter(scheme.ParseScheme(1)) + + +class ContextName(_token.Token): + @_token.patternproperty + def rx(): + from .. import words + return r"\b({0})\b".format("|".join(words.contexts)) + + +class BackSlashedContextName(ContextName): + @_token.patternproperty + def rx(): + from .. import words + return r"\\({0})\b".format("|".join(words.contexts)) + + +class GrobName(_token.Token): + @_token.patternproperty + def rx(): + from .. import data + return r"\b({0})\b".format("|".join(data.grobs())) + + +class ContextProperty(_token.Token): + @_token.patternproperty + def rx(): + from .. import data + return r"\b({0})\b".format("|".join(data.context_properties())) + + +class PaperVariable(Variable): + @_token.patternproperty + def rx(): + from .. import words + return r"\b({0})\b".format("|".join(words.papervariables)) + + +class HeaderVariable(Variable): + @_token.patternproperty + def rx(): + from .. import words + return r"\b({0})\b".format("|".join(words.headervariables)) + + +class LayoutVariable(Variable): + @_token.patternproperty + def rx(): + from .. import words + return r"\b({0})\b".format("|".join(words.layoutvariables)) + + +class Chord(_token.Token): + """Base class for Chord delimiters.""" + pass + + +class ChordStart(Chord): + rx = r"<" + def updateState(self, state): + state.enter(ParseChord()) + + +class ChordEnd(Chord, _token.Leaver): + rx = r">" + + +class ErrorInChord(Error): + rx = "|".join(( + re_articulation, # articulation + r"<<|>>", # double french quotes + r"\\[\\\]\[\(\)()]", # slurs beams + re_duration, # duration + re_scaling, # scaling + )) + + +class Name(UserVariable): + """A variable name without \\ prefix.""" + rx = r"[a-zA-Z]+(?![a-zA-Z])" + + +class NameLower(Name): + """A lowercase name.""" + rx = r"[a-z]+(?![a-zA-Z])" + + +class NameHyphenLower(Name): + """A lowercase name that may contain hyphens.""" + rx = r"[a-z]+(-[a-z]+)*(!?[-a-zA-Z])" + + +class EqualSign(_token.Token): + rx = r"=" + + +class EqualSignSetOverride(EqualSign): + """An equal sign in a set/override construct.""" + def updateState(self, state): + # wait for one more expression, then leave + state.parser().argcount = 1 + + + +# Parsers +class ParseLilyPond(Parser): + mode = 'lilypond' + +# basic stuff that can appear everywhere +space_items = ( + _token.Space, + BlockCommentStart, + LineComment, +) + + +base_items = space_items + ( + SchemeStart, + StringQuotedStart, +) + + +# items that represent commands in both toplevel and music mode +command_items = ( + Repeat, + PitchCommand, + Override, Revert, + Set, Unset, + New, Context, Change, + With, + Clef, + ChordMode, DrumMode, FigureMode, LyricMode, NoteMode, + Markup, MarkupLines, MarkupList, + Keyword, + Command, + UserCommand, +) + + +# items that occur in toplevel, book, bookpart or score +# no Leave-tokens! +toplevel_base_items = base_items + ( + Fraction, + SequentialStart, + SimultaneousStart, +) + command_items + + +# items that occur in music expressions +music_items = base_items + ( + Dynamic, + Skip, + Rest, + Note, + Fraction, + Length, + Octave, + OctaveCheck, + AccidentalCautionary, + AccidentalReminder, + PipeSymbol, + VoiceSeparator, + SequentialStart, SequentialEnd, + SimultaneousStart, SimultaneousEnd, + ChordStart, + ContextName, + GrobName, + SlurStart, SlurEnd, + PhrasingSlurStart, PhrasingSlurEnd, + Tie, + BeamStart, BeamEnd, + LigatureStart, LigatureEnd, + Direction, + Articulation, + IntegerValue, +) + command_items + + +# items that occur inside chords +music_chord_items = ( + ErrorInChord, + ChordEnd, + StringNumber, +) + music_items + + + +class ParseGlobal(ParseLilyPond): + """Parses LilyPond from the toplevel of a file.""" + # TODO: implement assignments + items = ( + Book, + BookPart, + Score, + Markup, MarkupLines, MarkupList, + Paper, Header, Layout, + ) + toplevel_base_items + ( + Name, + EqualSign, + ) + + +class ExpectOpenBracket(ParseLilyPond): + """Waits for an OpenBracket and then replaces the parser with the class set in the replace attribute. + + Subclass this to set the destination for the OpenBracket. + + """ + default = Error + items = space_items + ( + OpenBracket, + ) + def updateState(self, state, token): + if isinstance(token, OpenBracket): + state.replace(self.replace()) + + +class ExpectOpenBrackedOrSimultaneous(ParseLilyPond): + """Waits for an OpenBracket or << and then replaces the parser with the class set in the replace attribute. + + Subclass this to set the destination for the OpenBracket. + + """ + default = Error + items = space_items + ( + OpenBracket, + OpenSimultaneous, + ) + def updateState(self, state, token): + if isinstance(token, (OpenBracket, OpenSimultaneous)): + state.replace(self.replace()) + + +class ParseScore(ParseLilyPond): + """Parses the expression after \score {, leaving at } """ + items = ( + CloseBracket, + Header, Layout, Midi, With, + ) + toplevel_base_items + + +class ExpectScore(ExpectOpenBracket): + replace = ParseScore + + +class ParseBook(ParseLilyPond): + """Parses the expression after \book {, leaving at } """ + items = ( + CloseBracket, + Markup, MarkupLines, MarkupList, + BookPart, + Score, + Paper, Header, Layout, + ) + toplevel_base_items + + + +class ExpectBook(ExpectOpenBracket): + replace = ParseBook + + +class ParseBookPart(ParseLilyPond): + """Parses the expression after \score {, leaving at } """ + items = ( + CloseBracket, + Markup, MarkupLines, MarkupList, + Score, + Paper, Header, Layout, + ) + toplevel_base_items + + +class ExpectBookPart(ExpectOpenBracket): + replace = ParseBookPart + + +class ParsePaper(ParseLilyPond): + """Parses the expression after \score {, leaving at } """ + items = base_items + ( + CloseBracket, + Markup, MarkupLines, MarkupList, + PaperVariable, + EqualSign, + DecimalValue, + Unit, + ) + + +class ExpectPaper(ExpectOpenBracket): + replace = ParsePaper + + +class ParseHeader(ParseLilyPond): + """Parses the expression after \score {, leaving at } """ + items = ( + CloseBracket, + Markup, MarkupLines, MarkupList, + HeaderVariable, + EqualSign, + ) + toplevel_base_items + + +class ExpectHeader(ExpectOpenBracket): + replace = ParseHeader + + +class ParseLayout(ParseLilyPond): + """Parses the expression after \score {, leaving at } """ + items = base_items + ( + CloseBracket, + LayoutContext, + LayoutVariable, + EqualSign, + DecimalValue, + Unit, + ) + + +class ExpectLayout(ExpectOpenBracket): + replace = ParseLayout + + +class ParseMidi(ParseLilyPond): + """Parses the expression after \score {, leaving at } """ + items = base_items + ( + CloseBracket, + LayoutContext, + LayoutVariable, + EqualSign, + DecimalValue, + Unit, + ) + + +class ExpectMidi(ExpectOpenBracket): + replace = ParseMidi + + +class ParseWith(ParseLilyPond): + """Parses the expression after \score {, leaving at } """ + items = ( + CloseBracket, + ContextProperty, + EqualSign, + ) + toplevel_base_items + + +class ExpectWith(ExpectOpenBracket): + replace = ParseWith + + +class ParseContext(ParseLilyPond): + """Parses the expression after \score {, leaving at } """ + items = ( + CloseBracket, + BackSlashedContextName, + ContextProperty, + EqualSign, + ) + toplevel_base_items + + +class ExpectContext(ExpectOpenBracket): + replace = ParseContext + + +class ParseMusic(ParseLilyPond): + """Parses LilyPond music expressions.""" + items = music_items + + +class ParseChord(ParseMusic): + """LilyPond inside chords < >""" + items = music_chord_items + + +class ParseString(Parser): + default = String + items = ( + StringQuotedEnd, + StringQuoteEscape, + ) + + +class ParseBlockComment(Parser): + default = Comment + items = ( + BlockCommentSpace, + BlockCommentEnd, + ) + + +class ParseMarkup(Parser): + items = ( + MarkupScore, + MarkupCommand, + OpenBracketMarkup, + CloseBracketMarkup, + MarkupWord, + ) + base_items + + +class ParseRepeat(FallthroughParser): + items = space_items + ( + RepeatSpecifier, + RepeatStringSpecifier, + RepeatCount, + ) + + +class ParseDuration(FallthroughParser): + items = space_items + ( + Dot, + ) + def fallthrough(self, state): + state.replace(ParseDurationScaling()) + + +class ParseDurationScaling(ParseDuration): + items = space_items + ( + Scaling, + ) + def fallthrough(self, state): + state.leave() + + +class ParseOverride(ParseLilyPond): + argcount = 0 + items = ( + ContextName, + DotSetOverride, + GrobName, + EqualSignSetOverride, + Name, + Markup, MarkupLines, MarkupList, + ) + base_items + + +class ParseRevert(FallthroughParser): + items = space_items + ( + ContextName, + DotSetOverride, + GrobName, + Name, + SchemeStart, + ) + + +class ParseSet(ParseLilyPond): + argcount = 0 + items = ( + ContextName, + DotSetOverride, + ContextProperty, + EqualSignSetOverride, + Name, + Markup, MarkupLines, MarkupList, + ) + base_items + + +class ParseUnset(FallthroughParser): + items = space_items + ( + ContextName, + DotSetOverride, + ContextProperty, + Name, + ) + + +class ParseNewContext(FallthroughParser): + items = space_items + ( + ContextName, + Name, + EqualSign, + StringQuotedStart, + ) + + +class ParseClef(FallthroughParser): + argcount = 1 + items = space_items + ( + ClefSpecifier, + StringQuotedStart, + ) + + +class ParseScriptAbbreviationOrFingering(FallthroughParser): + argcount = 1 + items = space_items + ( + ScriptAbbreviation, + Fingering, + ) + + +class ParseInputMode(ParseLilyPond): + """Base class for parser for mode-changing music commands.""" + + +class ExpectLyricMode(FallthroughParser): + items = space_items + ( + OpenBracket, + OpenSimultaneous, + SchemeStart, + StringQuotedStart, + Name, + ) + + def updateState(self, state, token): + if isinstance(token, (OpenBracket, OpenSimultaneous)): + state.replace(ParseLyricMode()) + + +class ParseLyricMode(ParseInputMode): + """Parser for \\lyrics, \\lyricmode, \\addlyrics, etc.""" + items = base_items + ( + CloseBracket, + CloseSimultaneous, + OpenBracket, + OpenSimultaneous, + PipeSymbol, + LyricHyphen, + LyricExtender, + LyricSkip, + LyricTie, + LyricText, + Dynamic, + Skip, + Length, + Markup, MarkupLines, MarkupList, + ) + command_items + + def updateState(self, state, token): + if isinstance(token, (OpenSimultaneous, OpenBracket)): + state.replace(ParseLyricMode()) + + +class ExpectChordMode(FallthroughParser): + items = space_items + ( + OpenBracket, + OpenSimultaneous, + ) + + def updateState(self, state, token): + if isinstance(token, (OpenBracket, OpenSimultaneous)): + state.replace(ParseChordMode()) + + +class ParseChordMode(ParseInputMode, ParseMusic): + """Parser for \\chords and \\chordmode.""" + pass # TODO: implement + + +class ExpectNoteMode(FallthroughParser): + items = space_items + ( + OpenBracket, + OpenSimultaneous, + ) + + def updateState(self, state, token): + if isinstance(token, (OpenBracket, OpenSimultaneous)): + state.replace(ParseNoteMode()) + + +class ParseNoteMode(ParseInputMode, ParseMusic): + """Parser for \\notes and \\notemode. Same as Music itself.""" + + +class ExpectDrumMode(FallthroughParser): + items = space_items + ( + OpenBracket, + OpenSimultaneous, + ) + + def updateState(self, state, token): + if isinstance(token, (OpenBracket, OpenSimultaneous)): + state.replace(ParseDrumMode()) + + +class ParseDrumMode(ParseInputMode, ParseMusic): + """Parser for \\drums and \\drummode.""" + pass # TODO: implement + + +class ExpectFigureMode(FallthroughParser): + items = space_items + ( + OpenBracket, + OpenSimultaneous, + ) + + def updateState(self, state, token): + if isinstance(token, (OpenBracket, OpenSimultaneous)): + state.replace(ParseFigureMode()) + + +class ParseFigureMode(ParseInputMode, ParseMusic): + """Parser for \\figures and \\figuremode.""" + pass # TODO: implement + + +class ParsePitchCommand(FallthroughParser): + argcount = 1 + items = space_items + ( + Note, + Octave, + ) + def updateState(self, state, token): + if isinstance(token, Note): + self.argcount -= 1 + elif isinstance(token, _token.Space) and self.argcount <= 0: + state.leave() + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/lex/_mode.py frescobaldi-2.0.0/frescobaldi_app/ly/lex/_mode.py --- frescobaldi-1.2.0/frescobaldi_app/ly/lex/_mode.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/lex/_mode.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,124 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Registry for the different modes used by the tokenizer. + + +There are two items in this module: + +1. the modes dictionary. + + This maps a mode name to a function returning the base parser class for + that mode. (This way the corresponding module only needs to be imported + when the mode is really needed.) + +2. the guessMode function. + + This tries to guess the type of the given text and returns a mode name. + + +You can easily add more modes in separate modules and mention them here, + +Don't use this module directly! modes and guessMode are imported in the main +tokenize module. + +""" + +from __future__ import unicode_literals + +__all__ = ['modes', 'guessMode'] + + +def _modes(): + """Returns a dictionary mapping a mode name to a function. + + The function should return the initial Parser instance for that mode. + + """ + + def lilypond(): + import lilypond + return lilypond.ParseGlobal + + def scheme(): + import scheme + return scheme.ParseScheme + + def docbook(): + import docbook + return docbook.ParseDocBook + + def latex(): + import latex + return latex.ParseLaTeX + + def texinfo(): + import texinfo + return texinfo.ParseTexinfo + + def html(): + import html + return html.ParseHTML + + # more modes can be added here + return locals() + + +# dictionary mapping mode name to a function returning initial parser instance +# for that mode. Can also be used to test the existence of a mode +modes = _modes() +del _modes + + +def guessMode(text): + """Tries to guess the type of the input text, using a quite fast heuristic. + + Returns one of the strings also present as key in the modes dictionary. + + """ + text = text.lstrip() + if text.startswith(('%', '\\')) and ("\\documentclass" in text or "\\section" in text): + return "latex" + elif text.startswith("<<"): + return "lilypond" + elif text.startswith("<"): + if 'DOCTYPE book' in text or " 0: + return parent[i-1] + + def nextSibling(self): + """Return the object just after us in our parents list. + + Returns None if this is the last child, or if we have no parent. + + """ + parent = self.parent() + if parent: + i = parent.index(self) + if i < len(parent) - 1: + return parent[i+1] + + def previousSiblings(self): + """Iterate (backwards) over the preceding siblings.""" + node = self.previousSibling() + while node: + yield node + node = self.previousSibling() + + def nextSiblings(self): + """Iterate over the following siblings.""" + node = self.nextSibling() + while node: + yield node + node = self.nextSibling() + + def isDescendantOf(self, node): + """Returns True if node is somewhere in our ancestors().""" + for node in self.ancestors(): + if node is otherNode: + return True + return False + + def toplevel(self): + """Returns the toplevel parent Node of this node.""" + node = self + parent = self.parent() + while parent: + node = parent + parent = node.parent() + return node + + def iterDepthFirst(self, depth = -1): + """Iterate over all the children, and their children, etc. + + Set depth to restrict the search to a certain depth, -1 is unrestricted. + + """ + if depth != 0: + for i in self: + yield i + for j in i.iterDepthFirst(depth - 1): + yield j + + def iterDepthLast(self, depth = -1): + """Iterate over the children in rings, depth last. + + Set depth to restrict the search to a certain depth, -1 is unrestricted. + + """ + children = self.children() + while children and depth: + depth -= 1 + newchildren = [] + for i in children: + yield i + newchildren.extend(i.children()) + children = newchildren + + def findChildren(self, cls, depth = -1): + """Yields all descendants if they are an instance of cls.""" + for node in self.iterDepthLast(depth): + if isinstance(node, cls): + yield node + + def findChild(self, cls, depth = -1): + """Returns the first descendant that's an instance of cls.""" + for node in self.iterDepthLast(depth): + if isinstance(node, cls): + return node + + def findParent(self, cls): + """Finds an ancestor of the given class.""" + for node in self.ancestors(): + if isinstance(node, cls): + return node + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/parse.py frescobaldi-2.0.0/frescobaldi_app/ly/parse.py --- frescobaldi-1.2.0/frescobaldi_app/ly/parse.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/parse.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,83 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Various routines parsing LilyPond text. +""" + +from __future__ import unicode_literals + + +import itertools + +from . import lex +import lex.lilypond +import lex.scheme + + +def includeargs(tokens): + """Yields the arguments of \\include commands in the token stream.""" + for token in tokens: + if isinstance(token, lex.lilypond.Keyword) and token == "\\include": + for token in tokens: + if not isinstance(token, (lex.Space, lex.Comment)): + break + if token == '"': + yield ''.join(itertools.takewhile(lambda t: t != '"', tokens)) + + +def outputargs(tokens): + """Yields the arguments of \\bookOutputName, \\bookOutputSuffix and define output-suffix commands. + + Every argument is a two tuple(type, argument) where type is either "suffix" or "name". + + """ + for token in tokens: + found = None + if isinstance(token, lex.lilypond.Command): + if token == "\\bookOutputName": + found = "name" + elif token == "\\bookOutputSuffix": + found = "suffix" + elif isinstance(token, lex.scheme.Word) and token == "output-suffix": + found = "suffix" + if found: + for token in tokens: + if not isinstance(token, (lex.lilypond.SchemeStart, + lex.Space, + lex.Comment)): + break + if token == '"': + yield found, ''.join(itertools.takewhile(lambda t: t != '"', tokens)) + + +def version(tokens): + """Returns the argument of \\version, if found in this token stream.""" + for token in tokens: + if isinstance(token, lex.lilypond.Keyword) and token == "\\version": + for token in tokens: + if not isinstance(token, (lex.Space, lex.Comment)): + break + if token == '"': + pred = lambda t: t != '"' + else: + pred = lambda t: not isinstance(t, (lex.Space, lex.Comment)) + return ''.join(itertools.takewhile(pred, tokens)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/pitch.py frescobaldi-2.0.0/frescobaldi_app/ly/pitch.py --- frescobaldi-1.2.0/frescobaldi_app/ly/pitch.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/pitch.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,246 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Pitch manipulation. +""" + +from __future__ import unicode_literals + +import re +from fractions import Fraction + + +pitchInfo = { + 'nederlands': ( + ('c','d','e','f','g','a','b'), + ('eses', 'eseh', 'es', 'eh', '', 'ih','is','isih','isis'), + (('ees', 'es'), ('aes', 'as')) + ), + 'english': ( + ('c','d','e','f','g','a','b'), + ('ff', 'tqf', 'f', 'qf', '', 'qs', 's', 'tqs', 'ss'), + ), + 'deutsch': ( + ('c','d','e','f','g','a','h'), + ('eses', 'eseh', 'es', 'eh', '', 'ih','is','isih','isis'), + (('ees', 'es'), ('aes', 'as'), ('hes', 'b')) + ), + 'svenska': ( + ('c','d','e','f','g','a','h'), + ('essess', '', 'ess', '', '', '','iss','','ississ'), + (('ees', 'es'), ('aes', 'as'), ('hess', 'b')) + ), + 'italiano': ( + ('do', 're', 'mi', 'fa', 'sol', 'la', 'si'), + ('bb', 'bsb', 'b', 'sb', '', 'sd', 'd', 'dsd', 'dd') + ), + 'espanol': ( + ('do', 're', 'mi', 'fa', 'sol', 'la', 'si'), + ('bb', '', 'b', '', '', '', 's', '', 'ss') + ), + 'portugues': ( + ('do', 're', 'mi', 'fa', 'sol', 'la', 'si'), + ('bb', 'btqt', 'b', 'bqt', '', 'sqt', 's', 'stqt', 'ss') + ), + 'vlaams': ( + ('do', 're', 'mi', 'fa', 'sol', 'la', 'si'), + ('bb', '', 'b', '', '', '', 'k', '', 'kk') + ), +} +pitchInfo['norsk'] = pitchInfo['deutsch'] +pitchInfo['suomi'] = pitchInfo['deutsch'] +pitchInfo['catalan'] = pitchInfo['italiano'] + + +class PitchNameNotAvailable(Exception): + """Exception raised when there is no name for a pitch. + + Can occur when translating pitch names, if the target language e.g. + does not have quarter-tone names. + + """ + pass + + +class Pitch(object): + """A pitch with note, alter and octave attributes. + + Attributes may be manipulated directly. + + """ + def __init__(self, note=0, alter=0, octave=0): + self.note = note # base note (c, d, e, f, g, a, b) + self.alter = alter # # = 2; b = -2; natural = 0 + self.octave = octave # '' = 2; ,, = -2 + + def __repr__(self): + return ''.format(self.output()) + + def output(self, language="nederlands"): + """Returns our string representation.""" + return ( + pitchWriter(language)(self.note, self.alter) + + octaveToString(self.octave)) + + @classmethod + def c1(cls): + """Returns a pitch c'.""" + return cls(octave=1) + + @classmethod + def c0(cls): + """Returns a pitch c.""" + return cls() + + def copy(self): + """Returns a new instance with our attributes.""" + return self.__class__(self.note, self.alter, self.octave) + + def makeAbsolute(self, lastPitch): + """Makes ourselves absolute, i.e. sets our octave from lastPitch.""" + self.octave += lastPitch.octave - (self.note - lastPitch.note + 3) // 7 + + def makeRelative(self, lastPitch): + """Makes ourselves relative, i.e. changes our octave from lastPitch.""" + self.octave -= lastPitch.octave - (self.note - lastPitch.note + 3) // 7 + + +class Transposer(object): + """Transpose pitches. + + Instantiate with a from- and to-Pitch, and optionally a scale. + The scale is a list with the pitch height of the unaltered step (0 .. 6). + The default scale is the normal scale: C, D, E, F, G, A, B. + + """ + scale = (0, 1, 2, Fraction(5, 2), Fraction(7, 2), Fraction(9, 2), Fraction(11, 2)) + + def __init__(self, fromPitch, toPitch, scale = None): + if scale is not None: + self.scale = scale + + # the number of octaves we need to transpose + self.octave = toPitch.octave - fromPitch.octave + + # the number of base note steps (c->d == 1, e->f == 1, etc.) + self.steps = toPitch.note - fromPitch.note + + # the number (fraction) of real whole steps + self.alter = (self.scale[toPitch.note] + toPitch.alter - + self.scale[fromPitch.note] - fromPitch.alter) + + def transpose(self, pitch): + doct, note = divmod(pitch.note + self.steps, 7) + pitch.alter += self.alter - doct * 6 - self.scale[note] + self.scale[pitch.note] + pitch.octave += self.octave + doct + pitch.note = note + + +class PitchWriter(object): + def __init__(self, names, accs, replacements=()): + self.names = names + self.accs = accs + self.replacements = replacements + + def __call__(self, note, alter = 0): + """ + Returns a string representing the pitch in our language. + Raises PitchNameNotAvailable if the requested pitch + has an alteration that is not available in the current language. + """ + pitch = self.names[note] + if alter: + acc = self.accs[int(alter * 4 + 4)] + if not acc: + raise PitchNameNotAvailable() + pitch += acc + for s, r in self.replacements: + if pitch.startswith(s): + pitch = r + pitch[len(s):] + break + return pitch + + +class PitchReader(object): + def __init__(self, names, accs, replacements=()): + self.names = list(names) + self.accs = list(accs) + self.replacements = replacements + self.rx = re.compile("({0})({1})?$".format("|".join(names), + "|".join(acc for acc in accs if acc))) + + def __call__(self, text): + for s, r in self.replacements: + if text.startswith(r): + text = s + text[len(r):] + for dummy in 1, 2: + m = self.rx.match(text) + if m: + note = self.names.index(m.group(1)) + if m.group(2): + alter = Fraction(self.accs.index(m.group(2)) - 4, 4) + else: + alter = 0 + return note, alter + # HACK: were we using (rarely used) long english syntax? + text = text.replace('flat', 'f').replace('sharp', 's') + return False + + +def octaveToString(octave): + """Converts numeric octave to a string with apostrophes or commas. + + 0 -> "" ; 1 -> "'" ; -1 -> "," ; etc. + + """ + return octave < 0 and ',' * -octave or "'" * octave + + +def octaveToNum(octave): + """Converts string octave to an integer: + + "" -> 0 ; "," -> -1 ; "'''" -> 3 ; etc. + + """ + return octave.count("'") - octave.count(",") + + +_pitchReaders = {} +_pitchWriters = {} + + +def pitchReader(language): + """Returns a PitchReader for the speficied language.""" + try: + return _pitchReaders[language] + except KeyError: + res = _pitchReaders[language] = PitchReader(*pitchInfo[language]) + return res + + +def pitchWriter(language): + """Returns a PitchWriter for the speficied language.""" + try: + return _pitchWriters[language] + except KeyError: + res = _pitchWriters[language] = PitchWriter(*pitchInfo[language]) + return res + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/util.py frescobaldi-2.0.0/frescobaldi_app/ly/util.py --- frescobaldi-1.2.0/frescobaldi_app/ly/util.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/util.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,157 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Utility functions. +""" + +from __future__ import unicode_literals + +import os +import string +import weakref + + +def findexe(cmd): + """Checks the PATH for the executable and returns the absolute path or None.""" + if os.path.isabs(cmd): + return cmd if os.access(cmd, os.X_OK) else None + else: + ucmd = os.path.expanduser(cmd) + if os.path.isabs(ucmd): + return ucmd if os.access(ucmd, os.X_OK) else None + elif os.sep in cmd and os.access(cmd, os.X_OK): + return os.path.abspath(cmd) + else: + for p in os.environ.get("PATH", os.defpath).split(os.pathsep): + if os.access(os.path.join(p, cmd), os.X_OK): + return os.path.join(p, cmd) + + +class cachedproperty(object): + """Stores a value that is computed at first request and can be read and unset.""" + def __init__(self, method): + self.method = method + self.instances = weakref.WeakKeyDictionary() + self.__doc__ = method.__doc__ + + def __get__(self, instance, cls): + if instance is None: + return self + try: + return self.instances[instance] + except KeyError: + value = self.instances[instance] = self.method(instance) + return value + + def __set__(self, instance, value): + self.instances[instance] = value + + def __delete__(self, instance): + try: + del self.instances[instance] + except KeyError: + pass + + +_nums = ( + '', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', + 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', + 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen') + +_tens = ( + 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', + 'Ninety') + +def int2text(number): + """Converts an integer to the English language name of that integer. + + E.g. converts 1 to "One". Supports numbers 0 to 999999. + This can be used in LilyPond identifiers (that do not support digits). + + """ + result = [] + if number >= 1000: + hundreds, number = divmod(number, 1000) + result.append(int2text(hundreds) + "Thousand") + if number >= 100: + tens, number = divmod(number, 100) + result.append(_nums[tens] + "Hundred") + if number < 20: + result.append(_nums[number]) + else: + tens, number = divmod(number, 10) + result.append(_tens[tens-2] + _nums[number]) + text = "".join(result) + return text or 'Zero' + + +# Thanks: http://billmill.org/python_roman.html +_roman_numerals = (("M", 1000), ("CM", 900), ("D", 500), ("CD", 400), +("C", 100),("XC", 90),("L", 50),("XL", 40), ("X", 10), ("IX", 9), ("V", 5), +("IV", 4), ("I", 1)) + +def int2roman(n): + roman = [] + for ltr, num in _roman_numerals: + k, n = divmod(n, num) + roman.append(ltr * k) + return "".join(roman) + + +def int2letter(number, chars=string.ascii_uppercase): + """Converts an integer to one or more letters. + + E.g. 1 -> A, 2 -> B, ... 26 -> Z, 27 -> AA, etc. + Zero returns the empty string. + + chars is the string to pick characters from, defaulting to + string.ascii_uppercase. + + """ + mod = len(chars) + result = [] + while number > 0: + number, c = divmod(number - 1, mod) + result.append(c) + return "".join(chars[c] for c in reversed(result)) + + +def mkid(*args): + """Makes a lower-camel-case identifier of the strings in args. + + All strings are concatenated with the first character of every string + uppercased, except for the first character, which is lowercased. + + Examples: + mkid("Violin") ==> "violin" + mkid("soprano", "verse") ==> "sopranoVerse" + mkid("scoreOne", "choirII") ==> "scoreOneChoirII" + + """ + result = [] + for a in args[:1]: + result.append(a[:1].lower()) + result.append(a[1:]) + for a in args[1:]: + result.append(a[:1].upper()) + result.append(a[1:]) + return "".join(result) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/ly/words.py frescobaldi-2.0.0/frescobaldi_app/ly/words.py --- frescobaldi-1.2.0/frescobaldi_app/ly/words.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/ly/words.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,1124 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +LilyPond reserved words for auto completion and highlighting. +""" + +from __future__ import unicode_literals + + +lilypond_keywords = ( + 'accepts', + 'alias', + 'consists', + 'defaultchild', + 'denies', + #'description', + #'grobdescriptions', + 'include', + #'invalid', + 'language', + 'name', + #'objectid', + 'once', + 'set', + 'unset', + 'override', + 'revert', + 'remove', + #'sequential', + #'simultaneous', + #'type', + 'version', + 'score', + 'book', + 'bookpart', + 'header', + 'paper', + 'midi', + 'layout', + 'with', + 'context', +) + + +lilypond_music_commands = ( + 'acciaccatura', + 'addInstrumentDefinition', + 'addlyrics', + 'addQuote', + 'afterGrace', + 'afterGraceFraction', + 'aikenHeads', + 'aikenHeadsMinor', + 'allowPageTurn', + 'alternative', + 'AncientRemoveEmptyStaffContext', + 'applyContext', + 'applyMusic', + 'applyOutput', + 'appoggiatura', + 'arpeggio', + 'arpeggioArrowDown', + 'arpeggioArrowUp', + 'arpeggioBracket', + 'arpeggioNormal', + 'arpeggioParenthesis', + 'ascendens', + 'auctum', + 'augmentum', + 'autoAccidentals', + 'autoBeamOff', + 'autoBeamOn', + 'autochange', + 'balloonGrobText', + 'balloonLengthOff', + 'balloonLengthOn', + 'balloonText', + 'bar', + 'barNumberCheck', + 'bassFigureExtendersOff', + 'bassFigureExtendersOn', + 'bassFigureStaffAlignmentDown', + 'bassFigureStaffAlignmentNeutral', + 'bassFigureStaffAlignmentUp', + 'bendAfter', + 'blackTriangleMarkup', + 'bookOutputName', + 'bookOutputSuffix', + 'bracketCloseSymbol', + 'bracketOpenSymbol', + 'break', + 'breathe', + 'breve', + 'cadenzaOff', + 'cadenzaOn', + 'caesura', + 'cavum', + 'change', + 'chordmode', + 'chordNameSeparator', + 'chordPrefixSpacer', + 'chordRootNamer', + 'chords', + 'clef', + 'cm', + 'compressFullBarRests', + 'context', + 'cr', + 'cresc', + 'crescHairpin', + 'crescTextCresc', + 'cueDuring', + 'dashBar', + 'dashDash', + 'dashDot', + 'dashHat', + 'dashLarger', + 'dashPlus', + 'dashUnderscore', + 'decr', + 'default', + 'defaultTimeSignature', + 'deminutum', + 'denies', + 'descendens', + 'dim', + 'dimHairpin', + 'dimTextDecr', + 'dimTextDecresc', + 'dimTextDim', + 'displayLilyMusic', + 'displayMusic', + 'divisioMaior', + 'divisioMaxima', + 'divisioMinima', + 'dotsDown', + 'dotsNeutral', + 'dotsUp', + 'drummode', + 'drumPitchTable', + 'drums', + 'dynamicDown', + 'dynamicNeutral', + 'dynamicUp', + 'easyHeadsOff', + 'easyHeadsOn', + 'endcr', + 'endcresc', + 'enddecr', + 'enddim', + 'endincipit', + 'endSpanners', + 'episemFinis', + 'episemInitium', + 'escapedBiggerSymbol', + 'escapedExclamationSymbol', + 'escapedParenthesisCloseSymbol', + 'escapedParenthesisOpenSymbol', + 'escapedSmallerSymbol', + 'expandFullBarRests', + 'f', + 'featherDurations', + 'fermataMarkup', + 'ff', + 'fff', + 'ffff', + 'fffff', + 'figuremode', + 'figures', + 'finalis', + 'fingeringOrientations', + 'flexa', + 'fp', + 'frenchChords', + 'fullJazzExceptions', + 'funkHeads', + 'funkHeadsMinor', + 'fz', + 'germanChords', + 'glissando', + 'grace', + 'graceSettings', + 'harmonic', + 'hideNotes', + 'hideStaffSwitch', + 'huge', + 'ignatzekExceptionMusic', + 'ignatzekExceptions', + 'iij', + 'IIJ', + 'ij', + 'IJ', + 'improvisationOff', + 'improvisationOn', + 'in', + 'inclinatum', + 'includePageLayoutFile', + 'indent', + 'instrumentSwitch', + 'instrumentTransposition', + 'interscoreline', + 'italianChords', + 'keepWithTag', + 'key', + 'killCues', + 'label', + 'laissezVibrer', + 'large', + 'ligature', + 'linea', + 'longa', + 'lyricmode', + 'lyrics', + 'lyricsto', + 'maininput', + 'majorSevenSymbol', + 'makeClusters', + 'mark', + 'markup', + 'markuplines', # deprecated, till 2.14 + 'markuplist', # from 2.16 + 'maxima', + 'melisma', + 'melismaEnd', + 'mergeDifferentlyDottedOff', + 'mergeDifferentlyDottedOn', + 'mergeDifferentlyHeadedOff', + 'mergeDifferentlyHeadedOn', + 'mf', + 'mm', + 'mp', + 'musicMap', + 'neumeDemoLayout', + 'new', + 'newSpacingSection', + 'noBeam', + 'noBreak', + 'noPageBreak', + 'noPageTurn', + 'normalsize', + 'notemode', + 'numericTimeSignature', + 'octaveCheck', + 'oldaddlyrics', + 'oneVoice', + 'oriscus', + 'ottava', + 'override', + 'overrideProperty', + 'p', + 'pageBreak', + 'pageTurn', + 'parallelMusic', + 'parenthesisCloseSymbol', + 'parenthesisOpenSymbol', + 'parenthesize', + 'partcombine', + 'partCombineListener', + 'partial', + 'partialJazzExceptions', + 'partialJazzMusic', + 'pes', + 'phrasingSlurDashed', + 'phrasingSlurDotted', + 'phrasingSlurDown', + 'phrasingSlurNeutral', + 'phrasingSlurSolid', + 'phrasingSlurUp', + 'pipeSymbol', + 'pitchedTrill', + 'pointAndClickOff', + 'pointAndClickOn', + 'pp', + 'ppp', + 'pppp', + 'ppppp', + 'predefinedFretboardsOff', + 'predefinedFretboardsOn', + 'pt', + 'quilisma', + 'quoteDuring', + 'relative', + 'RemoveEmptyRhythmicStaffContext', + 'RemoveEmptyStaffContext', + 'removeWithTag', + 'repeat', + 'repeatTie', + 'resetRelativeOctave', + 'responsum', + 'rest', + 'revert', + 'rfz', + 'rightHandFinger', + 'sacredHarpHeads', + 'sacredHarpHeadsMinor', + 'scaleDurations', + 'scoreTweak', + 'semiGermanChords', + 'set', + 'sf', + 'sff', + 'sfp', + 'sfz', + 'shiftDurations', + 'shiftOff', + 'shiftOn', + 'shiftOnn', + 'shiftOnnn', + 'showStaffSwitch', + 'skip', + 'skipTypesetting', + 'slurDashed', + 'slurDotted', + 'slurDown', + 'slurNeutral', + 'slurSolid', + 'slurUp', + 'small', + 'sostenutoOff', + 'sostenutoOn', + 'southernHarmonyHeads', + 'southernHarmonyHeadsMinor', + 'sp', + 'spacingTweaks', + 'spp', + 'startAcciaccaturaMusic', + 'startAppoggiaturaMusic', + 'startGraceMusic', + 'startGroup', + 'startStaff', + 'startTextSpan', + 'startTrillSpan', + 'stemDown', + 'stemNeutral', + 'stemUp', + 'stopAcciaccaturaMusic', + 'stopAppoggiaturaMusic', + 'stopGraceMusic', + 'stopGroup', + 'stopStaff', + 'stopTextSpan', + 'stopTrillSpan', + 'strokeFingerOrientations', + 'stropha', + 'sustainOff', + 'sustainOn', + 'tabFullNotation', + 'tag', + 'teeny', + 'tempo', + 'tempoWholesPerMinute', + 'textLengthOff', + 'textLengthOn', + 'textSpannerDown', + 'textSpannerNeutral', + 'textSpannerUp', + 'tieDashed', + 'tieDotted', + 'tieDown', + 'tieNeutral', + 'tieSolid', + 'tieUp', + 'tildeSymbol', + 'time', + 'times', + 'timing', + 'tiny', + 'transpose', + 'transposedCueDuring', + 'transposition', + 'treCorde', + 'tupletDown', + 'tupletNeutral', + 'tupletUp', + 'tweak', + 'unaCorda', + 'unfoldRepeats', + 'unHideNotes', + 'unit', + 'unset', + 'versus', + 'virga', + 'virgula', + 'voiceFour', + 'voiceFourStyle', + 'voiceNeutralStyle', + 'voiceOne', + 'voiceOneStyle', + 'voiceThree', + 'voiceThreeStyle', + 'voiceTwo', + 'voiceTwoStyle', + 'walkerHeads', + 'walkerHeadsMinor', + 'whiteTriangleMarkup', + 'withMusicProperty', +) + + +articulations = ( + 'accent', + 'espressivo', + 'marcato', + 'portato', + 'staccatissimo', + 'staccato', + 'tenuto', +) + + +ornaments = ( + 'prall', + 'mordent', + 'prallmordent', + 'turn', + 'upprall', + 'downprall', + 'upmordent', + 'downmordent', + 'lineprall', + 'prallprall', + 'pralldown', + 'prallup', + 'reverseturn', + 'trill', +) + + +fermatas = ( + 'shortfermata', + 'fermata', + 'longfermata', + 'verylongfermata', +) + + +instrument_scripts = ( + 'upbow', + 'downbow', + 'flageolet', + 'thumb', + 'snappizzicato', + 'open', + 'halfopen', + 'stopped', + 'lheel', + 'rheel', + 'ltoe', + 'rtoe', +) + + +repeat_scripts = ( + 'segno', + 'coda', + 'varcoda', +) + + +ancient_scripts = ( + 'ictus', + 'accentus', + 'circulus', + 'semicirculus', + 'signumcongruentiae', +) + + +modes = ( + 'major', + 'minor', + 'ionian', + 'dorian', + 'phrygian', + 'lydian', + 'mixolydian', + 'aeolian', + 'locrian', +) + + +markupcommands_nargs = ( +# no arguments +( + 'doubleflat', + 'doublesharp', + 'eyeglasses', + 'flat', + 'natural', + 'null', + 'semiflat', + 'semisharp', + 'sesquiflat', + 'sesquisharp', + 'sharp', + 'strut', +), +# one argument +( + 'backslashed-digit', + 'bold', + 'box', + 'bracket', + 'caps', + 'center-align', + 'center-column', + 'char', + 'circle', + 'column', + 'concat', + 'dir-column', + 'draw-line', + 'dynamic', + 'fill-line', + 'finger', + 'fontCaps', + 'fret-diagram', + 'fret-diagram-terse', + 'fret-diagram-verbose', + 'fromproperty', + 'harp-pedal', + 'hbracket', + 'hspace', + 'huge', + 'italic', + 'justify', + 'justify-field', + 'justify-string', + 'large', + 'larger', + 'left-align', + 'left-brace', + 'left-column', + 'line', + 'lookup', + 'markalphabet', + 'markletter', + 'medium', + 'musicglyph', + 'normalsize', + 'normal-size-sub', + 'normal-size-super', + 'normal-text', + 'number', + 'postscript', + 'right-align', + 'right-brace', + 'right-column', + 'roman', + 'rounded-box', + 'sans', + 'score', + 'simple', + 'slashed-digit', + 'small', + 'smallCaps', + 'smaller', + 'stencil', + 'sub', + 'super', + 'teeny', + 'text', + 'tied-lyric', + 'tiny', + 'transparent', + 'triangle', + 'typewriter', + 'underline', + 'upright', + 'vcenter', + 'vspace', + 'verbatim-file', + 'whiteout', + 'wordwrap', + 'wordwrap-field', + 'wordwrap-string', +), +# two arguments +( + 'abs-fontsize', + 'combine', + 'customTabClef', + 'fontsize', + 'footnote', + 'fraction', + 'halign', + 'hcenter-in', + 'lower', + 'magnify', + 'note', + 'on-the-fly', + 'override', + 'pad-around', + 'pad-markup', + 'pad-x', + 'page-link', + 'path', # added in LP 2.13.31 + 'raise', + 'rotate', + 'translate', + 'translate-scaled', + 'with-color', + 'with-link', + 'with-url', + 'woodwind-diagram', +), +# three arguments +( + 'arrow-head', + 'beam', + 'draw-circle', + 'eps-file', + 'filled-box', + 'general-align', + 'note-by-number', + 'pad-to-box', + 'page-ref', + 'with-dimensions', +), +# four arguments +( + 'pattern', + 'put-adjacent', +), +# five arguments, +( + 'fill-with-pattern', +), +) + + +markupcommands = sum(markupcommands_nargs, ()) + + +markuplistcommands = ( + 'column-lines', + 'justified-lines', + 'override-lines', + 'wordwrap-internal', + 'wordwrap-lines', + 'wordwrap-string-internal', +) + + +contexts = ( + 'ChoirStaff', + 'ChordNames', + 'CueVoice', + 'Devnull', + 'DrumStaff', + 'DrumVoice', + 'Dynamics', + 'FiguredBass', + 'FretBoards', + 'Global', + 'GrandStaff', + 'GregorianTranscriptionStaff', + 'GregorianTranscriptionVoice', + 'Lyrics', + 'MensuralStaff', + 'MensuralVoice', + 'NoteNames', + 'PianoStaff', + 'RhythmicStaff', + 'Score', + 'Staff', + 'StaffGroup', + 'TabStaff', + 'TabVoice', + 'Timing', + 'VaticanaStaff', + 'VaticanaVoice', + 'Voice', +) + + +midi_instruments = ( + # (1-8 piano) + 'acoustic grand', + 'bright acoustic', + 'electric grand', + 'honky-tonk', + 'electric piano 1', + 'electric piano 2', + 'harpsichord', + 'clav', + # (9-16 chrom percussion) + 'celesta', + 'glockenspiel', + 'music box', + 'vibraphone', + 'marimba', + 'xylophone', + 'tubular bells', + 'dulcimer', + # (17-24 organ) + 'drawbar organ', + 'percussive organ', + 'rock organ', + 'church organ', + 'reed organ', + 'accordion', + 'harmonica', + 'concertina', + # (25-32 guitar) + 'acoustic guitar (nylon)', + 'acoustic guitar (steel)', + 'electric guitar (jazz)', + 'electric guitar (clean)', + 'electric guitar (muted)', + 'overdriven guitar', + 'distorted guitar', + 'guitar harmonics', + # (33-40 bass) + 'acoustic bass', + 'electric bass (finger)', + 'electric bass (pick)', + 'fretless bass', + 'slap bass 1', + 'slap bass 2', + 'synth bass 1', + 'synth bass 2', + # (41-48 strings) + 'violin', + 'viola', + 'cello', + 'contrabass', + 'tremolo strings', + 'pizzicato strings', + 'orchestral harp', # till LilyPond 2.12 was this erroneously called: 'orchestral strings' + 'timpani', + # (49-56 ensemble) + 'string ensemble 1', + 'string ensemble 2', + 'synthstrings 1', + 'synthstrings 2', + 'choir aahs', + 'voice oohs', + 'synth voice', + 'orchestra hit', + # (57-64 brass) + 'trumpet', + 'trombone', + 'tuba', + 'muted trumpet', + 'french horn', + 'brass section', + 'synthbrass 1', + 'synthbrass 2', + # (65-72 reed) + 'soprano sax', + 'alto sax', + 'tenor sax', + 'baritone sax', + 'oboe', + 'english horn', + 'bassoon', + 'clarinet', + # (73-80 pipe) + 'piccolo', + 'flute', + 'recorder', + 'pan flute', + 'blown bottle', + 'shakuhachi', + 'whistle', + 'ocarina', + # (81-88 synth lead) + 'lead 1 (square)', + 'lead 2 (sawtooth)', + 'lead 3 (calliope)', + 'lead 4 (chiff)', + 'lead 5 (charang)', + 'lead 6 (voice)', + 'lead 7 (fifths)', + 'lead 8 (bass+lead)', + # (89-96 synth pad) + 'pad 1 (new age)', + 'pad 2 (warm)', + 'pad 3 (polysynth)', + 'pad 4 (choir)', + 'pad 5 (bowed)', + 'pad 6 (metallic)', + 'pad 7 (halo)', + 'pad 8 (sweep)', + # (97-104 synth effects) + 'fx 1 (rain)', + 'fx 2 (soundtrack)', + 'fx 3 (crystal)', + 'fx 4 (atmosphere)', + 'fx 5 (brightness)', + 'fx 6 (goblins)', + 'fx 7 (echoes)', + 'fx 8 (sci-fi)', + # (105-112 ethnic) + 'sitar', + 'banjo', + 'shamisen', + 'koto', + 'kalimba', + 'bagpipe', + 'fiddle', + 'shanai', + # (113-120 percussive) + 'tinkle bell', + 'agogo', + 'steel drums', + 'woodblock', + 'taiko drum', + 'melodic tom', + 'synth drum', + 'reverse cymbal', + # (121-128 sound effects) + 'guitar fret noise', + 'breath noise', + 'seashore', + 'bird tweet', + 'telephone ring', + 'helicopter', + 'applause', + 'gunshot', + # (channel 10 drum-kits - subtract 32768 to get program no.) + 'standard kit', + 'standard drums', + 'drums', + 'room kit', + 'room drums', + 'power kit', + 'power drums', + 'rock drums', + 'electronic kit', + 'electronic drums', + 'tr-808 kit', + 'tr-808 drums', + 'jazz kit', + 'jazz drums', + 'brush kit', + 'brush drums', + 'orchestra kit', + 'orchestra drums', + 'classical drums', + 'sfx kit', + 'sfx drums', + 'mt-32 kit', + 'mt-32 drums', + 'cm-64 kit', + 'cm-64 drums', +) + + +scheme_functions = ( + 'set-accidental-style', + 'set-global-staff-size', + 'set-octavation', + 'set-paper-size', + 'define-public', + 'define-music-function', + 'define-markup-command', + 'empty-stencil', + 'markup', + 'number?', + 'string?', + 'pair?', + 'ly:duration?', + 'ly:grob?', + 'ly:make-moment', + 'ly:make-pitch', + 'ly:music?', + 'ly:moment?', + 'ly:format', + 'markup?', + 'interpret-markup', + 'make-line-markup', + 'make-center-markup', + 'make-column-markup', + 'make-musicglyph-markup', + 'color?', + 'rgb-color', + 'x11-color', +) + + +scheme_values = ( + 'UP', + 'DOWN', + 'LEFT', + 'RIGHT', + 'CENTER', + 'minimum-distance', + 'basic-distance', + 'padding', + 'stretchability', +) + + +headervariables = ( + 'dedication', + 'title', + 'subtitle', + 'subsubtitle', + 'poet', + 'composer', + 'meter', + 'opus', + 'arranger', + 'instrument', + 'piece', + 'breakbefore', + 'copyright', + 'tagline', + 'mutopiatitle', + 'mutopiacomposer', + 'mutopiapoet', + 'mutopiaopus', + 'mutopiainstrument', + 'date', + 'enteredby', + 'source', + 'style', + 'maintainer', + 'maintainerEmail', + 'maintainerWeb', + 'moreInfo', + 'lastupdated', + 'texidoc', + 'footer', +) + + +papervariables = ( + # fixed vertical + 'paper-height', + 'top-margin', + 'bottom-margin', + 'ragged-bottom', + 'ragged-last-bottom', + + # horizontal + 'paper-width', + 'line-width', + 'left-margin', + 'right-margin', + 'check-consistency', + 'ragged-right', + 'ragged-last', + 'two-sided', + 'inner-margin', + 'outer-margin', + 'binding-offset', + 'horizontal-shift', + 'indent', + 'short-indent', + + # flex vertical + 'markup-system-spacing', # the distance between a (title or top-level) markup and the system that follows it. + 'score-markup-spacing', # the distance between the last system of a score and the (title or top-level) markup that follows it. + 'score-system-spacing', # the distance between the last system of a score and the first system of the score that follows it, when no (title or top-level) markup exists between them. + 'system-system-spacing', # the distance between two systems in the same score. + 'markup-markup-spacing', # the distance between two (title or top-level) markups. + 'last-bottom-spacing', # the distance from the last system or top-level markup on a page to the bottom of the printable area (i.e. the top of the bottom margin). + 'top-system-spacing', # the distance from the top of the printable area (i.e. the bottom of the top margin) to the first system on a page, when there is no (title or top-level) markup between the two. + 'top-markup-spacing', # the distance from the top of the printable area (i.e. the bottom of the top margin) to the first (title or top-level) markup on a page, when there is no system between the two. + + # line breaking + 'max-systems-per-page', + 'min-systems-per-page', + 'system-count', + 'systems-per-page', + + # page breaking + 'blank-after-score-page-force', # The penalty for having a blank page after the end of one score and before the next. By default, this is smaller than blank-page-force, so that we prefer blank pages after scores to blank pages within a score. + 'blank-last-page-force', # The penalty for ending the score on an odd-numbered page. + 'blank-page-force', # The penalty for having a blank page in the middle of a score. This is not used by ly:optimal-breaking since it will never consider blank pages in the middle of a score. + 'page-breaking', # The page-breaking algorithm to use. Choices are ly:minimal-breaking, ly:page-turn-breaking, and ly:optimal-breaking. + 'page-breaking-system-system-spacing', # Tricks the page breaker into thinking that system-system-spacing is set to something different than it really is. For example, if page-breaking-system-system-spacing #'padding is set to something substantially larger than system-system-spacing #'padding, then the page-breaker will put fewer systems on each page. Default: unset. + 'page-count', # The number of pages to be used for a score, unset by default. + + # page numbering + 'auto-first-page-number', + 'first-page-number', + 'print-first-page-number', + 'print-page-number', + + # misc + 'page-spacing-weight', + 'print-all-headers', + 'system-separator-markup', + + # debugging + 'annotate-spacing', + + # different markups + 'bookTitleMarkup', + 'evenFooterMarkup', + 'evenHeaderMarkup', + 'oddFooterMarkup', + 'oddHeaderMarkup', + 'scoreTitleMarkup', + 'tocItemMarkup', + 'tocTitleMarkup', + + # fonts + 'fonts', + + # undocumented? + #'blank-after-score-page-force', + #'force-assignment', + #'input-encoding', + #'output-scale', +) + + +layoutvariables = ( + 'indent', + 'short-indent', + 'system-count', + 'line-width', + 'ragged-right', + 'ragged-last', +) + + +midivariables = ( +) + + +repeat_types = ( + 'unfold', + 'percent', + 'volta', + 'tremolo', +) + + +accidentalstyles = ( + 'default', + 'voice', + 'modern', + 'modern-cautionary', + 'modern-voice', + 'modern-voice-cautionary', + 'piano', + 'piano-cautionary', + 'neo-modern', + 'neo-modern-cautionary', + 'neo-modern-voice', + 'neo-modern-voice-cautionary', + 'dodecaphonic', + 'teaching', + 'no-reset', + 'forget', +) + + +clefs_plain = ( + 'treble', + 'violin', + 'G', + 'alto', + 'C', + 'tenor', + 'bass', + 'subbass', + 'F', + 'french', + 'mezzosoprano', + 'soprano', + 'varbaritone', + 'baritone', + 'percussion', + 'tab', +) + + +clefs = clefs_plain + ( + 'treble_8', + 'bass_8', +) + + +break_visibility = ( + 'all-invisible', + 'begin-of-line-visible', + 'end-of-line-visible', + 'all-visible', + 'begin-of-line-invisible', + 'end-of-line-invisible', + 'center-invisible', +) + + +mark_formatters = ( + 'format-mark-alphabet', + 'format-mark-barnumbers', + 'format-mark-letters', + 'format-mark-numbers', + 'format-mark-box-alphabet', + 'format-mark-box-barnumbers', + 'format-mark-box-letters', + 'format-mark-box-numbers', + 'format-mark-circle-alphabet', + 'format-mark-circle-barnumbers', + 'format-mark-circle-letters', + 'format-mark-circle-numbers', +) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/lyrics.py frescobaldi-2.0.0/frescobaldi_app/lyrics.py --- frescobaldi-1.2.0/frescobaldi_app/lyrics.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/lyrics.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,142 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Commands for manipulating Lyrics. +""" + +from __future__ import unicode_literals + +import re + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QAction, QApplication, QKeySequence, QTextCursor + +import ly.lex.lilypond +import actioncollection +import actioncollectionmanager +import plugin +import cursortools +import tokeniter + + +# regexp to match a lyric word +_word_re = re.compile(r"[^\W0-9_]+") + + +def lyrics(mainwindow): + return Lyrics.instance(mainwindow) + + +class Lyrics(plugin.MainWindowPlugin): + def __init__(self, mainwindow): + ac = self.actionCollection = Actions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + ac.lyrics_hyphenate.triggered.connect(self.hyphenate) + ac.lyrics_dehyphenate.triggered.connect(self.dehyphenate) + ac.lyrics_copy_dehyphenated.triggered.connect(self.copy_dehyphenated) + mainwindow.selectionStateChanged.connect(self.updateSelection) + self.updateSelection(mainwindow.hasSelection()) + + def updateSelection(self, selection): + self.actionCollection.lyrics_dehyphenate.setEnabled(selection) + self.actionCollection.lyrics_copy_dehyphenated.setEnabled(selection) + + def hyphenate(self): + """Hyphenates selected Lyrics text.""" + view = self.mainwindow().currentView() + cursor = view.textCursor() + found = [] + # find text to hyphenate + if cursor.hasSelection(): + source = tokeniter.Source.selection(cursor) + else: + source = tokeniter.Source.document(cursor) + for token in source: + if isinstance(token, ly.lex.lilypond.LyricText): + # a word found + for m in _word_re.finditer(token): + found.append((source.cursor(token, m.start(), m.end()), m.group())) + if not found and cursor.hasSelection(): + # no tokens were found, then tokenize the text again as if in lyricmode + start = cursor.selectionStart() + state = ly.lex.State(ly.lex.lilypond.ParseLyricMode) + for token in state.tokens(cursor.selection().toPlainText()): + if isinstance(token, ly.lex.lilypond.LyricText): + # a word found + for m in _word_re.finditer(token): + cur = QTextCursor(cursor) + cur.setPosition(start + token.pos + m.start()) + cur.setPosition(start + token.pos + m.end(), QTextCursor.KeepAnchor) + found.append((cur, m.group())) + if not found and cursor.hasSelection(): + # still not succeeded, then try flat text + for m in _word_re.finditer(cursor.selection().toPlainText()): + cur = QTextCursor(cursor) + cur.setPosition(start + m.start()) + cur.setPosition(start + m.end(), QTextCursor.KeepAnchor) + found.append((cur, m.group())) + if found: + import hyphendialog + h = hyphendialog.HyphenDialog(self.mainwindow()).hyphenator() + if h: + with cursortools.editBlock(cursor): + for cur, word in found: + hyph_word = h.inserted(word, ' -- ') + if word != hyph_word: + cur.insertText(hyph_word) + + def dehyphenate(self): + """De-hyphenates selected Lyrics text.""" + view = self.mainwindow().currentView() + cursor = view.textCursor() + text = cursor.selection().toPlainText() + if ' --' in text: + with cursortools.keepSelection(cursor, view): + cursor.insertText(removehyphens(text)) + + def copy_dehyphenated(self): + """Copies selected lyrics text to the clipboard with hyphenation removed.""" + text = self.mainwindow().textCursor().selection().toPlainText() + QApplication.clipboard().setText(removehyphens(text)) + + +class Actions(actioncollection.ActionCollection): + name = "lyrics" + + def createActions(self, parent=None): + + self.lyrics_hyphenate = QAction(parent) + self.lyrics_dehyphenate = QAction(parent) + self.lyrics_copy_dehyphenated = QAction(parent) + + self.lyrics_hyphenate.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_L)) + + def translateUI(self): + self.lyrics_hyphenate.setText(_("&Hyphenate Lyrics Text...")) + self.lyrics_dehyphenate.setText(_("&Remove hyphenation")) + self.lyrics_copy_dehyphenated.setText(_("&Copy Lyrics with hyphenation removed")) + + +def removehyphens(text): + """Removes hyphens and extenders from text.""" + text = re.sub(r"[ \t]*--[ \t]*|__[ \t]*|_[ \t]+(_[ \t]+)*", '', text) + return text.replace('_', ' ').replace('~', ' ') + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/main.py frescobaldi-2.0.0/frescobaldi_app/main.py --- frescobaldi-1.2.0/frescobaldi_app/main.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/main.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,117 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Entry point of Frescobaldi. +""" + +from __future__ import unicode_literals + +import sip +sip.setapi("QString", 2) +sip.setapi("QVariant", 2) + +import os +import re +import sys + +from PyQt4.QtCore import QUrl +from PyQt4.QtGui import QApplication, QTextCursor + +import toplevel # Find all modules and packages as toplevel +import info # Information about our application +import app # Construct QApplication +import guistyle # Setup GUI style +import po.setup # Setup language +import mainwindow # contains MainWindow class +import session # Initialize QSessionManager support +import sessions # Initialize our own named session support +import document # contains Document class + +# boot Frescobaldi-specific stuff that should be running on startup +import viewhighlighter # highlight arbitrary ranges in text +import matcher # matches braces etc in active text window +import progress # creates progress bar in view space +import autocomplete # auto-complete input + +def startmain(): + import optparse + optparse._ = _ # let optparse use our translations + parser = optparse.OptionParser( + usage = _("{appname} [options] file ...").format(appname=info.name), + version = "{0} {1}".format(info.appname, info.version), + description = _("A LilyPond Music Editor")) + parser.add_option('-e', '--encoding', metavar=_("ENC"), + help=_("Encoding to use")) + parser.add_option('-l', '--line', type="int", metavar=_("NUM"), + help=_("Line number to go to, starting at 1")) + parser.add_option('-c', '--column', type="int", metavar=_("NUM"), + help=_("Column to go to, starting at 0"), default=0) + parser.add_option('--start', metavar=_("NAME"), + help=_("Session to start ('{none}' for empty session)").format(none="none"), + dest="session") + + if os.name == 'nt': + args = QApplication.arguments()[2:] + else: + args = QApplication.arguments()[1:] + options, files = parser.parse_args(args) + + # load specified session + doc = None + if options.session and options.session != "none": + doc = sessions.loadSession(options.session) + + # Just create one MainWindow + win = mainwindow.MainWindow() + win.show() + + if files: + # make urls + for arg in files: + if re.match(r'^(https?|s?ftp)://', arg): + url = QUrl(arg) + elif arg.startswith('file://'): + url = QUrl.fromLocalFile(arg[7:]) + elif arg.startswith('file:'): + url = QUrl.fromLocalFile(os.path.abspath(arg[5:])) + else: + url = QUrl.fromLocalFile(os.path.abspath(arg)) + doc = win.openUrl(url, options.encoding) + elif not options.session: + # no docs, load default session + doc = sessions.loadDefaultSession() + win.setCurrentDocument(doc or document.Document()) + if files and options.line is not None: + # set the last loaded document active and apply navigation if requested + pos = doc.findBlockByNumber(options.line - 1).position() + options.column + cursor = QTextCursor(doc) + cursor.setPosition(pos) + win.currentView().setTextCursor(cursor) + win.currentView().centerCursor() + +if app.qApp.isSessionRestored(): + # Restore session, we are started by the session manager + session.restoreSession() +else: + # Parse command line arguments + startmain() + +sys.excepthook = app.excepthook +sys.displayhook = app.displayhook diff -Nru frescobaldi-1.2.0/frescobaldi_app/mainwindow.py frescobaldi-2.0.0/frescobaldi_app/mainwindow.py --- frescobaldi-1.2.0/frescobaldi_app/mainwindow.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/mainwindow.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,971 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Frescobaldi Main Window. +""" + +from __future__ import unicode_literals + +import itertools +import os +import weakref + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import backup +import info +import icons +import actioncollection +import actioncollectionmanager +import menu +import tabbar +import document +import view +import viewmanager +import highlighter +import historymanager +import recentfiles +import sessions.manager +import util +import helpers +import panels +import engrave +import scorewiz + + +class MainWindow(QMainWindow): + + # both signals emit (current, previous) + currentDocumentChanged = pyqtSignal(document.Document, document.Document) + currentViewChanged = pyqtSignal(view.View, view.View) + + # emitted when whether there is a selection changes + selectionStateChanged = pyqtSignal(bool) + + def __init__(self, other=None): + """Creates a new MainWindow. + + It adds itself to app.windows to keep a reference. + It shares the documents list with all other MainWindows. It copies + some info (like the currently active document) from the 'other' window, + if given. + + """ + QMainWindow.__init__(self) + self.setAttribute(Qt.WA_DeleteOnClose) + + # this could be made configurable + self.setCorner(Qt.TopLeftCorner, Qt.LeftDockWidgetArea) + self.setCorner(Qt.BottomLeftCorner, Qt.LeftDockWidgetArea) + self.setCorner(Qt.TopRightCorner, Qt.RightDockWidgetArea) + self.setCorner(Qt.BottomRightCorner, Qt.RightDockWidgetArea) + + self._currentDocument = None + self._currentView = lambda: None + self._selectedState = None + + # find an unused objectName + names = set(win.objectName() for win in app.windows) + for num in itertools.count(1): + name = "MainWindow{0}".format(num) + if name not in names: + self.setObjectName(name) + break + + self.setWindowIcon(icons.get('frescobaldi')) + app.windows.append(self) + + mainwidget = QWidget() + self.setCentralWidget(mainwidget) + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + mainwidget.setLayout(layout) + self.tabBar = tabbar.TabBar(self) + self.viewManager = viewmanager.ViewManager(self) + layout.addWidget(self.tabBar) + layout.addWidget(self.viewManager) + + self.createActions() + self.createMenus() + self.createToolBars() + + app.translateUI(self) + app.sessionChanged.connect(self.updateWindowTitle) + + self.readSettings() + + self.historyManager = historymanager.HistoryManager(self, other.historyManager if other else None) + self.viewManager.viewChanged.connect(self.slotViewChanged) + self.tabBar.currentDocumentChanged.connect(self.setCurrentDocument) + self.setAcceptDrops(True) + + # keep track of all ActionCollections for the keyboard settings dialog + actioncollectionmanager.manager(self).addActionCollection(self.actionCollection) + actioncollectionmanager.manager(self).addActionCollection(self.viewManager.actionCollection) + + if other: + self.setCurrentDocument(other.currentDocument()) + app.mainwindowCreated(self) + + def documents(self): + """Returns the list of documents in the order of the TabBar.""" + return self.tabBar.documents() + + def currentView(self): + """Returns the current View or None.""" + return self._currentView() + + def currentDocument(self): + """Returns the current Document or None.""" + return self._currentDocument + + def setCurrentDocument(self, doc, findOpenView=False): + self.viewManager.setCurrentDocument(doc, findOpenView) + + def hasSelection(self): + """Returns whether there is a selection.""" + return self.textCursor().hasSelection() if self.currentView() else False + + def textCursor(self): + """Returns the QTextCursor of the current View. + + Raises an error if there is not yet a view. + + """ + return self.currentView().textCursor() + + def setTextCursor(self, cursor, findOpenView=False): + """Switches to the document() of the cursor and then sets that cursor on its View.""" + self.setCurrentDocument(cursor.document(), findOpenView) + self.currentView().setTextCursor(cursor) + + def slotViewChanged(self, view): + curv = self._currentView() + if curv: + if curv is view: + return + curv.copyAvailable.disconnect(self.updateSelection) + curv.selectionChanged.disconnect(self.updateSelection) + view.copyAvailable.connect(self.updateSelection) + view.selectionChanged.connect(self.updateSelection) + self._currentView = weakref.ref(view) + + doc = view.document() + curd, self._currentDocument = self._currentDocument, doc + if curd is not doc: + if curd: + curd.undoAvailable.disconnect(self.updateDocActions) + curd.redoAvailable.disconnect(self.updateDocActions) + curd.modificationChanged.disconnect(self.updateWindowTitle) + curd.urlChanged.disconnect(self.updateWindowTitle) + curd.loaded.disconnect(self.updateDocActions) + doc.undoAvailable.connect(self.updateDocActions) + doc.redoAvailable.connect(self.updateDocActions) + doc.modificationChanged.connect(self.updateWindowTitle) + doc.urlChanged.connect(self.updateWindowTitle) + doc.loaded.connect(self.updateDocActions) + self.updateDocActions() + self.updateWindowTitle() + self.updateSelection() + self.currentViewChanged.emit(view, curv) + if curd is not doc: + self.currentDocumentChanged.emit(doc, curd) + + def updateSelection(self): + selection = self.textCursor().hasSelection() + if selection != self._selectedState: + self._selectedState = selection + self.selectionStateChanged.emit(selection) + ac = self.actionCollection + ac.edit_copy.setEnabled(selection) + ac.edit_copy_colored_html.setEnabled(selection) + ac.edit_cut.setEnabled(selection) + ac.edit_select_none.setEnabled(selection) + + def updateDocActions(self): + doc = self.currentDocument() + ac = self.actionCollection + ac.edit_undo.setEnabled(doc.isUndoAvailable()) + ac.edit_redo.setEnabled(doc.isRedoAvailable()) + + def updateWindowTitle(self): + doc = self.currentDocument() + name = [] + if sessions.currentSession(): + name.append(sessions.currentSession() + ':') + if doc: + if doc.url().isEmpty(): + name.append(doc.documentName()) + elif doc.url().toLocalFile(): + name.append(util.homify(doc.url().toLocalFile())) + else: + name.append(doc.url().toString()) + if doc.isModified(): + # L10N: state of document in window titlebar + name.append(_("[modified]")) + self.setWindowTitle(app.caption(" ".join(name))) + + def dropEvent(self, ev): + if not ev.source() and ev.mimeData().hasUrls(): + ev.accept() + docs = [self.openUrl(url) for url in ev.mimeData().urls()] + if docs: + self.setCurrentDocument(docs[-1]) + + def dragEnterEvent(self, ev): + if not ev.source() and ev.mimeData().hasUrls(): + ev.accept() + + def closeEvent(self, ev): + lastWindow = len(app.windows) == 1 + if lastWindow: + sessions.manager.get(self).saveCurrentSessionIfDesired() + self.writeSettings() + if not lastWindow or self.queryClose(): + app.windows.remove(self) + app.mainwindowClosed(self) + ev.accept() + else: + ev.ignore() + + def queryClose(self): + """Tries to close all documents, returns True if succeeded.""" + for doc in self.historyManager.documents(): + if not self.queryCloseDocument(doc): + return False + for doc in self.historyManager.documents()[::-1]: + doc.close() + return True + + def queryCloseDocument(self, doc): + """Returns whether a document can be closed. + + If modified, asks the user. The document is not closed. + """ + if not doc.isModified(): + return True + self.setCurrentDocument(doc, findOpenView=True) + res = QMessageBox.warning(self, _("dialog title", "Close Document"), + _("The document \"{name}\" has been modified.\n" + "Do you want to save your changes or discard them?").format(name=doc.documentName()), + QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) + if res == QMessageBox.Save: + return self.saveDocument(doc) + else: + return res == QMessageBox.Discard + + def createPopupMenu(self): + """ Adds an entry to the popup menu to show/hide the tab bar. """ + menu = QMainWindow.createPopupMenu(self) + menu.addSeparator() + a = menu.addAction(_("Tab Bar")) + a.setCheckable(True) + a.setChecked(self.tabBar.isVisible()) + a.toggled.connect(self.tabBar.setVisible) + return menu + + def readSettings(self): + """ Read a few settings from the application global config. """ + settings = QSettings() + settings.beginGroup('mainwindow') + defaultSize = QApplication.desktop().screen().size() * 2 / 3 + self.resize(settings.value("size", defaultSize)) + self.restoreState(settings.value('state', QByteArray())) + self.tabBar.setVisible(settings.value('tabbar', True) + not in (False, "false")) + + def writeSettings(self): + """ Write a few settings to the application global config. """ + settings = QSettings() + settings.beginGroup('mainwindow') + if not self.isFullScreen(): + settings.setValue("size", self.size()) + settings.setValue('state', self.saveState()) + settings.setValue('tabbar', self.tabBar.isVisible()) + + def readSessionSettings(self, settings): + """Restore ourselves from session manager settings. + + These methods store much more information than the readSettings and + writeSettings methods. This method tries to restore window size and + position. Also the objectName() is set, so that the window manager can + preserve stacking order, etc. + + """ + name = settings.value('name', '') + if name: + self.setObjectName(name) + self.restoreGeometry(settings.value('geometry', QByteArray())) + self.restoreState(settings.value('state', QByteArray())) + + def writeSessionSettings(self, settings): + """Write our state to the session manager settings. + + See readSessionSettings(). + + """ + settings.setValue('name', self.objectName()) + settings.setValue('geometry', self.saveGeometry()) + settings.setValue('state', self.saveState()) + + def openUrl(self, url, encoding=None): + """Same as app.openUrl but with some error checking and recent files.""" + if not url.toLocalFile(): + # we only support local files + QMessageBox.warning(self, app.caption(_("Warning")), + _("Can't load non-local document:\n\n{url}").format( + url=url.toString())) + else: + recentfiles.add(url) + return app.openUrl(url, encoding) + + ## + # Implementations of menu actions + ## + + def newDocument(self): + """ Creates a new, empty document. """ + self.setCurrentDocument(document.Document()) + + def openDocument(self): + """ Displays an open dialog to open one or more documents. """ + ext = os.path.splitext(self.currentDocument().url().path())[1] + filetypes = app.filetypes(ext) + caption = app.caption(_("dialog title", "Open File")) + directory = os.path.dirname(self.currentDocument().url().toLocalFile()) or app.basedir() + files = QFileDialog.getOpenFileNames(self, caption, directory, filetypes) + docs = [self.openUrl(QUrl.fromLocalFile(f)) for f in files] + if docs: + self.setCurrentDocument(docs[-1]) + + def saveDocument(self, doc): + """ Saves the document, asking for a name if necessary. + + Returns True if saving succeeded. + + """ + if doc.url().isEmpty(): + return self.saveDocumentAs(doc) + filename = dest = doc.url().toLocalFile() + if not filename: + dest = doc.url().toString() + if not util.iswritable(filename): + QMessageBox.warning(self, app.caption(_("Error")), + _("Can't write to destination:\n\n{url}").format(url=dest)) + return False + b = backup.backup(filename) + success = doc.save() + if not success: + QMessageBox.warning(self, app.caption(_("Error")), + _("Can't write to destination:\n\n{url}").format(url=filename)) + elif b: + backup.removeBackup(filename) + return success + + def saveDocumentAs(self, doc): + """ Saves the document, always asking for a name. + + Returns True if saving succeeded. + + """ + filename = doc.url().toLocalFile() + if filename: + filetypes = app.filetypes(os.path.splitext(filename)[1]) + else: + filename = app.basedir() # default directory to save to + import documentinfo + import ly.lex + filetypes = app.filetypes(ly.lex.extensions[documentinfo.mode(doc)]) + caption = app.caption(_("dialog title", "Save File")) + filename = QFileDialog.getSaveFileName(self, caption, filename, filetypes) + if not filename: + return False # cancelled + if not util.iswritable(filename): + QMessageBox.warning(self, app.caption(_("Error")), + _("Can't write to destination:\n\n{url}").format(url=filename)) + return False + url = QUrl.fromLocalFile(filename) + doc.setUrl(url) + recentfiles.add(url) + return self.saveDocument(doc) + + def closeDocument(self, doc): + """ Closes the document, asking for saving if modified. + + Returns True if closing succeeded. + + """ + close = self.queryCloseDocument(doc) + if close: + doc.close() + # keep one document + if not app.documents: + self.setCurrentDocument(document.Document()) + return close + + def saveCurrentDocument(self): + return self.saveDocument(self.currentDocument()) + + def saveCurrentDocumentAs(self): + return self.saveDocumentAs(self.currentDocument()) + + def saveCopyAs(self): + import ly.lex + doc = self.currentDocument() + if not self.currentView().textCursor().hasSelection(): + import documentinfo + mode = documentinfo.mode(doc) + data = doc.encodedText() + caption = app.caption(_("dialog title", "Save Copy")) + else: + import fileinfo + text = self.currentView().textCursor().selection().toPlainText() + mode = fileinfo.textmode(text) + data = util.encode(text) + caption = app.caption(_("dialog title", "Save Selection")) + filetypes = app.filetypes(ly.lex.extensions[mode]) + dirname = os.path.dirname(doc.url().toLocalFile()) or app.basedir() + filename = QFileDialog.getSaveFileName(self, caption, dirname, filetypes) + if not filename: + return # cancelled + try: + with open(filename, "w") as f: + f.write(data) + except (IOError, OSError) as err: + QMessageBox.warning(self, app.caption(_("Error")), + _("Can't write to destination:\n\n{url}\n\n{error}").format( + url=filename, error=err.strerror)) + + def closeCurrentDocument(self): + return self.closeDocument(self.currentDocument()) + + def saveAllDocuments(self): + """ Saves all documents. + + Returns True if all documents were saved. + If one document failed or was cancelled the whole operation is cancelled + and this function returns False. + + """ + cur = self.currentDocument() + for doc in self.historyManager.documents(): + if doc.isModified(): + if doc.url().isEmpty(): + self.setCurrentDocument(doc, findOpenView=True) + res = self.saveDocumentAs(doc) + else: + res = self.saveDocument(doc) + if not res: + return False + self.setCurrentDocument(cur, findOpenView=True) + return True + + def closeOtherDocuments(self): + """ Closes all documents that are not the current document. + + Returns True if all documents were closed. + + """ + cur = self.currentDocument() + docs = self.historyManager.documents()[1:] + for doc in docs: + if not self.queryCloseDocument(doc): + self.setCurrentDocument(cur, findOpenView=True) + return False + for doc in docs: + doc.close() + return True + + def closeAllDocuments(self): + """Closes all documents and keep one new, empty document.""" + sessions.manager.get(self).saveCurrentSessionIfDesired() + if self.queryClose(): + sessions.setCurrentSession(None) + self.setCurrentDocument(document.Document()) + + def quit(self): + """Closes all MainWindows.""" + for window in app.windows[:]: # copy + if window is not self: + window.close() + self.close() + + def insertFromFile(self): + ext = os.path.splitext(self.currentDocument().url().path())[1] + filetypes = app.filetypes(ext) + caption = app.caption(_("dialog title", "Insert From File")) + directory = os.path.dirname(self.currentDocument().url().toLocalFile()) or app.basedir() + filename = QFileDialog.getOpenFileName(self, caption, directory, filetypes) + if filename: + try: + data = open(filename).read() + except (IOError, OSError) as err: + QMessageBox.warning(self, app.caption(_("Error")), + _("Can't read from source:\n\n{url}\n\n{error}").format( + url=filename, error=err.strerror)) + else: + text = util.decode(data) + self.currentView().textCursor().insertText(text) + + def openCurrentDirectory(self): + import resultfiles + directory = resultfiles.results(self.currentDocument()).currentDirectory() + if not directory: + directory = app.basedir() or os.getcwdu() + helpers.openUrl(QUrl.fromLocalFile(directory), "directory") + + def printSource(self): + cursor = self.currentView().textCursor() + printer = QPrinter() + dlg = QPrintDialog(printer, self) + dlg.setWindowTitle(app.caption(_("dialog title", "Print Source"))) + options = QAbstractPrintDialog.PrintToFile | QAbstractPrintDialog.PrintShowPageSize + if cursor.hasSelection(): + options |= QAbstractPrintDialog.PrintSelection + dlg.setOptions(options) + if dlg.exec_(): + doc = highlighter.htmlCopy(self.currentDocument(), 'printer') + doc.setMetaInformation(QTextDocument.DocumentTitle, self.currentDocument().url().toString()) + font = doc.defaultFont() + font.setPointSizeF(font.pointSizeF() * 0.8) + doc.setDefaultFont(font) + if dlg.testOption(QAbstractPrintDialog.PrintSelection): + # cut out not selected text + start, end = cursor.selectionStart(), cursor.selectionEnd() + cur1 = QTextCursor(doc) + cur1.setPosition(start, QTextCursor.KeepAnchor) + cur2 = QTextCursor(doc) + cur2.setPosition(end) + cur2.movePosition(QTextCursor.End, QTextCursor.KeepAnchor) + cur2.removeSelectedText() + cur1.removeSelectedText() + doc.print_(printer) + + def exportColoredHtml(self): + doc = self.currentDocument() + name, ext = os.path.splitext(os.path.basename(doc.url().path())) + if name: + if ext.lower() == ".html": + name += "_html" + name += ".html" + dir = os.path.dirname(doc.url().toLocalFile()) + if dir: + name = os.path.join(dir, name) + filename = QFileDialog.getSaveFileName(self, app.caption(_("Export as HTML")), + name, "{0} (*.html)".format("HTML Files")) + if not filename: + return #cancelled + html = highlighter.htmlCopy(doc).toHtml('utf-8').encode('utf-8') + try: + with open(filename, "w") as f: + f.write(str(html)) + except (IOError, OSError) as err: + QMessageBox.warning(self, app.caption(_("Error")), + _("Can't write to destination:\n\n{url}\n\n{error}").format(url=filename, error=err)) + + def undo(self): + self.currentDocument().undo() + + def redo(self): + self.currentDocument().redo() + + def cut(self): + self.currentView().cut() + + def copy(self): + self.currentView().copy() + + def paste(self): + self.currentView().paste() + + def copyColoredHtml(self): + cursor = self.currentView().textCursor() + if not cursor.hasSelection(): + return + doc = highlighter.htmlCopy(self.currentDocument()) + cur1 = QTextCursor(doc) + cur1.setPosition(cursor.anchor()) + cur1.setPosition(cursor.position(), QTextCursor.KeepAnchor) + data = QMimeData() + html = cur1.selection().toHtml() + data.setHtml(html) + data.setText(html) + QApplication.clipboard().setMimeData(data) + + def selectNone(self): + cursor = self.currentView().textCursor() + cursor.clearSelection() + self.currentView().setTextCursor(cursor) + + def selectAll(self): + self.currentView().selectAll() + + def find(self): + import search + search.Search.instance(self).find() + + def replace(self): + import search + search.Search.instance(self).replace() + + def showPreferences(self): + import preferences + dlg = preferences.PreferencesDialog(self) + dlg.exec_() + dlg.deleteLater() + + def toggleFullScreen(self, enabled): + if enabled: + self._maximized = self.isMaximized() + self.showFullScreen() + else: + self.showNormal() + if self._maximized: + self.showMaximized() + + def newWindow(self): + """Opens a new MainWindow.""" + self.writeSettings() + MainWindow(self).show() + + def scrollUp(self): + """Scroll up without moving the cursor""" + sb = self.currentView().verticalScrollBar() + sb.setValue(sb.value() - 1 if sb.value() else 0) + + def scrollDown(self): + """Scroll down without moving the cursor""" + sb = self.currentView().verticalScrollBar() + sb.setValue(sb.value() + 1) + + def selectFullLinesUp(self): + """Select lines upwards, selecting full lines.""" + self.selectFullLines(QTextCursor.Up) + + def selectFullLinesDown(self): + """Select lines downwards, selecting full lines.""" + self.selectFullLines(QTextCursor.Down) + + def selectFullLines(self, direction): + """Select full lines in the direction QTextCursor.Up or Down.""" + view = self.currentView() + cur = view.textCursor() + position = cur.position() + cur.setPosition(cur.anchor()) + cur.movePosition(QTextCursor.StartOfLine) + cur.setPosition(position, QTextCursor.KeepAnchor) + cur.movePosition(direction, QTextCursor.KeepAnchor) + cur.movePosition(QTextCursor.StartOfLine, QTextCursor.KeepAnchor) + view.setTextCursor(cur) + + def showManual(self): + """Shows the user guide, called when user presses F1.""" + import help + help.help("contents") + + def showAbout(self): + """Shows about dialog.""" + import about + about.AboutDialog(self).exec_() + + def reportBug(self): + """Opens e-mail composer to send a bug or feature report.""" + import bugreport + bugreport.email('', _( + "Please describe the issue or feature request.\n" + "Provide as much information as possible.\n\n\n")) + + def createActions(self): + self.actionCollection = ac = ActionCollection() + + # recent files + self.menu_recent_files = m = QMenu() + ac.file_open_recent.setMenu(m) + m.aboutToShow.connect(self.populateRecentFilesMenu) + m.triggered.connect(self.slotRecentFilesAction) + + # connections + ac.file_quit.triggered.connect(self.quit, Qt.QueuedConnection) + ac.file_new.triggered.connect(self.newDocument) + ac.file_open.triggered.connect(self.openDocument) + ac.file_insert_file.triggered.connect(self.insertFromFile) + ac.file_open_current_directory.triggered.connect(self.openCurrentDirectory) + ac.file_save.triggered.connect(self.saveCurrentDocument) + ac.file_save_as.triggered.connect(self.saveCurrentDocumentAs) + ac.file_save_copy_as.triggered.connect(self.saveCopyAs) + ac.file_save_all.triggered.connect(self.saveAllDocuments) + ac.file_print_source.triggered.connect(self.printSource) + ac.file_close.triggered.connect(self.closeCurrentDocument) + ac.file_close_other.triggered.connect(self.closeOtherDocuments) + ac.file_close_all.triggered.connect(self.closeAllDocuments) + ac.export_colored_html.triggered.connect(self.exportColoredHtml) + ac.edit_undo.triggered.connect(self.undo) + ac.edit_redo.triggered.connect(self.redo) + ac.edit_cut.triggered.connect(self.cut) + ac.edit_copy.triggered.connect(self.copy) + ac.edit_paste.triggered.connect(self.paste) + ac.edit_copy_colored_html.triggered.connect(self.copyColoredHtml) + ac.edit_select_all.triggered.connect(self.selectAll) + ac.edit_select_none.triggered.connect(self.selectNone) + ac.edit_select_full_lines_up.triggered.connect(self.selectFullLinesUp) + ac.edit_select_full_lines_down.triggered.connect(self.selectFullLinesDown) + ac.edit_find.triggered.connect(self.find) + ac.edit_replace.triggered.connect(self.replace) + ac.edit_preferences.triggered.connect(self.showPreferences) + ac.view_next_document.triggered.connect(self.tabBar.nextDocument) + ac.view_previous_document.triggered.connect(self.tabBar.previousDocument) + ac.view_scroll_up.triggered.connect(self.scrollUp) + ac.view_scroll_down.triggered.connect(self.scrollDown) + ac.window_new.triggered.connect(self.newWindow) + ac.window_fullscreen.toggled.connect(self.toggleFullScreen) + ac.help_manual.triggered.connect(self.showManual) + ac.help_whatsthis.triggered.connect(QWhatsThis.enterWhatsThisMode) + ac.help_about.triggered.connect(self.showAbout) + ac.help_bugreport.triggered.connect(self.reportBug) + + def populateRecentFilesMenu(self): + self.menu_recent_files.clear() + for url in recentfiles.urls(): + f = url.toLocalFile() + dirname, basename = os.path.split(f) + text = "{0} ({1})".format(basename, util.homify(dirname)) + self.menu_recent_files.addAction(text).url = url + util.addAccelerators(self.menu_recent_files.actions()) + + def slotRecentFilesAction(self, action): + """Called when a recent files menu action is triggered.""" + doc = self.openUrl(action.url) + self.setCurrentDocument(doc) + + def createMenus(self): + menu.createMenus(self) + # actions that are not in menus + ac = self.actionCollection + self.addAction(ac.view_scroll_up) + self.addAction(ac.view_scroll_down) + self.addAction(ac.edit_select_full_lines_up) + self.addAction(ac.edit_select_full_lines_down) + + def createToolBars(self): + ac = self.actionCollection + self.toolbar_main = t = self.addToolBar('') + t.setObjectName('toolbar_main') + t.addAction(ac.file_new) + t.addAction(ac.file_open) + t.addSeparator() + t.addAction(ac.file_save) + t.addAction(ac.file_save_as) + t.addSeparator() + t.addAction(ac.edit_undo) + t.addAction(ac.edit_redo) + t.addSeparator() + t.addAction(scorewiz.ScoreWizard.instance(self).actionCollection.scorewiz) + t.addAction(engrave.engraver(self).actionCollection.engrave_runner) + + self.toolbar_music = t = self.addToolBar('') + t.setObjectName('toolbar_music') + ma = panels.manager(self).musicview.actionCollection + t.addAction(ma.music_document_select) + t.addAction(ma.music_print) + t.addSeparator() + t.addAction(ma.music_zoom_in) + t.addAction(ma.music_zoom_combo) + t.addAction(ma.music_zoom_out) + + def translateUI(self): + self.toolbar_main.setWindowTitle(_("Main Toolbar")) + self.toolbar_music.setWindowTitle(_("Music View Toolbar")) + + +class ActionCollection(actioncollection.ActionCollection): + name = "main" + def createActions(self, parent=None): + self.file_new = QAction(parent) + self.file_open = QAction(parent) + self.file_open_recent = QAction(parent) + self.file_insert_file = QAction(parent) + self.file_open_current_directory = QAction(parent) + self.file_save = QAction(parent) + self.file_save_as = QAction(parent) + self.file_save_copy_as = QAction(parent) + self.file_save_all = QAction(parent) + self.file_print_source = QAction(parent) + self.file_close = QAction(parent) + self.file_close_other = QAction(parent) + self.file_close_all = QAction(parent) + self.file_quit = QAction(parent) + + self.export_colored_html = QAction(parent) + + self.edit_undo = QAction(parent) + self.edit_redo = QAction(parent) + self.edit_cut = QAction(parent) + self.edit_copy = QAction(parent) + self.edit_copy_colored_html = QAction(parent) + self.edit_paste = QAction(parent) + self.edit_select_all = QAction(parent) + self.edit_select_current_toplevel = QAction(parent) + self.edit_select_none = QAction(parent) + self.edit_select_full_lines_up = QAction(parent) + self.edit_select_full_lines_down = QAction(parent) + self.edit_find = QAction(parent) + self.edit_find_next = QAction(parent) + self.edit_find_previous = QAction(parent) + self.edit_replace = QAction(parent) + self.edit_preferences = QAction(parent) + + self.view_next_document = QAction(parent) + self.view_previous_document = QAction(parent) + self.view_scroll_up = QAction(parent) + self.view_scroll_down = QAction(parent) + + self.window_new = QAction(parent) + self.window_fullscreen = QAction(parent) + self.window_fullscreen.setCheckable(True) + + self.help_manual = QAction(parent) + self.help_whatsthis = QAction(parent) + self.help_about = QAction(parent) + self.help_bugreport = QAction(parent) + + # icons + self.file_new.setIcon(icons.get('document-new')) + self.file_open.setIcon(icons.get('document-open')) + self.file_open_recent.setIcon(icons.get('document-open-recent')) + self.file_open_current_directory.setIcon(icons.get('folder-open')) + self.file_save.setIcon(icons.get('document-save')) + self.file_save_as.setIcon(icons.get('document-save-as')) + self.file_save_copy_as.setIcon(icons.get('document-save-as')) + self.file_save_all.setIcon(icons.get('document-save-all')) + self.file_print_source.setIcon(icons.get('document-print')) + self.file_close.setIcon(icons.get('document-close')) + self.file_quit.setIcon(icons.get('application-exit')) + + self.edit_undo.setIcon(icons.get('edit-undo')) + self.edit_redo.setIcon(icons.get('edit-redo')) + self.edit_cut.setIcon(icons.get('edit-cut')) + self.edit_copy.setIcon(icons.get('edit-copy')) + self.edit_paste.setIcon(icons.get('edit-paste')) + self.edit_select_all.setIcon(icons.get('edit-select-all')) + self.edit_select_current_toplevel.setIcon(icons.get('edit-select')) + self.edit_find.setIcon(icons.get('edit-find')) + self.edit_find_next.setIcon(icons.get('go-down-search')) + self.edit_find_previous.setIcon(icons.get('go-up-search')) + self.edit_replace.setIcon(icons.get('edit-find-replace')) + self.edit_preferences.setIcon(icons.get('preferences-system')) + + self.view_next_document.setIcon(icons.get('go-next')) + self.view_previous_document.setIcon(icons.get('go-previous')) + + self.window_new.setIcon(icons.get('window-new')) + self.window_fullscreen.setIcon(icons.get('view-fullscreen')) + + self.help_manual.setIcon(icons.get('help-contents')) + self.help_whatsthis.setIcon(icons.get('help-contextual')) + self.help_bugreport.setIcon(icons.get('tools-report-bug')) + self.help_about.setIcon(icons.get('help-about')) + + # shortcuts + self.file_new.setShortcuts(QKeySequence.New) + self.file_open.setShortcuts(QKeySequence.Open) + self.file_save.setShortcuts(QKeySequence.Save) + self.file_save_as.setShortcuts(QKeySequence.SaveAs) + self.file_close.setShortcuts(QKeySequence.Close) + self.file_quit.setShortcuts(QKeySequence.Quit) + + self.edit_undo.setShortcuts(QKeySequence.Undo) + self.edit_redo.setShortcuts(QKeySequence.Redo) + self.edit_cut.setShortcuts(QKeySequence.Cut) + self.edit_copy.setShortcuts(QKeySequence.Copy) + self.edit_paste.setShortcuts(QKeySequence.Paste) + self.edit_select_all.setShortcuts(QKeySequence.SelectAll) + self.edit_select_current_toplevel.setShortcut(QKeySequence(Qt.SHIFT+Qt.CTRL+Qt.Key_B)) + self.edit_select_none.setShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_A)) + self.edit_select_full_lines_up.setShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Up)) + self.edit_select_full_lines_down.setShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Down)) + self.edit_find.setShortcuts(QKeySequence.Find) + self.edit_find_next.setShortcuts(QKeySequence.FindNext) + self.edit_find_previous.setShortcuts(QKeySequence.FindPrevious) + self.edit_replace.setShortcuts(QKeySequence.Replace) + self.edit_preferences.setShortcuts(QKeySequence.Preferences) + + self.view_next_document.setShortcuts(QKeySequence.Forward) + self.view_previous_document.setShortcuts(QKeySequence.Back) + self.view_scroll_up.setShortcut(Qt.CTRL + Qt.Key_Up) + self.view_scroll_down.setShortcut(Qt.CTRL + Qt.Key_Down) + + self.window_fullscreen.setShortcuts([QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_F), QKeySequence(Qt.Key_F11)]) + + self.help_manual.setShortcuts(QKeySequence.HelpContents) + self.help_whatsthis.setShortcuts(QKeySequence.WhatsThis) + + def translateUI(self): + self.file_new.setText(_("action: new document", "&New")) + self.file_open.setText(_("&Open...")) + self.file_open_recent.setText(_("Open &Recent")) + self.file_insert_file.setText(_("Insert from &File...")) + self.file_open_current_directory.setText(_("Open Current Directory")) + self.file_save.setText(_("&Save")) + self.file_save_as.setText(_("Save &As...")) + self.file_save_copy_as.setText(_("Save Copy or Selection As...")) + self.file_save_all.setText(_("Save All")) + self.file_print_source.setText(_("Print Source...")) + self.file_close.setText(_("&Close")) + self.file_close_other.setText(_("Close Other Documents")) + self.file_close_all.setText(_("Close All Documents")) + self.file_close_all.setToolTip(_("Closes all documents and leaves the current session.")) + self.file_quit.setText(_("&Quit")) + + self.export_colored_html.setText(_("Export Source as Colored &HTML...")) + + self.edit_undo.setText(_("&Undo")) + self.edit_redo.setText(_("Re&do")) + self.edit_cut.setText(_("Cu&t")) + self.edit_copy.setText(_("&Copy")) + self.edit_copy_colored_html.setText(_("Copy as Colored &HTML")) + self.edit_paste.setText(_("&Paste")) + self.edit_select_all.setText(_("Select &All")) + self.edit_select_current_toplevel.setText(_("Select &Block")) + self.edit_select_none.setText(_("Select &None")) + self.edit_select_full_lines_up.setText(_("Select Whole Lines Up")) + self.edit_select_full_lines_down.setText(_("Select Whole Lines Down")) + self.edit_find.setText(_("&Find...")) + self.edit_find_next.setText(_("Find Ne&xt")) + self.edit_find_previous.setText(_("Find Pre&vious")) + self.edit_replace.setText(_("&Replace...")) + self.edit_preferences.setText(_("Pr&eferences...")) + + self.view_next_document.setText(_("&Next Document")) + self.view_previous_document.setText(_("&Previous Document")) + self.view_scroll_up.setText(_("Scroll Up")) + self.view_scroll_down.setText(_("Scroll Down")) + + self.window_new.setText(_("New &Window")) + self.window_fullscreen.setText(_("&Fullscreen")) + + self.help_manual.setText(_("&User Guide")) + self.help_whatsthis.setText(_("&What's This?")) + self.help_bugreport.setText(_("Report a &Bug...")) + self.help_about.setText(_("&About {appname}...").format(appname=info.appname)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/matcher.py frescobaldi-2.0.0/frescobaldi_app/matcher.py --- frescobaldi-1.2.0/frescobaldi_app/matcher.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/matcher.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,84 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Highlights matching tokens such as { and }, << and >> etc. +""" + +from __future__ import unicode_literals + +import app +import plugin +import ly.lex +import tokeniter +import viewhighlighter + + +class Matcher(plugin.MainWindowPlugin): + def __init__(self, mainwindow): + mainwindow.currentViewChanged.connect(self.newView) + view = mainwindow.currentView() + if view: + self.newView(view) + + def newView(self, view, old=None): + if old: + old.cursorPositionChanged.disconnect(self.checkMatches) + view.cursorPositionChanged.connect(self.checkMatches) + + def checkMatches(self): + # see if there are matches + view = self.mainwindow().currentView() + cursor = view.textCursor() + block = cursor.block() + column = cursor.position() - block.position() + tokens = tokeniter.Runner(block) + source = None + for token in tokens.forward_line(): + if token.pos <= column <= token.end: + if isinstance(token, ly.lex.MatchStart): + source, match, other = tokens.forward(), ly.lex.MatchStart, ly.lex.MatchEnd + break + elif isinstance(token, ly.lex.MatchEnd): + source, match, other = tokens.backward(), ly.lex.MatchEnd, ly.lex.MatchStart + break + elif token.pos > column: + break + if source: + # we've found a matcher item + cursor1 = tokens.cursor() + nest = 0 + for token2 in source: + if isinstance(token2, other) and token2.matchname == token.matchname: + if nest == 0: + # we've found the matching item! + cursor2 = tokens.cursor() + hl = viewhighlighter.highlighter(view) + hl.highlight("match", (cursor1, cursor2), 2, 1000) + return + else: + nest -= 1 + elif isinstance(token2, match) and token2.matchname == token.matchname: + nest += 1 + hl = viewhighlighter.highlighter(view) + hl.clear("match") + + +app.mainwindowCreated.connect(Matcher.instance) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/menu.py frescobaldi-2.0.0/frescobaldi_app/menu.py --- frescobaldi-1.2.0/frescobaldi_app/menu.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/menu.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,320 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Frescobaldi main menu. +""" + +from __future__ import unicode_literals + +import __builtin__ + +from PyQt4.QtGui import QMenu + +import app +import icons +import bookmarkmanager +import documentactions +import documentmenu +import sessions.menu +import pitch +import rhythm +import lyrics +import panels +import engrave.result_menu +import snippet.menu +import scorewiz +import autocomplete + + +# postpone translation +_ = lambda *args: lambda: __builtin__._(*args) + + +def createMenus(mainwindow): + """Adds all the menus to the mainwindow's menubar.""" + m = mainwindow.menuBar() + for f in ( + menu_file, + menu_edit, + menu_view, + menu_insert, + menu_lilypond, + menu_tools, + menu_document, + menu_window, + menu_session, + menu_help, + ): + m.addMenu(f(mainwindow)) + + +class Menu(QMenu): + """A QMenu that auto-translates its title by calling a lambda function.""" + def __init__(self, title_func, parent=None): + """title_func should return the title for the menu when called.""" + super(Menu, self).__init__(parent) + self.title_func = title_func + app.translateUI(self) + + def translateUI(self): + self.setTitle(self.title_func()) + + +def menu_file(mainwindow): + m = Menu(_("menu title", "&File"), mainwindow) + ac = mainwindow.actionCollection + + m.addAction(ac.file_new) + m.addMenu(snippet.menu.TemplateMenu(mainwindow)) + m.addSeparator() + m.addAction(ac.file_open) + m.addAction(ac.file_open_recent) + m.addAction(ac.file_insert_file) + m.addAction(ac.file_open_current_directory) + m.addSeparator() + m.addAction(ac.file_save) + m.addAction(ac.file_save_as) + m.addAction(ac.file_save_copy_as) + m.addAction(panels.manager(mainwindow).snippettool.actionCollection.file_save_as_template) + m.addSeparator() + m.addAction(ac.file_save_all) + m.addSeparator() + m.addAction(panels.manager(mainwindow).musicview.actionCollection.music_print) + m.addAction(ac.file_print_source) + m.addMenu(menu_file_export(mainwindow)) + m.addSeparator() + m.addAction(ac.file_close) + m.addAction(ac.file_close_other) + m.addAction(ac.file_close_all) + m.addSeparator() + m.addAction(ac.file_quit) + return m + + +def menu_file_export(mainwindow): + m = Menu(_("submenu title", "&Export"), mainwindow) + ac = mainwindow.actionCollection + + m.addAction(ac.export_colored_html) + return m + + +def menu_edit(mainwindow): + m = Menu(_("menu title", "&Edit"), mainwindow) + ac = mainwindow.actionCollection + + m.addAction(ac.edit_undo) + m.addAction(ac.edit_redo) + m.addSeparator() + m.addAction(documentactions.get(mainwindow).actionCollection.edit_cut_assign) + m.addAction(ac.edit_cut) + m.addAction(ac.edit_copy) + m.addAction(ac.edit_copy_colored_html) + m.addAction(panels.manager(mainwindow).musicview.actionCollection.music_copy_image) + m.addAction(ac.edit_paste) + m.addSeparator() + m.addAction(ac.edit_select_all) + m.addAction(ac.edit_select_current_toplevel) + m.addAction(ac.edit_select_none) + m.addSeparator() + m.addAction(ac.edit_find) + m.addAction(ac.edit_find_next) + m.addAction(ac.edit_find_previous) + m.addAction(ac.edit_replace) + m.addSeparator() + m.addAction(ac.edit_preferences) + return m + + +def menu_view(mainwindow): + m = Menu(_("menu title", "&View"), mainwindow) + ac = mainwindow.actionCollection + + m.addAction(ac.view_next_document) + m.addAction(ac.view_previous_document) + m.addSeparator() + m.addAction(documentactions.get(mainwindow).actionCollection.view_highlighting) + m.addMenu(menu_view_music(mainwindow)) + m.addSeparator() + ac = bookmarkmanager.BookmarkManager.instance(mainwindow).actionCollection + m.addAction(ac.view_bookmark) + m.addAction(ac.view_next_mark) + m.addAction(ac.view_previous_mark) + m.addAction(ac.view_clear_error_marks) + m.addAction(ac.view_clear_all_marks) + m.addSeparator() + ac = panels.manager(mainwindow).logtool.actionCollection + m.addAction(ac.log_next_error) + m.addAction(ac.log_previous_error) + return m + + +def menu_view_music(mainwindow): + m = Menu(_("submenu title", "Music &View"), mainwindow) + ac = panels.manager(mainwindow).musicview.actionCollection + + m.addAction(ac.music_zoom_in) + m.addAction(ac.music_zoom_out) + m.addSeparator() + m.addAction(ac.music_fit_width) + m.addAction(ac.music_fit_height) + m.addAction(ac.music_fit_both) + m.addSeparator() + m.addAction(ac.music_jump_to_cursor) + return m + + +def menu_insert(mainwindow): + return snippet.menu.InsertMenu(mainwindow) + + +def menu_lilypond(mainwindow): + m = Menu(_("menu title", "&LilyPond"), mainwindow) + ac = engrave.engraver(mainwindow).actionCollection + + m.addAction(ac.engrave_sticky) + m.addSeparator() + m.addAction(ac.engrave_preview) + m.addAction(ac.engrave_publish) + m.addAction(ac.engrave_custom) + m.addAction(ac.engrave_abort) + m.addSeparator() + m.addMenu(menu_lilypond_generated_files(mainwindow)) + return m + + +def menu_lilypond_generated_files(mainwindow): + return engrave.result_menu.Menu(mainwindow) + + +def menu_tools(mainwindow): + m = Menu(_('menu title', '&Tools'), mainwindow) + + m.addAction(scorewiz.ScoreWizard.instance(mainwindow).actionCollection.scorewiz) + m.addSeparator() + ac = documentactions.get(mainwindow).actionCollection + m.addAction(ac.tools_indent_auto) + m.addAction(ac.tools_indent_indent) + m.addAction(ac.tools_reformat) + m.addSeparator() + ac = autocomplete.CompleterManager.instance(mainwindow).actionCollection + m.addAction(ac.autocomplete) + m.addAction(ac.popup_completions) + m.addSeparator() + m.addMenu(menu_tools_pitch(mainwindow)) + m.addMenu(menu_tools_rhythm(mainwindow)) + m.addMenu(menu_tools_lyrics(mainwindow)) + m.addSeparator() + ac = documentactions.get(mainwindow).actionCollection + m.addAction(ac.tools_convert_ly) + m.addSeparator() + panels.manager(mainwindow).addActionsToMenu(m) + return m + + +def menu_tools_lyrics(mainwindow): + m = Menu(_('submenu title', "&Lyrics"), mainwindow) + m.setIcon(icons.get('audio-input-microphone')) + ac = lyrics.lyrics(mainwindow).actionCollection + + m.addAction(ac.lyrics_hyphenate) + m.addAction(ac.lyrics_dehyphenate) + m.addSeparator() + m.addAction(ac.lyrics_copy_dehyphenated) + return m + + +def menu_tools_pitch(mainwindow): + m = Menu(_('submenu title', "&Pitch"), mainwindow) + m.setIcon(icons.get('tools_pitch')) + ac = pitch.Pitch.instance(mainwindow).actionCollection + + m.addAction(ac.pitch_language) + m.addSeparator() + m.addAction(ac.pitch_rel2abs) + m.addAction(ac.pitch_abs2rel) + m.addSeparator() + m.addAction(ac.pitch_transpose) + return m + + +def menu_tools_rhythm(mainwindow): + m = Menu(_('submenu title', "&Rhythm"), mainwindow) + m.setIcon(icons.get('tools_rhythm')) + ac = rhythm.Rhythm.instance(mainwindow).actionCollection + + m.addAction(ac.rhythm_double) + m.addAction(ac.rhythm_halve) + m.addSeparator() + m.addAction(ac.rhythm_dot) + m.addAction(ac.rhythm_undot) + m.addSeparator() + m.addAction(ac.rhythm_remove_scaling) + m.addAction(ac.rhythm_remove) + m.addSeparator() + m.addAction(ac.rhythm_implicit) + m.addAction(ac.rhythm_implicit_per_line) + m.addAction(ac.rhythm_explicit) + m.addSeparator() + m.addAction(ac.rhythm_apply) + m.addAction(ac.rhythm_copy) + m.addAction(ac.rhythm_paste) + return m + + +def menu_document(mainwindow): + return documentmenu.DocumentMenu(mainwindow) + + +def menu_window(mainwindow): + m = Menu(_('menu title', '&Window'), mainwindow) + ac = mainwindow.viewManager.actionCollection + m.addAction(mainwindow.actionCollection.window_new) + m.addSeparator() + m.addAction(ac.window_split_horizontal) + m.addAction(ac.window_split_vertical) + m.addAction(ac.window_close_view) + m.addAction(ac.window_close_others) + m.addAction(ac.window_next_view) + m.addAction(ac.window_previous_view) + m.addSeparator() + m.addAction(mainwindow.actionCollection.window_fullscreen) + return m + + +def menu_session(mainwindow): + return sessions.menu.SessionMenu(mainwindow) + + +def menu_help(mainwindow): + m = Menu(_('menu title', '&Help'), mainwindow) + ac = mainwindow.actionCollection + m.addAction(ac.help_manual) + m.addAction(ac.help_whatsthis) + m.addSeparator() + m.addAction(panels.manager(mainwindow).docbrowser.actionCollection.help_lilypond_doc) + m.addAction(panels.manager(mainwindow).docbrowser.actionCollection.help_lilypond_context) + m.addSeparator() + m.addAction(ac.help_bugreport) + m.addSeparator() + m.addAction(ac.help_about) + return m + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/metainfo.py frescobaldi-2.0.0/frescobaldi_app/metainfo.py --- frescobaldi-1.2.0/frescobaldi_app/metainfo.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/metainfo.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,114 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Store meta information about documents. +""" + +from __future__ import unicode_literals + +import time + +from PyQt4.QtCore import QSettings, QUrl + +import app +import plugin + + +__all__ = ["info", "define"] + + +# This dictionary store the default values: "name": [default, readfunc] +_defaults = {} + + +def info(document): + """Returns a MetaInfo object for the Document.""" + return MetaInfo.instance(document) + + +def define(name, default, readfunc=None): + """Define a variable and its default value to be stored in the metainfo. + + Should be defined before it is requested or set. + If readfunc is not given it defaults to a suitable function for bool or int types. + + """ + if readfunc is None: + if isinstance(default, bool): + if default: + readfunc = lambda v: v not in ('false', False) + else: + readfunc = lambda v: v not in ('true', True) + elif isinstance(default, int): + readfunc = int + else: + readfunc = lambda v: v + _defaults[name] = [default, readfunc] + + # read this value for already loaded metainfo items + for minfo in MetaInfo.instances(): + minfo.loadValue(name) + + +class MetaInfo(plugin.DocumentPlugin): + """Stores meta-information for a Document.""" + def __init__(self, document): + self.load() + document.loaded.connect(self.load, -999) # before all others + document.closed.connect(self.save, 999) # after all others + + def settingsGroup(self): + url = self.document().url() + if not url.isEmpty(): + s = app.settings('metainfo') + s.beginGroup(url.toString().replace('\\', '_').replace('/', '_')) + return s + + def load(self): + s = self.settingsGroup() + for name in _defaults: + self.loadValue(name, s) + + def loadValue(self, name, settings=None): + s = settings or self.settingsGroup() + default, readfunc = _defaults[name] + if s and QSettings().value("metainfo", True) not in (False, 'false'): + self.__dict__[name] = readfunc(s.value(name, default)) + else: + self.__dict__[name] = default + + def save(self): + s = self.settingsGroup() + if s: + s.setValue("time", time.time()) + for name in _defaults: + value = self.__dict__[name] + s.remove(name) if value == _defaults[name][0] else s.setValue(name, value) + + +@app.aboutToQuit.connect +def prune(): + """Prune old info.""" + s = app.settings('metainfo') + month_ago = time.time() - 31 * 24 * 3600 + for key in s.childGroups(): + if float(s.value(key + "/time", 0.0)) < month_ago: + s.remove(key) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/midifile/event.py frescobaldi-2.0.0/frescobaldi_app/midifile/event.py --- frescobaldi-1.2.0/frescobaldi_app/midifile/event.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/midifile/event.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,60 @@ +#! python + +# Python midifile package -- parse, load and play MIDI files. +# Copyright (C) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +midifile.event -- simple Event namedtuple types and a default parsing handler. +""" + +from __future__ import unicode_literals + +import collections + + +MetaEvent = collections.namedtuple('MetaEvent', 'type data') +SysExEvent = collections.namedtuple('SysExEvent', 'type data') +NoteEvent = collections.namedtuple('NoteEvent', 'type channel note value') +ControllerEvent = collections.namedtuple('ControllerEvent', 'channel number value') +ProgramChangeEvent = collections.namedtuple('ProgramChangeEvent', 'channel number') +ChannelAfterTouchEvent = collections.namedtuple('ChannelAfterTouchEvent', 'channel value') +PitchBendEvent = collections.namedtuple('PitchBendEvent', 'channel value') + + +class EventFactory(object): + """Factory for parsed MIDI events. + + The default 'methods' create namedtuple objects. + You can override one or more of those names to return other objects. + + """ + note_event = NoteEvent + controller_event = ControllerEvent + programchange_event = ProgramChangeEvent + channelaftertouch_event = ChannelAfterTouchEvent + pitchbend_event = PitchBendEvent + sysex_event = SysExEvent + meta_event = MetaEvent + + +# MIDI message constants +MIDI_CTL_MSB_MAIN_VOLUME = 0x07 +MIDI_CTL_ALL_SOUNDS_OFF = 0x78 +MIDI_CTL_RESET_CONTROLLERS = 0x79 +MIDI_CTL_ALL_NOTES_OFF = 0x7B + diff -Nru frescobaldi-1.2.0/frescobaldi_app/midifile/__init__.py frescobaldi-2.0.0/frescobaldi_app/midifile/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/midifile/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/midifile/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,37 @@ +#! python + +# Python midifile package -- parse, load and play MIDI files. +# Copyright (C) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The midifile package allows you to load MIDI files and play them. + +The goal is to have simple and very fast access to MIDI files using a pure +Python api. This package consists of several modules that can interact but also +be used separate from each other: + +- parser: load midi files or streams +- event: very simple named tuples representing events +- song: structure loaded data into a Song, with timing and tempo map +- player: can play a Song with settable tempo and output +- output: abstract class representing a MIDI output port + +This package works with Python 2.6 and 2.7, but can easily be adapted for +Python 3. + +""" diff -Nru frescobaldi-1.2.0/frescobaldi_app/midifile/output.py frescobaldi-2.0.0/frescobaldi_app/midifile/output.py --- frescobaldi-1.2.0/frescobaldi_app/midifile/output.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/midifile/output.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,162 @@ +#! python + +# Python midifile package -- parse, load and play MIDI files. +# Copyright (C) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Writes MIDI events to a MIDI output. +""" + +from __future__ import unicode_literals + +import contextlib + +from . import event + + +class Output(object): + """Abstract base class for a MIDI output. + + Inherit to implement the actual writing to MIDI ports. + The midiplayer.Player calls midi_event and all_notes_off. + + """ + + def midi_event(self, midi): + """Handles a list or dict of MIDI events from a Song (midisong.py).""" + if isinstance(midi, dict): + # dict mapping track to events? + midi = sum(map(midi.get, sorted(midi)), []) + self.send_events(midi) + + def reset(self): + """Restores the MIDI output to an initial state. + + Sets the program to 0, the volume to 90 and sends reset_controllers + messages to all channels. + + """ + self.reset_controllers() + self.set_main_volume(90) + self.set_program_change(0) + + def set_main_volume(self, volume, channel=-1): + channels = range(16) if channel == -1 else (channel,) + with self.sender() as send: + for c in channels: + send(event.ControllerEvent(c, event.MIDI_CTL_MSB_MAIN_VOLUME, volume)) + + def set_program_change(self, program, channel=-1): + channels = range(16) if channel == -1 else (channel,) + with self.sender() as send: + for c in channels: + send(event.ProgramChangeEvent(c, program)) + + def reset_controllers(self, channel=-1): + """Sends an all_notes_off message to a channel. + + If the channel is -1 (the default), sends the message to all channels. + + """ + channels = range(16) if channel == -1 else (channel,) + with self.sender() as send: + for c in channels: + send(event.ControllerEvent(c, event.MIDI_CTL_RESET_CONTROLLERS, 0)) + + def all_sounds_off(self, channel=-1): + """Sends an all_notes_off message to a channel. + + If the channel is -1 (the default), sends the message to all channels. + + """ + channels = range(16) if channel == -1 else (channel,) + with self.sender() as send: + for c in channels: + send(event.ControllerEvent(c, event.MIDI_CTL_ALL_NOTES_OFF, 0)) + send(event.ControllerEvent(c, event.MIDI_CTL_ALL_SOUNDS_OFF, 0)) + + def send_events(self, events): + """Writes the list of events to the output port. + + Each event is one of the event types in event.py + Implement to do the actual writing. + + """ + pass + + @contextlib.contextmanager + def sender(self): + """Returns a context manager to call for each event to send. + + When the context manager exits, the events are sent using the + send_events() method. + + """ + l = [] + yield l.append + if l: + self.send_events(l) + + +class PortMidiOutput(Output): + """Writes events to a PortMIDI Output instance. + + The PortMIDI Output instance should be in the output attribute. + + """ + output = None + + def send_events(self, events): + """Writes the list of events to the PortMIDI output port.""" + l = [] + for e in events: + m = self.convert_event(e) + if m: + l.append([m, 0]) + while len(l) > 1024: + self.output.write(l[:1024]) + l = l[1024:] + if l: + self.output.write(l) + + def convert_event(self, e): + """Returns a list of integers representing a MIDI message from event.""" + t = type(e) + if t is event.NoteEvent: + return self.convert_note_event(e) + elif t is event.PitchBendEvent: + return self.convert_pitchbend_event(e) + elif t is event.ProgramChangeEvent: + return self.convert_programchange_event(e) + elif t is event.ControllerEvent: + return self.convert_controller_event(e) + + def convert_note_event(self, e): + return [e.type * 16 + e.channel, e.note, e.value] + + def convert_programchange_event(self, e): + return [0xC0 + e.channel, e.number] + + def convert_controller_event(self, e): + return [0xB0 + e.channel, e.number, e.value] + + def convert_pitchbend_event(self, e): + return [0xE0 + e.channel, e.value & 0x7F, e.value >> 7] + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/midifile/parser.py frescobaldi-2.0.0/frescobaldi_app/midifile/parser.py --- frescobaldi-1.2.0/frescobaldi_app/midifile/parser.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/midifile/parser.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,219 @@ +#! python + +# Python midifile package -- parse, load and play MIDI files. +# Copyright (C) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +midifile.parser -- parses MIDI file data. + +This is a simple module that can parse data from a MIDI file and +its tracks. + +A basic event factory returns the MIDI events as simple named tuples, +but you can subclass the event factory for more sophisticated behaviour. + +Runs with Python 2.6, 2.7. +For Python 3 you can remove the ord() calls. + +""" + +from __future__ import unicode_literals + +import struct + +from . import event + +unpack_midi_header = struct.Struct(b'>hhh').unpack +unpack_int = struct.Struct(b'>i').unpack + + +def get_chunks(s): + """Splits a MIDI file bytes string into chunks. + + Yields (b'Name', b'data') tuples. + + """ + pos = 0 + while pos < len(s): + name = s[pos:pos+4] + size, = unpack_int(s[pos+4:pos+8]) + yield name, s[pos+8:pos+8+size] + pos += size + 8 + + +def parse_midi_data(s): + """Parses MIDI file data from the bytes string s. + + Returns a three tuple (format_type, time_division, tracks). + Every track is an unparsed bytes string. + + May raise ValueError or IndexError in case of invalid MIDI data. + + """ + chunks = get_chunks(s) + for name, data in chunks: + if name == b'MThd': + fmt, ntracks, division = unpack_midi_header(data[:6]) + tracks = [data for name, data in chunks if name == b'MTrk'] + return fmt, division, tracks + break + raise ValueError("invalid midi data") + + +def read_var_len(s, pos): + """Reads variable-length integer from s starting on pos. + + Returns the value and the new position. + + """ + value = 0 + while True: + i = ord(s[pos]) + pos += 1 + value = value * 128 + (i & 0x7F) + if not i & 0x80: + return value, pos + + +def parse_midi_events(s, factory=None): + """Parses the bytes string s (typically a track) for MIDI events. + + If factory is given, it should be an EventFactory instance that + returns objects describing the event. + + Yields two-tuples (delta, event). + + Raises ValueError or IndexError on invalid MIDI data. + + """ + if factory is None: + factory = event.EventFactory() + + running_status = None + + pos = 0 + while pos < len(s): + + delta, pos = read_var_len(s, pos) + + status = ord(s[pos]) + if status & 0x80: + running_status = status + pos += 1 + elif not running_status: + raise ValueError("invalid running status") + else: + status = running_status + + ev_type = status >> 4 + channel = status & 0x0F + + if ev_type <= 0x0A: + # note on, off or aftertouch + note = ord(s[pos]) + value = ord(s[pos+1]) + pos += 2 + ev = factory.note_event(ev_type, channel, note, value) + elif ev_type >= 0x0F: + running_status = None + if status == 0xFF: + # meta event + meta_type = ord(s[pos]) + meta_size, pos = read_var_len(s, pos+1) + meta_data = s[pos:pos+meta_size] + pos += meta_size + ev = factory.meta_event(meta_type, meta_data) + else: + # some sort of sysex + sysex_size, pos = read_var_len(s, pos) + sysex_data = s[pos:pos+sysex_size] + pos += sysex_size + ev = factory.sysex_event(status, sysex_data) + elif ev_type == 0x0E: + # Pitch Bend + value = ord(s[pos]) + ord(s[pos+1]) * 128 + pos += 2 + ev = factory.pitchbend_event(channel, value) + elif ev_type == 0xD: + # Channel AfterTouch + value = ord(s[pos]) + pos += 1 + ev = factory.channelaftertouch_event(channel, value) + elif ev_type == 0xB: + # Controller + number = ord(s[pos]) + value = ord(s[pos+1]) + pos += 2 + ev = factory.controller_event(channel, number, value) + else: # ev_type == 0xC + # Program Change + number = ord(s[pos]) + pos += 1 + ev = factory.programchange_event(channel, number) + yield delta, ev + + +def time_events(track, time=0): + """Yields two-tuples (time, event). + + The track is the generator returned by parse_midi_events, + the time is accumulated from the given starting time (defaulting to 0). + + """ + for delta, ev in track: + time += delta + yield time, ev + + +def time_events_grouped(track, time=0): + """Yields two-tuples (time, event_list). + + Every event_list is a Python list of all events happening on that time. + The track is the generator returned by parse_midi_events, + the time is accumulated from the given starting time (defaulting to 0). + + """ + evs = [] + for delta, ev in track: + if delta: + if evs: + yield time, evs + evs = [] + time += delta + evs.append(ev) + if evs: + yield time, evs + + + +if __name__ == '__main__': + """Test specified MIDI files.""" + import sys + files = sys.argv[1:] + for f in files: + s = open(f, 'rb').read() + ftm, div, tracks = parse_midi_data(s) + try: + for t in tracks: + list(parse_midi_events(t)) + except Exception as e: + print 'error in:', f + print e + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/midifile/player.py frescobaldi-2.0.0/frescobaldi_app/midifile/player.py --- frescobaldi-1.2.0/frescobaldi_app/midifile/player.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/midifile/player.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,408 @@ +#! python + +# Python midifile package -- parse, load and play MIDI files. +# Copyright (C) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A MIDI Player. +""" + +from __future__ import unicode_literals + +import collections +import time +import threading + +from . import song + + +class Player(object): + """The base class for a MIDI player. + + Use set_output() to set a MIDI output instance (see midioutput.py). + You can override: timer_midi_time(), timer_start() and timer_stop() + to use another timing source than the Python threading.Timer instances. + + """ + def __init__(self): + self._song = None + self._events = [] + self._position = 0 + self._offset = 0 + self._sync_time = 0 + self._playing = False + self._tempo_factor = 1.0 + self._output = None + self._last_exception = None + + def set_output(self, output): + """Sets an Output instance that handles the MIDI events. + + Use None to disable all output. + + """ + self._output = output + + def output(self): + """Returns the currently set Output instance.""" + return self._output + + def load(self, filename, time=1000, beat=True): + """Convenience function, loads a MIDI file. + + See set_song() for the other arguments. + + """ + self.set_song(song.load(filename), time, beat) + + def set_song(self, song, time=1000, beat=True): + """Loads the specified Song (see song.py). + + If time is not None, it specifies at which interval (in msec) the + time() method will be called. Default: 1000. + If beat is True (default), the beat() method will be called on every + beat. + + """ + playing = self._playing + if playing: + self.timer_stop_playing() + self._song = song + self._events = make_event_list(song, time, beat) + self._position = 0 + self._offset = 0 + if playing: + self.timer_start_playing() + + def song(self): + """Returns the current Song.""" + return self._song + + def clear(self): + """Unloads a loaded Song.""" + if self._playing: + self.stop() + self._song = None + self._events = [] + self._position = 0 + self._offset = 0 + + def total_time(self): + """Returns the length in msec of the current song.""" + if self._events: + return self._events[-1][0] + return 0 + + def current_time(self): + """Returns the current time position.""" + if self._position >= len(self._events): + time = self.total_time() + else: + time = self._events[self._position][0] + if self._playing: + return time - self.timer_offset() + return time - self._offset + + def start(self): + """Starts playing.""" + if self.has_events(): + self.timer_start_playing() + + def stop(self): + """Stops playing.""" + self.timer_stop_playing() + + def is_playing(self): + """Returns True if the player is playing, else False.""" + return self._playing + + def set_tempo_factor(self, factor): + """Sets the tempo factor as a floating point value (1.0 is normal).""" + self._tempo_factor = float(factor) + + def tempo_factor(self): + """Returns the tempo factor (by default: 1.0).""" + return self._tempo_factor + + def seek(self, time): + """Goes to the specified time (in msec).""" + pos = 0 + offset = 0 + if time: + # bisect our way in the events list. + end = len(self._events) + while pos < end: + mid = (pos + end) // 2 + if time > self._events[mid][0]: + pos = mid + 1 + else: + end = mid + if pos < len(self._events): + offset = self._events[pos][0] - time + self.set_position(pos, offset) + + def seek_measure(self, measnum, beat=1): + """Goes to the specified measure and beat (beat defaults to 1). + + Returns whether the measure position could be found (True or False). + + """ + result = False + for i, (t, e) in enumerate(self._events): + if e.beat: + if e.beat[0] == measnum: + position = i + result = True + if e.beat[1] >= beat: + break + if e.beat[0] > measnum: + break + if result: + self.set_position(position) + return True + return False + + def set_position(self, position, offset=0): + """(Private) Goes to the specified position in the internal events list. + + The default implementation does nothing with the time offset, + but inherited implementations may wait that many msec before + triggering the event at that position. + + This method is called by seek() and seek_measure(). + + """ + old, self._position = self._position, position + if self._playing: + self.timer_stop() + if old != self._position: + self.position_event(old, self._position) + self.timer_schedule(offset, False) + else: + self._offset = offset + + def has_events(self): + """Returns True if there are events left to play.""" + return bool(self._events) and self._position < len(self._events) + + def next_event(self): + """(Private) Handles the current event and advances to the next. + + Returns the time in ms (not adjusted by tempo factor!) before + next_event should be called again. + + If there is no event to handle anymore, returns 0. + If this event was the last, calls finish() and returns 0. + + """ + if self.has_events(): + time, event = self._events[self._position] + self.handle_event(time, event) + self._position += 1 + if self._position < len(self._events): + return self._events[self._position][0] - time + return 0 + + def handle_event(self, time, event): + """(Private) Called for every event.""" + if event.midi: + self.midi_event(event.midi) + if event.time: + self.time_event(time) + if event.beat: + self.beat_event(*event.beat) + + def midi_event(self, midi): + """(Private) Plays the specified MIDI events. + + The format depends on the way MIDI events are stored in the Song. + + """ + if self._output: + try: + self._output.midi_event(midi) + except BaseException as e: + self.exception_event(e) + + def time_event(self, msec): + """(Private) Called on every time update.""" + + def beat_event(self, measnum, beat, num, den): + """(Private) Called on every beat.""" + + def start_event(self): + """Called when playback is started.""" + + def stop_event(self): + """Called when playback is stopped by the user.""" + if self._output: + self._output.all_sounds_off() + + def finish_event(self): + """Called when a song reaches the end by itself.""" + + def position_event(self, old, new): + """Called when the user seeks while playing and the position changes. + + This means MIDI events are skipped and it might be necessary to + issue an all notes off command to the MIDI output. + + """ + if self._output: + self._output.all_sounds_off() + + def exception_event(self, exception): + """Called when an exception occurs while writing to a MIDI output. + + The default implementation stores the exception in self._last_exception + and sets the output to None. + + """ + self._last_exception = exception + self.set_output(None) + + def timer_midi_time(self): + """Should return a continuing time value in msec, used while playing. + + The default implementation returns the time in msec from the Python + time module. + + """ + return int(time.time() * 1000) + + def timer_schedule(self, delay, sync=True): + """Schedules the upcoming event. + + If sync is False, don't look at the previous synchronisation time. + + """ + msec = delay / self._tempo_factor + if sync: + self._sync_time += msec + msec = self._sync_time - self.timer_midi_time() + else: + self._sync_time = self.timer_midi_time() + msec + self.timer_start(max(0, msec)) + + def timer_start(self, msec): + """Starts the timer to fire once, the specified msec from now.""" + self._timer = None + self._timer = threading.Timer(msec / 1000.0, self.timer_timeout) + self._timer.start() + + def timer_stop(self): + """Stops the timer.""" + if self._timer: + self._timer.cancel() + self._timer = None + + def timer_offset(self): + """Returns the time before the next event. + + This value is only useful while playing. + + """ + return int((self._sync_time - self.timer_midi_time()) * self._tempo_factor) + + def timer_start_playing(self): + """Starts playing by starting the timer for the first upcoming event.""" + reset = self.current_time() == 0 + self._playing = True + self.start_event() + if reset and self._output: + try: + self._output.reset() + except BaseException as e: + self.exception_event(e) + self.timer_schedule(self._offset, False) + + def timer_timeout(self): + """Called when the timer times out. + + Handles an event and schedules the next. + If the end of a song is reached, calls finish_event() + + """ + offset = self.next_event() + if offset: + self.timer_schedule(offset) + else: + self._offset = 0 + self._playing = False + self.finish_event() + + def timer_stop_playing(self): + self.timer_stop() + self._offset = self.timer_offset() + self._playing = False + self.stop_event() + + +class Event(object): + """Any event (MIDI, Time and/or Beat). + + Has three attributes that determine what the Player does: + + time: if True, time_event() is caled with the current music time. + beat: None or (measnum, beat, num, den), then beat_event() is called. + midi: If not None, midi_event() is called with the midi. + + """ + __slots__ = ['midi', 'time', 'beat'] + def __init__(self): + self.midi = None + self.time = None + self.beat = None + + def __repr__(self): + l = [] + if self.time: + l.append('time') + if self.beat: + l.append('beat({0}:{1})'.format(self.beat[0], self.beat[1])) + if self.midi: + l.append('midi') + return '' + + +def make_event_list(song, time=None, beat=None): + """Returns a list of all the events in Song. + + Each item is a two-tuple(time, Event). + + If time is given, a time event is generated every that many microseconds + If beat is True, beat events are generated as well. + MIDI events are always created. + + """ + d = collections.defaultdict(Event) + + for t, evs in song.music: + d[t].midi = evs + + if time: + for t in range(0, song.length+1, time): + d[t].time = True + + if beat: + for i in song.beats: + d[i[0]].beat = i[1:] + + return [(t, d[t]) for t in sorted(d)] + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/midifile/song.py frescobaldi-2.0.0/frescobaldi_app/midifile/song.py --- frescobaldi-1.2.0/frescobaldi_app/midifile/song.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/midifile/song.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,244 @@ +#! python + +# Python midifile package -- parse, load and play MIDI files. +# Copyright (C) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +midifile.song -- structures MIDI file data as a song. +""" + +from __future__ import unicode_literals + +import collections + +from . import event +from . import parser + + +def load(filename): + """Convenience function to instantiate a Song from a filename. + + If the filename is a type 2 MIDI file, just returns the first track. + + """ + fmt, div, tracks = parser.parse_midi_data(open(filename, 'rb').read()) + if fmt == 2: + tracks = tracks[:1] + return Song(div, tracks) + + +def events_dict(tracks): + """Returns all events from the track grouped per and mapped to time-step. + + every time step has a dictionary with the events per track at that time. + + """ + d = collections.defaultdict(dict) + for n, track in enumerate(tracks): + for time, evs in parser.time_events_grouped( + parser.parse_midi_events(track)): + d[time][n] = evs + return d + + +def events_dict_together(tracks): + """Returns all events from the track grouped per and mapped to time-step. + + every time step has a list with all the events at that time. + + """ + d = collections.defaultdict(list) + for track in tracks: + for time, evs in parser.time_events_grouped( + parser.parse_midi_events(track)): + d[time].extend(evs) + return d + + +def is_tempo(e): + """Returns True if the event is a Set Tempo Meta-event.""" + return isinstance(e, event.MetaEvent) and e.type == 0x51 + + +def get_tempo(e): + """Returns the tempo from the Set Tempo Meta-event.""" + return ord(e.data[0])*65536 + ord(e.data[1])*256 + ord(e.data[2]) + + +def is_time_signature(e): + """Returns True if the event is a Set Time Signature Meta-event.""" + return isinstance(e, event.MetaEvent) and e.type == 0x58 + + +def get_time_signature(e): + """Returns the num, den, clocks, num_32s from the Time Signature event.""" + return map(ord, e.data) + + +def smpte_division(div): + """Converts a MIDI header division from a SMPTE type, if necessary.""" + if div & 0x8000: + frames = 256 - (div >> 8) + resolution = div & 0xFF + div = frames * resolution + return div + + +def events_iter(d): + """Return an iterator function over the events in one value of dict d. + + The values in d can be dicts (per-track) or lists (single track). + Returns None if the events dictionary is empty. + + """ + for k in d: + return iter_events_dict if isinstance(d[k], dict) else iter + + +def iter_events_dict(evs): + """Iter over the (per-track) dictionary's events.""" + for k in sorted(evs): + for e in evs[k]: + yield e + + +class TempoMap(object): + """Converts midi time to real time in microseconds.""" + def __init__(self, d, division): + """Initialize our tempo map based on events d and division.""" + # are the events one list (single-track) or a dict (per-track)? + self.division = smpte_division(division) + self.times = times = [] + events = events_iter(d) + if events: + for midi_time, evs in sorted(d.items()): + for e in events(evs): + if is_tempo(e): + times.append((midi_time, get_tempo(e))) + break + if not times or times[0][0] != 0: + times.insert(0, (0, 500000)) + + def real_time(self, midi_time): + """Returns the real time in microseconds for the given MIDI time.""" + real_time = 0 + times = self.times + for i in range(1, len(times)): + if times[i][0] >= midi_time: + real_time += (midi_time - times[i-1][0]) * times[i-1][1] + break + real_time += (times[i][0] - times[i-1][0]) * times[i-1][1] + else: + real_time += (midi_time - times[-1][0]) * times[-1][1] + return real_time // self.division + + def msec(self, midi_time): + """Returns the real time in milliseconds.""" + return self.real_time(midi_time) // 1000 + + +def beats(d, division): + """Yields tuples for every beat in the events dictionary d. + + Each tuple is: + (midi_time, beat_num, beat_total, denumerator) + + With this you can easily add measure numbers and find measure positions + in the MIDI. + + """ + events = events_iter(d) + if not events: + return + time_sigs = [] + times = sorted(d) + for midi_time in times: + for e in events(d[midi_time]): + if is_time_signature(e): + time_sigs.append((midi_time, get_time_signature(e))) + if not time_sigs or time_sigs[0][0] != 0: + # default time signature at start + time_sigs.insert(0, (0, (4, 4, 24, 8))) + + # now yield a tuple for every beat + time = 0 + sigs_index = 0 + while time <= times[-1]: + + if sigs_index < len(time_sigs) and time >= time_sigs[sigs_index][0]: + # new time signature + time, (num, den, clocks, n32s) = time_sigs[sigs_index] + step = (4 * division) / (2 ** den) + beat = 1 + sigs_index += 1 + + yield time, beat, num, den + time += step + beat = beat % num + 1 + + +class Song(object): + """A loaded MIDI file. + + The following instance attributes are set on init: + + division: the division set in the MIDI header + ntracks: the number of tracks + events: a dict mapping MIDI times to a dict with per-track lists of events. + tempo_map: TempoMap instance that computes real time from MIDI time. + length: the length in milliseconds of the song (same as the time of the last + event). + + beats: a list of tuples(msec, measnum, beat, num, den) for every beat + music: a list of tuples(msec, d) where d is a dict mapping tracknr to events + + """ + def __init__(self, division, tracks): + """Initialize the Song with the given division and track chunks.""" + self.division = division + self.ntracks = len(tracks) + self.events = events_dict(tracks) + self.tempo_map = t = TempoMap(self.events, division) + self.length = t.msec(max(self.events)) + + self.beats = b = [] + measnum = 0 + for midi_time, beat, num, den in beats(self.events, division): + if beat == 1: + measnum += 1 + b.append((t.msec(midi_time), measnum, beat, num, den)) + self.music = [(t.msec(midi_time), evs) + for midi_time, evs in sorted(self.events.items())] + + def beat(self, time): + """Returns (time, measnum, beat, num, den) for the beat at time.""" + if not self.beats: + return (0, 0, 0, 4, 2) + pos = 0 + if time: + # bisect our way in the beats list. + end = len(self.beats) + while pos < end: + mid = (pos + end) // 2 + if time > self.beats[mid][0]: + pos = mid + 1 + else: + end = mid + return self.beats[min(pos, len(self.beats) - 1)] + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/midihub.py frescobaldi-2.0.0/frescobaldi_app/midihub.py --- frescobaldi-1.2.0/frescobaldi_app/midihub.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/midihub.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,109 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Place where MIDI is handled, output, input, signals, etc. + +The MIDI support in Frescobaldi is optional (i.e. if PortMidi is not found, the +relevant functions should simply be disabled (with a message that PortMidi is +not available)). + +This module uses the portmidi interface that is capable of using PortMIDI in +different ways (via a Python extension module or by embedding the PortMIDI +C library directly). + +The available() method returns True if portmidi is available, False if not. + +Inside Frescobaldi, interact with this module to get input and outputs etcetera, +not with portmidi directly. + +""" + +import portmidi +import signals + + +portmidi.init() + + +aboutToRestart = signals.Signal() # emitted before re-init PortMIDI +settingsChanged = signals.Signal() # emitted when ports are changed, etc + + +def available(): + """Returns True if portmidi is available, False if not.""" + return portmidi.available() + +def restart(): + """Restarts PortMIDI.""" + aboutToRestart() + portmidi.quit() + portmidi.init() + settingsChanged() + +def refresh_ports(): + """Refreshes the port list.""" + restart() + +def get_count(): + """Returns the number of available PortMIDI ports, or 0 if no PortMIDI.""" + return portmidi.get_count() if available() else 0 + +def device_infos(): + """Yields the device info for all PortMIDI devices.""" + for n in range(get_count()): + yield portmidi.get_device_info(n) + +def output_ports(): + """Returns a list of all the output port names.""" + names = [] + if available(): + for i in device_infos(): + if i.isoutput: + names.append(i.name) + return names + +def default_output(): + """Returns a probably suitable default MIDI output port name.""" + names = [] + if available(): + for i in device_infos(): + if i.isoutput: + names.append(i.name) + if 'through' not in i.name.lower(): + return i.name + return names[0] if names else "" + +def output_by_name(name): + """Returns a portmidi.Output instance for name.""" + for n in range(get_count()): + i = portmidi.get_device_info(n) + if i.isoutput and i.name.startswith(name) and not i.isopen: + return portmidi.Output(n) + +# allow the MIDI player to run on python time if portmidi is not available: +if available(): + time = portmidi.time +else: + from time import time as time_ + def time(): + """Returns a time value in msec.""" + return int(time_() * 1000) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/miditool/__init__.py frescobaldi-2.0.0/frescobaldi_app/miditool/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/miditool/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/miditool/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,103 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The MIDI tool. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QAction, QKeySequence + +import actioncollection +import actioncollectionmanager +import app +import icons +import panels + + +class MidiTool(panels.Panel): + """Midi Tool.""" + def __init__(self, mainwindow): + super(MidiTool, self).__init__(mainwindow) + self.hide() + self.toggleViewAction().setShortcut(QKeySequence("Meta+Alt+P")) + ac = self.actionCollection = Actions() + ac.midi_play.triggered.connect(self.slotPlay) + ac.midi_pause.triggered.connect(self.slotPause) + ac.midi_stop.triggered.connect(self.slotStop) + ac.midi_restart.triggered.connect(self.slotRestart) + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + mainwindow.addDockWidget(Qt.TopDockWidgetArea, self) + + def translateUI(self): + self.setWindowTitle(_("MIDI")) + self.toggleViewAction().setText(_("MIDI &Player")) + + def createWidget(self): + from . import widget + return widget.Widget(self) + + def slotPause(self): + """Called on action Pause.""" + self.widget().stop() + + def slotPlay(self): + """Called on action Play.""" + self.widget().play() + + def slotStop(self): + """Called on action Stop.""" + self.widget().stop() + + def slotRestart(self): + """Called on action Restart.""" + self.widget().restart() + + +class Actions(actioncollection.ActionCollection): + name = "miditool" + def createActions(self, parent=None): + self.midi_pause = QAction(parent) + self.midi_play = QAction(parent) + self.midi_stop = QAction(parent) + self.midi_restart = QAction(parent) + + try: + self.midi_pause.setShortcut(QKeySequence(Qt.Key_MediaPause)) + except AttributeError: + pass # No Qt.Key_MediaPause in some PyQt4 versions + self.midi_play.setShortcut(QKeySequence(Qt.Key_MediaPlay)) + self.midi_stop.setShortcut(QKeySequence(Qt.Key_MediaStop)) + self.midi_restart.setShortcut(QKeySequence(Qt.Key_MediaPrevious)) + + self.midi_pause.setIcon(icons.get('media-playback-pause')) + self.midi_play.setIcon(icons.get('media-playback-start')) + self.midi_stop.setIcon(icons.get('media-playback-stop')) + self.midi_restart.setIcon(icons.get('media-skip-backward')) + + def translateUI(self): + self.midi_pause.setText(_("midi player", "Pause")) + self.midi_play.setText(_("midi player", "Play")) + self.midi_stop.setText(_("midi player", "Stop")) + self.midi_restart.setText(_("midi player", "Restart")) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/miditool/midifiles.py frescobaldi-2.0.0/frescobaldi_app/miditool/midifiles.py --- frescobaldi-1.2.0/frescobaldi_app/miditool/midifiles.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/miditool/midifiles.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,83 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Handles MIDI files. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import Qt + +import app +import icons +import plugin +import signals +import resultfiles +import listmodel +import midifile.song + + +updated = signals.Signal() # Document; emitted if there are new MIDI files. + +def _update(document): + """Checks if MIDI files were updated for the document.""" + if MidiFiles.instance(document).update(): + updated(document) + +app.jobFinished.connect(_update) +app.documentLoaded.connect(_update) + + +class MidiFiles(plugin.DocumentPlugin): + def __init__(self, document): + self._files = None + self.current = 0 + + def update(self): + files = resultfiles.results(self.document()).files('.mid*') + self._files = files + self._songs = [None] * len(files) + if files and self.current >= len(files): + self.current = len(files) - 1 + return bool(files) + + def __nonzero__(self): + return bool(self._files) + + def song(self, index): + if self._files is None: + self.update() + song = self._songs[index] + if not song: + song = self._songs[index] = midifile.song.load(self._files[index]) + return song + + def model(self): + """Returns a model for a combobox.""" + if self._files is None: + self.update() + m = listmodel.ListModel(self._files, + display = os.path.basename, icon = icons.file_type) + m.setRoleFunction(Qt.UserRole, lambda f: f) + return m + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/miditool/output.py frescobaldi-2.0.0/frescobaldi_app/miditool/output.py --- frescobaldi-1.2.0/frescobaldi_app/miditool/output.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/miditool/output.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,40 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Handles output to MIDI ports. +""" + +from __future__ import unicode_literals + + +import midifile.output + + +class Output(midifile.output.PortMidiOutput): + """Handles the output, e.g. for a MIDI player.""" + def __init__(self, output): + self.output = output + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/miditool/player.py frescobaldi-2.0.0/frescobaldi_app/miditool/player.py --- frescobaldi-1.2.0/frescobaldi_app/miditool/player.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/miditool/player.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,35 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The MIDI player for Frescobaldi. +""" + +from __future__ import unicode_literals + +import qmidi.player +import midihub + + +class Player(qmidi.player.Player): + """This Player uses the time from midihub.""" + def timer_midi_time(self): + return midihub.time() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/miditool/widget.py frescobaldi-2.0.0/frescobaldi_app/miditool/widget.py --- frescobaldi-1.2.0/frescobaldi_app/miditool/widget.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/miditool/widget.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,365 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The MIDI tool widget. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import css +import util +import midihub +import widgets.drag + +from . import midifiles +from . import output +from . import player + + +class Widget(QWidget): + def __init__(self, dockwidget): + super(Widget, self).__init__(dockwidget) + self._document = None + self._fileSelector = QComboBox(editable=True, insertPolicy=QComboBox.NoInsert) + widgets.drag.ComboDrag(self._fileSelector).role = Qt.UserRole + self._fileSelector.lineEdit().setReadOnly(True) + self._fileSelector.lineEdit().setFocusPolicy(Qt.NoFocus) + self._stopButton = QToolButton() + self._playButton = QToolButton() + self._timeSlider = QSlider(Qt.Horizontal, tracking=False, + singleStep=200, pageStep=10000, invertedControls=True) + self._display = Display() + self._tempoFactor = QSlider(Qt.Vertical, minimum=-50, maximum=50, + singleStep=1, pageStep=5) + + grid = QGridLayout(spacing=0) + self.setLayout(grid) + + grid.addWidget(self._fileSelector, 0, 0, 1, 3) + grid.addWidget(self._stopButton, 1, 0) + grid.addWidget(self._playButton, 1, 1) + grid.addWidget(self._timeSlider, 1, 2) + grid.addWidget(self._display, 2, 0, 1, 3) + grid.addWidget(self._tempoFactor, 0, 3, 3, 1) + + # size policy of combo + p = self._fileSelector.sizePolicy() + p.setHorizontalPolicy(QSizePolicy.Ignored) + self._fileSelector.setSizePolicy(p) + + # size policy of combo popup + p = self._fileSelector.view().sizePolicy() + p.setHorizontalPolicy(QSizePolicy.MinimumExpanding) + self._fileSelector.view().setSizePolicy(p) + + self._player = player.Player() + self._outputCloseTimer = QTimer(interval=60000, singleShot=True, + timeout=self.closeOutput) + self._timeSliderTicker = QTimer(interval=200, timeout=self.updateTimeSlider) + self._fileSelector.activated[int].connect(self.slotFileSelected) + self._tempoFactor.valueChanged.connect(self.slotTempoChanged) + self._timeSlider.valueChanged.connect(self.slotTimeSliderChanged) + self._timeSlider.sliderMoved.connect(self.slotTimeSliderMoved) + self._player.beat.connect(self.updateDisplayBeat) + self._player.time.connect(self.updateDisplayTime) + self._player.stateChanged.connect(self.slotPlayerStateChanged) + self.slotPlayerStateChanged(False) + dockwidget.mainwindow().currentDocumentChanged.connect(self.loadResults) + midifiles.updated.connect(self.slotUpdatedFiles) + app.aboutToQuit.connect(self.stop) + midihub.aboutToRestart.connect(self.slotAboutToRestart) + midihub.settingsChanged.connect(self.clearMidiSettings, -100) + midihub.settingsChanged.connect(self.readMidiSettings) + app.documentClosed.connect(self.slotDocumentClosed) + app.translateUI(self) + self.readMidiSettings() + d = dockwidget.mainwindow().currentDocument() + if d: + self.loadResults(d) + + def translateUI(self): + self._tempoFactor.setToolTip(_("Tempo")) + + def slotAboutToRestart(self): + self.stop() + self._player.set_output(None) + + def clearMidiSettings(self): + """Called first when settings are changed.""" + self.stop() + self._outputCloseTimer.stop() + self._player.set_output(None) + + def readMidiSettings(self): + """Called after clearMidiSettings(), and on first init.""" + pass + + def openOutput(self): + """Called when playing starts. Ensures an output port is opened.""" + self._outputCloseTimer.stop() + if not self._player.output(): + p = QSettings().value("midi/player/output_port", midihub.default_output()) + o = midihub.output_by_name(p) + if o: + self._player.set_output(output.Output(o)) + + def closeOutput(self): + """Called when the output close timer fires. Closes the output.""" + self._player.set_output(None) + + def slotPlayerStateChanged(self, playing): + ac = self.parentWidget().actionCollection + # setDefaultAction also adds the action + for b in self._stopButton, self._playButton: + while b.actions(): + b.removeAction(b.actions()[0]) + if playing: + self._timeSliderTicker.start() + self._stopButton.setDefaultAction(ac.midi_stop) + self._playButton.setDefaultAction(ac.midi_pause) + else: + self._timeSliderTicker.stop() + self.updateTimeSlider() + self._stopButton.setDefaultAction(ac.midi_restart) + self._playButton.setDefaultAction(ac.midi_play) + # close the output if the preference is set + if QSettings().value("midi/close_outputs", False) in (True, 'true'): + self._outputCloseTimer.start() + + def play(self): + """Starts the MIDI player, opening an output if necessary.""" + if not self._player.is_playing() and not self._player.has_events(): + self.restart() + self.openOutput() + if not self._player.output(): + self._display.statusMessage(_("No output found!")) + self._player.start() + + def stop(self): + """Stops the MIDI player.""" + self._player.stop() + + def restart(self): + """Restarts the MIDI player. + + If another file is in the file selector, or the file was updated, + the new file is loaded. + + """ + self._player.seek(0) + self.updateTimeSlider() + self._display.reset() + if self._document: + files = midifiles.MidiFiles.instance(self._document) + index = self._fileSelector.currentIndex() + if files and (files.song(index) is not self._player.song()): + self.loadSong(index) + + def slotTempoChanged(self, value): + """Called when the user drags the tempo.""" + # convert -50 to 50 to 0.5 to 2.0 + factor = 2 ** (value / 50.0) + self._player.set_tempo_factor(factor) + self._display.setTempo("{0}%".format(int(factor * 100))) + + def slotTimeSliderChanged(self, value): + self._player.seek(value) + self._display.setTime(value) + + def slotTimeSliderMoved(self, value): + self._display.setTime(value) + if self._player.song(): + self._display.setBeat(*self._player.song().beat(value)[1:]) + + def updateTimeSlider(self): + if not self._timeSlider.isSliderDown(): + with util.signalsBlocked(self._timeSlider): + self._timeSlider.setMaximum(self._player.total_time()) + self._timeSlider.setValue(self._player.current_time()) + + def updateDisplayBeat(self, measnum, beat, num, den): + if not self._timeSlider.isSliderDown(): + self._display.setBeat(measnum, beat, num, den) + + def updateDisplayTime(self, time): + if not self._timeSlider.isSliderDown(): + self._display.setTime(time) + + def slotUpdatedFiles(self, document): + """Called when there are new MIDI files.""" + if document == self.parentWidget().mainwindow().currentDocument(): + self.loadResults(document) + + def loadResults(self, document): + self._document = document + files = midifiles.MidiFiles.instance(document) + self._fileSelector.setModel(files.model()) + if files: + self._fileSelector.setCurrentIndex(files.current) + if not self._player.is_playing(): + self.loadSong(files.current) + + def loadSong(self, index): + files = midifiles.MidiFiles.instance(self._document) + self._player.set_song(files.song(index)) + m, s = divmod(self._player.total_time() / 1000, 60) + name = self._fileSelector.currentText() + self.updateTimeSlider() + self._display.reset() + self._display.statusMessage( + _("midi lcd screen", "LOADED"), name, + _("midi lcd screen", "TOTAL"), "{0}:{1:02}".format(m, s)) + + def slotFileSelected(self, index): + if self._document: + self._player.stop() + files = midifiles.MidiFiles.instance(self._document) + if files: + files.current = index + self.restart() + + def slotDocumentClosed(self, document): + if document == self._document: + self._document = None + self._fileSelector.clear() + self._player.stop() + self._player.clear() + self.updateTimeSlider() + self._display.reset() + + +class Display(QLabel): + """Maintains values in the LCD display.""" + def __init__(self): + QLabel.__init__(self, wordWrap=True) + self.setSizePolicy(QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Preferred)) + self.setStyleSheet(css.lcd_screen) + self._tempoTimer = QTimer(interval=1500, singleShot=True, + timeout=self.setTempo) + self._statusTimer = QTimer(interval=2000, singleShot=True, + timeout=self.statusMessage) + self._tempo = None + self._status = None + self.reset() + app.translateUI(self) + + def reset(self): + """Sets everything to 0.""" + self._time = 0 + self._beat = 0, 0, 0, 0 + self.updateDisplay() + + def translateUI(self): + self.updateDisplay() + + def setTime(self, time): + self._time = time + self.updateDisplay() + + def setBeat(self, measnum, beat, num, den): + self._beat = measnum, beat, num, den + self.updateDisplay() + + def setTempo(self, text=None): + self._tempo = text + if text: + self._tempoTimer.start() + self.updateDisplay() + + def statusMessage(self, *msg): + """Status message can be multiple arguments (1 to 4).""" + self._status = msg + if msg: + self._statusTimer.start() + self.updateDisplay() + + def updateDisplay(self): + minutes, seconds = divmod(self._time / 1000, 60) + + time_spec = "{0}:{1:02}".format(minutes, seconds) + if self._status: + items = self._status + if len(items) == 1: + self.setText(_lcd_status_one.format(" ", items[0])) + elif len(items) == 2: + self.setText(_lcd_status_one.format(*items)) + elif len(items) == 3: + self.setText(_lcd_status_two.format( + items[0], items[1], " ", items[2])) + elif len(items) == 4: + self.setText(_lcd_status_two.format(*items)) + elif self._tempo: + self.setText(_lcd_text.format( + _("midi lcd screen", "TIME"), + _("midi lcd screen", "TEMPO"), + time_spec, + self._tempo, + )) + else: + measnum, beat, num, den = self._beat + beat_spec = "{0}.{1:2}".format(measnum, beat) + time_sig = " {0}/{1}".format(num, 2 ** den) if num else "" + self.setText(_lcd_text.format( + _("midi lcd screen", "TIME"), + _("midi lcd screen", "BEAT") + time_sig, + time_spec, + beat_spec, + )) + + + +_lcd_text = """\ + + + + + + + + + +
{0}{1}

{2}

{3}

""" + +_lcd_status_one = """\ + + + + + + + +
{0}

{1}

""" + +_lcd_status_two = """\ + + + + + + + + + +
{0}{2}

{1}

{3}

""" + diff -Nru frescobaldi-1.2.0/frescobaldi_app/musicpreview.py frescobaldi-2.0.0/frescobaldi_app/musicpreview.py --- frescobaldi-1.2.0/frescobaldi_app/musicpreview.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/musicpreview.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,208 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages a local temporary directory for a Document (e.g. unnamed or remote). +""" + +from __future__ import unicode_literals + + +import os +import glob +import shutil + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import ly.parse +import ly.lex + +import app +import icons +import job +import log +import util +import fileinfo +import lilypondinfo +import popplerview +import popplertools +import widgets.progressbar + + +class MusicPreviewJob(job.Job): + def __init__(self, text, title=None): + super(MusicPreviewJob, self).__init__() + self.directory = util.tempdir() + self.document = os.path.join(self.directory, 'document.ly') + with open(self.document, 'w') as f: + f.write(text.encode('utf-8')) + + info = lilypondinfo.preferred() + if QSettings().value("lilypond_settings/autoversion", True) in (True, "true"): + version = ly.parse.version(ly.lex.state('lilypond').tokens(text)) + if version: + info = lilypondinfo.suitable(version) + + self.command = [info.command, '-dno-point-and-click', '--pdf', self.document] + if title: + self.setTitle(title) + + def resultfiles(self): + return glob.glob(os.path.join(self.directory, '*.pdf')) + + def cleanup(self): + shutil.rmtree(self.directory, ignore_errors=True) + + +class MusicPreviewWidget(QWidget): + def __init__(self, parent=None): + super(MusicPreviewWidget, self).__init__(parent) + self._lastbuildtime = 10.0 + self._running = None + self._current = None + + self._chooserLabel = QLabel() + self._chooser = QComboBox(self, activated=self.selectDocument) + self._log = log.Log() + self._view = popplerview.View() + self._progress = widgets.progressbar.TimedProgressBar() + + self._stack = QStackedLayout() + self._top = QWidget() + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(self._top) + layout.addLayout(self._stack) + layout.addWidget(self._progress) + + top = QHBoxLayout() + top.setContentsMargins(0, 0, 0, 0) + top.setSpacing(2) + self._top.setLayout(top) + top.addWidget(self._chooserLabel) + top.addWidget(self._chooser) + top.addStretch(1) + + self._stack.addWidget(self._log) + self._stack.addWidget(self._view) + + self._top.hide() + app.aboutToQuit.connect(self.cleanup) + app.translateUI(self) + + def translateUI(self): + self._chooserLabel.setText(_("Document:")) + + def preview(self, text, title=None): + """Runs LilyPond on the given text and shows the resulting PDF.""" + j = self._running = MusicPreviewJob(text, title) + j.done.connect(self._done) + self._log.clear() + self._log.connectJob(j) + j.start() + self._progress.start(self._lastbuildtime) + + def _done(self, success): + self._progress.stop(False) + pdfs = self._running.resultfiles() + self.setDocuments(pdfs) + if not pdfs: + self._stack.setCurrentWidget(self._log) + return + self._lastbuildtime = self._running.elapsed() + self._stack.setCurrentWidget(self._view) + if self._current: + self._current.cleanup() + self._current = self._running # keep the tempdir + self._running = None + + def setDocuments(self, pdfs): + """Loads the given PDF path names in the UI.""" + self._documents = [popplertools.Document(name) for name in pdfs] + self._chooser.clear() + self._chooser.addItems([d.name() for d in self._documents]) + self._top.setVisible(len(self._documents) > 1) + if pdfs: + self._chooser.setCurrentIndex(0) + self.selectDocument(0) + else: + self._view.clear() + + def selectDocument(self, index): + doc = self._documents[index].document() + if doc: + self._view.load(doc) + + def cleanup(self): + if self._running: + self._running.abort() + self._running.cleanup() + self._running = None + if self._current: + self._current.cleanup() + self._current = None + self._stack.setCurrentWidget(self._log) + self._top.hide() + self._view.clear() + + def print_(self): + """Prints the currently displayed document.""" + if self._documents: + doc = self._documents[self._chooser.currentIndex()] + import popplerprint + popplerprint.printDocument(doc, self) + + +class MusicPreviewDialog(QDialog): + def __init__(self, parent=None): + super(MusicPreviewDialog, self).__init__(parent) + layout = QVBoxLayout() + self.setLayout(layout) + self._widget = MusicPreviewWidget() + layout.addWidget(self._widget) + layout.addWidget(widgets.Separator()) + b = QDialogButtonBox() + layout.addWidget(b) + b.addButton(QDialogButtonBox.Close) + b.rejected.connect(self.accept) + self._printButton = b.addButton('', QDialogButtonBox.ActionRole) + self._printButton.setIcon(icons.get("document-print")) + self._printButton.clicked.connect(self._widget.print_) + self._printButton.hide() + util.saveDialogSize(self, "musicpreview/dialog/size", QSize(500, 350)) + app.translateUI(self) + + def translateUI(self): + self._printButton.setText(_("&Print")) + self.setWindowTitle(app.caption(_("Music Preview"))) + + def preview(self, text, title=None): + self._widget.preview(text, title) + + def cleanup(self): + self._widget.cleanup() + + def setEnablePrintButton(self, enable): + """Enables or disables the print button.""" + self._printButton.setVisible(enable) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/music.py frescobaldi-2.0.0/frescobaldi_app/music.py --- frescobaldi-1.2.0/frescobaldi_app/music.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/music.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,85 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Accesses streams of tokens and interprets them as LilyPond music, +finds notes, chords, durations, looks for positions to add postfix commands, +etc. +""" + +from __future__ import unicode_literals + +import ly.lex.lilypond + + +def music_items(source, command=False, chord=False, tokens=None): + """Yields lists of tokens describing rests, skips or pitches. + + source is a tokeniter.Source instance. + + The following keyword arguments can be used: + + command: whether to allow pitches in \relative, \transpose, etc. + chord: whether to allow pitches inside chords. + tokens: if given, it is used as main iterator instead of the source object. + + Each list is a contiguous group of tokens (at least one). + All tokens in a list are on the same line (QTextBlock). The current block + can be found in the block attribute of the used tokeniter.Source instance. + + This is a small limitation compared to LilyPond, which allows a pitch on + one line and its duration on the next, but it makes it easier to iterate + on tokens (which only know their position in the current block). + + """ + skip_parsers = () + if not command: + skip_parsers += (ly.lex.lilypond.ParsePitchCommand,) + if not chord: + skip_parsers += (ly.lex.lilypond.ParseChord,) + + for t in tokens or source: + if isinstance(source.state.parser(), skip_parsers): + continue + while isinstance(t, _start): + l = [t] + for t in source.tokens: + if not isinstance(t, _stay): + yield l + break + l.append(t) + else: + yield l + break + + +_start = ( + ly.lex.lilypond.Rest, + ly.lex.lilypond.Skip, + ly.lex.lilypond.Note, + ly.lex.lilypond.ChordEnd, + ly.lex.lilypond.Octave, + ly.lex.lilypond.Accidental, + ly.lex.lilypond.OctaveCheck, + ly.lex.lilypond.Duration, +) + +_stay = _start[4:] + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/musicview/contextmenu.py frescobaldi-2.0.0/frescobaldi_app/musicview/contextmenu.py --- frescobaldi-1.2.0/frescobaldi_app/musicview/contextmenu.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/musicview/contextmenu.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,58 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The PDF preview panel context menu. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + + +def show(position, panel, link, cursor): + """Shows a context menu. + + position: The global position to pop up + panel: The music view panel, giving access to mainwindow and view widget + link: a popplerqt4 LinkBrowse instance or None + cursor: a QTextCursor instance or None + + """ + m = QMenu(panel) + + # selection? -> Copy + if panel.widget().view.surface().hasSelection(): + m.addAction(panel.actionCollection.music_copy_image) + + + # no actions yet? insert Fit Width + if not m.actions(): + a = panel.actionCollection.music_fit_width + if not a.isChecked(): + m.addAction(a) + + # show it! + if m.actions(): + m.exec_(position) + m.deleteLater() + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/musicview/documents.py frescobaldi-2.0.0/frescobaldi_app/musicview/documents.py --- frescobaldi-1.2.0/frescobaldi_app/musicview/documents.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/musicview/documents.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,146 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Code to load and manage PDF documents to view. +""" + +from __future__ import unicode_literals + + +import os +import weakref + +from PyQt4.QtCore import QByteArray + +try: + import popplerqt4 +except ImportError: + popplerqt4 = None + +import app +import plugin +import resultfiles +import signals +import popplertools + + +_cache = weakref.WeakValueDictionary() + + +# This signal gets emitted when a finished Job has created new PDF document(s). +documentUpdated = signals.Signal() # Document + + +@app.jobFinished.connect +def _on_job_finished(document, job): + if group(document).update(): + documentUpdated(document, job) + + +def group(document): + """Returns a DocumentGroup instance for the given text document.""" + return DocumentGroup.instance(document) + + +def load(filename): + """Returns a Poppler.Document for the given filename, caching it (weakly). + + Returns None if the document failed to load. + + """ + mtime = os.path.getmtime(filename) + key = (mtime, filename) + + try: + return _cache[key] + except KeyError: + with open(filename, 'rb') as f: + data = QByteArray(f.read()) + doc = popplerqt4.Poppler.Document.loadFromData(data) + if doc: + _cache[key] = doc + return doc or None + + +def filename(poppler_document): + """Returns the filename for the document if it was loaded via our cache.""" + for (mtime, filename), doc in _cache.items(): + if doc == poppler_document: + return filename + + +class Document(popplertools.Document): + """Represents a (lazily) loaded PDF document.""" + def load(self): + return load(self.filename()) + + if popplerqt4 is None: + def document(self): + """Returns None because popplerqt4 is not available.""" + return None + + +class DocumentGroup(plugin.DocumentPlugin): + """Represents a group of PDF documents, created by the text document it belongs to. + + Multiple MusicView instances can use this group, they can store the positions + of the Documents in the viewer themselves via a weak-key dictionary on the Document + instances returned by documents(). On update() these Document instances will be reused. + + The global documentUpdated(Document) signal will be emitted when the global + app.jobFinished() signal causes a reload of documents in a group. + + """ + def __init__(self, document): + self._documents = None + document.loaded.connect(self.update, -100) + + def documents(self): + """Returns the list of PDF Document objects created by our text document.""" + # If the list is asked for the very first time, update + if self._documents is None: + self._documents = [] + self.update() + return self._documents[:] + + def update(self): + """Queries the resultfiles of this text document for PDF files and loads them. + + Returns True if new documents were loaded. + + """ + files = resultfiles.results(self.document()).files(".pdf") + if files: + # reuse the older Document objects, they will probably be displaying + # (about) the same documents, and so the viewer will remember their position. + def docs(): + # yield existing docs and then new ones + for d in self._documents: + yield d + while True: + yield Document() + documents = [] + for filename, doc in zip(files, docs()): + doc.setFilename(filename) + documents.append(doc) + self._documents = documents + return True + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/musicview/image.py frescobaldi-2.0.0/frescobaldi_app/musicview/image.py --- frescobaldi-1.2.0/frescobaldi_app/musicview/image.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/musicview/image.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,260 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Dialog to copy contents from PDF to a raster image. +""" + +from __future__ import unicode_literals + +import collections +import os +import tempfile + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import util +import icons +import qpopplerview +import widgets.imageviewer +import widgets.colorbutton +import widgets.drag + +try: + import popplerqt4 +except ImportError: + popplerqt4 = None + +from . import documents + + +def copy(musicviewpanel): + """Shows the dialog.""" + view = musicviewpanel.widget().view + selection = view.surface().selection() + + # get the largest page part that is in the selection + pages = list(view.surface().pageLayout().pagesAt(selection)) + if not pages: + return + + def key(page): + size = page.rect().intersected(selection).size() + return size.width() + size.height() + page = max(pages, key = key) + dlg = Dialog(musicviewpanel) + dlg.show() + dlg.setPage(page, selection) + dlg.finished.connect(dlg.deleteLater) + + + +class Dialog(QDialog): + def __init__(self, parent=None): + super(Dialog, self).__init__(parent) + self._filename = None + self._page = None + self._rect = None + self.imageViewer = widgets.imageviewer.ImageViewer() + self.dpiLabel = QLabel() + self.dpiCombo = QComboBox(insertPolicy=QComboBox.NoInsert, editable=True) + self.dpiCombo.lineEdit().setCompleter(None) + self.dpiCombo.setValidator(QDoubleValidator(10.0, 1200.0, 4, self.dpiCombo)) + self.dpiCombo.addItems([format(i) for i in 72, 100, 200, 300, 600, 1200]) + + self.colorButton = widgets.colorbutton.ColorButton() + self.colorButton.setColor(QColor(Qt.white)) + self.crop = QCheckBox() + self.antialias = QCheckBox(checked=True) + self.dragfile = QPushButton(icons.get("image-x-generic"), None, None) + self.fileDragger = FileDragger(self.dragfile) + self.buttons = QDialogButtonBox(QDialogButtonBox.Close) + self.copyButton = self.buttons.addButton('', QDialogButtonBox.ApplyRole) + self.copyButton.setIcon(icons.get('edit-copy')) + self.saveButton = self.buttons.addButton('', QDialogButtonBox.ApplyRole) + self.saveButton.setIcon(icons.get('document-save')) + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(self.imageViewer) + + controls = QHBoxLayout() + layout.addLayout(controls) + controls.addWidget(self.dpiLabel) + controls.addWidget(self.dpiCombo) + controls.addWidget(self.colorButton) + controls.addWidget(self.crop) + controls.addWidget(self.antialias) + controls.addStretch() + controls.addWidget(self.dragfile) + layout.addWidget(widgets.Separator()) + layout.addWidget(self.buttons) + + app.translateUI(self) + self.readSettings() + self.finished.connect(self.writeSettings) + self.dpiCombo.editTextChanged.connect(self.drawImage) + self.colorButton.colorChanged.connect(self.drawImage) + self.antialias.toggled.connect(self.drawImage) + self.crop.toggled.connect(self.cropImage) + self.buttons.rejected.connect(self.reject) + self.copyButton.clicked.connect(self.copyToClipboard) + self.saveButton.clicked.connect(self.saveAs) + util.saveDialogSize(self, "copy_image/dialog/size", QSize(480, 320)) + + def translateUI(self): + self.setCaption() + self.dpiLabel.setText(_("DPI:")) + self.colorButton.setToolTip(_("Paper Color")) + self.crop.setText(_("Auto-crop")) + self.antialias.setText(_("Antialias")) + self.dragfile.setText(_("Drag")) + self.dragfile.setToolTip(_("Drag the image as a PNG file.")) + self.copyButton.setText(_("&Copy to Clipboard")) + self.saveButton.setText(_("&Save As...")) + self.imageViewer.setWhatsThis(_( + #xgettext:no-python-format + "

\n" + "Clicking toggles the display between 100% size and window size. " + "Drag to copy the image to another application. " + "Drag with Ctrl (or {command}) to scroll a large image.\n" + "

\n" + "

\n" + "You can also drag the small picture icon in the bottom right, " + "which drags the actual file on disk, e.g. to an e-mail message.\n" + "

").format(command="\u2318")) + + def readSettings(self): + s = QSettings() + s.beginGroup('copy_image') + self.dpiCombo.setEditText(s.value("dpi", "100")) + self.colorButton.setColor(s.value("papercolor", QColor(Qt.white))) + self.crop.setChecked(s.value("autocrop", False) in (True, "true")) + self.antialias.setChecked(s.value("antialias", True) not in (False, "false")) + + def writeSettings(self): + s = QSettings() + s.beginGroup('copy_image') + s.setValue("dpi", self.dpiCombo.currentText()) + s.setValue("papercolor", self.colorButton.color()) + s.setValue("autocrop", self.crop.isChecked()) + s.setValue("antialias", self.antialias.isChecked()) + + def setCaption(self): + if self._filename: + filename = os.path.basename(self._filename) + else: + filename = _("") + title = _("Image from {filename}").format(filename = filename) + self.setWindowTitle(app.caption(title)) + + def setPage(self, page, rect): + self._page = page + self._rect = rect + self._filename = documents.filename(page.document()) + self.fileDragger.basename = os.path.splitext(os.path.basename(self._filename))[0] + self.setCaption() + self.drawImage() + + def drawImage(self): + dpi = float(self.dpiCombo.currentText() or '100') + dpi = max(dpi, self.dpiCombo.validator().bottom()) + dpi = min(dpi, self.dpiCombo.validator().top()) + options = qpopplerview.RenderOptions() + options.setPaperColor(self.colorButton.color()) + if self.antialias.isChecked(): + if popplerqt4: + options.setRenderHint( + popplerqt4.Poppler.Document.Antialiasing | + popplerqt4.Poppler.Document.TextAntialiasing) + else: + options.setRenderHint(0) + self._image = self._page.image(self._rect, dpi, dpi, options) + self.cropImage() + + def cropImage(self): + image = self._image + if self.crop.isChecked(): + image = image.copy(autoCropRect(image)) + self.imageViewer.setImage(image) + self.fileDragger.setImage(image) + + def copyToClipboard(self): + QApplication.clipboard().setImage(self.imageViewer.image()) + + def saveAs(self): + if self._filename and not self.imageViewer.image().isNull(): + filename = os.path.splitext(self._filename)[0] + ".png" + else: + filename = 'image.png' + filename = QFileDialog.getSaveFileName(self, + _("Save Image As"), filename) + if filename: + if not self.imageViewer.image().save(filename): + QMessageBox.critical(self, _("Error"), _( + "Could not save the image.")) + else: + self.fileDragger.currentFile = filename + + +class FileDragger(widgets.drag.FileDragger): + """Creates an image file on the fly as soon as a drag is started.""" + image = None + basename = None + currentFile = None + + def setImage(self, image): + self.image = image + self.currentFile = None + + def filename(self): + if self.currentFile: + return self.currentFile + elif not self.image: + return + # save the image as a PNG file + d = util.tempdir() + basename = self.basename or 'image' + basename += '.png' + filename = os.path.join(d, basename) + self.image.save(filename) + self.currentFile = filename + return filename + + +def autoCropRect(image): + """Returns a QRect specifying the contents of the QImage. + + Edges of the image are trimmed if they have the same color. + + """ + # pick the color at most of the corners + colors = collections.defaultdict(int) + w, h = image.width(), image.height() + for x, y in (0, 0), (w - 1, 0), (w - 1, h - 1), (0, h - 1): + colors[image.pixel(x, y)] += 1 + most = max(colors, key=colors.get) + # let Qt do the masking work + mask = image.createMaskFromColor(most) + return QRegion(QBitmap.fromImage(mask)).boundingRect() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/musicview/__init__.py frescobaldi-2.0.0/frescobaldi_app/musicview/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/musicview/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/musicview/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,403 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The PDF preview panel. + +This file loads even if popplerqt4 is absent, although the PDF preview +panel only shows a message about missing the popplerqt4 module. + +The widget module contains the real widget, the documents module a simple +abstraction and caching of Poppler documents with their filename, +and the printing module contains code to print a Poppler document, either +via a PostScript rendering or by printing raster images to a QPrinter. + +All the point & click stuff is handled in the pointandclick module. + +""" + +from __future__ import unicode_literals + +import os +import weakref + +from PyQt4.QtCore import Qt, pyqtSignal +from PyQt4.QtGui import ( + QAction, QComboBox, QLabel, QKeySequence, QWidgetAction) + +import app +import actioncollection +import actioncollectionmanager +import icons +import panels +import listmodel +import widgets.drag +import jobattributes + +from . import documents + + +# default zoom percentages +_zoomvalues = [50, 75, 100, 125, 150, 175, 200, 250, 300] + +# viewModes from qpopplerview: +from qpopplerview import FixedScale, FitWidth, FitHeight, FitBoth + + +class MusicViewPanel(panels.Panel): + def __init__(self, mainwindow): + super(MusicViewPanel, self).__init__(mainwindow) + self.toggleViewAction().setShortcut(QKeySequence("Meta+Alt+M")) + mainwindow.addDockWidget(Qt.RightDockWidgetArea, self) + + ac = self.actionCollection = Actions(self) + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + ac.music_print.triggered.connect(self.printMusic) + ac.music_zoom_in.triggered.connect(self.zoomIn) + ac.music_zoom_out.triggered.connect(self.zoomOut) + ac.music_zoom_combo.zoomChanged.connect(self.slotZoomChanged) + ac.music_fit_width.triggered.connect(self.fitWidth) + ac.music_fit_height.triggered.connect(self.fitHeight) + ac.music_fit_both.triggered.connect(self.fitBoth) + ac.music_jump_to_cursor.triggered.connect(self.jumpToCursor) + ac.music_copy_image.triggered.connect(self.copyImage) + ac.music_document_select.currentDocumentChanged.connect(self.openDocument) + ac.music_document_select.documentClosed.connect(self.closeDocument) + ac.music_document_select.documentsChanged.connect(self.updateActions) + ac.music_copy_image.setEnabled(False) + + def translateUI(self): + self.setWindowTitle(_("window title", "Music View")) + self.toggleViewAction().setText(_("&Music View")) + + def createWidget(self): + import widget + w = widget.MusicView(self) + w.zoomChanged.connect(self.slotMusicZoomChanged) + w.updateZoomInfo() + w.view.surface().selectionChanged.connect(self.updateSelection) + return w + + def updateSelection(self, rect): + self.actionCollection.music_copy_image.setEnabled(bool(rect)) + + def openDocument(self, doc): + """Opens the documents.Document instance (wrapping a lazily loaded Poppler document).""" + self.widget().openDocument(doc) + + def closeDocument(self): + self.widget().clear() + + def updateActions(self): + ac = self.actionCollection + ac.music_print.setEnabled(bool(ac.music_document_select.documents())) + + def printMusic(self): + doc = self.actionCollection.music_document_select.currentDocument() + if doc and doc.document(): + import popplerprint + popplerprint.printDocument(doc, self) + + def zoomIn(self): + self.widget().view.zoomIn() + + def zoomOut(self): + self.widget().view.zoomOut() + + def fitWidth(self): + self.widget().view.setViewMode(FitWidth) + + def fitHeight(self): + self.widget().view.setViewMode(FitHeight) + + def fitBoth(self): + self.widget().view.setViewMode(FitBoth) + + def jumpToCursor(self): + self.activate() + self.widget().showCurrentLinks() + + def copyImage(self): + from . import image + image.copy(self) + + def slotZoomChanged(self, mode, scale): + """Called when the combobox is changed, changes view zoom.""" + if mode == FixedScale: + self.widget().view.zoom(scale) + else: + self.widget().view.setViewMode(mode) + + def slotMusicZoomChanged(self, mode, scale): + """Called when the music view is changed, updates the toolbar actions.""" + ac = self.actionCollection + ac.music_fit_width.setChecked(mode == FitWidth) + ac.music_fit_height.setChecked(mode == FitHeight) + ac.music_fit_both.setChecked(mode == FitBoth) + ac.music_zoom_combo.updateZoomInfo(mode, scale) + + +class Actions(actioncollection.ActionCollection): + name = "musicview" + def createActions(self, panel): + self.music_document_select = DocumentChooserAction(panel) + self.music_print = QAction(panel) + self.music_zoom_in = QAction(panel) + self.music_zoom_out = QAction(panel) + self.music_zoom_combo = ZoomerAction(panel) + self.music_fit_width = QAction(panel) + self.music_fit_height = QAction(panel) + self.music_fit_both = QAction(panel) + self.music_jump_to_cursor = QAction(panel) + self.music_copy_image = QAction(panel) + + self.music_fit_width.setCheckable(True) + self.music_fit_height.setCheckable(True) + self.music_fit_both.setCheckable(True) + + self.music_print.setIcon(icons.get('document-print')) + self.music_zoom_in.setIcon(icons.get('zoom-in')) + self.music_zoom_out.setIcon(icons.get('zoom-out')) + self.music_fit_width.setIcon(icons.get('zoom-fit-width')) + self.music_fit_height.setIcon(icons.get('zoom-fit-height')) + self.music_fit_both.setIcon(icons.get('zoom-fit-best')) + self.music_jump_to_cursor.setIcon(icons.get('go-jump')) + self.music_copy_image.setIcon(icons.get('edit-copy')) + + self.music_document_select.setShortcut(QKeySequence(Qt.SHIFT | Qt.CTRL | Qt.Key_O)) + self.music_print.setShortcuts(QKeySequence.Print) + self.music_zoom_in.setShortcuts(QKeySequence.ZoomIn) + self.music_zoom_out.setShortcuts(QKeySequence.ZoomOut) + self.music_jump_to_cursor.setShortcut(QKeySequence(Qt.CTRL | Qt.Key_J)) + self.music_copy_image.setShortcut(QKeySequence(Qt.SHIFT | Qt.CTRL | Qt.Key_C)) + + def translateUI(self): + self.music_document_select.setText(_("Select Music View Document")) + self.music_print.setText(_("&Print Music...")) + self.music_zoom_in.setText(_("Zoom &In")) + self.music_zoom_out.setText(_("Zoom &Out")) + self.music_zoom_combo.setText(_("Zoom Music")) + self.music_fit_width.setText(_("Fit &Width")) + self.music_fit_height.setText(_("Fit &Height")) + self.music_fit_both.setText(_("Fit &Page")) + self.music_jump_to_cursor.setText(_("&Jump to Cursor Position")) + self.music_copy_image.setText(_("Copy to &Image...")) + + +class ComboBoxAction(QWidgetAction): + """A widget action that opens a combobox widget popup when triggered.""" + def __init__(self, panel): + super(ComboBoxAction, self).__init__(panel) + self.triggered.connect(self.showPopup) + + def showPopup(self): + """Called when our action is triggered by a keyboard shortcut.""" + # find the widget in our floating panel, if available there + for w in self.createdWidgets(): + if w.window() == self.parent(): + w.showPopup() + return + # find the one in the main window + for w in self.createdWidgets(): + if w.window() == self.parent().mainwindow(): + w.showPopup() + return + + +class DocumentChooserAction(ComboBoxAction): + """A ComboBoxAction that keeps track of the current text document. + + It manages the list of generated PDF documents for every text document. + If the mainwindow changes its current document and there are PDFs to display, + it switches the current document. + + It also switches to a text document if a job finished for that document, + and it generated new PDF documents. + + """ + + documentClosed = pyqtSignal() + documentsChanged = pyqtSignal() + currentDocumentChanged = pyqtSignal(documents.Document) + + def __init__(self, panel): + super(DocumentChooserAction, self).__init__(panel) + self._model = None + self._document = None + self._documents = [] + self._currentIndex = -1 + self._indices = weakref.WeakKeyDictionary() + panel.mainwindow().currentDocumentChanged.connect(self.slotDocumentChanged) + documents.documentUpdated.connect(self.slotDocumentUpdated) + + def createWidget(self, parent): + w = DocumentChooser(parent) + w.activated[int].connect(self.setCurrentIndex) + if self._model: + w.setModel(self._model) + return w + + def slotDocumentChanged(self, doc): + """Called when the mainwindow changes its current document.""" + # only switch our document if there are PDF documents to display + if self._document is None or documents.group(doc).documents(): + self.setCurrentDocument(doc) + + def slotDocumentUpdated(self, doc, job): + """Called when a Job, finished on the document, has created new PDFs.""" + if (doc == self._document or + jobattributes.get(job).mainwindow == self.parent().mainwindow()): + self.setCurrentDocument(doc) + + def setCurrentDocument(self, document): + """Displays the DocumentGroup of the given text Document in our chooser.""" + prev = self._document + self._document = document + if prev: + prev.loaded.disconnect(self.updateDocument) + prev.closed.disconnect(self.closeDocument) + self._indices[prev] = self._currentIndex + document.loaded.connect(self.updateDocument) + document.closed.connect(self.closeDocument) + self.updateDocument() + + def updateDocument(self): + """(Re)read the output documents of the current document and show them.""" + docs = self._documents = documents.group(self._document).documents() + self.setVisible(bool(docs)) + self.setEnabled(bool(docs)) + + # make model for the docs + m = self._model = listmodel.ListModel([d.filename() for d in docs], + display = os.path.basename, icon = icons.file_type) + m.setRoleFunction(Qt.UserRole, lambda f: f) + for w in self.createdWidgets(): + w.setModel(m) + + index = self._indices.get(self._document, 0) + if index < 0 or index >= len(docs): + index = 0 + self.documentsChanged.emit() + self.setCurrentIndex(index) + + def closeDocument(self): + """Called when the current document is closed by the user.""" + self._document = None + self._documents = [] + self._currentIndex = -1 + self.setVisible(False) + self.setEnabled(False) + self.documentClosed.emit() + self.documentsChanged.emit() + + def documents(self): + return self._documents + + def setCurrentIndex(self, index): + if self._documents: + self._currentIndex = index + for w in self.createdWidgets(): + w.setCurrentIndex(index) + self.currentDocumentChanged.emit(self._documents[index]) + + def currentIndex(self): + return self._currentIndex + + def currentDocument(self): + """Returns the currently selected Music document (Note: NOT the text document!)""" + if self._documents: + return self._documents[self._currentIndex] + + +class DocumentChooser(QComboBox): + def __init__(self, parent): + super(DocumentChooser, self).__init__(parent) + self.setSizeAdjustPolicy(QComboBox.AdjustToContents) + self.setEditable(True) + self.lineEdit().setReadOnly(True) + self.setFocusPolicy(Qt.NoFocus) + app.translateUI(self) + widgets.drag.ComboDrag(self).role = Qt.UserRole + + def translateUI(self): + self.setToolTip(_("Choose the PDF document to display.")) + self.setWhatsThis(_( + "Choose the PDF document to display or drag the file " + "to another application or location.")) + + +class ZoomerAction(ComboBoxAction): + zoomChanged = pyqtSignal(int, float) + + def createWidget(self, parent): + return Zoomer(self, parent) + + def setCurrentIndex(self, index): + """Called when a user manipulates a Zoomer combobox. + + Updates the other widgets and calls the corresponding method of the panel. + + """ + for w in self.createdWidgets(): + w.setCurrentIndex(index) + if index == 0: + self.zoomChanged.emit(FitWidth, 0) + elif index == 1: + self.zoomChanged.emit(FitHeight, 0) + elif index == 2: + self.zoomChanged.emit(FitBoth, 0) + else: + self.zoomChanged.emit(FixedScale, _zoomvalues[index-3] / 100.0) + + def updateZoomInfo(self, mode, scale): + """Connect view.viewModeChanged and layout.scaleChanged to this.""" + if mode == FixedScale: + text = "{0:.0f}%".format(round(scale * 100.0)) + for w in self.createdWidgets(): + w.setEditText(text) + else: + if mode == FitWidth: + index = 0 + elif mode == FitHeight: + index = 1 + else: # qpopplerview.FitBoth: + index = 2 + for w in self.createdWidgets(): + w.setCurrentIndex(index) + + +class Zoomer(QComboBox): + def __init__(self, action, parent): + super(Zoomer, self).__init__(parent) + self.setSizeAdjustPolicy(QComboBox.AdjustToContents) + self.setEditable(True) + self.lineEdit().setReadOnly(True) + self.setFocusPolicy(Qt.NoFocus) + self.activated[int].connect(action.setCurrentIndex) + self.addItems(['']*3) + self.addItems(list(map("{0}%".format, _zoomvalues))) + self.setMaxVisibleItems(20) + app.translateUI(self) + + def translateUI(self): + self.setItemText(0, _("Fit Width")) + self.setItemText(1, _("Fit Height")) + self.setItemText(2, _("Fit Page")) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/musicview/pointandclick.py frescobaldi-2.0.0/frescobaldi_app/musicview/pointandclick.py --- frescobaldi-1.2.0/frescobaldi_app/musicview/pointandclick.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/musicview/pointandclick.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,261 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Handles Point and Click. +""" + +from __future__ import unicode_literals + +import re +import os +import weakref + +from PyQt4.QtCore import QUrl +from PyQt4.QtGui import QTextCursor + +import qpopplerview + +import app +import scratchdir +import ly.lex +import tokeniter + + +# cache point and click handlers for poppler documents +_cache = weakref.WeakKeyDictionary() + +# parse textedit urls +textedit_match = re.compile(r"^textedit://(.*?):(\d+):(\d+)(?::\d+)$").match + + +def readfilename(match): + """Returns the filename from the match object resulting from textedit_match.""" + return QUrl.fromPercentEncoding(match.group(1)) + + +def readurl(match): + """Returns filename, line, col for the match object resulting from textedit_match.""" + return readfilename(match), int(match.group(2)), int(match.group(3)) + + +def links(document): + try: + return _cache[document] + except KeyError: + l = _cache[document] = Links(document) + return l + + +class Links(object): + """Stores all the links of a Poppler document sorted by URL and text position. + + Only textedit:// urls are stored. + + """ + def __init__(self, document): + self._links = {} + self._docs = {} + + import popplerqt4 + with qpopplerview.lock(document): + for num in range(document.numPages()): + page = document.page(num) + for link in page.links(): + if isinstance(link, popplerqt4.Poppler.LinkBrowse): + m = textedit_match(link.url()) + if m: + filename, line, col = readurl(m) + l = self._links.setdefault(filename, {}) + l.setdefault((line, col), []).append((num, link.linkArea())) + + for filename in self._links: + for d in app.documents: + if (scratchdir.scratchdir(d).path() == filename + or d.url().toLocalFile() == filename): + self.bind(filename, d) + app.documentLoaded.connect(self.slotDocumentLoaded) + app.documentClosed.connect(self.slotDocumentClosed) + + def bind(self, filename, doc): + """Binds the given filename to the given document. + + When the document disappears, the binding is removed automatically. + While a document is bound, textedit links are stored as QTextCursors, + to they keep their position even if the user changes the document. + + """ + if filename not in self._docs: + self._docs[filename] = BoundLinks(doc, self._links[filename]) + + def slotDocumentLoaded(self, doc): + """Called when a new document is loaded, it maybe possible to bind to it.""" + filename = doc.url().toLocalFile() + if filename in self._links: + self.bind(filename, doc) + + def slotDocumentClosed(self, doc): + """Called when a document is closed, removes the bound links.""" + for filename, b in self._docs.items(): + if b.document == doc: + break + else: + return + del self._docs[filename] + + def cursor(self, link, load=False): + """Returns the destination of a link as a QTextCursor of the destination document). + + If load (defaulting to False) is True, the document is loaded if it is not yet loaded. + Returns None if the url was not valid or the document could not be loaded. + + """ + m = textedit_match(link.url()) + if m: + filename, line, col = readurl(m) + bound = self._docs.get(filename) + if bound: + return bound.cursor(line, col) + elif load and os.path.isfile(filename): + # this also calls bind(), via app.documentLoaded + app.openUrl(QUrl.fromLocalFile(filename)) + bound = self._docs.get(filename) + if bound: + return bound.cursor(line, col) + + def boundLinks(self, doc): + """Returns the Bound links object for the given text document.""" + for b in self._docs.values(): + if b.document == doc: + return b + + +class BoundLinks(object): + """Stores links as QTextCursors for a document.""" + def __init__(self, doc, links): + """Creates QTextCursor instances for every link, keeps a reference to the document.""" + self.document = doc + # make a sorted list of cursors with their [(pageNum, linkArea) ...] destinations list + self._cursor_dict = d = {} # mapping from (line, col) to QTextCursor + self._cursors = cursors = [] # sorted list of the cursors + self._destinations = destinations = [] # corresponding list of destinations + for pos, dest in sorted(links.items()): + line, column = pos + b = doc.findBlockByNumber(line - 1) + if b.isValid(): + c = d[pos] = QTextCursor(doc) + c.setPosition(b.position() + column) + cursors.append(c) + destinations.append(dest) + + def cursor(self, line, column): + """Returns the QTextCursor for the give line/col.""" + return self._cursor_dict.get((line, column)) + + def cursors(self): + """Returns the list of cursors, sorted on cursor position.""" + return self._cursors + + def destinations(self): + """Returns the list of destinations. + + Each destination corresponds with the cursor at the same index in the cursors() list. + Each destination is a list of (pageNum, QRectF) pairs, because many point-and-click + objects can point to the same place in the text document. + + """ + return self._destinations + + def indices(self, cursor): + """Returns a Python slice object or None or False. + + If a slice, it specifies the range of destinations (in the destinations() list) + that the given QTextCursor points to. The cursor must of course belong to our document. + + If None or False, it means that there is no object in the cursors neighbourhood. + If False, it means that it is e.g. preferred to clear earlier highlighted objects. + + This method performs quite a bit trickery: it also returns the destination when a cursor + points to the _ending_ point of a slur, beam or phrasing slur. + + """ + cursors = self._cursors + + def findlink(pos): + # binary search in list of cursors + lo, hi = 0, len(cursors) + while lo < hi: + mid = (lo + hi) // 2 + if pos < cursors[mid].position(): + hi = mid + else: + lo = mid + 1 + return lo - 1 + + if cursor.hasSelection(): + end = findlink(cursor.selectionEnd() - 1) + if end >= 0: + start = findlink(cursor.selectionStart()) + if start < 0 or cursors[start].position() < cursor.selectionStart(): + start += 1 + if start <= end: + return slice(start, end+1) + return False + + index = findlink(cursor.position()) + if index < 0: + return # before all other links + + cur2 = cursors[index] + if cur2.position() < cursor.position(): + # is the cursor at an ending token like a slur end? + prevcol = -1 + if cur2.block() == cursor.block(): + prevcol = cur2.position() - cur2.block().position() + col = cursor.position() - cursor.block().position() + found = False + tokens = tokeniter.Runner(cursor.block(), True) + for token in tokens.backward_line(): + if token.pos <= prevcol: + break + elif token.pos <= col: + if isinstance(token, ly.lex.MatchEnd) and token.matchname in ( + 'slur', 'phrasingslur', 'beam'): + # YES! now go backwards to find the opening token + nest = 1 + name = token.matchname + for token in tokens.backward(): + if isinstance(token, ly.lex.MatchStart) and token.matchname == name: + nest -= 1 + if nest == 0: + found = True + break + elif isinstance(token, ly.lex.MatchEnd) and token.matchname == name: + nest += 1 + break + if found: + index = findlink(tokens.block.position() + token.pos) + if index < 0 or cursors[index].block() != tokens.block: + return + elif cur2.block() != cursor.block(): + return False + # highlight it! + return slice(index, index+1) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/musicview/tooltip.py frescobaldi-2.0.0/frescobaldi_app/musicview/tooltip.py --- frescobaldi-1.2.0/frescobaldi_app/musicview/tooltip.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/musicview/tooltip.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,52 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Generate meaningful tooltips for cursor positions. +""" + +from __future__ import unicode_literals + +import tokeniter +import ly.lex.lilypond + + +def text(cursor): + filename = cursor.document().documentName() + line = cursor.blockNumber() + 1 + column = cursor.position() - cursor.block().position() + text = "{0} ({1}:{2})".format(filename, line, column) + definition = get_definition(cursor) + if definition: + text += '\n' + definition + return text + +def get_definition(cursor): + block = cursor.block() + while block.isValid(): + state = tokeniter.state(block) + if isinstance(state.parser(), ly.lex.lilypond.ParseGlobal): + for t in tokeniter.tokens(block)[:2]: + if type(t) is ly.lex.lilypond.Name: + return t[:] + elif isinstance(t, ly.lex.lilypond.Keyword) and t == '\\score': + return '\\score' + block = block.previous() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/musicview/widget.py frescobaldi-2.0.0/frescobaldi_app/musicview/widget.py --- frescobaldi-1.2.0/frescobaldi_app/musicview/widget.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/musicview/widget.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,339 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The PDF preview panel widget. +""" + +from __future__ import unicode_literals + +import itertools +import os +import weakref + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +try: + import popplerqt4 +except ImportError: + pass + +import qpopplerview +import popplerview + +import app +import icons +import helpers +import textformats +import tokeniter +import viewhighlighter +import ly.lex.lilypond + +from . import pointandclick + + +class MusicView(QWidget): + """Widget containing the qpopplerview.View.""" + + zoomChanged = pyqtSignal(int, float) # mode, scale + + def __init__(self, dockwidget): + """Creates the Music View for the dockwidget.""" + super(MusicView, self).__init__(dockwidget) + + self._positions = weakref.WeakKeyDictionary() + self._currentDocument = None + self._links = None + + self._highlightFormat = QTextCharFormat() + self._highlightMusicFormat = Highlighter() + self._highlightRange = None + self._highlightTimer = QTimer(singleShot=True, interval= 250, timeout=self.updateHighlighting) + self._highlightRemoveTimer = QTimer(singleShot=True, timeout=self.clearHighlighting) + + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + + self.view = popplerview.View(self) + layout.addWidget(self.view) + app.settingsChanged.connect(self.readSettings) + self.readSettings() + self.view.setViewMode(qpopplerview.FitWidth) + self.view.surface().linkClicked.connect(self.slotLinkClicked) + self.view.surface().linkHovered.connect(self.slotLinkHovered) + self.view.surface().linkLeft.connect(self.slotLinkLeft) + self.view.surface().setShowUrlTips(False) + self.view.surface().linkHelpRequested.connect(self.slotLinkHelpRequested) + + self.view.viewModeChanged.connect(self.updateZoomInfo) + self.view.surface().pageLayout().scaleChanged.connect(self.updateZoomInfo) + self.view.setContextMenuPolicy(Qt.CustomContextMenu) + self.view.customContextMenuRequested.connect(self.showContextMenu) + + # react if cursor of current text document moves + dockwidget.mainwindow().currentViewChanged.connect(self.slotCurrentViewChanged) + view = dockwidget.mainwindow().currentView() + if view: + self.slotCurrentViewChanged(view) + + def sizeHint(self): + """Returns the initial size the PDF (Music) View prefers.""" + return self.parent().mainwindow().size() / 2 + + def updateZoomInfo(self): + """Called when zoom and viewmode of the qpopplerview change, emit zoomChanged.""" + self.zoomChanged.emit(self.view.viewMode(), self.view.surface().pageLayout().scale()) + + def openDocument(self, doc): + """Opens a documents.Document instance.""" + self.clear() + self._currentDocument = doc + document = doc.document() + if document: + self._links = pointandclick.links(document) + self.view.load(document) + position = self._positions.get(doc, (0, 0, 0)) + self.view.setPosition(position) + + def clear(self): + """Empties the view.""" + cur = self._currentDocument + if cur: + self._positions[cur] = self.view.position() + self._currentDocument = None + self._links = None + self._highlightRange = None + self._highlightTimer.stop() + self.view.clear() + + def readSettings(self): + """Reads the settings from the user's preferences.""" + # background and highlight colors of music view + colors = textformats.formatData('editor').baseColors + self._highlightMusicFormat.setColor(colors['musichighlight']) + color = colors['selectionbackground'] + color.setAlpha(128) + self._highlightFormat.setBackground(color) + + def slotLinkClicked(self, ev, page, link): + """Called when the use clicks a link. + + If the links is a textedit link, opens the document and puts the cursor there. + Otherwise, call the helpers module to open the destination. + + """ + cursor = self._links.cursor(link, True) + if cursor: + self.parent().mainwindow().setTextCursor(cursor, findOpenView=True) + elif ev.button() != Qt.RightButton and isinstance(link, popplerqt4.Poppler.LinkBrowse): + helpers.openUrl(QUrl(link.url())) + + def slotLinkHovered(self, page, link): + """Called when the mouse hovers a link. + + If the links points to the current editor document, the token(s) it points + at are highlighted using a transparent selection color. + + The highlight shows for a few seconds but disappears when the mouse moves + off the link or when the link is clicked. + + """ + self.view.surface().highlight(self._highlightMusicFormat, + [(page, link.linkArea().normalized())], 2000) + self._highlightRange = None + cursor = self._links.cursor(link) + if not cursor or cursor.document() != self.parent().mainwindow().currentDocument(): + return + + # highlight token(s) at this cursor + source = tokeniter.Source.fromCursor(cursor, True) + for token in source.tokens: + break + else: + return + + cur = source.cursor(token, end=0) + cursors = [cur] + + # some heuristic to find the relevant range(s) the linked grob represents + if isinstance(token, ly.lex.lilypond.Direction): + # a _, - or ^ is found; find the next token + for token in source: + if not isinstance(token, (ly.lex.Space, ly.lex.Comment)): + break + end = token.end + source.block.position() + if token == '\\markup': + # find the end of the markup expression + depth = source.state.depth() + for token in source: + if source.state.depth() < depth: + end = token.end + source.block.position() + break + elif token == '"': + # find the end of the string + for token in source: + if isinstance(token, ly.lex.StringEnd): + end = token.end + source.block.position() + break + elif isinstance(token, ly.lex.MatchStart): + # find the end of slur, beam. ligature, phrasing slur, etc. + name = token.matchname + nest = 1 + for token in source: + if isinstance(token, ly.lex.MatchEnd) and token.matchname == name: + nest -= 1 + if nest == 0: + cursors.append(source.cursor(token)) + break + elif isinstance(token, ly.lex.MatchStart) and token.matchname == name: + nest += 1 + + cur.setPosition(end, QTextCursor.KeepAnchor) + + view = self.parent().mainwindow().currentView() + viewhighlighter.highlighter(view).highlight(self._highlightFormat, cursors, 2, 5000) + + def slotLinkLeft(self): + """Called when the mouse moves off a previously highlighted link.""" + self.clearHighlighting() + view = self.parent().mainwindow().currentView() + viewhighlighter.highlighter(view).clear(self._highlightFormat) + + def slotLinkHelpRequested(self, pos, page, link): + """Called when a ToolTip wants to appear above the hovered link.""" + if isinstance(link, popplerqt4.Poppler.LinkBrowse): + cursor = self._links.cursor(link) + if cursor: + from . import tooltip + text = tooltip.text(cursor) + else: + m = pointandclick.textedit_match(link.url()) + if m: + filename, line, column = pointandclick.readurl(m) + text = "{0} ({1}:{2})".format(os.path.basename(filename), line, column) + else: + text = link.url() + QToolTip.showText(pos, text, self.view.surface(), page.linkRect(link.linkArea())) + + def slotCurrentViewChanged(self, view, old=None): + self.view.surface().clearHighlight(self._highlightMusicFormat) + if old: + old.cursorPositionChanged.disconnect(self.slotCursorPositionChanged) + view.cursorPositionChanged.connect(self.slotCursorPositionChanged) + + def slotCursorPositionChanged(self): + """Called when the user moves the text cursor.""" + if not self.isVisible() or not self._links: + return # not visible of no PDF in the viewer + + view = self.parent().mainwindow().currentView() + links = self._links.boundLinks(view.document()) + if not links: + return # the PDF contains no references to the current text document + + s = links.indices(view.textCursor()) + if s is False: + self.clearHighlighting() + elif s: + self.highlight(links.destinations(), s) + + def highlight(self, destinations, slice, msec=None): + """(Internal) Highlights the from the specified destinations the specified slice.""" + count = slice.stop - slice.start + if msec is None: + msec = 5000 if count > 1 else 2000 # show selections longer + self._highlightRemoveTimer.start(msec) + if self._highlightRange == slice: + return # don't redraw if same + self._highlightRange = slice + self._destinations = destinations[slice] + if count > 100: + self._highlightTimer.start() + else: + self._highlightTimer.stop() + self.updateHighlighting() + + def updateHighlighting(self): + """Really orders the view's surface to draw the highlighting.""" + layout = self.view.surface().pageLayout() + areas = [(layout[pageNum], rect) + for dest in self._destinations + for pageNum, rect in dest] + self.view.surface().highlight(self._highlightMusicFormat, areas) + + def clearHighlighting(self): + """Called on timeout of the _highlightRemoveTimer.""" + self._highlightRange = None + self.view.surface().clearHighlight(self._highlightMusicFormat) + + def showCurrentLinks(self): + """Scrolls the view if necessary to show objects at current text cursor.""" + if not self._links: + return # no PDF in viewer + + view = self.parent().mainwindow().currentView() + links = self._links.boundLinks(view.document()) + if not links: + return # the PDF contains no references to the current text document + + s = links.indices(view.textCursor()) + if not s: + return + layout = self.view.surface().pageLayout() + rect = QRect() + for dest in links.destinations()[s]: + for pageNum, r in dest: + rect = rect.united(layout[pageNum].linkRect(r.normalized())) + # not larger than viewport + rect.setSize(rect.size().boundedTo(self.view.viewport().size())) + self.view.center(rect.center()) + self.highlight(links.destinations(), s, 10000) + + def showContextMenu(self): + """Called when the user right-clicks or presses the context menu key.""" + pos = self.view.mapToGlobal(QPoint(0, 0)) + link, cursor = None, None + # mouse inside view? + if self.view.mapFromGlobal(QCursor.pos()) in self.view.viewport().rect(): + pos = QCursor.pos() + pos_in_surface = self.view.surface().mapFromGlobal(pos) + page, link = self.view.surface().pageLayout().linkAt(pos_in_surface) + if link: + cursor = self._links.cursor(link) + from . import contextmenu + contextmenu.show(pos, self.parent(), link, cursor) + + +class Highlighter(qpopplerview.Highlighter): + """Simple version of qpopplerview.Highlighter that has the color settable. + + You must set a color before using the Highlighter. + + """ + def setColor(self, color): + """Sets the color to use to draw highlighting rectangles.""" + self._color = color + + def color(self): + """Returns the color set using the setColor method.""" + return self._color + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/networkaccessmanager.py frescobaldi-2.0.0/frescobaldi_app/networkaccessmanager.py --- frescobaldi-1.2.0/frescobaldi_app/networkaccessmanager.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/networkaccessmanager.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,166 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A QNetworkAccessManager subclass with easy registration of custom url schemes. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QThread, QTimer, QUrl +from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkReply, QNetworkRequest + + +class NetworkAccessManager(QNetworkAccessManager): + """A QNetworkAccessManager subclass with easy registration of custom url schemes. + + Use the registerHandler() method to add custom scheme handlers. + The registerHtmlHandler() method is used to add a simple callable as handler that + gets a QUrl and should return the HTML as a normal string. + + The headers instance attribute is a dictionary (empty by default) containing + extra headers (as key, value) that are added to outgoing requests. + + """ + + def __init__(self, parent=None): + QNetworkAccessManager.__init__(self, parent) + self._dispatcher = {} + self.headers = {} + + def createRequest(self, operation, request, data): + try: + requestFunc = self._dispatcher[request.url().scheme()] + except KeyError: + self.addHeadersToRequest(request) + return QNetworkAccessManager.createRequest(self, operation, request, data) + return requestFunc(self, operation, request, data) + + def addHeadersToRequest(self, request): + """Called on outgoing requests and should add raw headers to the request. + + The default implementation of this method simply adds all the headers in the + headers instance attribute. + + """ + for name, value in self.headers.items(): + request.setRawHeader(name, value) + + def registerHandler(self, scheme, handler): + """Registers a handler for the given scheme. + + The handler is called with four arguments (manager, operation, request, + data), just like the QNetworkAccessManager.createRequest method, and + should return a QNetworkReply instance. + + """ + self._dispatcher[scheme] = handler + + def registerHtmlHandler(self, scheme, handler, threaded=False, encoding="UTF-8"): + """Registers a simple callable as the handler for the given scheme. + + The handler only gets a GET URL (QUrl) and should return a HTML string. + If threaded is True, the handler is called in a background thread. + The encoding defaults to UTF-8 and is used for encoding the HTML returned + by then handler and also set in the Content-Type header. + + """ + cls = ThreadedHtmlReply if threaded else HtmlReply + def createRequest(mgr, operation, request, data): + return cls(mgr, request.url(), handler, encoding) + self._dispatcher[scheme] = createRequest + + def unregisterHandler(self, scheme): + """Removes the special handling for the given scheme.""" + try: + del self._dispatcher[scheme] + except KeyError: + pass + + +class HtmlReplyBase(QNetworkReply): + """Abstract base class for a QNetworkReply that represents a generated HTML string.""" + def __init__(self, manager, url, handler, encoding="UTF-8"): + QNetworkReply.__init__(self, manager) + self.setUrl(url) + self._handler = handler + self._encoding = encoding + + def callHandler(self): + self._content = self._handler(self.url()).encode(self._encoding) + + def outputReady(self): + self._offset = 0 + self.setHeader(QNetworkRequest.ContentTypeHeader, "text/html; charset={0}".format(self._encoding)) + self.setHeader(QNetworkRequest.ContentLengthHeader, len(self._content)) + self.open(QNetworkReply.ReadOnly | QNetworkReply.Unbuffered) + + def emitSignals(self): + self.readyRead.emit() + self.finished.emit() + + def abort(self): + pass + + def bytesAvailable(self): + return len(self._content) - self._offset + + def isSequential(self): + return True + + def readData(self, maxSize): + if self._offset < len(self._content): + end = min(self._offset + maxSize, len(self._content)) + data = self._content[self._offset:end] + self._offset = end + return data + + +class HtmlReply(HtmlReplyBase): + """QNetworkReply that generates a HTML string by calling handler(url).encode(encoding).""" + def __init__(self, manager, url, handler, encoding="UTF-8"): + HtmlReplyBase.__init__(self, manager, url, handler, encoding) + self.callHandler() + self.outputReady() + QTimer.singleShot(0, self.emitSignals) + + +class ThreadedHtmlReply(HtmlReplyBase): + """HtmlReply that calls handler(url) in a background thread.""" + def __init__(self, manager, url, handler, encoding="UTF-8"): + HtmlReplyBase.__init__(self, manager, url, handler, encoding) + self._thread = Thread(self.callHandler) + self._thread.finished.connect(self.threadFinished) + self._thread.start() + + def threadFinished(self): + self.outputReady() + self.emitSignals() + + +class Thread(QThread): + """QThread that runs a single callable.""" + def __init__(self, func): + QThread.__init__(self) + self._func = func + + def run(self): + self._func() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/panels.py frescobaldi-2.0.0/frescobaldi_app/panels.py --- frescobaldi-1.2.0/frescobaldi_app/panels.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/panels.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,147 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Base class and stubs and logic for Panels (QDockWidgets). + +When the panel must be shown its widget is instantiated. +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QDockWidget, QLabel + +import actioncollection +import actioncollectionmanager +import app +import plugin + + +def manager(mainwindow): + return PanelManager.instance(mainwindow) + + +class PanelManager(plugin.MainWindowPlugin): + def __init__(self, mainwindow): + # instantiate the panel stubs here + import quickinsert + self.quickinsert = quickinsert.QuickInsertPanel(mainwindow) + import musicview + self.musicview = musicview.MusicViewPanel(mainwindow) + import logtool + self.logtool = logtool.LogTool(mainwindow) + import docbrowser + self.docbrowser = docbrowser.HelpBrowser(mainwindow) + import snippet.tool + self.snippettool = snippet.tool.SnippetTool(mainwindow) + import miditool + self.miditool = miditool.MidiTool(mainwindow) + import charmap + self.charmap = charmap.CharMap(mainwindow) + import doclist + self.doclist = doclist.DocumentList(mainwindow) + self.createActions() + + # make some default arrangements + mainwindow.tabifyDockWidget(self.musicview, self.docbrowser) + + def createActions(self): + self.actionCollection = Actions(self) + actioncollectionmanager.manager(self.mainwindow()).addActionCollection(self.actionCollection) + + def addActionsToMenu(self, menu): + """Adds all toggleViewActions to the given menu.""" + menu.addAction(self.actionCollection.panel_quickinsert) + menu.addAction(self.actionCollection.panel_snippettool) + menu.addAction(self.actionCollection.panel_musicview) + menu.addAction(self.actionCollection.panel_logtool) + menu.addAction(self.actionCollection.panel_docbrowser) + menu.addAction(self.actionCollection.panel_miditool) + menu.addAction(self.actionCollection.panel_charmap) + menu.addAction(self.actionCollection.panel_doclist) + + +class Actions(actioncollection.ActionCollection): + """Manages the keyboard shortcuts to hide/show the plugins.""" + name = "panels" + + def createActions(self, manager): + # add the actions for the plugins + self.panel_quickinsert = manager.quickinsert.toggleViewAction() + self.panel_snippettool = manager.snippettool.toggleViewAction() + self.panel_musicview = manager.musicview.toggleViewAction() + self.panel_logtool = manager.logtool.toggleViewAction() + self.panel_docbrowser = manager.docbrowser.toggleViewAction() + self.panel_miditool = manager.miditool.toggleViewAction() + self.panel_charmap = manager.charmap.toggleViewAction() + self.panel_doclist = manager.doclist.toggleViewAction() + + +class Panel(QDockWidget): + """Base class for Panels. + + You should implement __init__(), createWidget() and translateUI(). + On the first call to sizeHint() our widget is created. + + """ + def __init__(self, mainwindow): + """You should implement this method to set a title and add yourself to the mainwindow. + + First call this super method as it calls the Qt constructor. + + """ + super(Panel, self).__init__(mainwindow) + self.setObjectName(self.__class__.__name__.lower()) + self.visibilityChanged.connect(self.slotVisibilityChanged) + app.translateUI(self) + + def mainwindow(self): + return self.parentWidget() + + def sizeHint(self): + """This is always called when the panel needs to be shown. Instantiate if not already done.""" + self.widget() + return super(Panel, self).sizeHint() + + def widget(self): + """Ensures that our widget() is created and returns it.""" + w = super(Panel, self).widget() + if not w: + w = self.createWidget() + self.setWidget(w) + self.visibilityChanged.disconnect(self.slotVisibilityChanged) + return w + + def slotVisibilityChanged(self, visible): + if visible: + self.widget() + + def createWidget(self): + """Re-implement this to return the widget for this tool.""" + return QLabel("", self) + + def activate(self): + """Really shows the dock widget, even if tabified.""" + self.show() + if self.mainwindow().tabifiedDockWidgets(self) or self.isFloating(): + self.raise_() + diff -Nru frescobaldi-1.2.0/frescobaldi_app/pitch/__init__.py frescobaldi-2.0.0/frescobaldi_app/pitch/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/pitch/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/pitch/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,114 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Tools to edit pitch of selected music. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QAction, QActionGroup, QMenu + +import app +import actioncollection +import actioncollectionmanager +import plugin +import util +import icons +import ly.pitch + + +class Pitch(plugin.MainWindowPlugin): + def __init__(self, mainwindow): + self.actionCollection = ac = Actions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + m = self.language_menu = QMenu() + g = self.language_group = QActionGroup(None) + for name in sorted(ly.pitch.pitchInfo.keys()): + a = m.addAction(name.title()) + a.setObjectName(name) + a.setCheckable(True) + g.addAction(a) + util.addAccelerators(m.actions()) + ac.pitch_language.setMenu(m) + m.aboutToShow.connect(self.setLanguageMenu) + g.triggered.connect(self.changeLanguage) + ac.pitch_rel2abs.triggered.connect(self.rel2abs) + ac.pitch_abs2rel.triggered.connect(self.abs2rel) + ac.pitch_transpose.triggered.connect(self.transpose) + + def rel2abs(self): + from . import pitch + cursor = self.mainwindow().textCursor() + pitch.rel2abs(cursor) + + def abs2rel(self): + from . import pitch + cursor = self.mainwindow().textCursor() + pitch.abs2rel(cursor) + + def transpose(self): + from . import pitch + cursor = self.mainwindow().textCursor() + pitch.transpose(cursor, self.mainwindow()) + + def setLanguageMenu(self): + """Called when the menu is shown; selects the correct language.""" + import documentinfo + doc = self.mainwindow().currentDocument() + lang = documentinfo.info(doc).pitchLanguage() or 'nederlands' + for a in self.language_group.actions(): + if a.objectName() == lang: + a.setChecked(True) + break + + def changeLanguage(self, action): + from . import pitch + cursor = self.mainwindow().textCursor() + pitch.changeLanguage(cursor, action.objectName()) + + +class Actions(actioncollection.ActionCollection): + name = "pitch" + def createActions(self, parent): + self.pitch_language = QAction(parent) + self.pitch_rel2abs = QAction(parent) + self.pitch_abs2rel = QAction(parent) + self.pitch_transpose = QAction(parent) + + self.pitch_language.setIcon(icons.get('tools_pitch_language')) + self.pitch_transpose.setIcon(icons.get('tools_transpose')) + + def translateUI(self): + self.pitch_language.setText(_("Pitch Name &Language")) + self.pitch_language.setToolTip(_( + "Change the LilyPond language used for pitch names " + "in this document or in the selection.")) + self.pitch_rel2abs.setText(_("Convert Relative to &Absolute")) + self.pitch_rel2abs.setToolTip(_( + "Converts the notes in the document or selection from relative to " + "absolute pitch.")) + self.pitch_abs2rel.setText(_("Convert Absolute to &Relative")) + self.pitch_abs2rel.setToolTip(_( + "Converts the notes in the document or selection from absolute to " + "relative pitch.")) + self.pitch_transpose.setText(_("&Transpose...")) + self.pitch_transpose.setToolTip(_( + "Transposes all notes in the document or selection.")) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/pitch/pitch.py frescobaldi-2.0.0/frescobaldi_app/pitch/pitch.py --- frescobaldi-1.2.0/frescobaldi_app/pitch/pitch.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/pitch/pitch.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,794 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Implementation of the tools to edit pitch of selected music. +""" + +from __future__ import unicode_literals + +import itertools +import re + +from PyQt4.QtGui import QMessageBox, QTextCursor + +import app +import help +import icons +import ly.pitch +import ly.lex.lilypond +import cursortools +import util +import tokeniter +import documentinfo +import lilypondinfo +import inputdialog + + +def changeLanguage(cursor, language): + """Changes the language of the pitch names.""" + selection = cursor.hasSelection() + if selection: + start = cursor.selectionStart() + cursor.setPosition(cursor.selectionEnd()) + cursor.setPosition(0, QTextCursor.KeepAnchor) + source = tokeniter.Source.selection(cursor) + else: + source = tokeniter.Source.document(cursor) + + pitches = PitchIterator(source) + tokens = pitches.tokens() + writer = ly.pitch.pitchWriter(language) + + if selection: + # consume tokens before the selection, following the language + source.consume(tokens, start) + + changed = False # track change of \language or \include language command + with cursortools.editBlock(cursor): + try: + with util.busyCursor(): + with cursortools.Editor() as e: + for t in tokens: + if isinstance(t, ly.lex.lilypond.Note): + # translate the pitch name + p = pitches.read(t) + if p: + n = writer(*p) + if n != t: + e.insertText(source.cursor(t), n) + elif isinstance(t, LanguageName) and t != language: + # change the language name in a command + e.insertText(source.cursor(t), language) + changed = True + except ly.pitch.PitchNameNotAvailable: + QMessageBox.critical(None, app.caption(_("Pitch Name Language")), _( + "Can't perform the requested translation.\n\n" + "The music contains quarter-tone alterations, but " + "those are not available in the pitch language \"{name}\"." + ).format(name=language)) + return + if changed: + return + if not selection: + # there was no selection and no language command, so insert one + insertLanguage(cursor.document(), language) + return + # there was a selection but no command, user must insert manually. + QMessageBox.information(None, app.caption(_("Pitch Name Language")), + '

{0}

' + '

\\include "{1}.ly" {2}

' + '

\\language "{1}" {3}

'.format( + _("The pitch language of the selected text has been " + "updated, but you need to manually add the following " + "command to your document:"), + language, + _("(for LilyPond below 2.14), or"), + _("(for LilyPond 2.14 and higher.)"))) + + +def insertLanguage(document, language): + """Inserts a language command in the document. + + The command is inserted at the top or just below the version line. + If the document uses LilyPond < 2.13.38, the \\include command is used, + otherwise the newer \\language command. + + """ + version = (documentinfo.info(document).version() + or lilypondinfo.preferred().version) + if version and version < (2, 13, 38): + text = '\\include "{0}.ly"' + else: + text = '\\language "{0}"' + # insert language command on top of file, but below version + block = document.firstBlock() + c = QTextCursor(block) + if '\\version' in tokeniter.tokens(block): + c.movePosition(QTextCursor.EndOfBlock) + text = '\n' + text + else: + text += '\n' + c.insertText(text.format(language)) + + +def rel2abs(cursor): + """Converts pitches from relative to absolute.""" + selection = cursor.hasSelection() + if selection: + start = cursor.selectionStart() + cursor.setPosition(cursor.selectionEnd()) + cursor.setPosition(0, QTextCursor.KeepAnchor) + source = tokeniter.Source.selection(cursor, True) + else: + source = tokeniter.Source.document(cursor, True) + + pitches = PitchIterator(source) + psource = pitches.pitches() + if selection: + # consume tokens before the selection, following the language + t = source.consume(pitches.tokens(), start) + if t: + psource = itertools.chain((t,), psource) + + # this class dispatches the tokens. we can't use a generator function + # as that doesn't like to be called again while there is already a body + # running. + class gen(object): + def __iter__(self): + return self + + def __next__(self): + t = next(psource) + while isinstance(t, (ly.lex.Space, ly.lex.Comment)): + t = next(psource) + if t == '\\relative' and isinstance(t, ly.lex.lilypond.Command): + relative(t) + t = next(psource) + elif isinstance(t, ly.lex.lilypond.MarkupScore): + consume() + t = next(psource) + return t + + next = __next__ + + tsource = gen() + + def makeAbsolute(p, lastPitch): + """Makes pitch absolute (honoring and removing possible octaveCheck).""" + if p.octaveCheck is not None: + p.octave = p.octaveCheck + p.octaveCheck = None + else: + p.makeAbsolute(lastPitch) + pitches.write(p, editor) + + def context(): + """Consume tokens till the level drops (we exit a construct).""" + depth = source.state.depth() + for t in tsource: + yield t + if source.state.depth() < depth: + return + + def consume(): + """Consume tokens from context() returning the last token, if any.""" + t = None + for t in context(): + pass + return t + + def relative(t): + c = source.cursor(t) + lastPitch = None + + t = next(tsource) + if isinstance(t, Pitch): + lastPitch = t + t = next(tsource) + else: + lastPitch = Pitch.c1() + + # remove the \relative tokens + c.setPosition(source.position(t), c.KeepAnchor) + editor.removeSelectedText(c) + + while True: + # eat stuff like \new Staff == "bla" \new Voice \notes etc. + if isinstance(source.state.parser(), ly.lex.lilypond.ParseNewContext): + t = consume() + elif isinstance(t, (ly.lex.lilypond.ChordMode, ly.lex.lilypond.NoteMode)): + t = next(tsource) + else: + break + + # now convert the relative expression to absolute + if t in ('{', '<<'): + # Handle full music expression { ... } or << ... >> + for t in context(): + # skip commands with pitches that do not count + if isinstance(t, ly.lex.lilypond.PitchCommand): + if t == '\\octaveCheck': + c = source.cursor(t) + for p in getpitches(context()): + # remove the \octaveCheck + lastPitch = p + c.setPosition((p.octaveCursor or p.noteCursor).selectionEnd(), c.KeepAnchor) + editor.removeSelectedText(c) + break + else: + consume() + elif isinstance(t, ly.lex.lilypond.ChordStart): + # handle chord + chord = [lastPitch] + for p in getpitches(context()): + makeAbsolute(p, chord[-1]) + chord.append(p) + lastPitch = chord[:2][-1] # same or first + elif isinstance(t, Pitch): + makeAbsolute(t, lastPitch) + lastPitch = t + elif isinstance(t, ly.lex.lilypond.ChordStart): + # Handle just one chord + for p in getpitches(context()): + makeAbsolute(p, lastPitch) + lastPitch = p + elif isinstance(t, Pitch): + # Handle just one pitch + makeAbsolute(t, lastPitch) + + # Do it! + with util.busyCursor(): + with cursortools.Editor() as editor: + for t in tsource: + pass + + +def abs2rel(cursor): + """Converts pitches from absolute to relative.""" + selection = cursor.hasSelection() + if selection: + start = cursor.selectionStart() + cursor.setPosition(cursor.selectionEnd()) + cursor.setPosition(0, QTextCursor.KeepAnchor) + source = tokeniter.Source.selection(cursor, True) + else: + source = tokeniter.Source.document(cursor, True) + + pitches = PitchIterator(source) + psource = pitches.pitches() + if selection: + # consume tokens before the selection, following the language + t = source.consume(pitches.tokens(), start) + if t: + psource = itertools.chain((t,), psource) + + # this class dispatches the tokens. we can't use a generator function + # as that doesn't like to be called again while there is already a body + # running. + class gen(object): + def __iter__(self): + return self + + def __next__(self): + t = next(psource) + while isinstance(t, (ly.lex.Space, ly.lex.Comment)): + t = next(psource) + if t == '\\relative' and isinstance(t, ly.lex.lilypond.Command): + relative() + t = next(psource) + elif isinstance(t, ly.lex.lilypond.ChordMode): + consume() # do not change chords + t = next(psource) + elif isinstance(t, ly.lex.lilypond.MarkupScore): + consume() + t = next(psource) + return t + + next = __next__ + + tsource = gen() + + def context(): + """Consume tokens till the level drops (we exit a construct).""" + depth = source.state.depth() + for t in tsource: + yield t + if source.state.depth() < depth: + return + + def consume(): + """Consume tokens from context() returning the last token, if any.""" + t = None + for t in context(): + pass + return t + + def relative(): + """Consume the whole \relative expression without doing anything. """ + # skip pitch argument + t = next(tsource) + if isinstance(t, Pitch): + t = next(tsource) + + while True: + # eat stuff like \new Staff == "bla" \new Voice \notes etc. + if isinstance(source.state.parser(), ly.lex.lilypond.ParseNewContext): + t = consume() + elif isinstance(t, ly.lex.lilypond.NoteMode): + t = next(tsource) + else: + break + + if t in ('{', '<<', '<'): + consume() + + # Do it! + with util.busyCursor(): + with cursortools.Editor() as editor: + for t in tsource: + if t in ('{', '<<'): + # Ok, parse current expression. + c = source.cursor(t, end=0) # insert the \relative command + lastPitch = None + chord = None + for t in context(): + # skip commands with pitches that do not count + if isinstance(t, ly.lex.lilypond.PitchCommand): + consume() + elif isinstance(t, ly.lex.lilypond.ChordStart): + # Handle chord + chord = [] + elif isinstance(t, ly.lex.lilypond.ChordEnd): + if chord: + lastPitch = chord[0] + chord = None + elif isinstance(t, Pitch): + # Handle pitch + if lastPitch is None: + lastPitch = Pitch.c1() + lastPitch.octave = t.octave + if t.note > 3: + lastPitch.octave += 1 + editor.insertText(c, + "\\relative {0} ".format( + lastPitch.output(pitches.language))) + p = t.copy() + t.makeRelative(lastPitch) + pitches.write(t, editor) + lastPitch = p + # remember the first pitch of a chord + if chord == []: + chord.append(p) + + +def transpose(cursor, mainwindow): + """Transposes pitches.""" + language = documentinfo.info(cursor.document()).pitchLanguage() or 'nederlands' + + def readpitches(text): + """Reads pitches from text.""" + result = [] + for pitch, octave in re.findall(r"([a-z]+)([,']*)", text): + r = ly.pitch.pitchReader(language)(pitch) + if r: + result.append(ly.pitch.Pitch(*r, octave=ly.pitch.octaveToNum(octave))) + return result + + def validate(text): + """Returns whether the text contains exactly two pitches.""" + return len(readpitches(text)) == 2 + + text = inputdialog.getText(mainwindow, _("Transpose"), _( + "Please enter two absolute pitches, separated by a space, " + "using the pitch name language \"{language}\"." + ).format(language=language), icon = icons.get('tools_transpose'), + help = transpose_help, validate = validate) + if text == None: + return + + transposer = ly.pitch.Transposer(*readpitches(text)) + + selection = cursor.hasSelection() + if selection: + start = cursor.selectionStart() + cursor.setPosition(cursor.selectionEnd()) + cursor.setPosition(0, QTextCursor.KeepAnchor) + source = tokeniter.Source.selection(cursor, True) + else: + source = tokeniter.Source.document(cursor, True) + + pitches = PitchIterator(source) + psource = pitches.pitches() + + class gen(object): + def __init__(self): + self.inSelection = not selection + + def __iter__(self): + return self + + def __next__(self): + while True: + t = next(psource) + if isinstance(t, (ly.lex.Space, ly.lex.Comment)): + continue + elif not self.inSelection and pitches.position(t) >= start: + self.inSelection = True + # Handle stuff that's the same in relative and absolute here + if t == "\\relative": + relative() + elif isinstance(t, ly.lex.lilypond.MarkupScore): + absolute(context()) + elif isinstance(t, ly.lex.lilypond.ChordMode): + chordmode() + elif isinstance(t, ly.lex.lilypond.PitchCommand): + if t == "\\transposition": + next(psource) # skip pitch + elif t == "\\transpose": + for p in getpitches(context()): + transpose(p) + elif t == "\\key": + for p in getpitches(context()): + transpose(p, 0) + else: + return t + else: + return t + + next = __next__ + + tsource = gen() + + def context(): + """Consume tokens till the level drops (we exit a construct).""" + depth = source.state.depth() + for t in tsource: + yield t + if source.state.depth() < depth: + return + + def consume(): + """Consume tokens from context() returning the last token, if any.""" + t = None + for t in context(): + pass + return t + + def transpose(p, resetOctave = None): + """Transpose absolute pitch, using octave if given.""" + transposer.transpose(p) + if resetOctave is not None: + p.octave = resetOctave + if tsource.inSelection: + pitches.write(p, editor) + + def chordmode(): + """Called inside \\chordmode or \\chords.""" + for p in getpitches(context()): + transpose(p, 0) + + def absolute(tokens): + """Called when outside a possible \\relative environment.""" + for p in getpitches(tokens): + transpose(p) + + def relative(): + """Called when \\relative is encountered.""" + def transposeRelative(p, lastPitch): + """Transposes a relative pitch; returns the pitch in absolute form.""" + # absolute pitch determined from untransposed pitch of lastPitch + p.makeAbsolute(lastPitch) + if not tsource.inSelection: + return p + # we may change this pitch. Make it relative against the + # transposed lastPitch. + try: + last = lastPitch.transposed + except AttributeError: + last = lastPitch + # transpose a copy and store that in the transposed + # attribute of lastPitch. Next time that is used for + # making the next pitch relative correctly. + newLastPitch = p.copy() + transposer.transpose(p) + newLastPitch.transposed = p.copy() + if p.octaveCheck is not None: + p.octaveCheck = p.octave + p.makeRelative(last) + if relPitch: + # we are allowed to change the pitch after the + # \relative command. lastPitch contains this pitch. + lastPitch.octave += p.octave + p.octave = 0 + pitches.write(lastPitch, editor) + del relPitch[:] + pitches.write(p, editor) + return newLastPitch + + lastPitch = None + relPitch = [] # we use a list so it can be changed from inside functions + + # find the pitch after the \relative command + t = next(tsource) + if isinstance(t, Pitch): + lastPitch = t + if tsource.inSelection: + relPitch.append(lastPitch) + t = next(tsource) + else: + lastPitch = Pitch.c1() + + while True: + # eat stuff like \new Staff == "bla" \new Voice \notes etc. + if isinstance(source.state.parser(), ly.lex.lilypond.ParseNewContext): + t = consume() + elif isinstance(t, ly.lex.lilypond.NoteMode): + t = next(tsource) + else: + break + + # now transpose the relative expression + if t in ('{', '<<'): + # Handle full music expression { ... } or << ... >> + for t in context(): + if t == '\\octaveCheck': + for p in getpitches(context()): + lastPitch = p.copy() + del relPitch[:] + if tsource.inSelection: + transposer.transpose(p) + lastPitch.transposed = p + pitches.write(p, editor) + elif isinstance(t, ly.lex.lilypond.ChordStart): + chord = [lastPitch] + for p in getpitches(context()): + chord.append(transposeRelative(p, chord[-1])) + lastPitch = chord[:2][-1] # same or first + elif isinstance(t, Pitch): + lastPitch = transposeRelative(t, lastPitch) + elif isinstance(t, ly.lex.lilypond.ChordStart): + # Handle just one chord + for p in getpitches(context()): + lastPitch = transposeRelative(p, lastPitch) + elif isinstance(t, Pitch): + # Handle just one pitch + transposeRelative(token, lastPitch) + + # Do it! + try: + with util.busyCursor(): + with cursortools.Editor() as editor: + absolute(tsource) + except ly.pitch.PitchNameNotAvailable: + QMessageBox.critical(mainwindow, app.caption(_("Transpose")), _( + "Can't perform the requested transposition.\n\n" + "The transposed music would contain quarter-tone alterations " + "that are not available in the pitch language \"{language}\"." + ).format(language = pitches.language)) + + +class PitchIterator(object): + """Iterate over notes or pitches in a source.""" + + def __init__(self, source): + """Initializes us with a tokeniter.Source. + + The language is set to "nederlands". + + """ + self.source = source + self.setLanguage("nederlands") + + def setLanguage(self, lang): + """Changes the pitch name language to use. + + Called internally when \language or \include tokens are encoutered + with a valid language name/file. + + Sets the language attribute to the language name and the read attribute + to an instance of ly.pitch.PitchReader. + + """ + if lang in ly.pitch.pitchInfo.keys(): + self.language = lang + return True + + def position(self, t): + """Returns the cursor position for the given token or Pitch.""" + if isinstance(t, Pitch): + return t.noteCursor.selectionStart() + else: + return self.source.position(t) + + def tokens(self): + """Yield just all tokens from the source, following the language.""" + for t in self.source: + yield t + if isinstance(t, ly.lex.lilypond.Keyword): + if t in ("\\include", "\\language"): + for t in self.source: + if not isinstance(t, ly.lex.Space) and t != '"': + lang = t[:-3] if t.endswith('.ly') else t[:] + if self.setLanguage(lang): + yield LanguageName(lang, t.pos) + break + yield t + + def pitches(self): + """Yields all tokens, but collects Note and Octave tokens. + + When a Note is encoutered, also reads octave and octave check and then + a Pitch is yielded instead of the tokens. + + """ + tokens = self.tokens() + for t in tokens: + while isinstance(t, ly.lex.lilypond.Note): + p = self.read(t) + if not p: + break + p = Pitch(*p) + p.origNoteToken = t + p.noteCursor = self.source.cursor(t) + p.octaveCursor = self.source.cursor(t, start=len(t)) + t = None # prevent hang in this loop + for t in tokens: + if isinstance(t, ly.lex.lilypond.OctaveCheck): + p.octaveCheck = p.origOctaveCheck = ly.pitch.octaveToNum(t) + p.octaveCheckCursor = self.source.cursor(t) + break + elif isinstance(t, ly.lex.lilypond.Octave): + p.octave = p.origOctave = ly.pitch.octaveToNum(t) + p.octaveCursor = self.source.cursor(t) + elif not isinstance(t, (ly.lex.Space, ly.lex.lilypond.Accidental)): + break + yield p + if t is None: + break + else: + yield t + + def read(self, token): + """Reads the token and returns (note, alter) or None.""" + return ly.pitch.pitchReader(self.language)(token) + + def write(self, pitch, editor, language=None): + """Outputs a changed Pitch to the cursortools.Editor.""" + writer = ly.pitch.pitchWriter(language or self.language) + note = writer(pitch.note, pitch.alter) + if note != pitch.origNoteToken: + editor.insertText(pitch.noteCursor, note) + if pitch.octave != pitch.origOctave: + editor.insertText(pitch.octaveCursor, ly.pitch.octaveToString(pitch.octave)) + if pitch.origOctaveCheck is not None: + if pitch.octaveCheck is None: + editor.removeSelectedText(pitch.octaveCheckCursor) + else: + octaveCheck = '=' + ly.pitch.octaveToString(pitch.octaveCheck) + editor.insertText(pitch.octaveCheckCursor, octaveCheck) + + +class LanguageName(ly.lex.Token): + pass + + +class Pitch(ly.pitch.Pitch): + """A Pitch storing cursors for the note name, octave and octaveCheck.""" + noteCursor = None + octaveCheck = None + octaveCursor = None + octaveCheckCursor = None + origNoteToken = None + origOctave = 0 + origOctaveCheck = None + + +def getpitches(iterable): + """Consumes iterable but only yields Pitch instances.""" + for p in iterable: + if isinstance(p, Pitch): + yield p + + +class pitch_help(help.page): + def title(): + return _("Pitch manipulation") + + def body(): + return _("""\ +

+Frescobaldi offers the following pitch-manipulating functions, +all in the menu {menu}: +

+ +
+ +
Pitch language
+
+This translates pitch names in the whole document or a selection. +
+ +
Convert relative music to absolute
+
+This converts all \\relative music parts to absolute pitch names. +It removes, but honours, octave checks. +
+ +
Convert absolute music to relative
+
+Checks all toplevel music expressions, changing them into +\\relative mode as soon as the expression contains a pitch. +If you want to make separate sub-expressions relative, it may be necessary to +select music from the first expression, leaving out higher-level opening +braces. +
+ +
+""").format(menu=help.menu(_("menu title", "Tools"), _("submenu title", "Pitch"))) + + def children(): + return (transpose_help,) + + +class transpose_help(help.page): + def title(): + return _("Transpose") + + def body(): + return _("""\ +

+When transposing music, two absolute pitches need to be given to specify +the distance to transpose over. The pitches may include octave marks. +The pitches must be entered in the pitch name language used in the document. +

+ +

+The music will then be transposed from the first pitch to the second, +just as the \\transpose LilyPond command would do. +

+ +

+E.g. when transposing a minor third upwards, you would enter:
+c es +

+ +

+To transpose down a major second, you can enter:
+c bes, +

+ +

+or:
+d c +

+ +

+It is also possible to use the transpose function to change a piece of music +from C-sharp to D-flat, or to specify quarter tones if supported in the +pitch name language that is used. +

+ +

+The transpose function can transpose both relative and absolute music, +correctly handling key signatures, chordmode and octave checks. +

+""") + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/plugin.py frescobaldi-2.0.0/frescobaldi_app/plugin.py --- frescobaldi-1.2.0/frescobaldi_app/plugin.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/plugin.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,173 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Simple internal plugin api. + +A Plugin is like an extension of the object it is used for. You would +normally subclass it to do useful things. It is created by calling the +instance(obj) method and lives as long as the object lives. When calling +instance(obj) again, the same Plugin instance is returned. + +The Plugin instance keeps a weak reference to its object in the _parent +attribute. The object is unchanged, it knows nothing about the plugin. + +There are three often used Plugin classes defined here: +MainWindowPlugin (for MainWindow instances), DocumentPlugin (for Document instances) +and ViewSpacePlugin (for ViewSpace instances). + +Also the Attributes class is defined here, which is a simple class without methods +but with special instance attribute handling: +- when setting attributes on an instance, weak references are used when possible +- when requesting unexisting attributes, None is returned +- deleting an attribute does not fail if it doesn't exist. + +You can use this class to store information to associate objects with each other, +but without keeping references to them. + +Finally there is an AttributePlugin class, combining the Attributes and Plugin classes. + +""" + +from __future__ import unicode_literals + +import weakref + +_instances = weakref.WeakKeyDictionary() + + +class Plugin(object): + """Base class for plugins. + + A Plugin is coupled to another object and is automatically garbage collected + as soon as the other object disappears. + + Use the instance() class method to get/create the Plugin instance for an object. + + Implement the __init__() method if you want to do some setup. + + The instances() class method returns all living instances of this plugin type. + + """ + def __init__(self, obj): + """Implement this method to setup the plugin instance.""" + pass + + @classmethod + def instance(cls, obj): + """Returns the instance of this plugin type for this object. + + The plugin instance is created if it did not exist. + + """ + try: + return _instances[cls][obj] + except KeyError: + instances = _instances.setdefault(cls, weakref.WeakKeyDictionary()) + result = instances[obj] = cls.__new__(cls, obj) + result._parent = weakref.ref(obj) + result.__init__(obj) + return result + + @classmethod + def instances(cls): + """Iterates over all living instances of this plugin.""" + try: + return _instances[cls].values() + except KeyError: + return () + + +class Attributes(object): + """Manages attributes. + + The attributes can be set simply as instance attributes. + + If an attribute is set, it is stored as a weak reference when possible + If an attribute is requested but not set or its value does not exist anymore, + None is returned. + Deleting an attribute does not fail if it doesn't exist. + + """ + def __init__(self): + self._attrs = {} + + def __getattr__(self, name): + val = self._attrs.get(name) + if isinstance(val, weakref.ref): + return val() + else: + return val + + def __setattr__(self, name, value): + if name.startswith('_'): + object.__setattr__(self, name, value) + else: + try: + value = weakref.ref(value) + except TypeError: + pass + self._attrs[name] = value + + def __delattr__(self, name): + try: + del self._attrs[name] + except KeyError: + pass + + +class AttributePlugin(Plugin, Attributes): + """Base class for a Plugin managing attributes for any object.""" + def __init__(self, obj): + """Implement this method to setup the plugin instance. + + For this class (AttributePlugin) you must also call this constructor if you reimplement it. + + """ + Attributes.__init__(self) + + +class DocumentPlugin(Plugin): + """Base class for plugins that live besides a Document.""" + def document(self): + """Returns the Document this plugin is used for.""" + return self._parent() + + +class MainWindowPlugin(Plugin): + """Base class for plugins that live besides a MainWindow.""" + def mainwindow(self): + """Returns the MainWindow this plugin is used for.""" + return self._parent() + + +class ViewSpacePlugin(Plugin): + """Base class for plugins that live besides a ViewSpace.""" + def viewSpace(self): + """Returns the ViewSpace this plugin is used for.""" + return self._parent() + + +class ViewPlugin(Plugin): + """Base class for plugins that live besides a View.""" + def view(self): + """Returns the View this plugin is used for.""" + return self._parent() + + Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/cs.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/cs.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/cs.po frescobaldi-2.0.0/frescobaldi_app/po/cs.po --- frescobaldi-1.2.0/frescobaldi_app/po/cs.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/cs.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7622 @@ +# Czech translations for PACKAGE package. +# Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# , 2009. +# Pavel Fric , 2009. +# Pavel Fric , 2009, 2011. +# Pavel Fric , 2010. +msgid "" +msgstr "" +"Project-Id-Version: frescobaldi 0.7.5\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: 2011-12-25 14:06+0100\n" +"Last-Translator: Pavel Fric \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Lokalize 1.1\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "{appname} je napsán v {python} a používá sadu nástrojů {qt}." + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +msgid "Python" +msgstr "Python" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "Qt4" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "Pohled na noty je napájen knihovnou {poppler} od {authors} a dalších." + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +msgid "Poppler" +msgstr "Poppler" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "Většina ikon v balíku je vytvořena {tango}." + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "Projekt pro pracovní plochu Tango" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "{appname} je přeložen do následujících jazyků:" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "O {appname}" + +#: frescobaldi_app/about.py:87 +msgid "About" +msgstr "O programu" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "Zásluhy" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "Verze" + +#: frescobaldi_app/about.py:144 +msgid "Operating System" +msgstr "Operační systém" + +#: frescobaldi_app/about.py:151 +msgid "Version {version}" +msgstr "Verze {version}" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +msgid "A LilyPond Music Editor" +msgstr "Hudební editor pro LilyPond" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "Autorské právo (c) {year} od {author}" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "Poslat zprávu jako dopis elektronické pošty údržbářům." + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "Přeloženo: Pavel Fric." + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "Licencováno pod {gpl}." + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "Tato zkratka se střetává s následujícím příkazem:" +msgstr[1] "Tato zkratka se střetává s následujícími příkazy:" +msgstr[2] "Tato zkratka se střetává s následujícími příkazy:" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +msgid "Shortcut Conflict" +msgstr "Střet zkratky" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "Upravit znovu" + +#: frescobaldi_app/app.py:128 +msgid "LilyPond Files" +msgstr "Soubory LilyPond" + +#: frescobaldi_app/app.py:129 +msgid "LaTeX Files" +msgstr "Soubory LaTeX" + +#: frescobaldi_app/app.py:130 +msgid "DocBook Files" +msgstr "Soubory DocBook" + +#: frescobaldi_app/app.py:131 +msgid "HTML Files" +msgstr "Soubory HTML " + +#: frescobaldi_app/app.py:132 +msgid "Texinfo Files" +msgstr "Soubory Texinfo" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "Soubory Scheme" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Všechny soubory" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "&Označit nynější řádek" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "Smazat značky &chyb" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "Smazat &všechny značky" + +#: frescobaldi_app/bookmarkmanager.py:115 +msgid "Next Mark" +msgstr "Další značka" + +#: frescobaldi_app/bookmarkmanager.py:116 +msgid "Previous Mark" +msgstr "Předchozí značka" + +#: frescobaldi_app/convert_ly.py:118 +msgid "From version:" +msgstr "Od verze:" + +#: frescobaldi_app/convert_ly.py:119 +msgid "To version:" +msgstr "Po verzi:" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "Uložit zprávy convert-ly v dokumentu" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" +"Je-li zaškrtnuto, jsou zprávy convert-ly připojeny jako poznámka na konci " +"dokumentu." + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "&Zprávy" + +#: frescobaldi_app/convert_ly.py:125 +msgid "&Changes" +msgstr "&Změny" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "Spustit znovu" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +msgid "" +msgstr "" + +#: frescobaldi_app/convert_ly.py:138 +msgid "Convert-ly from LilyPond {version}" +msgstr "Convert-ly z LilyPondu {version}" + +#: frescobaldi_app/convert_ly.py:162 +msgid "(set in document)" +msgstr "(nastavit v dokumentu)" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "Je potřeba nastavit jak verzi 'od'tak verzi 'po'." + +#: frescobaldi_app/convert_ly.py:190 +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "" +"Nepodařilo sa spustit {convert_ly}:\n" +"\n" +"{message}\n" + +#: frescobaldi_app/convert_ly.py:196 +msgid "The document has not been changed." +msgstr "Dokument byl změněn." + +#: frescobaldi_app/convert_ly.py:202 +msgid "Current Document" +msgstr "Nynější dokument" + +#: frescobaldi_app/convert_ly.py:202 +msgid "Converted Document" +msgstr "Převedený dokument" + +#: frescobaldi_app/convert_ly.py:208 +msgid "Colors:" +msgstr "Barvy:" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "Přidáno" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "Změněno" + +#: frescobaldi_app/convert_ly.py:211 +msgid "Deleted" +msgstr "Smazáno" + +#: frescobaldi_app/convert_ly.py:212 +msgid "Links:" +msgstr "Odkazy:" + +#: frescobaldi_app/convert_ly.py:213 +msgid "First Change" +msgstr "První změna" + +#: frescobaldi_app/convert_ly.py:214 +msgid "Next Change" +msgstr "Další změna" + +#: frescobaldi_app/convert_ly.py:215 +msgid "Top" +msgstr "Nejdůležitější" + +#: frescobaldi_app/cut_assign.py:39 +msgid "Cut and Assign" +msgstr "Vyjmout a přiřadit" + +#: frescobaldi_app/cut_assign.py:40 +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "Zadejte, prosím, název proměnné, které má být vybraný text přiřazen:" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +msgid "Untitled" +msgstr "Bez názvu" + +#: frescobaldi_app/document.py:145 +msgid "Untitled ({num})" +msgstr "Bez názvu ({num})" + +#: frescobaldi_app/documentactions.py:125 +msgid "Cut and Assign..." +msgstr "Vyjmout a přiřadit..." + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "&Zvýraznění skladby" + +#: frescobaldi_app/documentactions.py:127 +msgid "&Automatic Indent" +msgstr "&Automatické odsazení" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "&Odsadit znovu" + +#: frescobaldi_app/documentactions.py:129 +msgid "&Format" +msgstr "&Formát" + +#: frescobaldi_app/documentactions.py:130 +msgid "&Update with convert-ly..." +msgstr "&Obnovit za použití convert-ly..." + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +msgid "&Save" +msgstr "&Uložit" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +msgid "Save &As..." +msgstr "Uložit &jako..." + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "&Zavřít" + +#: frescobaldi_app/documentmenu.py:42 +msgctxt "menu title" +msgid "&Document" +msgstr "&Dokument" + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "[vždy vyryto]" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Vyskytla se vnitřní chyba:" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "Vnitřní chyba" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Hlášení chyb elektronickou poštou..." + +#: frescobaldi_app/exception.py:79 +msgid "Optionally describe below what you were doing:" +msgstr "Dole volitelně popište, co jste dělal:" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:76 +#, fuzzy +msgid "Roman Font:" +msgstr "Písmo:" + +#: frescobaldi_app/globalfontdialog.py:77 +#, fuzzy +msgid "Sans Font:" +msgstr "Písmo:" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:79 +#, fuzzy +msgid "Staff Size:" +msgstr "Velikost notové osnovy" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Rozdělit spojovníkem text se slovy písně" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Vyberte, prosím, jazyk:" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +msgid "Lyrics" +msgstr "Slova písně" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +msgctxt "menu title" +msgid "Tools" +msgstr "Nástroje" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "Úpravy" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +msgid "Preferences" +msgstr "Nastavení" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi může spojovníky automaticky umístit '{hyphen}' uvnitř textů,\n" +"aby tyto texty udělal použitelnými jako slova písně.\n" +"Může použít slovníky pro dělení slov používané programy OpenOffice.org, " +"Scribus, atd.\n" +"

\n" +"\n" +"

\n" +"Pro použití této vlastnosti nejprve musíte vybrat text, ve kterém chcete " +"provést dělení slov. Potom\n" +"stiskněte {key_hyphen} nebo vyberte {menu_hyphen}.\n" +"V dialogu, který se objeví, vyberte jazyk.\n" +"Klepněte na OK nebo stiskněte klávesu Enter, aby se dělení slov provedlo. \n" +"

\n" +"\n" +"

\n" +"Malým omezením je, že slovníky s dělením slov pro textové procesory často " +"nechtějí slovo\n" +"zalamovat hned po prvním písmenu (např. '{example}'), protože to\n" +"v textech v těchto editorech nevypadá hezky. Takže se může stát, že po " +"prvním písmenu takového textu\n" +"budete nějaké spojovníky muset přidat. \n" +"

\n" +"\n" +"

\n" +"Na odstranění dělení slov je tu také příkaz. To může být užitečné, pokud " +"máte\n" +"sloku textu písně, kterou pouze chcete zobrazit jako zápis pod hudbou.\n" +"Pod {menu_settings} můžete zadat seznam adresářů, ve kterých se mají hledat " +"soubory\n" +"s dělením slov.\n" +"

\n" + +#: frescobaldi_app/inputdialog.py:101 +msgid "Select Color" +msgstr "Vybrat barvu" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "Spouští se {job}..." + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "Ruší se {job}..." + +#: frescobaldi_app/job.py:206 +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "" +"Nepodařilo se spustit {program}.\n" +"Ověřte, prosím, cestu a oprávnění." + +#: frescobaldi_app/job.py:209 +msgid "Could not read from the process." +msgstr "Z procesu nešlo číst." + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Vyskytla se neznámá chyba." + +#: frescobaldi_app/job.py:216 +msgid "Exited with return code {code}." +msgstr "Skončilo s návratovým kódem {code}." + +#: frescobaldi_app/job.py:218 +msgid "Exited with exit status {status}." +msgstr "Skončilo se stavem ukončení {status}." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "Dokončeno úspěšně v {time}." + +#: frescobaldi_app/lyrics.py:132 +msgid "&Hyphenate Lyrics Text..." +msgstr "&Rozdělit spojovníkem text se slovy písně..." + +#: frescobaldi_app/lyrics.py:133 +msgid "&Remove hyphenation" +msgstr "&Odstranit dělení slov" + +#: frescobaldi_app/lyrics.py:134 +msgid "&Copy Lyrics with hyphenation removed" +msgstr "&Kopírovat slova písně s odstraněným dělením slov" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "{appname} [options] soubor..." + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "KÓD" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Použít kódování" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "ČÍS" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Přejít na řádek číslo. Začíná prvním" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Přejít na sloupec. Začíná nulou" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "NÁZEV" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "Sezení ke spuštění ('{none}' pro prázdné sezení)" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +msgid "[modified]" +msgstr "[změněno]" + +#: frescobaldi_app/mainwindow.py:268 +msgctxt "dialog title" +msgid "Close Document" +msgstr "Zavřít dokument" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" +"Dokument \"{name}\" byl změněn.\n" +"Chcete uložit změny nebo je zahodit?" + +#: frescobaldi_app/mainwindow.py:281 +#, fuzzy +msgid "Tab Bar" +msgstr "Tabulatura" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +msgid "Warning" +msgstr "Varování" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" +"Nelze nahrát dokument, který není místní:\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:354 +msgctxt "dialog title" +msgid "Open File" +msgstr "Otevřít soubor" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "Chyba" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" +"Nelze zapisovat do cíle:\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:399 +msgctxt "dialog title" +msgid "Save File" +msgstr "Uložit soubor" + +#: frescobaldi_app/mainwindow.py:439 +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Uložit kopii" + +#: frescobaldi_app/mainwindow.py:445 +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Uložit výběr" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"Nelze zapisovat do cíle:\n" +"\n" +"{url}\n" +"\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "Vložit ze souboru" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"Nelze číst ze zdroje:\n" +"\n" +"{url}\n" +"\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:541 +msgctxt "dialog title" +msgid "Print Source" +msgstr "Vytisknout zdroj" + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "Vyvést jako HTML" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" +"Popište, prosím, záležitost nebo žádost o vlastnost.\n" +"Poskytněte tolik informací, jak jen to jde.\n" +"\n" +"\n" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "Hlavní nástrojový pruh" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "Nástrojový pruh pro pohled na noty" + +#: frescobaldi_app/mainwindow.py:923 +msgctxt "action: new document" +msgid "&New" +msgstr "&Nový" + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "&Otevřít..." + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "Otevřít &nedávný" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "Vložit ze &souboru..." + +#: frescobaldi_app/mainwindow.py:927 +msgid "Open Current Directory" +msgstr "Otevřít nynější adresář" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "Uložit kopii nebo výběr jako..." + +#: frescobaldi_app/mainwindow.py:931 +msgid "Save All" +msgstr "Uložit vše" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "Vytisknout zdroj..." + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "Zavřít jiné dokumenty" + +#: frescobaldi_app/mainwindow.py:935 +msgid "Close All Documents" +msgstr "Zavřít všechny dokumenty" + +#: frescobaldi_app/mainwindow.py:936 +msgid "Closes all documents and leaves the current session." +msgstr "Zavře všechny dokumenty a opustí současné sezení." + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "&Ukončit" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "Vyvést zdroj jako barevné &HTML..." + +#: frescobaldi_app/mainwindow.py:941 +msgid "&Undo" +msgstr "&Zpět" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "&Znovu" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "Vyjmou&t" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Kopírovat" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "Kopírovat jako barevné &HTML" + +#: frescobaldi_app/mainwindow.py:946 +msgid "&Paste" +msgstr "&Vložit" + +#: frescobaldi_app/mainwindow.py:947 +msgid "Select &All" +msgstr "Vybr&at vše" + +#: frescobaldi_app/mainwindow.py:948 +msgid "Select &Block" +msgstr "Vybrat &blok" + +#: frescobaldi_app/mainwindow.py:949 +msgid "Select &None" +msgstr "Nevybrat nic" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "Vybrat celé řádky nahoru" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "Vybrat celé řádky dolů" + +#: frescobaldi_app/mainwindow.py:952 +msgid "&Find..." +msgstr "&Najít..." + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "Najít &další" + +#: frescobaldi_app/mainwindow.py:954 +msgid "Find Pre&vious" +msgstr "Najít &předchozí" + +#: frescobaldi_app/mainwindow.py:955 +msgid "&Replace..." +msgstr "&Nahradit..." + +#: frescobaldi_app/mainwindow.py:956 +msgid "Pr&eferences..." +msgstr "&Nastavení..." + +#: frescobaldi_app/mainwindow.py:958 +msgid "&Next Document" +msgstr "&Další dokument" + +#: frescobaldi_app/mainwindow.py:959 +msgid "&Previous Document" +msgstr "&Předchozí dokument" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "Projíždět nahoru" + +#: frescobaldi_app/mainwindow.py:961 +msgid "Scroll Down" +msgstr "Projíždět dolů" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "Nové &okno" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "&Celá obrazovka" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "Průvodce pro &uživatele" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "&Co je toto?" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "Nahlásit &chybu..." + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "&O {appname}..." + +#: frescobaldi_app/menu.py:81 +msgctxt "menu title" +msgid "&File" +msgstr "&Soubor" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "&Vyvést" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "&Úpravy" + +#: frescobaldi_app/menu.py:147 +msgctxt "menu title" +msgid "&View" +msgstr "&Pohled" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "P&ohled na hudbu" + +#: frescobaldi_app/menu.py:189 +msgctxt "menu title" +msgid "&LilyPond" +msgstr "&LilyPond" + +#: frescobaldi_app/menu.py:208 +msgctxt "menu title" +msgid "&Tools" +msgstr "&Nástroje" + +#: frescobaldi_app/menu.py:233 +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "&Slova písně" + +#: frescobaldi_app/menu.py:245 +msgctxt "submenu title" +msgid "&Pitch" +msgstr "&Výška tónu" + +#: frescobaldi_app/menu.py:259 +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "&Rytmus" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "&Okno" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "&Nápověda" + +#: frescobaldi_app/musicpreview.py:113 +msgid "Document:" +msgstr "Dokument:" + +#: frescobaldi_app/musicpreview.py:195 +msgid "&Print" +msgstr "&Tisk" + +#: frescobaldi_app/musicpreview.py:196 +msgid "Music Preview" +msgstr "Náhled na hudbu" + +#: frescobaldi_app/popplerdummy.py:42 +msgid "Could not load the {name} module." +msgstr "Nepodařilo se nahrát modul {name}." + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" +"Nepodařilo se najít žádný tiskový příkaz pro tisk souboru ve formátu " +"PostScript.\n" +"\n" +"Z tohoto důvodu bude dokument vytištěn za použití rastrových obrázků s " +"rozlišením {resolution} DPI. Doporučuje se pro tisk použít jednoúčelový " +"prohlížeč PDF.\n" +"\n" +"Chcete pokračovat?" + +#: frescobaldi_app/popplerprint.py:61 +msgid "PDF Document" +msgstr "Dokument PDF" + +#: frescobaldi_app/popplerprint.py:69 +msgid "Print {filename}" +msgstr "Tisk {filename}" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +msgid "Printing Error" +msgstr "Chyba tisku" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +msgid "Could not send the document to the printer." +msgstr "Dokument se nepodařilo poslat tiskárně." + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "Tiskne se strana {page} ({num} z {total})..." + +#: frescobaldi_app/search.py:99 +msgid "Search:" +msgstr "Hledat:" + +#: frescobaldi_app/search.py:100 +msgid "&Case" +msgstr "&Písmovka" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "Rozlišovat velká/malá písmena" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "&Regulární výraz" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "Regulární výraz" + +#: frescobaldi_app/search.py:104 +msgid "The total number of matches" +msgstr "Celkový počet shod" + +#: frescobaldi_app/search.py:105 +msgid "Close" +msgstr "Zavřít" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "Nahradit:" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "Na&hradit" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "Nahradit další výskyt hledaného pojmu." + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "&Vše" + +#: frescobaldi_app/search.py:110 +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "Nahradit všechny výskyty hledaného pojmu v dokumentu nebo ve výběru." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "Řádek: {line}, Sloupec: {column}" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "Rozdělit &vodorovně" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "Rozdělit &svisle" + +#: frescobaldi_app/viewmanager.py:91 +msgid "&Close View" +msgstr "&Zavřít pohled" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "&Zavřít nynější pohled" + +#: frescobaldi_app/viewmanager.py:444 +msgid "Close &Other Views" +msgstr "Zavřít &jiné pohledy" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "&Další pohled" + +#: frescobaldi_app/viewmanager.py:446 +msgid "&Previous View" +msgstr "&Předchozí pohled" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "Automatické &dokončení" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "Ukázat vyskakovací do&končení" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +msgid "Special Characters" +msgstr "Zvláštní znaky" + +#: frescobaldi_app/charmap/__init__.py:41 +msgid "Special Charac&ters" +msgstr "Zvláštní &znaky" + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +msgid "Documentation Browser" +msgstr "Prohlížeč dokumentace" + +#: frescobaldi_app/docbrowser/__init__.py:47 +msgid "&Documentation Browser" +msgstr "&Prohlížeč dokumentace" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +msgid "Back" +msgstr "Zpět" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "Vpřed" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "Domovská složka" + +#: frescobaldi_app/docbrowser/__init__.py:84 +msgid "&LilyPond Documentation" +msgstr "Dokumentace k &LilyPondu" + +#: frescobaldi_app/docbrowser/__init__.py:85 +msgid "&Contextual LilyPond Help" +msgstr "Nápověda k LilyPondu vyplývající ze &souvislosti" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Hledat..." + +#: frescobaldi_app/docbrowser/browser.py:136 +msgid "(local)" +msgstr "(místní)" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "({hostname})" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +msgid "LilyPond Source" +msgstr "Zdroj LilyPond" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +msgid "Documents" +msgstr "Dokumenty" + +#: frescobaldi_app/doclist/__init__.py:40 +msgid "Docum&ents" +msgstr "Dokum&enty" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "&Vždy vyrýt [{docname}]" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "Tento dokument vyrýt &vždy" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "Vyrýt" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "&Vyrýt (náhled)" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "Vyrýt (&vydat)" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "Vyrýt (v&lastní)..." + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "Zrušit ryteckou &práci" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "Vyrýt vlastní" + +#: frescobaldi_app/engrave/custom.py:119 +msgid "LilyPond Version:" +msgstr "Verze LilyPondu:" + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "Výstupní formát:" + +#: frescobaldi_app/engrave/custom.py:121 +msgid "Resolution:" +msgstr "Rozlišení:" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "Spustit LilyPond v režimu náhledu (s funkcí ukázat a klepnout)" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "Spustit LilyPond s podrobným výstupem" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +msgid "Delete intermediate output files" +msgstr "Smazat mezi výstupní soubory" + +#: frescobaldi_app/engrave/custom.py:126 +msgid "Command line:" +msgstr "Příkazový řádek:" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "Spustit LilyPond" + +#: frescobaldi_app/engrave/custom.py:149 +msgid "LilyPond {version}" +msgstr "LilyPond {version}" + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" +"V tomto dialogu můžete nastavit některé parametry příkazu pro LilyPond, aby " +"se používaly\n" +"pro rytí vašeho dokumentu.\n" +"Je dokonce možné upravit samotný příkazový řádek.\n" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "Budou provedena následující nahrazení:" + +#: frescobaldi_app/engrave/custom.py:218 +msgid "The LilyPond executable" +msgstr "Spustitelný soubor pro LilyPond" + +#: frescobaldi_app/engrave/custom.py:219 +msgid "All the include paths" +msgstr "Všechny zařazené cesty" + +#: frescobaldi_app/engrave/custom.py:220 +msgid "The filename of the document" +msgstr "Souborový název dokumentu" + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "PDF" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "PostScript" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "PNG" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "SVG" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "PDF (jádro EPS)" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "Encapsulated PostScript (jádro EPS)" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "PNG (jádro EPS)" + +#: frescobaldi_app/engrave/result_menu.py:45 +msgid "Generated &Files" +msgstr "Vytvořené &soubory" + +#: frescobaldi_app/engrave/result_menu.py:66 +msgid "No files available" +msgstr "Nejsou dostupné žádné soubory" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "Nástrojový pruh" + +#: frescobaldi_app/help/browser.py:78 +msgid "Start" +msgstr "Začátek" + +#: frescobaldi_app/help/browser.py:79 +msgid "Contents" +msgstr "Obsah" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "Nápověda" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "Žádná nápověda" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "K tomuto námětu nebyla nalezena žádná nápověda." + +#: frescobaldi_app/help/contents.py:46 +msgid "Frescobaldi Manual" +msgstr "Příručka k Frescobaldi" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi je lehký a mocný editor pro dokumenty v LilyPondu\n" +"s listy s notami.\n" +"Tato příručka je napsána {author} a dokumentuje {appname} verze {version}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" +"

Jak dostat nápovědu ve Frescobaldi

\n" +"\n" +"

\n" +"V mnohých dialozích můžete klepnout na tlačítko pro nápovědu nebo stiskněte " +"klávesu {key_help}.\n" +"Mnoho položek uživatelského rozhraní má taktéž informace also have \"Co je " +"toto\", kterou lze\n" +"odhalit stiskem {key_whatsthis} nebo výběrem {menu_whatsthis}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "Co je toto" + +#: frescobaldi_app/help/contents.py:88 +msgid "Introduction" +msgstr "Úvod" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" +"

\n" +"LilyPond\n" +"je program s otevřeným zdrojovým kódem pro rytí not, který vytváří výtisky " +"notových listů\n" +"o velmi vysoké jakosti z celkem jednoduchých textových vstupních souborů.\n" +"Tyto textové soubory je možné tvořit v jakémkoli textovém editoru, a " +"LilyPond pak nahraje\n" +"textový soubor a provede výstup v krásné rytině, ve výchozím nastavení je " +"výstup ve formátu PDF.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi je program navržený tak, aby dělal úpravy hudebních notových " +"zápisů v LilyPondu\n" +"rychlejší a snadnější. Nicméně se budete muset naučit jazyk pro zadávání " +"LilyPond.\n" +"Pokud čtete část {getting_started} tohoto uživatelského průvodce, pochytíte\n" +"některé základy LilyPondu.\n" +"

\n" +"\n" +"

\n" +"Potom v učení můžete pokračovat pomocí Příručky pro učení z\n" +"výborné dokumentace na internetu pro " +"LilyPond.\n" +"

" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "První kroky" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "Vyrýt (vydat)" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "Nastavení LilyPondu" + +#: frescobaldi_app/help/contents.py:142 +msgctxt "menu title" +msgid "View" +msgstr "Pohled" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "Vymazat značky chyb" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "Zkopírovat do obrázku..." + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" +"

\n" +"Výchozí obrazovka Frescobaldi ukazuje textový dokument nalevo a prázdný\n" +"náhled na hudbu napravo.\n" +"

\n" +"\n" +"

\n" +"Nyní v textovém pohledu zadejte nějaký kód v LilyPondu, jako je tento:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Potom klepněte na tlačítko na nástrojovém pruhu Lily nebo stiskněte " +"{key_engrave}.\n" +"Pokud je vše v pořádku, LilyPond se nyní spustí a váš soubor zpracuje.\n" +"Ve spodní části obrazovky můžete sledovat postup LilyPondu.\n" +"Pokud se na vaší straně LilyPond nesetká s nějakými chybami, vytvoří soubor " +"PDF,\n" +"který se zobrazí v náhledu na hudbu:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"Náhled na hudbu má mnoho možností:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Setrvání ukazovátka myši nad notami a jinými předměty je zvýrazní v textu;\n" +"klepněte na předměty pro přesunutí ukazovátka textu na ně\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-kolečko pro změnu zvětšení. Přibližování a oddalování se soustředí na " +"ukazovátku myši\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-klepnutí na nějaké prázdné místo pro ukázání zvětšovacího skla totiž " +"lupy\n" +"
  • \n" +"\n" +"
  • \n" +"Přesunutí ukazovátka textu nebo výběr textu zvýrazní noty v náhledu;\n" +"stiskněte {key_jump} pro přímé zaměření a zvýraznění noty nebo jiného " +"předmětu\n" +"v náhledu.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-tažení výběru a pak stiskněte {key_copy_image} nebo {menu_copy_image}\n" +"pro zkopírování vybrané hudby jako rastrového obrázku do schránky, do " +"souboru nebo\n" +"jiné aplikace.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"Pokud je váš hudební notový zápis hotov, doporučuje se spustit LilyPond " +"ještě jednou znovu\n" +"s vypnutými klepnutelnými notami: nabídka {menu_engrave}.\n" +"Výsledkem budou mnohem menší dokumenty PDF.\n" +"

\n" +"\n" +"

\n" +"Pokud se LilyPond vůbec nespouští, prověřte, zda máte LilyPond nainstalován\n" +"správně a že je příkaz pro lilypond v proměnné prostředí vaší systémové " +"PATH\n" +". Je-li to potřeba, poskytněte přesnou cestu ke spustitelnému souboru pro " +"LilyPond v\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"Pokud se LilyPond ve vašem dokumentu setká s chybami, budou tyto zobrazeny v " +"zápisu,\n" +"a Frescobaldi ve vašem dokumentu označí řádky, v nichž byly chyby\n" +"nalezeny. Klepnutí na chybu v zápise nebo stisknutí {key_error} okamžitě\n" +"přemístí ukazovátko textu na místo působící potíže. Stisknutím {key_error} " +"znovu\n" +"dojde k přesunu na další chybovou hlášku a tak dále. Když je LilyPond\n" +"spuštěn znovu, jsou značky pro chyby v řádcích odstraněny.\n" +"Označení chyb v řádcích můžete odstranit ručně volbou\n" +"{menu_clear_error_marks}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:228 +msgid "Other Tools" +msgstr "Jiné nástroje" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "

Zde jsou v seznamu uvedeny některé další důležité nástroje.

\n" + +#: frescobaldi_app/help/contents.py:252 +msgid "About Frescobaldi" +msgstr "O Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi je pojmenován po\n" +"Girolamu\n" +"Frescobaldim (1583 – 1643), italském varhaníkovi a skladateli.\n" +"

\n" +"\n" +"

\n" +"Frescobaldiho stránky jsou na\n" +"www.frescobaldi.org\n" +"a je tu i poštovní seznam na\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "Hlavním autorem Frescobaldi je {author}." + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "Příspěvky" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi je projekt svobodného\n" +"programu pro vytvoření uživatelsky přátelského editoru notového zápisu " +"hudby v LilyPond.\n" +"Cílem je udělat Frescobaldi dostupným ve všech hlavních operačních " +"systémech.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi je vyvíjen ve veřejném úložišti GitHub na {url}.\n" +"Můžete procházet nebo stáhnout zdrojový kód a hlásit chyby a přání.\n" +"

\n" +"\n" +"

\n" +"Můžete přispět jednoduše používáním Frescobaldi a hlášením chyb a návrhů.\n" +"Překlady jsou rovněž velmi vítány. Jak vytvořit nový překlad je popsáno\n" +"v souboru README-translations ve zdrojových kódech Frescobaldi.\n" +"Pokud chcete přidat nějakou vlastnost, naleznete informace o stavbě " +"zdrojového kódu\n" +"v souboru README-development.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:321 +msgid "History of Frescobaldi" +msgstr "Historie Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi má své kořeny v LilyKDE, což byl přídavný modul pro editor pro " +"prostředí KDE3 Kate.\n" +"LilyKDE byl napsán v Pythonu a vydán o Vánocích v roce 2007.\n" +"

\n" +"\n" +"

\n" +"Když KDE vyvinulo verzi 4, nebylo hned možné dělat přídavné moduly pro Kate\n" +"v Pythonu. A tak se LilyKDE stal samostatným programem, obalujícím část\n" +"textového editoru Kate, a byl přejmenován na Frescobaldi. ořád používal část " +"KDE Okular\n" +"na zobrazení dokumentů PDF.\n" +"Frescobaldi 0.7 bylo prvním veřejným vydáním, na Vánoce roku 2008.\n" +"O Vánocích 2009 byla vydána verze 1.0.0 a na Vánoce 2010 verze 1.2.0.\n" +"

\n" +"\n" +"

\n" +"V té době padlo rozhodnutí o tom, že se odejde od knihoven KDE4 libraries a " +"pouze se bude používat\n" +"Python a Qt4, které jsou snadno dostupné na většině hlavních výpočetních " +"platforem.\n" +"Frescobaldi 2.0 je úplným přepisem od začátku. Datum jeho vydání\n" +"je cíleno na Vánoce 2011.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "Editor" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" +"

\n" +"V této části se hovoří o vlastnostech editoru,\n" +"např. jak ovládat automatické odsazování, jak používat hledat a nahradit,\n" +"atd.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "Hledat a nahradit" + +#: frescobaldi_app/help/contents.py:377 +msgid "Edit" +msgstr "Úpravy" + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" +"

\n" +"V nabídce {edit_menu} lze nalézt příkazy Hledat ({key_search})\n" +"a Nahradit ({key_replace}), které otevírají malé okno ve\n" +"spodní části pohledu.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regulární výrazy jsou pokročilé hledané texty, které obsahují znaky, které " +"mohou\n" +"odpovídat více znakům v dokumentu.\n" +"Při nahrazování textu je také možné odkazovat na části hledaného textu\n" +"uzavřené v závorkách.\n" +"

\n" +"\n" +"

\n" +"V režimu hledání s regulárním výrazem mají některé znaky zvláštní význam:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
odpovídá předchozímu znaku nebo skupině nulakrát nebo vícekrát
\n" +"
+
\n" +"
odpovídá předchozímu znaku nebo skupině jedenkrát nebo vícekrát
\n" +"
?
\n" +"
odpovídá předchozímu znaku nebo skupině nulakrát nebo jedenkrát
\n" +"
[ ]
\n" +"
odpovídá jednomu z obsažených znaků
\n" +"
( )
\n" +"
skupina znaků. Toto také uloží odpovídající text ve skupině.\n" +"Při nahrazování můžete použít znaky jako \\1, \\2\n" +"atd. pro zapsání textu odpovídající skupiny v nahrazovacím textu.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
odpovídá, v uvedeném pořadí: zpětné/obrácené lomítko, nový řádek, " +"zarážka, znak pro jakékoli prázdné místo,\n" +"číslice, obecný znak pro slovo jako.
\n" +"
\n" +"\n" +"

\n" +"Celou rozpravu o regulárních výrazech je možné najít v dokumentaci k " +"Pythonu\n" +".\n" +"

\n" + +#: frescobaldi_app/help/contents.py:427 +msgid "Document variables" +msgstr "Proměnné pro dokument" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" +"Proměnné pro dokument jsou promměnnými, které ovlivňují chování " +"Frescobaldi.\n" +"Lze je zapsat na prvních pěti nebo posledních pěti řádcích dokumentu.\n" +"Pokud řádek obsahuje '-*-', Frescobaldi hledá zbytek\n" +"řádků pro vymezení proměnných jako name: value;.\n" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "Jsou uznávány následující proměnné:" + +#: frescobaldi_app/help/contents.py:444 +msgid "mode" +msgstr "Režim" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" +"Vynutit režim, aby byl jedním z lilypond, html, texinfo, latex, docbook nebo " +"scheme. Výchozí: automatické rozpoznání režimu." + +#: frescobaldi_app/help/contents.py:448 +msgid "filename" +msgstr "Souborový název" + +#: frescobaldi_app/help/contents.py:449 +msgid "Compiles another LilyPond document instead of the current." +msgstr "Sestaví jiný dokument LilyPond namísto nynějšího." + +#: frescobaldi_app/help/contents.py:450 +msgid "encoding" +msgstr "Kódování" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "Použít jiné kódování než výchozí UTF-8." + +#: frescobaldi_app/help/contents.py:452 +msgid "version" +msgstr "Verze" + +#: frescobaldi_app/help/contents.py:453 +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "" +"Nastavit verzi LilyPondu, která se bude používat. Lze ji používat pro " +"dokumenty, které nejsou v LilyPondu." + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +msgid "number" +msgstr "Číslo" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "Šířka znaku pro zarážku; ve výchozím nastavení je to 8." + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "Zda používat pro odsazování zarážek; ve výchozím nastavení {no}." + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" +"Zda používat zarážky někde jinde v dokumentu; ve výchozím nastavení {yes}." + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" +"Počet mezer, který používá každá úroveň odsazení; ve výchozím nastavení 2." + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "Proměnné pro dokument můžete dát do poznámek." + +#: frescobaldi_app/help/contents.py:479 +msgid "Table of Contents" +msgstr "Obsah" + +#: frescobaldi_app/help/helpimpl.py:115 +msgid "Up:" +msgstr "Nahoru:" + +#: frescobaldi_app/help/helpimpl.py:130 +msgid "Next:" +msgstr "Další:" + +#: frescobaldi_app/help/helpimpl.py:133 +msgid "See also:" +msgstr "Podívejte se také na:" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "(nestanoven žádný klíč)" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "Záznam o průběhu činnosti od LilyPondu" + +#: frescobaldi_app/logtool/__init__.py:51 +msgid "LilyPond &Log" +msgstr "&Zápis LilyPond" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "Další chybové hlášení" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "Předchozí chybové hlášení" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Klepněte, abyste mohl upravovat tento soubor" + +#: frescobaldi_app/miditool/__init__.py:51 +msgid "MIDI" +msgstr "MIDI" + +#: frescobaldi_app/miditool/__init__.py:52 +msgid "MIDI &Player" +msgstr "&Přehrávač MIDI" + +#: frescobaldi_app/miditool/__init__.py:97 +msgctxt "midi player" +msgid "Pause" +msgstr "Pozastavit" + +#: frescobaldi_app/miditool/__init__.py:98 +msgctxt "midi player" +msgid "Play" +msgstr "Přehrát" + +#: frescobaldi_app/miditool/__init__.py:99 +msgctxt "midi player" +msgid "Stop" +msgstr "Zastavit" + +#: frescobaldi_app/miditool/__init__.py:100 +msgctxt "midi player" +msgid "Restart" +msgstr "Spustit znovu" + +#: frescobaldi_app/miditool/widget.py:102 +msgid "Tempo" +msgstr "Tempo" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "Nenalezen žádný výstup!" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "NAHRÁNO" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "CELKEM" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "ČAS" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "TEMPO" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "DOBA" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "Pohled na noty" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "Pohled na &hudbu" + +#: frescobaldi_app/musicview/__init__.py:191 +msgid "Select Music View Document" +msgstr "Vybrat dokument s pohledem na hudbu" + +#: frescobaldi_app/musicview/__init__.py:192 +msgid "&Print Music..." +msgstr "&Vytisknout noty..." + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "&Přiblížit" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "&Oddálit" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "Zvětšení hudby" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "Přizpůsobit šíř&ce" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "Přizpůsobit &výšce" + +#: frescobaldi_app/musicview/__init__.py:198 +msgid "Fit &Page" +msgstr "Přizpůsobit &straně" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "&Skočit na polohu ukazovátka" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "Kopírovat do &obrázku..." + +#: frescobaldi_app/musicview/__init__.py:339 +msgid "Choose the PDF document to display." +msgstr "Vybrat dokument PDF k zobrazení." + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" +"Vyberte dokument PDF k zobrazení nebo soubor přetáhněte do jiného programu " +"nebo umístění.." + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "Přizpůsobit šířce" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "Přizpůsobit výšce" + +#: frescobaldi_app/musicview/__init__.py:401 +msgid "Fit Page" +msgstr "Přizpůsobit straně" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "DPI:" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "Barva papíru" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "Automaticky oříznout" + +#: frescobaldi_app/musicview/image.py:129 +msgid "Antialias" +msgstr "Vyhlazovat" + +#: frescobaldi_app/musicview/image.py:130 +msgid "Drag" +msgstr "Táhnout" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "Táhnout obrázek jako soubor PNG." + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "&Kopírovat do schránky" + +#: frescobaldi_app/musicview/image.py:133 +msgid "&Save As..." +msgstr "&Uložit jako..." + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" +"

\n" +"Klepnutí přepne zobrazení mezi velikostí 100% a velikostí okna. Táhněte pro " +"zkopírování do jiného programu. Táhněte s Ctrl (nebo {command}) pro " +"projíždění většího obrázku.\n" +"

\n" +"

\n" +"Také můžete táhnout malou ikonu obrázku dole vpravo, která táhne skutečný " +"soubor na disku, např. do zprávy elektronické pošty.\n" +"

" + +#: frescobaldi_app/musicview/image.py:167 +msgid "Image from {filename}" +msgstr "Obrázek z {filename}" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "Uložit obrázek jako" + +#: frescobaldi_app/musicview/image.py:214 +msgid "Could not save the image." +msgstr "Obrázek se nepodařilo uložit." + +#: frescobaldi_app/pitch/__init__.py:99 +msgid "Pitch Name &Language" +msgstr "&Jazyk názvu výšky tónu" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" +"Změnit jazyk LilyPondu, který se používá pro názvy výšek tónů v tomto " +"dokumentu nebo ve výběru." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "Převést poměrnou na &naprostou" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" +"Převede noty v dokumentu nebo ve výběru z poměrné na naprostou výšku tónu." + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "Převést naprostou na &poměrnou" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "" +"Převede noty v dokumentu nebo ve výběru z naprosté na poměrnou výšku tónu." + +#: frescobaldi_app/pitch/__init__.py:111 +msgid "&Transpose..." +msgstr "&Převést..." + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "Převede všechny noty v dokumentu nebo ve výběru." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Jazyk názvu polohy tónu" + +#: frescobaldi_app/pitch/pitch.py:82 +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"Nelze provést požadovaný překlad.\n" +"\n" +"Noty obsahují čtvrttónové úpravy, ale tyto úpravy nejsou dostupné v jazyku " +"výšky tónu \"{name}\"." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"Jazyk polohy tónu vybraného textu byl aktualizován, ale budete ještě muset " +"do vašeho dokumentu vlastnoručně přidat následující příkaz:" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "(pro LilyPond s menším číslem verze než 2.14), nebo" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "(pro LilyPond ve verzi 2.14 a vyšší.)" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "Převést" + +#: frescobaldi_app/pitch/pitch.py:399 +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" +"Zadejte, prosím, dvě absolutní výšky tónů, oddělené mezerou, za použití " +"jazyka výšky tónu \"{language}\"." + +#: frescobaldi_app/pitch/pitch.py:581 +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"Nelze provést požadované převedení.\n" +"\n" +"Převedené noty obsahují čtvrttónové úpravy, ale tyto úpravy nejsou dostupné " +"v jazyku výšky tónu \"{language}\"." + +#: frescobaldi_app/pitch/pitch.py:712 +msgid "Pitch manipulation" +msgstr "Zacházení s výškou tónu" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" +"

\n" +"Frescobaldi nabízí následující funkce pro zacházení s výškou tónu,\n" +"všechny v nabídce {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Jazyk výšky tónu
\n" +"
\n" +"Toto překládá názvy výšek tónů v celém dokumentu nebo výběru.\n" +"
\n" +"\n" +"
Převést absolutní noty na relativní noty
\n" +"
\n" +"Toto převede všechny části not \\relative na názvy absolutních " +"výšek tónů.\n" +"Odstraňuje, ale ctí, zastavení oktáv.\n" +"
\n" +"\n" +"
Převést poměrné (relativní) noty na naprosté (absolutní)
\n" +"
\n" +"Prověří všechny hudební výrazy na nejvyšší úrovni, změní je na režim\n" +"\\relative, jakmile výraz obsahuje výšku tónu.\n" +"Pokud chcete udělat oddělené podřízené výrazy relativní, může být nezbytné " +"vybrat\n" +"noty od prvního výrazu, vynechaje otevřené závorky\n" +"vyšší úrovně.\n" +"
\n" +"\n" +"
\n" + +#: frescobaldi_app/pitch/pitch.py:744 +msgctxt "submenu title" +msgid "Pitch" +msgstr "Výška tónu" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" +"

\n" +"Při převádění not je potřeba dát dvě absolutní výšky tónů pro zadání\n" +"vzdálenosti pro převod. Výšky tónů mohou zahrnovat značky oktáv.\n" +"Výšky tónů musí být zadány v jazyce pro výšku tónů používaném v dokumentu.\n" +"

\n" +"\n" +"

\n" +"Noty pak budou převedeny od první výšky tónu po druhou,\n" +"jak by to prostě udělal příkaz LilyPondu \\transpose.\n" +"

\n" +"\n" +"

\n" +"Např. při převodu malé tercie nahoru, byste zadal:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"Pro převod velké sekundy dolů můžete zadat:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"nebo:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"Také je možné použít funkce převodu na změnu kousku not\n" +"z Cis na Des, nebo pro stanovení čtvrťových tónů, pokud jsou podporovány\n" +"používaným jazykem názvu výšky tónu.\n" +"

\n" +"\n" +"

\n" +"Převáděcí funkce může převádět jak poměrné (relativní) tak naprosté " +"(absolutní) noty,\n" +"správně zacházet s předznamenáními, režimem akordů a zastaveními oktáv.\n" +"

\n" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "Použití" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "Použití: %s\n" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "Ukázat tuto zprávu s nápovědou a ukončit" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "Ukázat číslo s verzí programu a ukončit" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "Volby" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "Zavřít kartu" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "Co je toto?" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "Použít" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "OK" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "Zrušit" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "Zahodit" + +#: frescobaldi_app/po/messages.py:44 +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Uložit" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "Nápověda" + +#: frescobaldi_app/po/messages.py:46 +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Zavřít" + +#: frescobaldi_app/po/messages.py:47 +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Otevřít" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "Nastavit znovu" + +#: frescobaldi_app/po/messages.py:50 +msgctxt "QFileDialog" +msgid "File" +msgstr "Soubor" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "Složka" + +#: frescobaldi_app/po/messages.py:52 +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Adresář hledání" + +#: frescobaldi_app/po/messages.py:53 +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Všechny soubory (*)" + +#: frescobaldi_app/po/messages.py:55 +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "Projíždět zde" + +#: frescobaldi_app/po/messages.py:56 +msgctxt "QScrollBar" +msgid "Top" +msgstr "Nahoře" + +#: frescobaldi_app/po/messages.py:57 +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Dole" + +#: frescobaldi_app/po/messages.py:58 +msgctxt "QScrollBar" +msgid "Page up" +msgstr "Strana nahoru" + +#: frescobaldi_app/po/messages.py:59 +msgctxt "QScrollBar" +msgid "Page down" +msgstr "Strana dolů" + +#: frescobaldi_app/po/messages.py:60 +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "Projíždět nahoru" + +#: frescobaldi_app/po/messages.py:61 +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "Projíždět dolů" + +#: frescobaldi_app/po/messages.py:62 +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Levý okraj" + +#: frescobaldi_app/po/messages.py:63 +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Pravý okraj" + +#: frescobaldi_app/po/messages.py:64 +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Strana vlevo" + +#: frescobaldi_app/po/messages.py:65 +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Strana vpravo" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "Projíždět vlevo" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "Projíždět vpravo" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Obecné volby" + +#: frescobaldi_app/preferences/__init__.py:182 +msgid "MIDI Settings" +msgstr "Nastavení MIDI" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +msgid "Helper Applications" +msgstr "Pomocné programy" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Cesty" + +#: frescobaldi_app/preferences/__init__.py:212 +msgid "LilyPond Documentation" +msgstr "Dokumentace k LilyPondu" + +#: frescobaldi_app/preferences/__init__.py:222 +msgid "Keyboard Shortcuts" +msgstr "Klávesové zkratky" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "Písma a barvy" + +#: frescobaldi_app/preferences/__init__.py:242 +msgid "Tools" +msgstr "Nástroje" + +#: frescobaldi_app/preferences/documentation.py:64 +msgid "Paths to LilyPond Documentation" +msgstr "Cesty k dokumentaci k LilyPondu" + +#: frescobaldi_app/preferences/documentation.py:66 +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "" +"Přidat cesty nebo adresy (URL). Podívejte se na \"Co je toto\" pro další " +"informace." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" +"

Zde můžete přidat místní cesty nebo adresy (URL) ukazující na dokumentaci " +"k LilyPondu. Místní cesta by měla ukazovat na adresář, kde je buď adresář " +"\"{documentation}\", nebo celou cestu \"share/doc/lilypond/html/offline-root" +"\".

\n" +"

Pokud tyto nelze najít, dokumentace se hledá ve všech podadresářích " +"zadané cesty, o jednu úroveň hlouběji. Tímto je možné dát více verzí " +"dokumentace k LilyPondu do různých podadresářů a nechat Frescobaldi, aby je " +"automaticky našel.

" + +#: frescobaldi_app/preferences/documentation.py:111 +msgid "Preferred Language:" +msgstr "Upřednostňovaný jazyk:" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "Výchozí" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "Anglický (nepřeloženo)" + +#: frescobaldi_app/preferences/documentation.py:135 +msgid "Please enter a local path or a URL:" +msgstr "Zadejte, prosím, místní cestu nebo adresu (URL):" + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "Použít tento nákres pro tisk" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "Písmo:" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "Základní barvy" + +#: frescobaldi_app/preferences/fontscolors.py:124 +msgid "Default Styles" +msgstr "Výchozí styly" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "(Zdědí: {name})" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +msgid "Text" +msgstr "Text" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "Pozadí" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "Tučné" + +#: frescobaldi_app/preferences/fontscolors.py:363 +msgid "Italic" +msgstr "Kurzíva" + +#: frescobaldi_app/preferences/fontscolors.py:364 +msgid "Underline" +msgstr "Podtržení" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +msgid "Selected Text" +msgstr "Vybraný text" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "Pozadí výběru" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "Nynější řádek" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +msgid "Marked Line" +msgstr "Označený řádek" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +msgid "Error Line" +msgstr "Řádek s chybou" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "Výsledek hledání" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +msgid "Matching Character" +msgstr "Odpovídající znak" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +msgid "Preview Background" +msgstr "Pozadí náhledu" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "Zvýraznění náhledu" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +msgid "Keyword" +msgstr "Klíčové slovo" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +msgid "Function" +msgstr "Funkce" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "Proměnná" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +msgid "Value" +msgstr "Hodnota" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +msgid "String" +msgstr "Řetězec" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +msgid "Escape" +msgstr "Únik" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +msgid "Comment" +msgstr "Poznámka" + +#: frescobaldi_app/preferences/fontscolors.py:483 +msgid "Pitch" +msgstr "Výška tónu" + +#: frescobaldi_app/preferences/fontscolors.py:484 +msgid "Octave" +msgstr "Oktáva" + +#: frescobaldi_app/preferences/fontscolors.py:485 +msgid "Duration" +msgstr "Doba trvání" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "Zastavení oktávy" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "Prstoklad" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +msgid "String Number" +msgstr "Číslo struny" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "Legatový oblouček" + +#: frescobaldi_app/preferences/fontscolors.py:491 +msgid "Dynamic" +msgstr "Dynamika" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Artikulace" + +#: frescobaldi_app/preferences/fontscolors.py:493 +msgid "Chord" +msgstr "Akord" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "Trámec" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "Zastavení" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +msgid "Repeat" +msgstr "Opakování" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "Příkaz" + +#: frescobaldi_app/preferences/fontscolors.py:499 +msgid "Specifier" +msgstr "Vymezovač" + +#: frescobaldi_app/preferences/fontscolors.py:500 +msgid "User Command" +msgstr "Uživatelský příkaz" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +msgid "Markup" +msgstr "Značení" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "Režim slov písně" + +#: frescobaldi_app/preferences/fontscolors.py:503 +msgid "Lyric Text" +msgstr "Text slov písně" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "Oddělovač" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "Prostředí" + +#: frescobaldi_app/preferences/fontscolors.py:506 +msgid "Layout Object" +msgstr "Předmět rozvržení" + +#: frescobaldi_app/preferences/fontscolors.py:507 +msgid "Property" +msgstr "Vlastnictví" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "Uživatelská proměnná" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +msgid "Escaped Character" +msgstr "Uprchlý znak" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "HTML" + +#: frescobaldi_app/preferences/fontscolors.py:517 +msgid "Tag" +msgstr "Značka" + +#: frescobaldi_app/preferences/fontscolors.py:518 +msgid "LilyPond Tag" +msgstr "Značka LilyPondu" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "Vlastnost" + +#: frescobaldi_app/preferences/fontscolors.py:521 +msgid "Entity Reference" +msgstr "Odkaz na entitu" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "Scheme" + +#: frescobaldi_app/preferences/fontscolors.py:527 +msgid "Number" +msgstr "Číslo" + +#: frescobaldi_app/preferences/fontscolors.py:528 +msgid "LilyPond Environment" +msgstr "Prostředí LilyPondu" + +#: frescobaldi_app/preferences/fontscolors.py:532 +msgid "Texinfo" +msgstr "Texinfo" + +#: frescobaldi_app/preferences/fontscolors.py:534 +msgid "Block" +msgstr "Blok" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "Podrobný" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Jazyk:" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "Žádný překlad" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "Výchozí jazyk systému (je-li dostupný)" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Styl:" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "Použít systémové ikony" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" +"Je-li zaškrtnuto, ikony motivu ikon plochy se použijí namísto přibalených " +"ikon.\n" +"Toto nastavení se projeví při příštím spuštění {appname}." + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "Sezení, které se má nahrát, je-li Frescobaldi spuštěn bez argumentů" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "Začít bez sezení" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "Začít s naposledy použitým sezením" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "Začít se sezením:" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "Při ukládání dokumentů" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "Ponechat záložní kopii" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" +"Frescobaldi vždy zálohuje soubor, předtím než jej přepíše novou verzí.\n" +"Je-li to zaškrtnuto, jsou tyto záložní kopie ponechány." + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "Zapamatovat si pozici ukazovátka, záložky atd." + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Výchozí adresář:" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "Výchozí složka pro vaše dokumenty LilyPond (volitelná)." + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "PDF:" + +#: frescobaldi_app/preferences/helpers.py:71 +msgid "MIDI:" +msgstr "MIDI:" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "SVG:" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "Obrázek:" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "Prohlížeč:" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "El. pošta:" + +#: frescobaldi_app/preferences/helpers.py:76 +msgid "File Manager:" +msgstr "Správce souborů:" + +#: frescobaldi_app/preferences/helpers.py:77 +msgid "Shell:" +msgstr "Shell:" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" +"Níže můžete zadat příkazy pro otevírání různých typů souborů. $f je nahrazen názvem souboru, $u s adresou (URL). Aby se " +"použil program nastavený v operačním systému jako výchozí, ponechejte pole " +"prázdné." + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "" +"Příkaz, který má přijmout adresu (URL) pro poslání elektronickou poštou" + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "Příkaz pro otevření okna s terminálem nebo příkazovým řádkem." + +#: frescobaldi_app/preferences/lilypond.py:81 +msgid "LilyPond versions to use" +msgstr "Verze LilyPondu k použití" + +#: frescobaldi_app/preferences/lilypond.py:82 +msgid "Automatically choose LilyPond version from document" +msgstr "Automaticky vybrat verzi LilyPondu z dokumentu." + +#: frescobaldi_app/preferences/lilypond.py:84 +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" +"Je-li zaškrtnuto, verze dokumentu určuje, která verze LilyPondu se použije.\n" +"Pro další informace se podívejte na \"Co je toto\"." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" +"

Je-li povoleno toto nastavení, dokument se prohledává na příkaz LilyPondu " +"\\version nebo proměnnou dokumentu version.

\n" +"

Příkaz pro verzi LilyPondu vypadá takto:

\n" +"
\\version \"2.14.0\"
\n" +"

Proměnná dokumentu vypadá takto:

\n" +"
-*- version: 2.14.0;
\n" +"

někde (v části s poznámkami) na prvních pěti nebo posledních pěti řádcích " +"dokumentu. Tímto způsobem se dá verze LilyPondu, která se má použít, taktéž " +"zadat v dokumentech,které nejsou LilyPond, jako jsou HTML, LaTeX, atd.

\n" +"

Pokud dokument stanoví verzi, je vybrána nejstarší vhodná verze " +"LilyPondu. Jinak je zvolena výchozí verze.

\n" + +#: frescobaldi_app/preferences/lilypond.py:101 +msgid "See also {link}." +msgstr "Podívejte se také na {link}." + +#: frescobaldi_app/preferences/lilypond.py:149 +msgid "Set as &Default" +msgstr "Nastavit jako &výchozí" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "Výchozí" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "Příkaz pro LilyPond:" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "Název nebo úplná cesta k programu LilyPond." + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "Convert-ly:" + +#: frescobaldi_app/preferences/lilypond.py:241 +msgid "LilyPond-book:" +msgstr "LilyPond-book:" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "Zahrnout do automatického výběru verze" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "Spuštění LilyPondu" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "Uložit dokument, je-li to možné" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" +"Je-li zaškrtnuto, dokument je uložen, když je místní nebo upravený.\n" +"Jinak je pro běh LilyPondu použit dočasný soubor." + +#: frescobaldi_app/preferences/lilypond.py:286 +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "Je-li zaškrtnuto, LilyPond smaže prostřední soubory PostScript." + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "Vyhledávací cesta pro LilyPond:" + +#: frescobaldi_app/preferences/midi.py:77 +msgid "MIDI Ports" +msgstr "Přípojky MIDI" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" +"Poznámka: Na vašem systému nejsou dostupné žádné výstupní přípojky MIDI. Pro " +"použití MIDI prověřte, prosím, zda je PortMIDI nainstalován ve vašem systému " +"a že syntetizátor MIDI je dostupný nebo připojený." + +#: frescobaldi_app/preferences/midi.py:82 +msgid "Player output:" +msgstr "Výstup přehrávače:" + +#: frescobaldi_app/preferences/midi.py:84 +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" +"Přípojka MIDI pro přehrávání not. Pro další informace se podívejte na \"Co " +"je toto\"." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" +"

Tato vysouvací nabídka uvádí seznam přípojek MIDI dostupných ve vašem " +"systému. Můžete jednu vybrat, nebo pouze napište část z názvu. V tom případě " +"se použije první dostupný název přípojky, který začíná zadanými znaky.

\n" +"

Klepněte na tlačítko pro obnovení seznamu, např. když připojíte zařízení " +"MIDI nebo spustíte softwarový syntetizátor.

" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "Obnovit přípojky MIDI" + +#: frescobaldi_app/preferences/midi.py:135 +msgid "Close unused MIDI output" +msgstr "Zavřít nepoužívaný výstup MIDI" + +#: frescobaldi_app/preferences/midi.py:137 +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" +"Po jedné minutě zavře nepoužívané přípojky MIDI. Pro další informace se " +"podívejte na \"Co je toto\"." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" +"

Je-li zaškrtnuto, Frescobaldi zavře přípojky pro výstupy MIDI, které se " +"po jednu minutu nepoužívají.

\n" +"

Toto může uvolnit systémové prostředky, které může používat softwarový " +"syntetizátor MIDI, a tím ušetřit energie v baterii.

\n" +"

Vedlejším účinkem je, že pokud pozastavíte soubor MIDI na delší dobu, " +"nástroje jsou nastaveny znovu na výchozí klavír (nástroj 0). V tom případě " +"přehrávání souboru od začátku nastaví nástroje znovu.

\n" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "Složky obsahující slovníky s dělením slov" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Zkratka" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "Nabídka {name}:" + +#: frescobaldi_app/preferences/shortcuts.py:125 +msgid "Other commands:" +msgstr "Jiné příkazy:" + +#: frescobaldi_app/preferences/shortcuts.py:173 +msgid "&Edit Shortcut for \"{name}\"" +msgstr "&Upravit zkratku pro \"{name}\"" + +#: frescobaldi_app/preferences/shortcuts.py:178 +msgid "(no shortcut)" +msgstr "(žádná zkratka)" + +#: frescobaldi_app/preferences/shortcuts.py:206 +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "Odstranit zkratku z tohoto příkazu?" +msgstr[1] "Odstranit zkratku z těchto příkazů?" +msgstr[2] "Odstranit zkratku z těchto příkazů?" + +#: frescobaldi_app/preferences/shortcuts.py:304 +msgid "(default)" +msgstr "(výchozí)" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "Ukázat zápis při započetí s prací" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "Zobrazit prostý výstup zápisu" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" +"Je-li zaškrtnuto, Frescobaldi nebude zkracovat názvy souborů ve výstupu se " +"zápisem." + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "Pohled na noty" + +#: frescobaldi_app/preferences/tools.py:142 +msgid "Magnifier Size:" +msgstr "Velikost lupy:" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "Velikost zvětšovacího skla (Ctrl+klepnutí v pohledu na noty)." + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr " pixelů" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "Měřítko lupy:" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "Zvětšení lupy." + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "%" + +#: frescobaldi_app/preferences/tools.py:220 +msgid "Group documents by directory" +msgstr "Seskupit dokumenty podle adresáře" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Rychlé vložení" + +#: frescobaldi_app/quickinsert/__init__.py:48 +msgid "Quick &Insert" +msgstr "Rychlé &vložení" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Povolit zkrácený zápis" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "Použít krátký zápis pro některé artikulace jako je staccato." + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Artikulace" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Různé druhy artikulací a dalších značek." + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Akcent (důraz)" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Marcato (důrazně)" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Staccatissimo (nejkratčeji)" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Staccato (krátce)" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Portato" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Tenuto (drženě)" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo (výrazně)" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Ozdoby" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Trylek" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Nátryl" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Mordent" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Obal" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "Nátryl nátrylu" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "Mordent nátrylu" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "Nátryl nahoru" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "Nátryl dolů" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "Mordent nahoru" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "Mordent dolů" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "Nátryl nahoru" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "Nátryl dolů" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "Nátryl na lince notové osnovy" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Obrátit obal" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "Předznamenání" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Koruna (fermata)" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Krátká koruna (~ fermata)" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Dlouhá koruna (~ fermata)" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Velmi dlouhá koruna (~ fermata)" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Segno" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Varcoda" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "Signum congruentiae (značka pro shodu)" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Jiné" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Tah smyčcem nahoru" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Tah smyčcem dolů" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "Kvapné pizzicato" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "Otevřeno (např. žestě)" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "Zastaveno (např. žestě)" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Flažolet" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Palec" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Levá pata" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Pravá pata" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "Levý prst" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Pravý prst" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "Napůl otevřeno (např. hajtka)" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "Taktové čáry" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "Taktové čáry, značky pro dýchání atd." + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Dvojitá taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "koncová taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "Tečkovaná taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "Čárkovaná taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Neviditelná taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "Opakovat začátek" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "Opakovat obojí" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "Opakovat konec" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "Opakovat obojí (starý)" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "Opakovat obojí (klasický)" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "Zaškrtnutá taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "Jednoduchá taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "Malá-Široká-Malá taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "Široká-Malá taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "Dvojita široká taktová čára" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "Taktová čára Segno" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "Značky pro dýchání" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "Výchozí značka pro dýchání" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "Přímá značka pro dýchání" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "Zahnuté přerušení (césura)" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "Přímé přerušení (césura)" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "{name} ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +msgid "Configure Keyboard Shortcut ({key})" +msgstr "Nastavit klávesovou zkratku ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Žádný" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "Dynamika" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "Symboly pro dynamiku." + +#: frescobaldi_app/quickinsert/dynamics.py:128 +msgid "Dynamic sign {name}" +msgstr "Značka dynamiky {name}" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "Natahovače" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "Sponka crescenda" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "Sponka diminuenda" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "Decrescendo" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "Legatové obloučky, natahovače atd." + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "Arpeggia" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "Arpeggio s šipkou nahoru" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "Arpeggio s šipkou dolů" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "Arpeggio v závorce" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "Arpeggio v kulaté závorce" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "Glissanda" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "Čárkované glissando" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "Tečkované glissando" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "Klikaté glissando" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "Trylkové glissando" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "Frázovací oblouček" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" +"

S panelem pro rychlé vložení můžete k nynější notě nebo vybraným notám " +"přidat různé hudební prvky.

\n" +"

Pro více informací se podívejte na {link}.

" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Směr:" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Nahoru" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Neutrální" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Dolů" + +#: frescobaldi_app/quickinsert/widget.py:127 +msgid "The Quick Insert Panel" +msgstr "Panelem pro rychlé vložení" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" +"

\n" +"S nástroji v panelu pro rychlé vložení můžete k nynější notě nebo vybraným " +"notám přidat různé hudební prvky..\n" +"

\n" +"\n" +"

\n" +"Volič Směr udává, zda se artikulace, dynamika nebo legatové " +"obloučky\n" +"objeví v neutrální poloze (např. určené směrem nožičky), nebo nad\n" +"nebo pod osnovou přivěšením znaku -, ^ nebo\n" +"_.\n" +"

\n" +"\n" +"

\n" +"Klepněte na kartu pro výběr nástroje. Nástroji můžete projíždět pomocí Ctrl\n" +"(nebo {command}) a kolečkem myši.\n" +"Všechna tlačítka v panelu pro rychlé vložení mají nastavitelné klávesové " +"zkratky;\n" +"změnit je můžete klepnutím pravým tlačítkem myši na tlačítko.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" +"

Artikulace

\n" +"\n" +"

\n" +"Tyto hudební symboly lze přidat k notě nebo pomlce nebo k vybranému rozsahu\n" +"not.\n" +"Pokud je přidáte do výběru, pomlky budou přeskočeny.\n" +"Pokud není vybrán žádný text, ukazovátko se automaticky přesune k další\n" +"výšce tónu, pomlce, vynechání nebo akordu.\n" +"

\n" +"\n" +"

\n" +"Pokud je zaškrtnuto Povolit zkrácený zápis, Frescobaldi použije " +"krátké značky\n" +"pro artikulace, pokud existují\n" +"(např. -. místo -\\staccato).\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" +"

Dynamika

\n" +"\n" +"

\n" +"Dynamiku je také možné přidat k notě nebo pomlce.\n" +"Pokud vyberete rozsah not, můžete přidat natahovače, které budou " +"automaticky\n" +"končit na poslední notě, pomlce nebo akordu ve výběru.\n" +"Pokud potom klepnete na značku, tato nahradí ukončovatele.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" +"

Natahovače

\n" +"\n" +"

\n" +"Tento nástroj vám dovolí přidat arpeggio, glissanda a další natahovače jako " +"jsou legatové obloučky,\n" +"frázovací obloučky, ruční trámce nebo trylky.\n" +"

\n" +"\n" +"

\n" +"Arpeggia a glissanda se vztahují na nynější notu;\n" +"potřebují, aby nebyly vybrány žádné noty.\n" +"Legatové obloučky, trámce nebo trylky se vztahují na nynější notu a na " +"další\n" +"pokud nejsou vybrány žádné noty,\n" +"nebo k první a poslední notě nebo akordu ve výběru.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" +"

Taktové čáry

\n" +"\n" +"

\n" +"Zde můžete vložit taktové čáry nebo různé dechové značky.\n" +"

\n" + +#: frescobaldi_app/rhythm/__init__.py:146 +msgid "&Double durations" +msgstr "&Zdvojnásobit doby trvání" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Zdvojnásobit všechny doby trvání ve výběru." + +#: frescobaldi_app/rhythm/__init__.py:149 +msgid "&Halve durations" +msgstr "Zkrátit doby trvání na &polovinu" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Zkrátit na polovinu všechny doby trvání ve výběru." + +#: frescobaldi_app/rhythm/__init__.py:152 +msgid "Do&t durations" +msgstr "Udělat na dobách trvání &tečky" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Přidat tečku ke všem dobám trvání ve výběru." + +#: frescobaldi_app/rhythm/__init__.py:155 +msgid "&Undot durations" +msgstr "&Odstranit z dob trvání tečky" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Odstranit tečku ze všech dob trvání ve výběru." + +#: frescobaldi_app/rhythm/__init__.py:158 +msgid "Remove &scaling" +msgstr "Odstranit &změny velikosti" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "Odstranit změny velikosti (*n/m) z dob trvání ve výběru." + +#: frescobaldi_app/rhythm/__init__.py:161 +msgid "&Remove durations" +msgstr "O&dstranit doby trvání" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "Odstranit všechny doby trvání ve výběru." + +#: frescobaldi_app/rhythm/__init__.py:164 +msgid "Make &implicit" +msgstr "Vyjádřit &nepřímo" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "Vyjádřit doby trvání nepřímo (odstranit opakované doby trvání)." + +#: frescobaldi_app/rhythm/__init__.py:167 +msgid "Make implicit (per &line)" +msgstr "Vyjádřit nepřímo (na řád&ek)" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" +"Vyjádřit doby trvání nepřímo (odstranit opakované doby trvání), kromě první " +"doby trvání v řádku." + +#: frescobaldi_app/rhythm/__init__.py:171 +msgid "Make &explicit" +msgstr "Vyjádřit &přímo" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" +"Přímo vyjádřit doby trvání (přidat dobu trvání ke každé notě, i když se " +"jedná o tu samou notu, jako je předcházející nota)." + +#: frescobaldi_app/rhythm/__init__.py:175 +msgid "&Apply rhythm..." +msgstr "&Použít rytmus..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Použít zadaný rytmus na vybrané noty." + +#: frescobaldi_app/rhythm/__init__.py:178 +msgid "&Copy rhythm" +msgstr "&Kopírovat rytmus" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Kopírovat rytmus vybraných not." + +#: frescobaldi_app/rhythm/__init__.py:181 +msgid "&Paste rhythm" +msgstr "&Vložit rytmus" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Vložit rytmus do vybraných not." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Použít rytmus" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Zadat rytmus:" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "Zacházení s rytmem" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" +"

\n" +"Rytmické funkce Frescobaldi mění doby trvání napsané po notách,\n" +"akordech, pomlkách atd. Pomocí těchto funkcí, všech v nabídce {menu}, je\n" +"je možné zdvojnásobit nebo na polovinu zkrátit délku not, přidat nebo " +"odstranit tečky\n" +"a odstranit činitele změny velikosti.\n" +"

\n" +"\n" +"

\n" +"Také je možné změnit způsob, jakým je rytmus zadán: pro každou notu\n" +"(přímý), nebo jen tehdy, když se doba trvání změní (nepřímý). Někteří " +"uživatelé mohou dávat přednost\n" +"volbě skrytý na řádek, která vždy stanovuje dobu trvání první\n" +"noty, akordu nebo pomlky na řádku.\n" +"

\n" +"\n" +"

\n" +"Poslední tři příkazy nabídky mohou rytmus zadaný v dialogu kopírovat, vložit " +"nebo\n" +"použít.\n" +"

\n" +"\n" +"

\n" +"V dialogu \"Použít rytmus\" můžete zadat řady dob trvání, např.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"který potom bude opakovaně použit na výběr not.\n" +"

\n" + +#: frescobaldi_app/rhythm/rhythm.py:279 +msgctxt "submenu title" +msgid "Rhythm" +msgstr "Rytmus" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Nastavit nový notový zápis..." + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "Hudba následuje zde." + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Odstranit výchozí heslo programu LilyPond" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Průvodce pro způsob uspořádání notového zápisu" + +#: frescobaldi_app/scorewiz/dialog.py:80 +msgid "Clear" +msgstr "Smazat" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "Smaže nynější stranu průvodce notovým zápisem" + +#: frescobaldi_app/scorewiz/dialog.py:83 +msgid "Preview" +msgstr "Náhled" + +#: frescobaldi_app/scorewiz/dialog.py:130 +msgid "Score Preview" +msgstr "Náhled na notový zápis" + +#: frescobaldi_app/scorewiz/dialog.py:164 +msgid "&Titles and Headers" +msgstr "&Názvy a hlavičky" + +#: frescobaldi_app/scorewiz/dialog.py:173 +msgid "&Parts" +msgstr "&Hlasy" + +#: frescobaldi_app/scorewiz/dialog.py:182 +msgid "&Score settings" +msgstr "Nastavení ¬ového zápisu" + +#: frescobaldi_app/scorewiz/dialog.py:191 +msgid "The Score Wizard" +msgstr "Průvodce pro notový zápis" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" +"

\n" +"Průvodce nastavením notového zápisu ({key}) v {menu} je navržen\n" +"pro rychlé nastavení notového zápisu hudby v LilyPondu.\n" +"

\n" +"\n" +"

\n" +"Na první kartě, Názvy a hlavičky, můžete zadat údaje o\n" +"názvu.\n" +"

\n" +"\n" +"

\n" +"Na druhé kartě, Hlasy, můžete svůj notový zápis poskládat z mnoha\n" +"dostupných typů hlasů.\n" +"Dvojité poklepání na typ hlasu pro jeho přidání do vašeho notového zápisu " +"(nebo klepnout na Přidat).\n" +"Vyberte hlas v seznamu notového zápisu pro změnu některých nastavení " +"vybraného hlasu,\n" +"přejete-li si.\n" +"Mnohé hlasy, zvláště Sbor, mají velké možnosti pro nastavení notového zápisu " +"způsobem,\n" +"jakým to chcete.\n" +"

\n" +"\n" +"

\n" +"Na třetí kartě, Nastavení notového zápisu, lze nastavit celkové " +"vlastnosti\n" +"a nastavení notového zápisu.\n" +"

\n" +"\n" +"

\n" +"Klepněte na tlačítko Náhled, abyste dostali náhled na dodané příkladové " +"noty.\n" +"Klepněte na OK pro zkopírování vytvořeného zdrojového textu v LilyPondu do " +"editoru.\n" +"

\n" +"\n" +"

Více kousků nebo přesuny

\n" +"\n" +"

\n" +"Zvláštní a mocná vlastnost karty Hlasy je skryta ve \n" +"skupině \"Nádoby\" v seznamu typů hlasů.\n" +"

\n" +"\n" +"

\n" +"Tato skupina obsahuje typy Notový zápis, Kniha a Část knihy, se kterými " +"můžete\n" +"nastavit dokument LilyPondu obsahující více notových zápisů nebo dokonce " +"knihy.\n" +"Můžete přidat položky Notový zápis, Část knihy nebo Kniha do pohledu na " +"notový zápis.\n" +"Lze je vnořovat: Notový zápis jde přidat do části knihy nebo knihy, ale " +"nemůžete přidat\n" +"knihu do části knihy nebo do notového zápisu.\n" +"

\n" +"\n" +"

\n" +"Potom můžete přidat hudební hlasy.\n" +"Pokud chcete vytvořit více notových zápisů s přesně týmiž hlasy, stačí jen " +"přidat\n" +"hlasy na nejvyšší úroveň pohledu na notový zápis, a pak notové zápisy, bez\n" +"přidání hudebních hlasů do notových zápisů.\n" +"Notové zápisy pak budou používat hlasy na nejvyšší úrovni notového zápisu.\n" +"

\n" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Klepněte pro zadání hodnoty." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "úpatí první strany" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "úpatí poslední strany" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "Věnování" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Název" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Podnázev" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "Podpodnázev" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Nástroj" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Skladatel" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Hudební aranžér" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Básník" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Metrum" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Kus" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Dílo" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Autorské právo" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Heslo" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Dostupné hlasy:" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Notový zápis:" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "&Přidat" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +msgid "&Remove" +msgstr "&Odstranit" + +#: frescobaldi_app/scorewiz/score.py:104 +msgid "Move up" +msgstr "Přesunout nahoru" + +#: frescobaldi_app/scorewiz/score.py:105 +msgid "Move down" +msgstr "Přesunout dolů" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Předznamenání" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Taktové označení:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Předtaktí:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Hodnota na metronomu:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Údaj o tempu:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Durová (Major)" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Mollová (Minor)" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "Jónský" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Dórský" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Frýgický" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Lýdický" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Mixolýdický" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Éolský" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Lokrijský" + +#: frescobaldi_app/scorewiz/settings.py:73 +msgid "Score properties" +msgstr "Vlastnosti notového zápisu" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Obecné volby" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Použít typografické uvozovky" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "Nahradit normální uvozovky v názvech hezkými typografickými uvozovkami" + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Odstranit výchozí motto" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Potlačit výstup výchozího motta pomocí LilyPondu" + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Odstranit čísla taktů" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "Potlačit zobrazení čísel taktů na začátku každé osnovy." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "Vytvořit MIDI výstup" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "Vytvořit soubor MIDI vedle souboru PDF." + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Ukázat hodnotu na metronomu" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"V případě, že je zaškrtnuto, hodnota na metronomu se ukáže na začátku " +"notového zápisu. MIDI výstup používá nastavení metronomu také." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Velikost papíru:" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Formát na šířku" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Dlouhý" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Krátký" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Názvy nástrojů" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "První systém:" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Jiné osnovy:" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "Požít dlouhé nebo krátké názvy nástrojů před první osnovou." + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "Požít krátké, dlouhé nebo žádné názvy nástrojů před dalšími osnovami." + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "Jaký použít jazyk pro názvy nástrojů." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Jazyk názvu polohy tónu:" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "Jazyk programu LilyPond, který chcete použít pro názvy výšek tónů." + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Verze:" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "Verze programu LilyPond, kterou budete používat v tomto dokumentu." + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "Nejsou dostupná žádná nastavení." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Nastavit, kolik oddělených hlasů chcete mít na každé notové osnově." + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "Toto je užitečné zejména, když píšete polyfonní hudbu, jakou je fuga." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Pravá ruka:" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Levá ruka:" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Akordový styl:" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Kytarové hmaty" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Ukázat přednastavené kytarové hmaty pod názvy akordů (LilyPond 2.12 a a " +"vyšší)." + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "Zde následují akordy." + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "německý" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "na půl německý" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "italský" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "francouzský" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Trubka v F" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "Tr. F" + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Trubka v C" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Tr. C." + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Trubka v B" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Tr. B." + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Pozoun" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Poz" + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Basová tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "B.Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Žesťové nástroje" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +msgid "Staff Group" +msgstr "Skupina osnov" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "Složená závorka" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "Kulatá závorka" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +msgid "Square" +msgstr "Hranatá závorka" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "Typ:" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +msgid "Connect Barlines" +msgstr "Spojit taktové čáry" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "Je-li zaškrtnuto, jsou taktové čáry mezi osnovami spojeny." + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +msgid "Score" +msgstr "Notový zápis" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +msgid "Piece:" +msgstr "Kus:" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +msgid "Opus:" +msgstr "Dílo:" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "Vlastnosti" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "Část knihy" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "Kniha" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" +"

Zde můžete zadat souborový název nebo příponu (ne souborovou příponu) pro " +"nastavení názvů tvořených výstupních souborů pro tuto knihu.

\n" +"

Pokud zvolíte \"Přípona\", bude zadaný název připojen k názvu souboru " +"dokumentu; pokud zvolíte \"Souborový název\", použije se pouze zadaný název." +"

" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "Výstupní souborový název:" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "Souborový název" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "Přípona" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +msgid "Containers" +msgstr "Nádoby" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Klavír" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "Klav." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Cembalo" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Cem." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Clavichord" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Clv." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Varhany" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Var." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Pedál:" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Nastavit na nulu pro úplné znemožnění pedálu." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Cel." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Klávesové nástroje" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Kotle" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Kot." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Xylofon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Xyl." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Marimba" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "Horní notová osnova:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "Dolní notová osnova:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "Nastavte počet hlasů na 0 pro zakázání druhé osnovy." + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Vibrafon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Vib." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Trubkové zvony" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Tru. zv." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Zvonková hra" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Zvo." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +msgid "Carillon" +msgstr "Zvonkohra" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Zvon." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +msgid "Manual staff:" +msgstr "Ruční osnova:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +msgid "Pedal staff:" +msgstr "Pedálová osnova:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Bubny" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Bub." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Pěvecké hlasy:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Odstranit nožky not" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Odstranit nožky z not pro bicí." + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "Zde následují bubny." + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "Udržovat trochu odstup." + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Bubny (pět linek, výchozí)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Styl timbále (dvě linky)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Styl konga (dvě linky; vysoký a úzký buben, na který se hraje dlaněmi)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Styl bonga (dvě linky; buben)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Styl bicí (dvě linky)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Bicí nástroje" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Druh notové osnovy:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Intonace:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Normální notová osnova" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Tabulatura" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Oba" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Mandolína" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mna" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Ladění mandolíny" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Bendžo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Bžo." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "Otevřít ladění v G (aDGBD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "Ladění v C (gCGBD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "Modální ladění (gDGCD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "Otevřít ladění v D (aDF#AD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "Otevřít ladění v D moll (aDFAD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Čtyři smyčce (namísto pěti)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Klasická kytara" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "Kra." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Kytarové ladění" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "Otevřít ladění v G" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Džezová kytara" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "Dž. kra." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Basová kytara" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "Bs. kra." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "Basové ladění" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Elektrická basová kytara" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "El. bs. kra." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Harfa" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Hfa." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Drnkací smyčcové nástroje" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Názvy akordů" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Číslovaný bas (generální bas, basso continuo)" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "Použít pomocné linky" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "Zde následují čísla." + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "Notová osnova" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Speciální" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Housle" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Hle." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Viola" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "Vla." + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Violoncello" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Vlo." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "Kontrabas" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Kbas" + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +msgid "Basso Continuo" +msgstr "Generální bas (Basso continuo)" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "G. b." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Smyčcové nástroje" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Sloka:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Počet slok:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Hlasový rozsah" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "Ukázat výšku hlasového rozsahu na začátku notové osnovy." + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "Zde následují slova písně." + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Soprán" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +msgid "Mezzo-soprano" +msgstr "Mezzosoprán" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "Ms." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Alt" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Tenor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Hlavní list" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"Hlavní list poskytuje notovou osnovu s názvy akordů nad ní a slovy písně pod " +"ní. Druhá notová osnova je volitelná." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Přidat notovou osnovu hudebního doprovodu" + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" +"Přidá notovou osnovu hudebního doprovodu a rovněž vloží doprovodný hlas do " +"horní notové osnovy." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Sbor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Vyberte, prosím, hlasy pro sbor. Použijte písmena S, A, T, nebo B. Spojovník " +"označuje novou notovou osnovu." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "Rada: Můžete použít dva sborové hlasy pro zdvojený sbor." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Úprava barvy zvuku " + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "Slova písně:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "Klavírní výtah" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "Přidá automaticky vytvořené klavírní výtah." + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "Zkušební soubory MIDI" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" +"Vytvoří zkušební soubor MIDI pro každý hlas, i když pro hlavní notový zápis " +"není vytvořen žádný výstup MIDI." + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "Sb." + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "Zkušební soubory MIDI:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Všechny pěvecké hlasy mají stejná slova písně" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "Soubor stejných slov písně je umístěn mezi všechny notové osnovy." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Každý pěvecký hlas má stejná slova písně" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "" +"Každý pěvecký hlas dostává svá vlastní slova písně za použití stejného " +"textu, jaký mají jiné pěvecké hlasy." + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Každý pěvecký hlas má jiná slova písně" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Každý pěvecký hlas dostává jiný soubor se slovy písně." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "Umístit sloky" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "Jeden soubor slok je umístěn mezi všechny notové osnovy." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "Zpěv" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Flétna" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Pikola" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Pik." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Basová flétna" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Bs. fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Hoboj" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Hob." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +msgid "Oboe d'amore" +msgstr "Hoboj d'amore" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Hob. d'am." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +msgid "English horn" +msgstr "Anglický roh" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "A. roh" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Fagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Fag." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Kontrafagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "Kfag." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Klarinet" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Kl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Sopraninový saxofon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "Snino Sax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Sopránový saxofon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "Sno Sax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Altový saxofon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "A. Sax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Tenorový saxofon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "T. Sax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Barytonový saxofon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "Bar. Sax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "Basový saxofon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "Bas. Sax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Sopránová zobcová flétna" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "S. z. fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Altová zobcová flétna" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "A. z. fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Tenorová zobcová flétna" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "T. z. fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Basová zobcová flétna" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "Bas. z. fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Dřevěné dechové nástroje" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "Spravovat sezení" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "Název:" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "Vždy uložit seznam dokumentů v tomto sezení" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "Základní adresář:" + +#: frescobaldi_app/sessions/dialog.py:133 +msgid "Edit session: {name}" +msgstr "Upravit sezení: {name}" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "Upravit nové sezení" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "Zadejte, prosím, název sezení." + +#: frescobaldi_app/sessions/dialog.py:174 +msgid "Please do not use the name '{name}'." +msgstr "Nepoužívejte, prosím, název '{name}'." + +#: frescobaldi_app/sessions/dialog.py:180 +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" +"Jiné sezení s názvem {name} již existuje.\n" +"\n" +"Chcete je přepsat?" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "Přepsat" + +#: frescobaldi_app/sessions/manager.py:127 +msgctxt "New Session" +msgid "&New..." +msgstr "&Nový..." + +#: frescobaldi_app/sessions/manager.py:129 +msgid "&Manage..." +msgstr "&Spravovat..." + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "Žádné sezení" + +#: frescobaldi_app/sessions/menu.py:55 +msgctxt "menu title" +msgid "&Session" +msgstr "&Sezení" + +#: frescobaldi_app/snippet/builtin.py:38 +msgid "Blank Line" +msgstr "Prázdný řádek" + +#: frescobaldi_app/snippet/builtin.py:44 +msgid "Single Typographical Quotes" +msgstr "Jednoduché typografické uvozovky" + +#: frescobaldi_app/snippet/builtin.py:49 +msgid "Double Typographical Quotes" +msgstr "Dvojité typografické uvozovky" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "Rytmické notové skupiny" + +#: frescobaldi_app/snippet/builtin.py:125 +msgid "Modern 2/2 Time Signature" +msgstr "Moderní 2/2 taktové označení" + +#: frescobaldi_app/snippet/builtin.py:131 +msgid "Modern 4/4 Time Signature" +msgstr "Moderní 4/4 taktové označení" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "Taktové označení Tactus (číslo s notou)" + +#: frescobaldi_app/snippet/builtin.py:148 +msgid "LilyPond Version" +msgstr "Verze LilyPondu" + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "Poměrné noty" + +#: frescobaldi_app/snippet/builtin.py:166 +msgid "Upper case selection" +msgstr "Výběr velkých písmen" + +#: frescobaldi_app/snippet/builtin.py:172 +msgid "Lower case selection" +msgstr "Výběr malých písmen" + +#: frescobaldi_app/snippet/builtin.py:178 +msgid "Title case selection" +msgstr "Výběr velikosti názvu" + +#: frescobaldi_app/snippet/builtin.py:189 +msgid "Markup lines" +msgstr "Značení řádků" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "Značení sloupce" + +#: frescobaldi_app/snippet/builtin.py:202 +msgid "Tagline with date and LilyPond version" +msgstr "Heslo s datem a verzí LilyPondu." + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "Předloha hlavičky" + +#: frescobaldi_app/snippet/builtin.py:227 +msgid "No Tagline" +msgstr "Žádné heslo" + +#: frescobaldi_app/snippet/builtin.py:235 +msgid "No Barnumbers" +msgstr "Žádná čísla taktů" + +#: frescobaldi_app/snippet/builtin.py:245 +msgid "Midi Tempo" +msgstr "Tempo MIDI" + +#: frescobaldi_app/snippet/builtin.py:255 +msgid "Staff Size" +msgstr "Velikost notové osnovy" + +#: frescobaldi_app/snippet/builtin.py:310 +msgid "A5 Paper" +msgstr "Papír A5" + +#: frescobaldi_app/snippet/builtin.py:318 +#, fuzzy +msgid "Document Fonts..." +msgstr "Dokumenty" + +#: frescobaldi_app/snippet/builtin.py:346 +msgid "Last note or chord" +msgstr "Poslední nota nebo akord" + +#: frescobaldi_app/snippet/builtin.py:427 +msgid "Color" +msgstr "Barva" + +#: frescobaldi_app/snippet/builtin.py:464 +msgid "Basic Leadsheet" +msgstr "Základní vzorový list" + +#: frescobaldi_app/snippet/builtin.py:508 +msgid "Choir Hymn" +msgstr "Sborový chvalozpěv" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "Upravit kousek" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "Nový kousek" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "Text kousku:" + +#: frescobaldi_app/snippet/edit.py:119 +msgid "Title:" +msgstr "Název:" + +#: frescobaldi_app/snippet/edit.py:120 +msgid "Shortcut:" +msgstr "Zkratka:" + +#: frescobaldi_app/snippet/edit.py:131 +msgid "Click to change the keyboard shortcut." +msgstr "Klepněte pro změnu klávesové zkratky." + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "Prázdný kousek" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "Kousek nemůže být prázdný." + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "Editor kousku" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" +"

Zde můžete upravit text kousku.

Pokud začnete první řádek(y) s " +"'-*- ' (všimněte si mezery), zbytek toho řádku(ů)vymezí " +"proměnné jako name: value; nebo jednoduše name;, " +"což ovlivní chování kousku. Lze použít následující proměnné:

" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" +"Zařadit kousek do nabídky pro vložení, seskupeno podle (volitelné) hodnoty." + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" +"Zařadit kousek do nabídky {file_new_from_template}, seskupeno podle " +"(volitelné) hodnoty. Když je vyvolán přes nabídku, kousek je vložen do " +"nového dokumentu." + +#: frescobaldi_app/snippet/edit.py:218 +msgctxt "menu title" +msgid "File" +msgstr "Soubor" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "Nový z předlohy" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "Pomůcka pro zapamatování k napsání pro výběr kousku." + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "Neodsazovat kousek po vložení automaticky." + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "Ikona k ukázání v nabídce a v seznamu kousků." + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" +"Symbol k ukázání v nabídce a v seznamu kousků. Symboly jsou ikony, které " +"používají výchozí barvu textu a lze je najít v {directory}." + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "Spustit kousek jako pythonovský skript. Podívejte se na {link}." + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "Jedno z více následujících slov (oddělených mezerami nebo čárkami):" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "Vyžaduje, aby byl vybrán text." + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "Upraví výběr, aby nezahrnoval prázdná místa na začátku a na konci." + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "Vybere všechen vložený text." + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" +"

Další řádky kousku vymezují text k vložení v editoru. Zde můžete vložit " +"proměnné uvozené znakem $. Zdvojený $ bude nahrazen jedním. Jsou uznávány " +"následující proměnné:

" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "Kousky v Pythonu" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" +"

Kousky v Pythonu mohou číst a mají nastavit proměnnou {text}. Proměnná " +"{text} obsahuje nyní vybraný text (což může být prázdný řetězec).

\n" +"

Můžete nastavit {text} na řetězec nebo seznam řetězců.

\n" +"

Další proměnné, na něž lze odkazovat:

" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "Seznam řetězců popisující typ textu, na něm stojí ukazovátko." + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" +"Nynější QTextCursor dávající přístup k dokumentu. Nicméně neměňte dokument " +"přes ukazovátko." + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" +"Při nastavení {text} na seznam namísto na řetězec, můžete tuto hodnotu " +"použít pro určení místa, na něž bude ukazovátko textu umístěno po vložení " +"kousku." + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" +"Při nastavení {text} na seznam namísto na řetězec, lze tuto hodnotu použít " +"společně s {cursor} pro výběr textu, když jsou vkládány části seznamu s " +"řetězci." + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "Nynější datum ve formátu RRRR-MM-DD." + +#: frescobaldi_app/snippet/expand.py:80 +msgid "The version of the default LilyPond program." +msgstr "Verze výchozího programu LilyPond." + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "Verze Frescobaldi." + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "Adresa (URL) nynějšího dokumentu." + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "Úplný místní souborový název nynějšího dokumentu." + +#: frescobaldi_app/snippet/expand.py:96 +msgid "The name of the current document." +msgstr "Název nynějšího dokumentu." + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "Přesune ukazovátko textu po vložení sem." + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "Vybere text odtud po místo dané pomocí proměnné $CURSOR" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" +"Vybraný text, je-li dostupný. Pokud není, ukazovátko textu je přesunuto sem." + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "Nenalezeny žádné kousky." + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Zavést kousky" + +#: frescobaldi_app/snippet/import_export.py:119 +msgid "New Snippets" +msgstr "Nové kousky" + +#: frescobaldi_app/snippet/import_export.py:120 +msgid "Updated Snippets" +msgstr "Aktualizované kousky" + +#: frescobaldi_app/snippet/import_export.py:121 +msgid "Unchanged Snippets" +msgstr "Nezměněné kousky" + +#: frescobaldi_app/snippet/import_export.py:183 +msgid "Import Keyboard Shortcuts" +msgstr "Zavést klávesové zkratky" + +#: frescobaldi_app/snippet/import_export.py:188 +msgid "Choose which snippets you want to import:" +msgstr "Vyberte, prosím, kousky, které si přejete zavést:" + +#: frescobaldi_app/snippet/import_export.py:190 +msgid "There are no new or updated snippets in the file." +msgstr "V souboru nejsou žádné nové nebo aktualizované kousky." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" +"

Zde jsou zobrazeny kousky z {filename}.

\n" +"

Pokud jsou nové nebo aktualizované kousky, můžete je vybrat anebo zrušit " +"jejich výběr, jeden za druhým, nebo u všech najednou, pomocí skupinového " +"zaškrtávacího okénka. Potom klepněte na OK pro zavedení všech vybraných " +"kousků.

\n" +"

Stávající, nezměněné kousky nelze zavést.

\n" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "Chyba kousku" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Vložka" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "Nový z &předlohy" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "Název" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Popis" + +#: frescobaldi_app/snippet/template.py:33 +msgid "Save as Template" +msgstr "Uložit jako předlohu" + +#: frescobaldi_app/snippet/template.py:34 +msgid "Please enter a template name:" +msgstr "Zadejte, prosím, název předlohy:" + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +msgid "Snippets" +msgstr "Kousky" + +#: frescobaldi_app/snippet/tool.py:54 +msgid "&Snippets" +msgstr "&Kousky" + +#: frescobaldi_app/snippet/tool.py:79 +msgid "Save as Template..." +msgstr "Uložit jako předlohu..." + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "&Kousky..." + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "&Nabídka" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "&Přidat..." + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "Přidat nový kousek. ({key})" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +msgid "&Edit..." +msgstr "&Upravit..." + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "Upravit nynější kousek. ({key})" + +#: frescobaldi_app/snippet/widget.py:179 +msgid "Remove the selected snippets." +msgstr "Odstranit vybrané kousky." + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "&Použít" + +#: frescobaldi_app/snippet/widget.py:181 +msgid "Apply the current snippet." +msgstr "Použít nynější kousek." + +#: frescobaldi_app/snippet/widget.py:182 +msgid "&Import..." +msgstr "&Zavést..." + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "Zavést kousky ze souboru." + +#: frescobaldi_app/snippet/widget.py:184 +msgid "E&xport..." +msgstr "&Vyvést..." + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "Vyvést kousky do souboru." + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "&Nápověda" + +#: frescobaldi_app/snippet/widget.py:188 +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" +"Zadejte text k hledání v seznamu kousků.\n" +"Pro další informace se podívejte na \"Co je toto\"." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" +"Zadejte text k hledání v seznamu kousků a stiskněte klávesu Enter pro " +"použití nyní vybraného kousku." + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" +"Pokud hledaný text plně odpovídá hodnotě proměnné kousku '{name}', je vybrán " +"tento kousek." + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" +"Pokud hledaný text začíná dvojtečkou ':', zbytek hledaného textu filtruje " +"kousky, které vymezují danou proměnnou. Po mezeře lze hodnotu zadat také, " +"kousky pak budou odpovídat, pokud hodnota dané proměnné obsahuje text po " +"mezeře." + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" +"Např. zadání {menu} ukáže všechny kousky, které jsou vloženy v nabídce pro " +"vkládání." + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +msgid "XML Files" +msgstr "Soubory XML" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "Vyvést {num}kousek" +msgstr[1] "Vyvést {num}kousky" +msgstr[2] "Vyvést {num}kousků" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" +"

\n" +"Se správcem kousků můžete skladovat často používáte kousky textu nazývané\n" +"\"kousky\", a snadno je vložit do textového editoru.\n" +"

\n" +"\n" +"

\n" +"Správce kousků lze zapnout přes nabídku {menu_snippets} nebo\n" +"stisknutím {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Kousky lze hledat procházením seznamu nebo napsáním několika znaků\n" +"ve vstupu pro vyhledání.\n" +"Kousky také mohou mít klávesovou zkratku, kterou jsou přímo použity.\n" +"Některé kousky mají zvláštní pomůcku pro zapamatování (krátký název), kterou " +"můžete napsat také\n" +"do vstupu pro hledání pro výběr kousku. Stisk klávesy Enter pak použije\n" +"kousek na textový editor a skryje správce kousků.\n" +"

\n" +"\n" +"

\n" +"Přidejte nové kousky pomocí {key_add}. Upravte vybraný kousek {key_edit}.\n" +"Odstraňte vybrané kousky pomocí {key_delete}. Varování: nelze se vrátit " +"zpět!\n" +"

\n" +"\n" +"

\n" +"Kousky lze také dát do nabídky (podívejte se na {link}).\n" +"A na konec jsou tu kousky, které mohou zahrnovat nebo měnit vybraný text.\n" +"Některé kousky to dělají pomocí zvláštních proměnných, zatímco jiné jsou " +"malými\n" +"skripty napsanými v Pythonu.\n" +"

\n" + +#: frescobaldi_app/snippet/widget.py:400 +msgctxt "menu title" +msgid "Insert" +msgstr "Vložka" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "Kousky..." + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "Začít nahrávání řady kláves." + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "Smazat řadu kláves." + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +msgid "Input" +msgstr "Vstup" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +msgid "Scheme:" +msgstr "Nákres:" + +#: frescobaldi_app/widgets/schemeselector.py:63 +msgctxt "New Scheme" +msgid "&New..." +msgstr "&Nový..." + +#: frescobaldi_app/widgets/schemeselector.py:93 +msgid "Please enter a name for the new scheme:" +msgstr "Zadejte, prosím, název pro nový nákres:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Upravit zkratku" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +msgid "&No shortcut" +msgstr "Žá&dná zkratka" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +msgid "Use a &custom shortcut:" +msgstr "Použít &vlastní zkratku:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "Náhradní #{num}:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "Základní zkratka:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "Zde můžete upravit zkratky pro {name}" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "Žádná" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "Použít &výchozí zkratku ({name})" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Klepněte na toto tlačítko několikrát, abyste nastavili tempo." + +#: frescobaldi_app/widgets/urlrequester.py:75 +msgid "Open file dialog" +msgstr "Otevřít souborový dialog" + +#: frescobaldi_app/widgets/urlrequester.py:119 +msgid "Select a directory" +msgstr "Vybrat adresář" + +#: frescobaldi_app/widgets/urlrequester.py:121 +msgid "Select a file" +msgstr "Vybrat soubor" + +#, fuzzy +#~ msgid "Edit..." +#~ msgstr "Tisk..." + +#, fuzzy +#~ msgid "Remove" +#~ msgstr "Odstranit nožky not" + +#~ msgid "Copyright (c) 2008-2010, Wilbert Berendsen" +#~ msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your name" +#~ msgstr "Pavel Fric" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "i18n@frescobaldi.org" +#~ msgstr "fripohled.blogspot.com" + +#~ msgid "Session to start" +#~ msgstr "Začít sezení" + +#~ msgid "Start a new instance" +#~ msgstr "Začít nový příklad" + +#~ msgid "Try to use smart line and column numbers" +#~ msgstr "Zkusit použít chytrá čísla řádků a sloupců" + +#~ msgid "LilyPond files to open, may also be textedit URLs" +#~ msgstr "" +#~ "Otevřít soubory LilyPond. Mohou to být také textově upravené internetové " +#~ "adresy" + +#~ msgid "Left Sidebar" +#~ msgstr "Levá zpráva" + +#~ msgid "Right Sidebar" +#~ msgstr "Pravá zpráva " + +#~ msgid "Top Sidebar" +#~ msgstr "Zpráva nahoře" + +#~ msgid "Bottom Sidebar" +#~ msgstr "Zpráva dole" + +#~ msgid "Show Path" +#~ msgstr "Ukázat cestu" + +#~ msgid "Show Document Tabs" +#~ msgstr "Ukázat karty dokumentu" + +#~ msgid "" +#~ "Could not find the XMLGUI container \"%1\".\n" +#~ "\n" +#~ "Probably the local ui.rc file contains errors. It is recommended to " +#~ "delete this file because elements in the user interface will be missing. " +#~ "This is the full path of the file:\n" +#~ "\n" +#~ "%2\n" +#~ msgstr "" +#~ "Nepodařilo se najít XMLGUI kontejner \"%1\".\n" +#~ "\n" +#~ "Pravděpodobně obsahuje místní soubor ui.rc chyby. Doporučuje se tento " +#~ "soubor smazat, protože v uživatelském rozhraní budou chybět nějaké prvky. " +#~ "Toto je úplná cesta k tomuto souboru:\n" +#~ "\n" +#~ "%2\n" + +#~ msgid "Please select some text first." +#~ msgstr "Nejprve, prosím, vyberte nějaký text." + +#~ msgid "Line: %1 Col: %2" +#~ msgstr "Řádek: %1 Sloupec: %2" + +#~ msgid "BLOCK" +#~ msgstr "BLOK" + +#~ msgid "Block selection mode" +#~ msgstr "Režim výběru bloku" + +#~ msgid "LINE" +#~ msgstr "ŘÁDEK" + +#~ msgid "Right-click for tab options" +#~ msgstr "Pravé klepnutí pro zobrazení voleb karet" + +#~ msgid "Please install %1" +#~ msgstr "Nainstalujte, prosím, %1" + +#~ msgid "Press the button to configure the keyboard shortcut for:" +#~ msgstr "Stiskněte tlačítko, pro které se má klávesová zkratka nastavit:" + +#~ msgid "Session" +#~ msgstr "Sezení" + +#~ msgid "Properties of this session" +#~ msgstr "Vlastnosti tohoto sezení" + +#~ msgid "Please do not use the ampersand (&) character in a session name." +#~ msgstr "V názvu sezení nepoužívejte, prosím, znak & (ampersand)" + +#~ msgid "Open %1 in external viewer" +#~ msgstr "Otevřít %1 ve vnějším prohlížeči" + +#~ msgid "(No up-to-date MIDI or PDF files available.)" +#~ msgstr "(Nejsou dostupné žádné nejnovější soubory MIDI nebo PDF.)" + +#~ msgid "" +#~ "There are no up-to-date MIDI or PDF files available. Please run LilyPond " +#~ "to create one or more output files." +#~ msgstr "" +#~ "Nejsou dostupné žádné nejnovější soubory MIDI nebo PDF. Spusťte, prosím, " +#~ "LilyPond, aby vytvořil jeden nebo více výstupních souborů." + +#~ msgid "No files to send" +#~ msgstr "Žádné soubory k odeslání" + +#~ msgid "" +#~ "There are no PDF documents to print.\n" +#~ "\n" +#~ "You probably need to run LilyPond to create or update a PDF document. If " +#~ "you are creating MIDI files, be sure you also put a \\layout { } section " +#~ "in your score, otherwise LilyPond will not create a PDF." +#~ msgstr "" +#~ "Nejsou žádné dokumenty PDF k tisku.\n" +#~ "\n" +#~ "Pravděpodobně musíte spustit LilyPond, aby vytvořil nebo obnovil dokument " +#~ "PDF. Pokud vytváříte soubory MIDI, ujistěte se, že jste do svého notového " +#~ "zápisu vložil i část \\layout { }, jinak LilyPond PDF nevytvoří." + +#~ msgid "No files to print" +#~ msgstr "Žádné soubory k tisku" + +#~ msgid "Email documents" +#~ msgstr "E-mailové dokumenty" + +#~ msgid "Please select the files you want to send:" +#~ msgstr "Vyberte, prosím, soubory, které si přejete odeslat:" + +#~ msgid "" +#~ "These are the files that are up-to-date (i.e. newer than the LilyPond " +#~ "source document). Also LilyPond files included by the source document are " +#~ "shown." +#~ msgstr "" +#~ "Jsou zde nejnovější soubory (tedy novější než je zdrojový dokument " +#~ "LilyPondu). Jsou tedy ukázány soubory LilyPondu, které jsou zahrnuty ve " +#~ "zdrojovém dokumentu." + +#~ msgid "" +#~ "Note: this PDF file has been created with embedded point-and-click URLs " +#~ "(preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the file in publish mode, because then the PDF file " +#~ "is much smaller." +#~ msgid_plural "" +#~ "Note: these PDF files have been created with embedded point-and-click " +#~ "URLs (preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the files in publish mode, because then the PDF files " +#~ "are much smaller." +#~ msgstr[0] "" +#~ "Poznámka: tento PDF soubor byl vytvořen s vloženými \"ukázat a klepnout\" " +#~ "internetovými adresami (režim náhledu), což dramaticky zvětšuje velikost " +#~ "souboru. Zvažte, prosím, že znovu necháte sestavit tento soubor ve " +#~ "vydavatelském režimu, protože pak je PDF soubor mnohem menší." +#~ msgstr[1] "" +#~ "Poznámka: tyto PDF soubory byly vytvořeny s vloženými \"ukázat a klepnout" +#~ "\" internetovými adresami (režim náhledu), což dramaticky zvětšuje " +#~ "velikost souboru. Zvažte, prosím, že znovu necháte sestavit tyto soubory " +#~ "ve vydavatelském režimu, protože pak jsou PDF soubory mnohem menší." +#~ msgstr[2] "" +#~ "Poznámka: tyto PDF soubory byly vytvořeny s vloženými \"ukázat a klepnout" +#~ "\" internetovými adresami (režim náhledu), což dramaticky zvětšuje " +#~ "velikost souboru. Zvažte, prosím, že znovu necháte sestavit tyto soubory " +#~ "ve vydavatelském režimu, protože pak jsou PDF soubory mnohem menší." + +#~ msgid "" +#~ "Note: If there are no PDF and no MIDI files, you probably need to run " +#~ "LilyPond to update those files, before sending the e-mail." +#~ msgstr "" +#~ "Poznámka: Pokud tu nejsou žádné soubory PDF a žádné soubory MIDI, " +#~ "pravděpodobně musíte LilyPond spustit, aby tyto soubory obnovil předtím, " +#~ "než pošlete e-mail." + +#~ msgid "" +#~ "These are the PDF documents that are up-to-date (i.e. newer than the " +#~ "LilyPond source document). Check the documents you want to send to the " +#~ "printer." +#~ msgstr "" +#~ "Toto jsou nejnovější soubory (tedy novější než je zdrojový dokument " +#~ "LilyPondu). Ověřte dokumenty, které chcete poslat na tiskárnu." + +#~ msgid "" +#~ "A print command (like 'lpr' or 'lp') could not be found on your system." +#~ msgstr "" +#~ "Příkaz k tisku (jako 'lpr' nebo 'lp') se ve vašem systému nalézt " +#~ "nepodařilo." + +#~ msgid "The command '%1' could not be found on your system." +#~ msgstr "Příkaz '%1' se ve vašem systému nalézt nepodařilo." + +#~ msgid "" +#~ "The command below has been run, but exited with a return code %1.\n" +#~ "\n" +#~ "%2" +#~ msgstr "" +#~ "Příkaz dole byl spuštěn, ale skončil s návratovým kódem %1.\n" +#~ "\n" +#~ "%2" + +#~ msgid "Create blank staff paper" +#~ msgstr "Vytvořit prázdný papír s notovou osnovou" + +#~ msgid "Choose what kind of empty staves you want to create." +#~ msgstr "Vyberte, jaký druh prázdných notových osnov chcete vytvořit." + +#~ msgid "Choose which action happens when clicking \"Ok\"." +#~ msgstr "Vyberte, která činnost se provede, když klepnete na \"OK\"." + +#~ msgid "Preview the empty staff paper." +#~ msgstr "Náhled na papír s prázdnou notovou osnovu." + +#~ msgid "Click to see more settings." +#~ msgstr "Klepněte pro zobrazení více nastavení." + +#~ msgid "Print Bar Lines" +#~ msgstr "Tisknout taktové čáry" + +#~ msgid "Bars per line:" +#~ msgstr "Taktů na čáru:" + +#~ msgid "Blank staff paper preview" +#~ msgstr "Náhled na papír s prázdnou notovou osnovu" + +#~ msgid "No PDF was created." +#~ msgstr "Nebylo vytvořeno žádné PDF." + +#~ msgid "Open in PDF viewer" +#~ msgstr "Otevřít v prohlížeči PDF" + +#~ msgid "Print staff paper" +#~ msgstr "Vytisknout prázdný papír s notovou osnovou" + +#~ msgid "Copy LilyPond code to editor" +#~ msgstr "Kopírovat kód LilyPondu do editoru" + +#~ msgid "Clef:" +#~ msgstr "Klíč:" + +#~ msgid "Single Staff" +#~ msgstr "Jednoduchá notová osnova" + +#~ msgid "Systems per page:" +#~ msgstr "Osnov na stranu:" + +#~ msgid "Clefs" +#~ msgstr "Klíče" + +#~ msgid "Piano Staff" +#~ msgstr "Klavírní notová osnova" + +#~ msgid "Organ Staff" +#~ msgstr "Varhanní notová osnova" + +#~ msgid "Staves per system:" +#~ msgstr "Notových osnov na osnovu:" + +#~ msgid "Clefs:" +#~ msgstr "Klíče:" + +#~ msgid "" +#~ "To configure clefs, first set the number of staves per system. Then enter " +#~ "as many letters (S, A, T or B) as there are staves.\n" +#~ "\n" +#~ "S or A: treble clef,\n" +#~ "T: treble clef with an \"8\" below,\n" +#~ "B: bass clef\n" +#~ "\n" +#~ "So when you want to create music paper for a four-part mixed choir score, " +#~ "first set the number of staves per system to 4. Then enter \"SATB" +#~ "\" (without the quotes) here." +#~ msgstr "" +#~ "Pro nastavení klíčů, nastavte nejprve počet notových osnov na osnovu. Pak " +#~ "zadejte tolik písmen, (S, A, T nebo B), kolik je notových osnov.\n" +#~ "\n" +#~ "S nebo A: houslový klíč,\n" +#~ "T: houslový klíč s \"8\" pod,\n" +#~ "B: basový klíč\n" +#~ "\n" +#~ "Takže když chcete vytvořit notový papír pro notový zápis složený ze čtyř " +#~ "sborových částí, nastavte nejprve počet notových osnov na osnovu na 4. " +#~ "Potom zde zadejte \"SATB\" (bez uvozovek)." + +#~ msgid "Choir Staff" +#~ msgstr "Sbor notová osnova" + +#~ msgid "Custom Staff" +#~ msgstr "Vlastní notová osnova" + +#~ msgid "Space below:" +#~ msgstr "Mezera pod:" + +#~ msgid "Please select a music expression, enclosed in << ... >> or { ... }." +#~ msgstr "Vyberte, prosím, hudební výraz, uzavřený v << ... >> nebo { ... }." + +#~ msgid "Please enter a start pitch and a destination pitch:" +#~ msgstr "Zadejte, prosím, počáteční výšku a cílovou výšku:" + +#~ msgid "Transpose from:" +#~ msgstr "Převést z:" + +#~ msgid "to:" +#~ msgstr "do:" + +#~ msgid "Install" +#~ msgstr "Nainstalovat" + +#~ msgid "Download LilyPond" +#~ msgstr "Stáhnout LilyPond" + +#~ msgid "" +#~ "With this tool you can download packaged binary releases of LilyPond for " +#~ "your operating system." +#~ msgstr "" +#~ "S tímto nástrojem můžete stáhnout zabalená binární vydání LilyPondu " +#~ "určená pro váš operační systém." + +#~ msgid "Select the LilyPond version you want to download." +#~ msgstr "Vyberte, prosím, verzi LilyPondu, kterou si přejete stáhnout." + +#~ msgid "" +#~ "Select a writable directory you want to install LilyPond to.\n" +#~ "(A version-numbered directory will be created in this directory.)" +#~ msgstr "" +#~ "Vyberte zapisovatelný adresář, do kterého si přejete LilyPond " +#~ "nainstalovat.\n" +#~ "(V tomto adresáři bude vytvořen adresář označený číslem verze.)" + +#~ msgid "Install into:" +#~ msgstr "Nainstalovat do:" + +#~ msgid "Details" +#~ msgstr "Podrobnosti" + +#~ msgid "The website where LilyPond binaries can be downloaded." +#~ msgstr "" +#~ "Internetové stránky, z nichž lze stáhnout binární soubory LilyPondu." + +#~ msgid "Download from:" +#~ msgstr "Stáhnout z:" + +#~ msgid "Machine type:" +#~ msgstr "Typ stroje:" + +#~ msgid "" +#~ "This is the URL to the package that will be downloaded and installed.\n" +#~ "You can also browse to other places to select a LilyPond package." +#~ msgstr "" +#~ "Toto je adresa (URL) vedoucí k balíčku, který bude stažen a " +#~ "nainstalován.\n" +#~ "Také můžete jít na jiná místa, kde můžete vybrat balíček s LilyPondem." + +#~ msgid "Package Url:" +#~ msgstr "Adresa (URL) balíčku:" + +#~ msgid "Downloading directory listing..." +#~ msgstr "Stahuje se výpis obsahu adresáře..." + +#~ msgid "No packages found. You can browse to a package manually." +#~ msgstr "Nebyly nalezeny žádné balíčky. Můžete balíček najít ručně." + +#~ msgid "Latest Development Version (%1)" +#~ msgstr "Poslední vývojářská verze (%1)" + +#~ msgid "Latest Stable Version (%1)" +#~ msgstr "Poslední stálá verze (%1)" + +#~ msgid "Downloading %1..." +#~ msgstr "Stahuje se %1..." + +#~ msgid "Download cancelled." +#~ msgstr "Stahování bylo zrušeno." + +#~ msgid "Download failed: %1" +#~ msgstr "Stahování selhalo: %1" + +#~ msgid "" +#~ "LilyPond %1 seems already to be installed in %2.\n" +#~ "\n" +#~ "Do you want to use it or to remove and re-install?" +#~ msgstr "" +#~ "Zdá se, že LilyPond %1 je již nainstalován v %2.\n" +#~ "\n" +#~ "Chcete jej používat, nebo jej chcete odstranit a nainstalovat znovu?" + +#~ msgid "Use existing LilyPond" +#~ msgstr "Použít stávající LilyPond" + +#~ msgid "Remove and re-install" +#~ msgstr "Odstranit a nainstalovat znovu" + +#~ msgid "Unpacking %1..." +#~ msgstr "Rozbaluje se %1..." + +#~ msgid "Unpacking finished." +#~ msgstr "Rozbalování bylo dokončeno." + +#~ msgid "Unpacking failed." +#~ msgstr "Rozbalování selhalo." + +#~ msgid "" +#~ "An error occurred:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Vyskytla se chyba:\n" +#~ "\n" +#~ "%1" + +#~ msgid "Expansion Manager" +#~ msgstr "Správce rozšíření " + +#~ msgid "" +#~ "This is the list of defined expansions.\n" +#~ "\n" +#~ "Click on a row to see or change the associated text. Doubleclick a " +#~ "shortcut or its description to change it. You can also press F2 to edit " +#~ "the current shortcut.\n" +#~ "\n" +#~ "Use the buttons below to add or remove expansions.\n" +#~ "\n" +#~ "There are two ways to use the expansion: either type the shortcut in the " +#~ "text and then call the Expand function, or just call the Expand function " +#~ "(default shortcut: Ctrl+.), choose the expansion from the list and press " +#~ "Enter or click Ok." +#~ msgstr "" +#~ "Toto je seznam stanovených rozšíření.\n" +#~ "\n" +#~ "Klepněte na řádek, abyste se podíval nebo změnil související text. " +#~ "Klepněte dvakrát na zkratku nebo na její popis, abyste ji/jej změnil. " +#~ "Také můžete stisknout funkční klávesu F2, abyste upravil aktuální " +#~ "zkratku.\n" +#~ "\n" +#~ "Použijte níže uvedená tlačítka, abyste přidal anebo odstranil rozšíření.\n" +#~ "\n" +#~ "Jsou dva způsoby pro použití rozšíření: buď napíšete zkratku v textu, a " +#~ "potom vyvoláte rozšiřovací funkci, nebo prostě vyvoláte rozšiřovací " +#~ "funkci (vychozí klávesová zkratka: Ctrl+.), vyberete rozšíření ze seznamu " +#~ "a stisknete Enter nebo klepnete na tlačítko OK." + +#~ msgid "" +#~ "This is the text associated with the selected shortcut. Some characters " +#~ "have special meaning:" +#~ msgstr "" +#~ "Toto je text spojený s vybranou zkratkou. Některé znaky mají zvláštní " +#~ "význam:" + +#~ msgid "Translate the following pitch." +#~ msgstr "Přesuňte následující výšku tónu." + +#~ msgid "New Item" +#~ msgstr "Nová položka" + +#~ msgid "" +#~ "Another expansion already uses this name.\n" +#~ "\n" +#~ "Please use a different name." +#~ msgstr "" +#~ "Tento název již používá jiné rozšíření.\n" +#~ "\n" +#~ "Použijte, prosím, jiný název." + +#~ msgid "" +#~ "Please only use letters, numbers and the underscore character in the " +#~ "expansion name." +#~ msgstr "" +#~ "V názvu rozšíření použijte, prosím, pouze písmena, číslice a podtržítka." + +#~ msgid "Please don't leave the description empty." +#~ msgstr "Neopusťte, prosím, popis prázdný." + +#~ msgid "" +#~ "Could not find any hyphenation dictionaries.\n" +#~ "\n" +#~ "Please install a package containing some and/or or configure the search " +#~ "path to find them in the Frescobaldi settings under \"Paths.\"" +#~ msgstr "" +#~ "Nepodařilo se nalézt žádné slovníky s dělením slov.\n" +#~ "\n" +#~ "Nainstalujte, prosím, balíček, který bude nějaký obsahovat, a/nebo v " +#~ "nastavení pro Frescobaldi, pod \"Cesty\", nastavte vyhledávací cestu, aby " +#~ "byly slovníky nalezeny." + +#~ msgid "Larger text" +#~ msgstr "Větší text" + +#~ msgid "Smaller text" +#~ msgstr "Menší text" + +#~ msgid "Up one level" +#~ msgstr "O jednu úroveň výše" + +#~ msgid "Index" +#~ msgstr "Rejstřík" + +#~ msgid "Copy &Link" +#~ msgstr "Kopírovat &odkaz" + +#~ msgid "Open Link in &New Window" +#~ msgstr "Otevřít odkaz v &novém okně" + +#~ msgid "Open Document in &New Window" +#~ msgstr "Otevřít dokument v &novém okně" + +#~ msgid "Loading..." +#~ msgstr "Nahrává se ..." + +#~ msgid "LilyPond Command Index" +#~ msgstr "Rejstřík příkazů pro LilyPond" + +#~ msgid "Learning Manual" +#~ msgstr "Příručka pro učení se" + +#~ msgid "Learning Manual Index" +#~ msgstr "Rejstřík k příručce pro učení se" + +#~ msgid "Internals Reference" +#~ msgstr "Odkaz na vnitřní části" + +#~ msgid "The %1 context" +#~ msgstr "%1 souvislost" + +#~ msgid "The %1 layout object" +#~ msgstr "%1 předmět rozvržení" + +#~ msgid "" +#~ "Where to add articulations et cetera: above or below the staff or in the " +#~ "default position." +#~ msgstr "" +#~ "Kam přidat artikulace atd.: nad nebo pod osnovu nebo ve výchozí poloze" + +#~ msgid "Click an articulation sign to add it to your document." +#~ msgstr "Klepněte na značku artikulace pro její přidání do vašeho dokumentu." + +#~ msgid "" +#~ "If you select some music first, the articulation will be added to all " +#~ "notes in the selection." +#~ msgstr "" +#~ "Pokud nejprve vyberete nějaké noty, artikulace bude přidána ke všem notám " +#~ "ve výběru." + +#~ msgid "Click a dynamic sign to add it to your document." +#~ msgstr "" +#~ "Klepněte na značku pro dynamiku pro její přidání do vašeho dokumentu." + +#~ msgid "" +#~ "If you select some music first, dynamic spanners will be added the " +#~ "selected fragment." +#~ msgstr "" +#~ "Pokud nejprve vyberete nějaké noty, natahovače dynamiky budou přidány k " +#~ "vybrané části." + +#~ msgid "" +#~ "If you have selected some music and you click a sign after a spanner, the " +#~ "sign will terminate the spanner." +#~ msgstr "" +#~ "Pokud jste vybral nějaké noty, a klepnete na značku po natahovači, značka " +#~ "ukončí natahovač." + +#~ msgid "These spanners need a music fragment to be selected." +#~ msgstr "Tyto natahovače potřebují, aby byla vybrána část not." + +#~ msgid "Arpeggios are used with chords with multiple notes." +#~ msgstr "Arpeggia se používají u akordů s více notami." + +#~ msgid "" +#~ "Glissandos are attached to a note and automatically extend to the next " +#~ "note." +#~ msgstr "" +#~ "Glissanda jsou přidána k notě a automaticky rozšířena na další notu." + +#~ msgid "Run LilyPond (preview)" +#~ msgstr "Spustit LilyPond (náhled)" + +#~ msgid "Run LilyPond (publish)" +#~ msgstr "Spustit LilyPond (vydat)" + +#~ msgid "Run LilyPond (custom)..." +#~ msgstr "Spustit LilyPond (vlastní)..." + +#~ msgid "Interrupt LilyPond Job" +#~ msgstr "Přerušit práci programu LilyPond" + +#~ msgid "Email Documents..." +#~ msgstr "Poslat dokumenty e-mailem..." + +#~ msgid "Cut selection and assign it to a LilyPond variable." +#~ msgstr "Vyjmout výběr a přidělit jej proměnné programu LilyPond." + +#~ msgid "Repeat the last music expression (note or chord)." +#~ msgstr "Opakovat poslední hudební výraz (notu nebo akord)." + +#~ msgid "Insert or Manage Expansions..." +#~ msgstr "Vložit nebo spravovat rozšíření..." + +#~ msgid "Expand last word or open the expansions dialog." +#~ msgstr "Rozšířit poslední slovo nebo otevřít dialog rozšíření." + +#~ msgid "Insert special characters." +#~ msgstr "Vložit zvláštní znaky." + +#~ msgid "Add to Expansions" +#~ msgstr "Přidat do rozšíření" + +#~ msgid "Go to the next blank line." +#~ msgstr "Přejít na další prázdný řádek." + +#~ msgid "Previous blank line" +#~ msgstr "Předchozí prázdný řádek" + +#~ msgid "Go to the previous blank line." +#~ msgstr "Přejít na předchozí prázdný řádek." + +#~ msgid "Select to next blank line" +#~ msgstr "Vybrat po další prázdný řádek" + +#~ msgid "" +#~ "Selects text from the current position down to and including the next " +#~ "blank line." +#~ msgstr "Vybere text od nynější polohy dolů včetně dalšího prázdného řádku." + +#~ msgid "Select to previous blank line" +#~ msgstr "Vybrat po předchozí prázdný řádek" + +#~ msgid "" +#~ "Selects text from the current position up to right after the previous " +#~ "blank line." +#~ msgstr "Vybere text od nynější polohy nahoru až po předchozí prázdný řádek." + +#~ msgid "Move selection to next blank line" +#~ msgstr "Posunout výběr k dalšímu prázdnému řádku" + +#~ msgid "Moves selected block to next blank line." +#~ msgstr "Posune vybraný blok k dalšímu prázdnému řádku." + +#~ msgid "Move selection to previous blank line" +#~ msgstr "Posunout výběr k předchozímu prázdnému řádku" + +#~ msgid "Moves selected block to previous blank line." +#~ msgstr "Posune vybraný blok k předchozímu prázdnému řádku." + +#~ msgid "Single Quote" +#~ msgstr "Jednoduché uvozovky" + +#~ msgid "Double Quote" +#~ msgstr "Dvojité uvozovky" + +#~ msgid "Align" +#~ msgstr "Zarovnat" + +#~ msgid "Insert pair of braces" +#~ msgstr "Vložit dvojici svorek" + +#~ msgid "" +#~ "Your document has been modified and needs to be saved before LilyPond can " +#~ "be started.\n" +#~ "\n" +#~ "Save the document now?" +#~ msgstr "" +#~ "Váš dokument byl změněn a je třeba jej uložit předtím, než bude možné " +#~ "spustit LilyPond.\n" +#~ "\n" +#~ "Uložit dokument nyní?" + +#~ msgid "There is already a LilyPond job running for this document." +#~ msgstr "LilyPond je již spuštěn a pracuje na tomto dokumentu." + +#~ msgid "Can't process document" +#~ msgstr "Dokument nelze zpracovat" + +#~ msgid "Continue anyway?" +#~ msgstr "Přesto pokračovat?" + +#~ msgid "" +#~ "You want to run LilyPond in preview mode (with point and click enabled), " +#~ "but your document contains a command to turn point and click off." +#~ msgstr "" +#~ "Chcete LilyPond spustit v náhledovém režimu (s povolenou funkcí ukázat a " +#~ "klepnout), ale váš dokument obsahuje příkaz, který funkcí ukázat a " +#~ "klepnout vypíná." + +#~ msgid "" +#~ "You want to run LilyPond in publish mode (with point and click disabled), " +#~ "but your document contains a command to turn point and click on." +#~ msgstr "" +#~ "Chcete LilyPond spustit ve vydavatelském režimu (se zakázanou funkcí " +#~ "ukázat a klepnout), ale váš dokument obsahuje příkaz, který funkcí ukázat " +#~ "a klepnout zapíná." + +#~ msgid "Abort the running LilyPond process" +#~ msgstr "Zrušit běžící proces aplikace LilyPond" + +#~ msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" +#~ msgstr "" +#~ "Spustit LilyPond v režimu náhledu (Shift-klepnutí pro vlastní dialog)" + +#~ msgid "LilyPond has successfully compiled %1." +#~ msgstr "LilyPond úspěšně sestavil %1." + +#~ msgid "LilyPond exited with an error compiling %1." +#~ msgstr "LilyPond skončil při sestavování %1 s chybou." + +#~ msgid "" +#~ "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" +#~ msgstr "" +#~ "Zadat rytmus za použití mezerou oddělených hodnot dob trvání (např. 8. 16 " +#~ "8 4 8)" + +#~ msgid "Terminal" +#~ msgstr "Terminál" + +#~ msgid "" +#~ "Could not load the KMid part.\n" +#~ "Please install KMid 2.4.0 or higher." +#~ msgstr "" +#~ "Nepodařilo se nahrát součást KMid.\n" +#~ "Nainstalujte, prosím, KMid 2.4.0 nebo vyšší." + +#~ msgid "Show PDF Navigation Panel" +#~ msgstr "Ukázat navigační panel PDF" + +#~ msgid "Show PDF minipager" +#~ msgstr "Ukázat miniaturní PDF číslovač stran" + +#~ msgid "Configure Okular..." +#~ msgstr "Nastavit Okular..." + +#~ msgid "S&ynchronize Preview with Current Document" +#~ msgstr "S&ladit náhled se současným dokumentem" + +#~ msgid "Reload" +#~ msgstr "Nahrát znovu" + +#~ msgid "no log" +#~ msgstr "Žádný záznam o průběhu činnosti" + +#~ msgid "Only show on errors" +#~ msgstr "Ukázat pouze na chybách" + +#~ msgid "Rumor" +#~ msgstr "Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter " +#~ "from the LilyPond document." +#~ msgstr "" +#~ "Používané metrum. Ponechte 'Auto', abyste nechali na Frescobaldi " +#~ "stanovení metra z LilyPond dokumentu." + +#~ msgid "Quantize:" +#~ msgstr "Kvantovat:" + +#~ msgid "The shortest note duration to use." +#~ msgstr "Použít tuto nejkratší dobu trvání noty." + +#~ msgid "Record LilyPond input note by note, without durations." +#~ msgstr "Nahrát LilyPond vstup notu po notě bez dob trvání." + +#~ msgid "Mono" +#~ msgstr "Monofonní" + +#~ msgid "Record monophonic input, without chords." +#~ msgstr "Nahrát monofonní vstup bez akordů." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let Frescobaldi determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Počet posuvek. Záporné číslo určuje počet snížení o půltón. Ponechte " +#~ "'Auto', abyste nechali na Frescobaldi stanovení předznamenání z LilyPond " +#~ "dokumentu." + +#~ msgid "Meter:" +#~ msgstr "Metrum:" + +#~ msgid "Key:" +#~ msgstr "Tónina:" + +#~ msgid "Configure..." +#~ msgstr "Nastavit..." + +#~ msgid "Adjust more settings, like MIDI input and output." +#~ msgstr "Upravovat více nastavení jako MIDI vstup a výstup." + +#~ msgid "Set these settings as default." +#~ msgstr "Nastavit nastavení na výchozí." + +#~ msgid "Found rumor version %1." +#~ msgstr "Nalezena verze programu Rumor %1." + +#~ msgid "Could not find Rumor: %1" +#~ msgstr "Rumor nebyl nalezen: %1." + +#~ msgid "Settings have been saved." +#~ msgstr "Byla uložena nastavení." + +#~ msgid "Record" +#~ msgstr "Nahrávat" + +#~ msgid "Start or stop Rumor MIDI-recording." +#~ msgstr "Začít nebo zastavit Rumor MIDI nahrávání." + +#~ msgid "Rumor is recording, press ESC to stop." +#~ msgstr "Rumor nahrává. Stiskněte ESC pro zastavení nahrávání." + +#~ msgid "Rumor stopped." +#~ msgstr "Rumor byl zastaven." + +#~ msgid "TiMidity" +#~ msgstr "TiMidity" + +#~ msgid "Start or stop the TiMidity ALSA MIDI client." +#~ msgstr "Začít nebo zastavit ALSA MIDI klienta TiMidity." + +#~ msgid "Rumor Settings" +#~ msgstr "Nastavení programu Rumor." + +#~ msgid "OSS device %1" +#~ msgstr "Zařízení OSS %1" + +#~ msgid "" +#~ "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard " +#~ "of your computer." +#~ msgstr "" +#~ "Použít MIDI vstup. Jestliže chcete hrát s pomocí klávesnice vašeho " +#~ "počítače, vyberte 'klávesnice'." + +#~ msgid "MIDI output:" +#~ msgstr "MIDI výstup:" + +#~ msgid "MIDI output to use." +#~ msgstr "Použít MIDI výstup." + +#~ msgid "The LilyPond language you want Rumor to output the pitches in." +#~ msgstr "" +#~ "Jazyk programu LilyPond, kterým chcete, aby Rumor prováděl výstup výšek " +#~ "tónů." + +#~ msgid "Explicit durations" +#~ msgstr "Otevřená doba trvání" + +#~ msgid "" +#~ "Add a duration after every note, even if it is the same as the preceding " +#~ "note." +#~ msgstr "" +#~ "Přidat dobu trvání po každé notě, i když je stejná, jako byla " +#~ "předcházející nota." + +#~ msgid "Absolute pitch" +#~ msgstr "Naprostá výška tónu" + +#~ msgid "Use absolute pitches instead of relative." +#~ msgstr "Použít naprostou výšku tónu namísto poměrné." + +#~ msgid "No barlines" +#~ msgstr "Žádné taktové čáry" + +#~ msgid "Filter the barlines out of Rumor's output." +#~ msgstr "Filtrovat taktové čáry pryč z výstupu programu Rumor." + +#~ msgid "No dots" +#~ msgstr "Žádné tečky" + +#~ msgid "Do not use dotted notes, but ties instead." +#~ msgstr "Nepoužívat noty s tečkami, ale místo nich používat ligatury." + +#~ msgid "Legato" +#~ msgstr "Legáto" + +#~ msgid "Do not use rests, but give all notes the maximum length." +#~ msgstr "Nepoužívat pomlky, ale dát všem notám největší délku." + +#~ msgid "Strip leading and trialing rests from output." +#~ msgstr "Odebrat z výstupu pomlky před a za." + +#~ msgid "Guile scripts to load:" +#~ msgstr "Guile skripty k nahrání:" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. Check " +#~ "\"What's this\" for more information." +#~ msgstr "" +#~ "Zde si můžete vybrat, které Guile skripty chcete, aby program Rumor " +#~ "nahrál. Pro další informace se podívejte na \"Co je toto\"." + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %1. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Zde si můžete vybrat, které Guile skripty chcete, aby program Rumor " +#~ "nahrál. Můžete přidat vaše vlastní texty tím, že je vložíte do %1. Pokud " +#~ "by první řádek vašeho skriptu začínal středníkem (;), bude tento řádek " +#~ "ukazován jako popis." + +#~ msgid "publish mode" +#~ msgstr "Režim vydávání" + +#~ msgid "LilyPond %1 [%2] starting (%3)..." +#~ msgstr "LilyPond %1 [%2] začíná (%3)..." + +#~ msgid "LilyPond [%1] starting (%2)..." +#~ msgstr "LilyPond [%1] začíná (%2)..." + +#~ msgid "LilyPond [%1] finished (%2)." +#~ msgstr "LilyPond [%1] skončil (%2)." + +#~ msgid "Select which LilyPond version you want to run:" +#~ msgstr "Vyberte, prosím, kterou verzi LilyPondu si přejete spustit:" + +#~ msgid "LilyPond %1" +#~ msgstr "LilyPond %1" + +#~ msgid "Automatic LilyPond Version (determined from document)." +#~ msgstr "Automatická verze LilyPondu (určená z dokumentu)." + +#~ msgid "Path: %1" +#~ msgstr "Cesta: %1" + +#~ msgid "LilyPond (version unknown)" +#~ msgstr "LilyPond (neznámá verze)" + +#~ msgid "" +#~ "Use LilyPond (version unknown)\n" +#~ "Path: %1" +#~ msgstr "" +#~ "Použít LilyPond (neznámá verze)\n" +#~ "Cesta: %1" + +#~ msgid "Save LilyPond Log as" +#~ msgstr "Uložit zápis o průběhu činnosti LilyPondu jako" + +#~ msgid "" +#~ "Could not save LilyPond log:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Nepodařilo se uložit zápis o průběhu činnosti LilyPondu:\n" +#~ "\n" +#~ "%1" + +#~ msgid "LilyPond-related settings" +#~ msgstr "Nastavení vztahující se k LilyPondu" + +#~ msgid "LilyPond version to use:" +#~ msgstr "Verze LilyPondu, která se má použít:" + +#~ msgid "" +#~ "Here you can set a fixed LilyPond version to run on documents in this " +#~ "session.\n" +#~ "\n" +#~ "The LilyPond version selected here is run by default on your documents, " +#~ "and it's also used by the \"Insert Version\" command." +#~ msgstr "" +#~ "Zde můžete nastavit pevnou verzi LilyPondu, která se bude spouštět u " +#~ "dokumentů v tomto sezení.\n" +#~ "\n" +#~ "Zde vybraná verze LilyPondu je u vašich dokumentů spouštěna jako výchozí " +#~ "a je používána i příkazem \"Vložit verzi\"." + +#~ msgid "Configure" +#~ msgstr "Nastavit" + +#~ msgid "General Frescobaldi Preferences" +#~ msgstr "Obecné volby programu Frescobaldi" + +#~ msgid "Paths to programs or data used by Frescobaldi" +#~ msgstr "Cesty k programům nebo datům používaným programem Frescobaldi" + +#~ msgid "Rumor MIDI input" +#~ msgstr "MIDI vstup Rumor" + +#~ msgid "Rumor MIDI input plugin settings" +#~ msgstr "Nastavení přídavného modulu pro MIDI vstup Rumor" + +#~ msgid "Editor Component" +#~ msgstr "Nastavení editoru" + +#~ msgid "Editor Component Options" +#~ msgstr "Volby pro nastavení editoru" + +#~ msgid "LilyPond version number to use for new documents" +#~ msgstr "" +#~ "Verze programu LilyPond, která se bude používat v nových dokumentech" + +#~ msgid "Use version number of installed LilyPond" +#~ msgstr "Použít číslo verze nainstalovaného LilyPondu" + +#~ msgid "Use version number of last convert-ly rule" +#~ msgstr "Použít číslo verze posledního pravidla convert-ly" + +#~ msgid "Enter a valid LilyPond version number, e.g. 2.12.0" +#~ msgstr "Zadat platné číslo verze programu LilyPond, např. 2.12.0" + +#~ msgid "Warnings and Notifications" +#~ msgstr "Varování a oznámení" + +#~ msgid "Warn when a document contains a conflicting point and click setting" +#~ msgstr "" +#~ "Varovat, když dokument obsahuje střetávající se nastavení pro ukázat a " +#~ "klepnout" + +#~ msgid "Warn when a document needs to be saved before LilyPond is run" +#~ msgstr "" +#~ "Varovat, když je třeba, aby byl dokument uložen předtím, než je LilyPond " +#~ "spuštěn" + +#~ msgid "Warn when saving a session would overwrite another" +#~ msgstr "Varovat, když by uložení sezení přepsalo jiné sezení" + +#~ msgid "Point and Click" +#~ msgstr "Ukázat a klepnout" + +#~ msgid "Enable Point and Click" +#~ msgstr "Povolit ukázat a klepnout" + +#~ msgid "" +#~ "Click this button if Point and Click does not work. See Shift+F1 (What's " +#~ "This) for more information." +#~ msgstr "" +#~ "Na toto tlačítko klepněte, když vlastnost ukázat a klepnout nepracuje. " +#~ "Pro další informace se podívejte na \"Co je toto\" (Shift+F1)." + +#~ msgid "" +#~ "On its first run, Frescobaldi tries to auto-configure Okular (which " +#~ "provides the PDF preview) to call Frescobaldi when a clickable object is " +#~ "clicked.\n" +#~ "\n" +#~ "But this setting can get lost when you move Frescobaldi to a different " +#~ "location or when other applications reconfigure Okular.\n" +#~ "\n" +#~ "Click this button to configure Frescobaldi as 'custom editor' inside " +#~ "Okular. This works best when all instances of Okular are closed and the " +#~ "PDF preview has not yet been opened." +#~ msgstr "" +#~ "Při svém prvním spuštění se Frescobaldi pokouší automaticky nastavit " +#~ "program Okular, jenž poskytuje náhled na soubory PDF, aby Frescobaldi " +#~ "volal, když je klepnuto na klepnutelný předmět.\n" +#~ "\n" +#~ "Ale toto nastavení se může ztratit, přesunete-li Frescobaldi do jiného " +#~ "umístění, nebo když jiné programy Okular přenastaví.\n" +#~ "\n" +#~ "Klepněte na toto tlačítko pro nastavení Frescobaldi jako \"uživatelského " +#~ "editoru\" v Okularu. Nejlépe to pracuje, když jsou všechny běhy Okularu " +#~ "zavřeny a náhled na PDF ještě nebyl otevřen." + +#~ msgid "" +#~ "The Okular PDF preview has been reconfigured.\n" +#~ "\n" +#~ "If you already opened the PDF preview, restart Frescobaldi for the new " +#~ "settings to take effect." +#~ msgstr "" +#~ "Náhled na PDF v Okularu byl přenastaven.\n" +#~ "\n" +#~ "Pokud jste již náhled na PDF otevřel, spusťte Frescobaldi znovu, aby se " +#~ "nová nastavení projevila." + +#~ msgid "PDF Viewer:" +#~ msgstr "Prohlížeč PDF:" + +#~ msgid "PDF Viewer" +#~ msgstr "Prohlížeč PDF" + +#~ msgid "(leave empty for operating system default)" +#~ msgstr "(ponechat prázdné pro výchozí nastavení operačního systému)" + +#~ msgid "MIDI Player:" +#~ msgstr "Přehrávač MIDI:" + +#~ msgid "Url:" +#~ msgstr "Adresa (URL):" + +#~ msgid "Url or path to the LilyPond documentation." +#~ msgstr "Adresa nebo cesta k dokumentaci programu LilyPond." + +#~ msgid "Lyrics Hyphenation" +#~ msgstr "Dělení slov v textu" + +#~ msgid "" +#~ "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " +#~ "KOffice, etc, one per line. If you leave out the starting slash, the " +#~ "prefixes from the KDEDIRS environment variable are prepended." +#~ msgstr "" +#~ "Cesty, které se budou prohledávat kvůli slovníkům dělení slov používaných " +#~ "v programech OpenOffice.org, Scribus, KOffice a dalších; jedna cesta na " +#~ "řádek. Jestliže vynecháte počáteční lomítko, jsou na začátek přidány " +#~ "předpony z proměnné prostředí KDEDIRS." + +#~ msgid "Commands used by the Rumor MIDI input module" +#~ msgstr "Příkazy používané modulem pro MIDI vstup Rumor" + +#~ msgid "Name or full path of the Rumor program." +#~ msgstr "Název nebo úplná cesta k programu Rumor." + +#~ msgid "" +#~ "Name or full path of the aconnect program (part of ALSA, for MIDI input " +#~ "and playback using Rumor)." +#~ msgstr "" +#~ "Název nebo úplná cesta k programu aconnect (část ALSA, určen pro MIDI " +#~ "vstup a přehrávání s využitím programu Rumor)." + +#~ msgid "" +#~ "Full command to start Timidity (or any other program) as an ALSA MIDI " +#~ "client." +#~ msgstr "" +#~ "Úplný příkaz pro spuštění Timidity (nebo jakéhokoli jiného programu) jako " +#~ "ALSA MIDI klienta." + +#~ msgid "Close Button" +#~ msgstr "Tlačítko pro zavření" + +#~ msgid "Large Tabs" +#~ msgstr "Velké karty" + +#~ msgid "Tabs can be moved" +#~ msgstr "Karty mohou být přesunuty" + +#~ msgid "Download..." +#~ msgstr "Stáhnout..." + +#~ msgid "Download new binary LilyPond releases." +#~ msgstr "Stáhnout nová vydání spustitelného souboru LilyPondu." + +#~ msgid "LilyPond Command" +#~ msgstr "Příkaz pro LilyPond" + +#~ msgid "Choose a session." +#~ msgstr "Vybrat sezení." + +#~ msgid "Choose..." +#~ msgstr "Vybrat..." + +#~ msgid "Your document has already a LilyPond version statement." +#~ msgstr "Váš dokument má již uvedenu verzi programu LilyPond." + +#~ msgid "Version already set" +#~ msgstr "Verze je již nastavena" + +#~ msgid "" +#~ "Can't determine the version of LilyPond. Please check your LilyPond " +#~ "installation." +#~ msgstr "" +#~ "Nelze určit verzi programu LilyPond. Zkontrolujte, prosím, vaši instalaci " +#~ "programu LilyPond. " + +#~ msgid "" +#~ "Can't determine the LilyPond version of the current document. Please add " +#~ "a \\version statement with the correct version." +#~ msgstr "" +#~ "Nelze určit verzi aktuálního dokumentu programu LilyPond. Přidejte, " +#~ "prosím, \\správné označení verze." + +#~ msgid "This LilyPond document is already up-to-date." +#~ msgstr "Tento LilyPond dokument je již aktuální." + +#~ msgid "" +#~ "The document has been processed with convert-ly. You'll find the messages " +#~ "of convert-ly in a comment block at the end. You still may have to edit " +#~ "some parts manually." +#~ msgstr "" +#~ "Tento dokument byl zpracován s convert-ly. Hlášení convert-ly naleznete v " +#~ "komentáři na konci. Je možnéže ještě budete muset upravovat některé části " +#~ "ručně." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %1" +#~ msgstr "" +#~ "Tento dokument byl zpracován s convert-ly, ale zůstal nezměněn. Toto " +#~ "hlášení bylo podáno convert-ly: %1" + +#~ msgid "The tempo in beats per minute." +#~ msgstr "Tempo v úderech za minutu." + +#~ msgid "Treble" +#~ msgstr "Houslový klíč" + +#~ msgid "Treble 8" +#~ msgstr "Houslový klíč 8" + +#~ msgid "Tab clef" +#~ msgstr "Tabulaturový klíč" + +#~ msgid "No Clef" +#~ msgstr "Žádný klíč" + +#~ msgid "Add selected part to your score." +#~ msgstr "Přidat vybraný part do notového zápisu" + +#~ msgid "A tempo indication, e.g. \"Allegro.\"" +#~ msgstr "Údaj o tempu. Např. \"Allegro.\"" + +#~ msgid "Wrap score in \\book block" +#~ msgstr "Zalomit notový zápis v bloku \\book" + +#~ msgid "If checked, wraps the \\score block inside a \\book block." +#~ msgstr "Je-li zaškrtnuta tato volba, zalomí blok \\score v bloku \\book." + +#~ msgid "How many voices to put in this staff." +#~ msgstr "Kolik hlasů umístit do této notové osnovy." + +#~ msgid "Basso continuo" +#~ msgstr "Generální bas (Basso continuo)" + +#~ msgid "Guitar" +#~ msgstr "Kytara" + +#~ msgid "Oboe d'Amore" +#~ msgstr "Hoboj d'amore" + +#~ msgid "English Horn" +#~ msgstr "Anglický roh" + +#~ msgid "Mezzo soprano" +#~ msgstr "Mezzosoprán" + +#~ msgid "Open PDF" +#~ msgstr "Otevřít PDF" + +#~ msgid "Email..." +#~ msgstr "E-mail..." + +#~ msgid "" +#~ "Printing failed: %1\n" +#~ "\n" +#~ "The print command %2 does probably not exist. Please check your settings." +#~ msgstr "" +#~ "Tisk selhal: %1\n" +#~ "\n" +#~ "Pravděpodobně neexistuje příkaz pro tisk %2. Zkontrolujte, prosím, vaše " +#~ "nastavení." + +#~ msgid "The print command contains errors. Please check your settings." +#~ msgstr "" +#~ "Příkaz pro tisk obsahuje chyby. Zkontrolujte, prosím, vaše nastavení." + +#~ msgid "Overwrite File?" +#~ msgstr "Přepsat soubor?" + +#~ msgid "Directly print on default printer" +#~ msgstr "Tisknout přímo na výchozí tiskárně" + +#~ msgid "Space above:" +#~ msgstr "Mezera nad:" + +#~ msgid "The direction to use for the articulations." +#~ msgstr "Směr, který bude použit pro artikulace." + +#~ msgid "Your document has been modified, please save first." +#~ msgstr "Váš dokument byl upraven. Nejprve jej, prosím, uložte." + +#~ msgid "Disable the built-in PDF preview" +#~ msgstr "Znemožnit vestavěný náhled PDF" + +#~ msgid "Name or full path of the convert-ly program." +#~ msgstr "Název nebo úplná cesta k programu convert-ly" + +#~ msgid "" +#~ "Command to print a PDF file, for example lpr or kprinter. You may add " +#~ "some arguments, e.g. lpr -P myprinter." +#~ msgstr "" +#~ "Příkaz pro tisk PDF souboru; například lpr nebo kprinter. Můžete přidat " +#~ "některé nezávisle proměnné; např. lpr -P myprinter." + +#~ msgid "Expand" +#~ msgstr "Rozšířit" + +#~ msgid "Show" +#~ msgstr "Ukázat" + +#, fuzzy +#~ msgid "Paper Size A4" +#~ msgstr "Velikost papíru:" + +#, fuzzy +#~ msgid "Paper Size A5" +#~ msgstr "Velikost papíru:" + +#, fuzzy +#~ msgid "Paper Size Letter" +#~ msgstr "Velikost papíru:" + +#, fuzzy +#~ msgid "Stem Up" +#~ msgstr "Udělat krok" + +#, fuzzy +#~ msgid "Stem Down" +#~ msgstr "Dolů" + +#, fuzzy +#~ msgid "Lyric Stanza" +#~ msgstr "Sloka:" + +#, fuzzy +#~ msgid "Midi section" +#~ msgstr "Věnování" + +#, fuzzy +#~ msgid "With: instrumentName" +#~ msgstr "Názvy nástrojů" + +#, fuzzy +#~ msgid "With: shortInstrumentName" +#~ msgstr "Názvy nástrojů" + +#, fuzzy +#~ msgid "New Lyrics" +#~ msgstr "Slova písně" + +#~ msgid "Your document currently has no filename, please save first." +#~ msgstr "Váš dokument v současnosti nemá název. Nejprve jej, prosím, uložte." + +#~ msgid "" +#~ "Sorry, support for remote files is not yet implemented.\n" +#~ "Please save your document to a local file." +#~ msgstr "" +#~ "Promiňte, ale podpora vzdálených souborů ještě není uskutečněna.\n" +#~ "Uložte, prosím, váš dokument jako místní soubor." + +#~ msgid "Already Running" +#~ msgstr "Již běží" Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/de.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/de.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/de.po frescobaldi-2.0.0/frescobaldi_app/po/de.po --- frescobaldi-1.2.0/frescobaldi_app/po/de.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/de.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7532 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Georg Hennig , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: frescobaldi 1.1.7\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: 2010-12-12 12:34+0100\n" +"Last-Translator: Georg Hennig \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"#-#-#-#-# de.po (frescobaldi 1.1.7) #-#-#-#-#\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.1\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "" + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +#, fuzzy +msgid "Python" +msgstr "Pfad" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +#, fuzzy +msgid "Poppler" +msgstr "Papier" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "" + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "" + +#: frescobaldi_app/about.py:87 +#, fuzzy +msgid "About" +msgstr "Auto" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "Version" + +#: frescobaldi_app/about.py:144 +#, fuzzy +msgid "Operating System" +msgstr "Andere Systeme:" + +#: frescobaldi_app/about.py:151 +#, fuzzy +msgid "Version {version}" +msgstr "Füge LilyPond-Version ein" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +#, fuzzy +msgid "A LilyPond Music Editor" +msgstr "LilyPond Musik-Editor" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "" + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "" + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "" + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "" +msgstr[1] "" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +#, fuzzy +msgid "Shortcut Conflict" +msgstr "Verknüpfung" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "" + +#: frescobaldi_app/app.py:128 +#, fuzzy +msgid "LilyPond Files" +msgstr "LilyPond-Dateien" + +#: frescobaldi_app/app.py:129 +#, fuzzy +msgid "LaTeX Files" +msgstr "Alle Dateien" + +#: frescobaldi_app/app.py:130 +#, fuzzy +msgid "DocBook Files" +msgstr "PDF-Dateien" + +#: frescobaldi_app/app.py:131 +#, fuzzy +msgid "HTML Files" +msgstr "Alle Dateien" + +#: frescobaldi_app/app.py:132 +#, fuzzy +msgid "Texinfo Files" +msgstr "Öffne Datei" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Alle Dateien" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:115 +#, fuzzy +msgid "Next Mark" +msgstr "Nächste" + +#: frescobaldi_app/bookmarkmanager.py:116 +#, fuzzy +msgid "Previous Mark" +msgstr "Vorherige" + +#: frescobaldi_app/convert_ly.py:118 +#, fuzzy +msgid "From version:" +msgstr "Füge LilyPond-Version ein" + +#: frescobaldi_app/convert_ly.py:119 +#, fuzzy +msgid "To version:" +msgstr "Version:" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "" + +#: frescobaldi_app/convert_ly.py:125 +#, fuzzy +msgid "&Changes" +msgstr "Pause" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +#, fuzzy +msgid "" +msgstr "unbekannt" + +#: frescobaldi_app/convert_ly.py:138 +#, fuzzy +msgid "Convert-ly from LilyPond {version}" +msgstr "Benutze LilyPond-Version %1" + +#: frescobaldi_app/convert_ly.py:162 +#, fuzzy +msgid "(set in document)" +msgstr "Dokumente drucken" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "" + +#: frescobaldi_app/convert_ly.py:190 +#, fuzzy +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "Konnte convert-ly nicht starten: %s" + +#: frescobaldi_app/convert_ly.py:196 +#, fuzzy +msgid "The document has not been changed." +msgstr "Das Dokument wurde zum Drucker geschickt." + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Current Document" +msgstr "&Dokument" + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Converted Document" +msgstr "Andere Dokumente schließen" + +#: frescobaldi_app/convert_ly.py:208 +#, fuzzy +msgid "Colors:" +msgstr "Komponist" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "" + +#: frescobaldi_app/convert_ly.py:211 +#, fuzzy +msgid "Deleted" +msgstr "Alle auswählen" + +#: frescobaldi_app/convert_ly.py:212 +#, fuzzy +msgid "Links:" +msgstr "Text:" + +#: frescobaldi_app/convert_ly.py:213 +#, fuzzy +msgid "First Change" +msgstr "Erste Seite:" + +#: frescobaldi_app/convert_ly.py:214 +#, fuzzy +msgid "Next Change" +msgstr "Nächste Leerzeile" + +#: frescobaldi_app/convert_ly.py:215 +#, fuzzy +msgid "Top" +msgstr "Tap" + +#: frescobaldi_app/cut_assign.py:39 +#, fuzzy +msgid "Cut and Assign" +msgstr "Ausschneiden und zuweisen" + +#: frescobaldi_app/cut_assign.py:40 +#, fuzzy +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "" +"Bitte geben Sie den Namen der Variable ein, der der ausgewählte Text " +"zugewiesen werden soll:" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +#, fuzzy +msgid "Untitled" +msgstr "Untertitel" + +#: frescobaldi_app/document.py:145 +#, fuzzy +msgid "Untitled ({num})" +msgstr "Untertitel" + +#: frescobaldi_app/documentactions.py:125 +#, fuzzy +msgid "Cut and Assign..." +msgstr "Ausschneiden und zuweisen" + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "" + +#: frescobaldi_app/documentactions.py:127 +#, fuzzy +msgid "&Automatic Indent" +msgstr "automatisch" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "" + +#: frescobaldi_app/documentactions.py:129 +#, fuzzy +msgid "&Format" +msgstr "Fermate" + +#: frescobaldi_app/documentactions.py:130 +#, fuzzy +msgid "&Update with convert-ly..." +msgstr "Mittels convert-ly aktualisieren" + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +#, fuzzy +msgid "&Save" +msgstr "Speichern" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +#, fuzzy +msgid "Save &As..." +msgstr "Speichere PDF unter..." + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "" + +#: frescobaldi_app/documentmenu.py:42 +#, fuzzy +msgctxt "menu title" +msgid "&Document" +msgstr "&Dokument" + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Ein unbekannter Fehler ist aufgetreten:" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "Interner Fehler" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Fehlerbericht per Email senden..." + +#: frescobaldi_app/exception.py:79 +#, fuzzy +msgid "Optionally describe below what you were doing:" +msgstr "Beschreiben Sie, was Sie getan haben (optional):" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:76 +msgid "Roman Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:77 +msgid "Sans Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:79 +#, fuzzy +msgid "Staff Size:" +msgstr "Notenzeilen-Größe:" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Trennungsstriche für Text einfügen" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Bitte wählen Sie eine Sprache:" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +#, fuzzy +msgid "Lyrics" +msgstr "Text:" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +#, fuzzy +msgctxt "menu title" +msgid "Tools" +msgstr "Werkzeugansich&t" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +#, fuzzy +msgid "Preferences" +msgstr "Allgemeine Einstellungen" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/inputdialog.py:101 +#, fuzzy +msgid "Select Color" +msgstr "Alle auswählen" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:206 +#, fuzzy +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "" +"Konnte LilyPond nicht starten. Bitte überprüfen Sie Pfad und Berechtigungen." + +#: frescobaldi_app/job.py:209 +#, fuzzy +msgid "Could not read from the process." +msgstr "Konnte Ausgabe des LilyPond-Prozesses nicht lesen." + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Ein unbekannter Fehler ist aufgetreten." + +#: frescobaldi_app/job.py:216 +#, fuzzy +msgid "Exited with return code {code}." +msgstr "LilyPond [%1] wurde mit dem Return-Code %2 beendet." + +#: frescobaldi_app/job.py:218 +#, fuzzy +msgid "Exited with exit status {status}." +msgstr "LilyPond [%1] wurde mit dem Exit-Status %2 beendet." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "" + +#: frescobaldi_app/lyrics.py:132 +#, fuzzy +msgid "&Hyphenate Lyrics Text..." +msgstr "Trennungsstriche für Text einfügen" + +#: frescobaldi_app/lyrics.py:133 +#, fuzzy +msgid "&Remove hyphenation" +msgstr "Entferne Trennungsstriche" + +#: frescobaldi_app/lyrics.py:134 +#, fuzzy +msgid "&Copy Lyrics with hyphenation removed" +msgstr "Kopiere Text ohne Silbentrennzeichen" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "" + +#: frescobaldi_app/main.py:60 +#, fuzzy +msgid "ENC" +msgstr "REC" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Encoding" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Zeilennummer, beginnend mit 1" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Spalte, beginnend mit 0" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +#, fuzzy +msgid "[modified]" +msgstr "geändert" + +#: frescobaldi_app/mainwindow.py:268 +#, fuzzy +msgctxt "dialog title" +msgid "Close Document" +msgstr "Andere Dokumente schließen" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:281 +#, fuzzy +msgid "Tab Bar" +msgstr "Tabulatur" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +#, fuzzy +msgid "Warning" +msgstr "Gitarren-Stimmung" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:354 +#, fuzzy +msgctxt "dialog title" +msgid "Open File" +msgstr "Öffne Datei" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:399 +#, fuzzy +msgctxt "dialog title" +msgid "Save File" +msgstr "Speichere PDF" + +#: frescobaldi_app/mainwindow.py:439 +#, fuzzy +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Speichern" + +#: frescobaldi_app/mainwindow.py:445 +#, fuzzy +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Partitur-Einstellungen" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:541 +#, fuzzy +msgctxt "dialog title" +msgid "Print Source" +msgstr "Quelltext drucken..." + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:923 +#, fuzzy +msgctxt "action: new document" +msgid "&New" +msgstr "Neu..." + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:927 +#, fuzzy +msgid "Open Current Directory" +msgstr "Öffne aktuellen Ordner" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:931 +#, fuzzy +msgid "Save All" +msgstr "Speichern" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "Quelltext drucken..." + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "Andere Dokumente schließen" + +#: frescobaldi_app/mainwindow.py:935 +#, fuzzy +msgid "Close All Documents" +msgstr "Andere Dokumente schließen" + +#: frescobaldi_app/mainwindow.py:936 +#, fuzzy +msgid "Closes all documents and leaves the current session." +msgstr "Transponiere alle Noten im gesamten Dokument oder der Auswahl." + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:941 +#, fuzzy +msgid "&Undo" +msgstr "Entdocken" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Kopieren" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:946 +#, fuzzy +msgid "&Paste" +msgstr "Pause" + +#: frescobaldi_app/mainwindow.py:947 +#, fuzzy +msgid "Select &All" +msgstr "Alle auswählen" + +#: frescobaldi_app/mainwindow.py:948 +#, fuzzy +msgid "Select &Block" +msgstr "Alle auswählen" + +#: frescobaldi_app/mainwindow.py:949 +#, fuzzy +msgid "Select &None" +msgstr "Alle auswählen" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "" + +#: frescobaldi_app/mainwindow.py:952 +#, fuzzy +msgid "&Find..." +msgstr "Drucken..." + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "" + +#: frescobaldi_app/mainwindow.py:954 +#, fuzzy +msgid "Find Pre&vious" +msgstr "Vorherige" + +#: frescobaldi_app/mainwindow.py:955 +#, fuzzy +msgid "&Replace..." +msgstr "Suche..." + +#: frescobaldi_app/mainwindow.py:956 +#, fuzzy +msgid "Pr&eferences..." +msgstr "Allgemeine Einstellungen" + +#: frescobaldi_app/mainwindow.py:958 +#, fuzzy +msgid "&Next Document" +msgstr "&Dokument" + +#: frescobaldi_app/mainwindow.py:959 +#, fuzzy +msgid "&Previous Document" +msgstr "&Quell-Dokument" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:961 +#, fuzzy +msgid "Scroll Down" +msgstr "Pralltriller abwärts" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "" + +#: frescobaldi_app/menu.py:81 +#, fuzzy +msgctxt "menu title" +msgid "&File" +msgstr "Titel" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "" + +#: frescobaldi_app/menu.py:147 +#, fuzzy +msgctxt "menu title" +msgid "&View" +msgstr "Werkzeugansich&t" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "" + +#: frescobaldi_app/menu.py:189 +#, fuzzy +msgctxt "menu title" +msgid "&LilyPond" +msgstr "&LilyPond" + +#: frescobaldi_app/menu.py:208 +#, fuzzy +msgctxt "menu title" +msgid "&Tools" +msgstr "Werkzeugansich&t" + +#: frescobaldi_app/menu.py:233 +#, fuzzy +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "&Text" + +#: frescobaldi_app/menu.py:245 +#, fuzzy +msgctxt "submenu title" +msgid "&Pitch" +msgstr "Ton&lage" + +#: frescobaldi_app/menu.py:259 +#, fuzzy +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "&Rhythmus" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "" + +#: frescobaldi_app/musicpreview.py:113 +#, fuzzy +msgid "Document:" +msgstr "&Dokument" + +#: frescobaldi_app/musicpreview.py:195 +#, fuzzy +msgid "&Print" +msgstr "Drucken" + +#: frescobaldi_app/musicpreview.py:196 +#, fuzzy +msgid "Music Preview" +msgstr "PDF-Vorschau" + +#: frescobaldi_app/popplerdummy.py:42 +#, fuzzy +msgid "Could not load the {name} module." +msgstr "Konnte %1 nicht laden" + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" + +#: frescobaldi_app/popplerprint.py:61 +#, fuzzy +msgid "PDF Document" +msgstr "&Dokument" + +#: frescobaldi_app/popplerprint.py:69 +#, fuzzy +msgid "Print {filename}" +msgstr "Drucke 1 Datei" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +#, fuzzy +msgid "Printing Error" +msgstr "Interner Fehler" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +#, fuzzy +msgid "Could not send the document to the printer." +msgstr "Konnte Ausgabe des LilyPond-Prozesses nicht lesen." + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "" + +#: frescobaldi_app/search.py:99 +#, fuzzy +msgid "Search:" +msgstr "Suche..." + +#: frescobaldi_app/search.py:100 +#, fuzzy +msgid "&Case" +msgstr "Pause" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "" + +#: frescobaldi_app/search.py:104 +#, fuzzy +msgid "The total number of matches" +msgstr "Die Anzahl der Strophen." + +#: frescobaldi_app/search.py:105 +#, fuzzy +msgid "Close" +msgstr "Komponist" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "" + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "" + +#: frescobaldi_app/search.py:110 +#, fuzzy +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "Transponiere alle Noten im gesamten Dokument oder der Auswahl." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "" + +#: frescobaldi_app/viewmanager.py:91 +#, fuzzy +msgid "&Close View" +msgstr "Werkzeugansich&t" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:444 +#, fuzzy +msgid "Close &Other Views" +msgstr "Andere Dokumente schließen" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:446 +#, fuzzy +msgid "&Previous View" +msgstr "Vorherige" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +#, fuzzy +msgid "Special Characters" +msgstr "Besondere Zeichen..." + +#: frescobaldi_app/charmap/__init__.py:41 +#, fuzzy +msgid "Special Charac&ters" +msgstr "Besondere Zeichen..." + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +#, fuzzy +msgid "Documentation Browser" +msgstr "LilyPond-Dokumentation" + +#: frescobaldi_app/docbrowser/__init__.py:47 +#, fuzzy +msgid "&Documentation Browser" +msgstr "LilyPond-Dokumentation" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +#, fuzzy +msgid "Back" +msgstr "Runde Klammer" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "Nach Hause" + +#: frescobaldi_app/docbrowser/__init__.py:84 +#, fuzzy +msgid "&LilyPond Documentation" +msgstr "LilyPond-Dokumentation:" + +#: frescobaldi_app/docbrowser/__init__.py:85 +#, fuzzy +msgid "&Contextual LilyPond Help" +msgstr "LilyPond-&Hilfe" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Suche..." + +#: frescobaldi_app/docbrowser/browser.py:136 +#, fuzzy +msgid "(local)" +msgstr "Vokal" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +#, fuzzy +msgid "LilyPond Source" +msgstr "LilyPond-Log" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +#, fuzzy +msgid "Documents" +msgstr "&Dokument" + +#: frescobaldi_app/doclist/__init__.py:40 +#, fuzzy +msgid "Docum&ents" +msgstr "&Dokument" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:119 +#, fuzzy +msgid "LilyPond Version:" +msgstr "Standard-LilyPond-Version" + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:121 +#, fuzzy +msgid "Resolution:" +msgstr "Version:" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "LilyPond im Vorschau-Modus starten (mit \"Point and Click\")" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "LilyPond mit geschwätziger Ausgabe starten" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +#, fuzzy +msgid "Delete intermediate output files" +msgstr "Erlaube LilyPond, die temporären Output-Dateien zu löschen" + +#: frescobaldi_app/engrave/custom.py:126 +#, fuzzy +msgid "Command line:" +msgstr "Befehl" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "LilyPond starten" + +#: frescobaldi_app/engrave/custom.py:149 +#, fuzzy +msgid "LilyPond {version}" +msgstr "Standard-LilyPond-Version" + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:218 +#, fuzzy +msgid "The LilyPond executable" +msgstr "LilyPond-Einstellungen" + +#: frescobaldi_app/engrave/custom.py:219 +#, fuzzy +msgid "All the include paths" +msgstr "LilyPond-Include-Verzeichnis:" + +#: frescobaldi_app/engrave/custom.py:220 +#, fuzzy +msgid "The filename of the document" +msgstr "S&ynchronisiere Terminal mit aktuellem Dokument" + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "PDF" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/result_menu.py:45 +#, fuzzy +msgid "Generated &Files" +msgstr "Erzeu>e Dateien" + +#: frescobaldi_app/engrave/result_menu.py:66 +#, fuzzy +msgid "No files available" +msgstr "Nicht verfügbar" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "" + +#: frescobaldi_app/help/browser.py:78 +#, fuzzy +msgid "Start" +msgstr "Beginne mit:" + +#: frescobaldi_app/help/browser.py:79 +#, fuzzy +msgid "Contents" +msgstr "Befehl" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "" + +#: frescobaldi_app/help/contents.py:46 +#, fuzzy +msgid "Frescobaldi Manual" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "" + +#: frescobaldi_app/help/contents.py:88 +#, fuzzy +msgid "Introduction" +msgstr "Klavierauszug" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "LilyPond-Einstellungen" + +#: frescobaldi_app/help/contents.py:142 +#, fuzzy +msgctxt "menu title" +msgid "View" +msgstr "Abspielen/Anzeigen" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "" + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:228 +#, fuzzy +msgid "Other Tools" +msgstr "S&pezielle Werkzeuge" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:252 +#, fuzzy +msgid "About Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "" + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:321 +#, fuzzy +msgid "History of Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "" + +#: frescobaldi_app/help/contents.py:377 +#, fuzzy +msgid "Edit" +msgstr "Drucken..." + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:427 +#, fuzzy +msgid "Document variables" +msgstr "Dokumenten-Reiter" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "" + +#: frescobaldi_app/help/contents.py:444 +#, fuzzy +msgid "mode" +msgstr "Entferne Notenhälse" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" + +#: frescobaldi_app/help/contents.py:448 +#, fuzzy +msgid "filename" +msgstr "Drucke 1 Datei" + +#: frescobaldi_app/help/contents.py:449 +#, fuzzy +msgid "Compiles another LilyPond document instead of the current." +msgstr "Konnte Ausgabe des LilyPond-Prozesses nicht lesen." + +#: frescobaldi_app/help/contents.py:450 +#, fuzzy +msgid "encoding" +msgstr "Encoding" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "" + +#: frescobaldi_app/help/contents.py:452 +#, fuzzy +msgid "version" +msgstr "Version" + +#: frescobaldi_app/help/contents.py:453 +#, fuzzy +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "Die LilyPond-Version für dieses Dokument." + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +#, fuzzy +msgid "number" +msgstr "Name" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "" + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "" + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "" + +#: frescobaldi_app/help/contents.py:479 +#, fuzzy +msgid "Table of Contents" +msgstr "Inhaltsverzeichnis" + +#: frescobaldi_app/help/helpimpl.py:115 +#, fuzzy +msgid "Up:" +msgstr "Oben" + +#: frescobaldi_app/help/helpimpl.py:130 +#, fuzzy +msgid "Next:" +msgstr "Nächste" + +#: frescobaldi_app/help/helpimpl.py:133 +#, fuzzy +msgid "See also:" +msgstr "Alle auswählen" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "LilyPond-Log" + +#: frescobaldi_app/logtool/__init__.py:51 +#, fuzzy +msgid "LilyPond &Log" +msgstr "LilyPond-Log" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Klicken, um Datei zu bearbeiten" + +#: frescobaldi_app/miditool/__init__.py:51 +#, fuzzy +msgid "MIDI" +msgstr "Spiele MIDI" + +#: frescobaldi_app/miditool/__init__.py:52 +#, fuzzy +msgid "MIDI &Player" +msgstr "MIDI-Player" + +#: frescobaldi_app/miditool/__init__.py:97 +#, fuzzy +msgctxt "midi player" +msgid "Pause" +msgstr "Pause" + +#: frescobaldi_app/miditool/__init__.py:98 +#, fuzzy +msgctxt "midi player" +msgid "Play" +msgstr "Spiele %1" + +#: frescobaldi_app/miditool/__init__.py:99 +#, fuzzy +msgctxt "midi player" +msgid "Stop" +msgstr "Schritt" + +#: frescobaldi_app/miditool/__init__.py:100 +#, fuzzy +msgctxt "midi player" +msgid "Restart" +msgstr "Wiederholungsanfang" + +#: frescobaldi_app/miditool/widget.py:102 +#, fuzzy +msgid "Tempo" +msgstr "Tempo:" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:191 +#, fuzzy +msgid "Select Music View Document" +msgstr "&Quell-Dokument" + +#: frescobaldi_app/musicview/__init__.py:192 +#, fuzzy +msgid "&Print Music..." +msgstr "Musik drucken..." + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:198 +#, fuzzy +msgid "Fit &Page" +msgstr "Erste Seite:" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:339 +#, fuzzy +msgid "Choose the PDF document to display." +msgstr "Andere Dokumente schließen" + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:401 +#, fuzzy +msgid "Fit Page" +msgstr "Erste Seite:" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "" + +#: frescobaldi_app/musicview/image.py:129 +#, fuzzy +msgid "Antialias" +msgstr "Italienisch" + +#: frescobaldi_app/musicview/image.py:130 +#, fuzzy +msgid "Drag" +msgstr "Dorich" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "" + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "" + +#: frescobaldi_app/musicview/image.py:133 +#, fuzzy +msgid "&Save As..." +msgstr "Speichere PDF unter..." + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" + +#: frescobaldi_app/musicview/image.py:167 +#, fuzzy +msgid "Image from {filename}" +msgstr "Drucke 1 Datei" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "" + +#: frescobaldi_app/musicview/image.py:214 +#, fuzzy +msgid "Could not save the image." +msgstr "Konnte %1 nicht laden" + +#: frescobaldi_app/pitch/__init__.py:99 +#, fuzzy +msgid "Pitch Name &Language" +msgstr "Sprache für Tonlagen" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" +"Ändere die LilyPond-Sprache, die für die Tonlagen in diesem Dokument oder in " +"der Auswahl benutzt werden soll." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "Wandle relative in a&bsolute Tonhöhen um" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" +"Wandle die Noten im ganzen Dokument oder der Auswahl von relativen in " +"absolute Tonhöhen um." + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "Wandle absolute in re&lative Tonhöhen um" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "" +"Wandelt die Noten im gesamten Dokument oder in der Auswahl von absoluten zu " +"relativen Tonhöhen." + +#: frescobaldi_app/pitch/__init__.py:111 +#, fuzzy +msgid "&Transpose..." +msgstr "Transponieren..." + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "Transponiere alle Noten im gesamten Dokument oder der Auswahl." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Sprache für Tonlagen" + +#: frescobaldi_app/pitch/pitch.py:82 +#, fuzzy +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"Kann die angeforderte Übersetzung nicht durchführen.\n" +"\n" +"Die Musik enthält Viertelton-Schritte, die in der Tonlagensprache \"%1\" " +"nicht verfügbar sind." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"Die Tonlagensprache des ausgewählten Textes wurde aktualisiert, Sie müssen " +"aber den folgenden Befehl zu Ihrem Dokument hinzufügen:" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "(für LilyPond älter als 2.14), oder" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "(für LilyPond 2.14 und neuer.)" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "Transponieren" + +#: frescobaldi_app/pitch/pitch.py:399 +#, fuzzy +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" +"Konnte die eingegebenen Tonarten nicht verstehen.\n" +"\n" +"Bitte benutzen Sie nur Tonartnamen in der Sprache \"%1\"." + +#: frescobaldi_app/pitch/pitch.py:581 +#, fuzzy +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"Kann die angeforderte Transponierung nicht durchführen.\n" +"\n" +"Die transponierte Musik enthielte Viertelton-Schritte, die in der " +"Tondarstellung \"%1\" nicht verfügbar sind." + +#: frescobaldi_app/pitch/pitch.py:712 +#, fuzzy +msgid "Pitch manipulation" +msgstr "Artikulation" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:744 +#, fuzzy +msgctxt "submenu title" +msgid "Pitch" +msgstr "Ton&lage" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +#, fuzzy +msgid "Options" +msgstr "Werte" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "" + +#: frescobaldi_app/po/messages.py:40 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "Anwenden" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "" + +#: frescobaldi_app/po/messages.py:44 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Speichern" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "" + +#: frescobaldi_app/po/messages.py:46 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Komponist" + +#: frescobaldi_app/po/messages.py:47 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Öffne %1" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "" + +#: frescobaldi_app/po/messages.py:50 +#, fuzzy +msgctxt "QFileDialog" +msgid "File" +msgstr "Titel" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "" + +#: frescobaldi_app/po/messages.py:52 +#, fuzzy +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Basis-Verzeichnis:" + +#: frescobaldi_app/po/messages.py:53 +#, fuzzy +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Alle Dateien" + +#: frescobaldi_app/po/messages.py:55 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "Schlagzeug folgt hier." + +#: frescobaldi_app/po/messages.py:56 +#, fuzzy +msgctxt "QScrollBar" +msgid "Top" +msgstr "Tap" + +#: frescobaldi_app/po/messages.py:57 +#, fuzzy +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Portato" + +#: frescobaldi_app/po/messages.py:58 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page up" +msgstr "Pralltriller aufwärts" + +#: frescobaldi_app/po/messages.py:59 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page down" +msgstr "Pralltriller abwärts" + +#: frescobaldi_app/po/messages.py:60 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "Pralltriller aufwärts" + +#: frescobaldi_app/po/messages.py:61 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "Pralltriller abwärts" + +#: frescobaldi_app/po/messages.py:62 +#, fuzzy +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Linke Ferse" + +#: frescobaldi_app/po/messages.py:63 +#, fuzzy +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Rechte Ferse" + +#: frescobaldi_app/po/messages.py:64 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Flageolet" + +#: frescobaldi_app/po/messages.py:65 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Rhythmus einfügen" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Allgemeine Einstellungen" + +#: frescobaldi_app/preferences/__init__.py:182 +#, fuzzy +msgid "MIDI Settings" +msgstr "Einstellungen" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +#, fuzzy +msgid "Helper Applications" +msgstr "Hilfsprogramme" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Pfade" + +#: frescobaldi_app/preferences/__init__.py:212 +#, fuzzy +msgid "LilyPond Documentation" +msgstr "LilyPond-Dokumentation:" + +#: frescobaldi_app/preferences/__init__.py:222 +#, fuzzy +msgid "Keyboard Shortcuts" +msgstr "Tastatur-Kurzbefehle festlegen" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:242 +#, fuzzy +msgid "Tools" +msgstr "Werkzeugansich&t" + +#: frescobaldi_app/preferences/documentation.py:64 +#, fuzzy +msgid "Paths to LilyPond Documentation" +msgstr "LilyPond-Dokumentation:" + +#: frescobaldi_app/preferences/documentation.py:66 +#, fuzzy +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "" +"Geben Sie so viele Buchstaben (S, A, T oder B) wie es Notenzeilen gibt.\n" +"Benutzen Sie die \"Was ist das\"-Hilfe für weitere Informationen." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:111 +#, fuzzy +msgid "Preferred Language:" +msgstr "Sprache:" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "Standard" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:135 +#, fuzzy +msgid "Please enter a local path or a URL:" +msgstr "Bitte Namen für die Sitzung eingeben." + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:124 +#, fuzzy +msgid "Default Styles" +msgstr "Standard" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +#, fuzzy +msgid "Text" +msgstr "Nächste" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:363 +#, fuzzy +msgid "Italic" +msgstr "Italienisch" + +#: frescobaldi_app/preferences/fontscolors.py:364 +#, fuzzy +msgid "Underline" +msgstr "Benutzer erweiterte Linien" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +#, fuzzy +msgid "Selected Text" +msgstr "Alle auswählen" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +#, fuzzy +msgid "Marked Line" +msgstr "T&aktstriche" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +#, fuzzy +msgid "Error Line" +msgstr "T&aktstriche" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +#, fuzzy +msgid "Matching Character" +msgstr "Besondere Zeichen" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +#, fuzzy +msgid "Preview Background" +msgstr "Vorschau-Modus" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +#, fuzzy +msgid "Keyword" +msgstr "Keyboard" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +#, fuzzy +msgid "Function" +msgstr "Aktion:" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +#, fuzzy +msgid "Value" +msgstr "Band" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +#, fuzzy +msgid "String" +msgstr "Streicher" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +#, fuzzy +msgid "Escape" +msgstr "Quer" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +#, fuzzy +msgid "Comment" +msgstr "Befehl" + +#: frescobaldi_app/preferences/fontscolors.py:483 +#, fuzzy +msgid "Pitch" +msgstr "Ton&lage" + +#: frescobaldi_app/preferences/fontscolors.py:484 +#, fuzzy +msgid "Octave" +msgstr "Speichern" + +#: frescobaldi_app/preferences/fontscolors.py:485 +#, fuzzy +msgid "Duration" +msgstr "Werte" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +#, fuzzy +msgid "String Number" +msgstr "Erzeuge Seitenzahlen" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "Bindebogen" + +#: frescobaldi_app/preferences/fontscolors.py:491 +#, fuzzy +msgid "Dynamic" +msgstr "Dynamik" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Artikulation" + +#: frescobaldi_app/preferences/fontscolors.py:493 +#, fuzzy +msgid "Chord" +msgstr "Chor" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "Balken" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +#, fuzzy +msgid "Repeat" +msgstr "Wiederholungsende" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "Befehl" + +#: frescobaldi_app/preferences/fontscolors.py:499 +#, fuzzy +msgid "Specifier" +msgstr "Spezial" + +#: frescobaldi_app/preferences/fontscolors.py:500 +#, fuzzy +msgid "User Command" +msgstr "Befehl" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +#, fuzzy +msgid "Markup" +msgstr "Harfe" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:503 +#, fuzzy +msgid "Lyric Text" +msgstr "Trennungsstriche für Text einfügen" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:506 +#, fuzzy +msgid "Layout Object" +msgstr "Sprach-Auswahl" + +#: frescobaldi_app/preferences/fontscolors.py:507 +#, fuzzy +msgid "Property" +msgstr "Dichter" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +#, fuzzy +msgid "Escaped Character" +msgstr "Besondere Zeichen" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:517 +#, fuzzy +msgid "Tag" +msgstr "Tap" + +#: frescobaldi_app/preferences/fontscolors.py:518 +#, fuzzy +msgid "LilyPond Tag" +msgstr "LilyPond-Log" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:521 +#, fuzzy +msgid "Entity Reference" +msgstr "Notationsreferenz" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:527 +#, fuzzy +msgid "Number" +msgstr "Name" + +#: frescobaldi_app/preferences/fontscolors.py:528 +#, fuzzy +msgid "LilyPond Environment" +msgstr "LilyPond-Dokumentation" + +#: frescobaldi_app/preferences/fontscolors.py:532 +#, fuzzy +msgid "Texinfo" +msgstr "Tenor" + +#: frescobaldi_app/preferences/fontscolors.py:534 +#, fuzzy +msgid "Block" +msgstr "Dock" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Sprache:" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Stil:" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "" +"Sitzung, die geladen wird, wenn Frescobaldi ohne Argumente gestarted wird" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "Starte ohne Sitzung" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "Starte mit zuletzt geöffneter Sitzung" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "Starte mit Sitzung:" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "Speichern von Dokumenten" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "Speichere Cursor-Positionen, Bookmarks, usw." + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Standard-Verzeichnis:" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "Der Standard-Ordner der LilyPond-Dokumente (optional)." + +#: frescobaldi_app/preferences/helpers.py:70 +#, fuzzy +msgid "PDF:" +msgstr "PDF" + +#: frescobaldi_app/preferences/helpers.py:71 +#, fuzzy +msgid "MIDI:" +msgstr "Spiele MIDI" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:76 +#, fuzzy +msgid "File Manager:" +msgstr "Erweiterungsmanager" + +#: frescobaldi_app/preferences/helpers.py:77 +#, fuzzy +msgid "Shell:" +msgstr "Partitur:" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:81 +#, fuzzy +msgid "LilyPond versions to use" +msgstr "Zu nutzende LilyPond-Versionen:" + +#: frescobaldi_app/preferences/lilypond.py:82 +#, fuzzy +msgid "Automatically choose LilyPond version from document" +msgstr "" +"Automatische Versionserkennung aktivieren (bestimme LilyPond-Version aus dem " +"Dokument)" + +#: frescobaldi_app/preferences/lilypond.py:84 +#, fuzzy +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" +"Hier können Sie eine feste LilyPond-Version auswählen, die für Dokumente in " +"dieser Sitzung benutzt wird.\n" +"Siehe \"Was ist das?\"-Hilfe (Umschalten + F1) für mehr Informationen." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:101 +#, fuzzy +msgid "See also {link}." +msgstr "Alle auswählen" + +#: frescobaldi_app/preferences/lilypond.py:149 +#, fuzzy +msgid "Set as &Default" +msgstr "Als Standardeinstellung speichern" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "Standard" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "LilyPond-Befehl:" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "Name oder vollständiger Pfad des LilyPond-Programms." + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "Convert-ly:" + +#: frescobaldi_app/preferences/lilypond.py:241 +#, fuzzy +msgid "LilyPond-book:" +msgstr "LilyPond-Buch:" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "In automatische Versionsauswahl einschließen" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "LilyPond starten" + +#: frescobaldi_app/preferences/lilypond.py:280 +#, fuzzy +msgid "Save document if possible" +msgstr "Ein Dokument hat es nicht geschafft." + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:286 +#, fuzzy +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "Erlaube LilyPond, die temporären Output-Dateien zu löschen" + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "LilyPond-Include-Verzeichnis:" + +#: frescobaldi_app/preferences/midi.py:77 +#, fuzzy +msgid "MIDI Ports" +msgstr "MIDI-Player" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" + +#: frescobaldi_app/preferences/midi.py:82 +#, fuzzy +msgid "Player output:" +msgstr "Gesamte Seitenzahl:" + +#: frescobaldi_app/preferences/midi.py:84 +#, fuzzy +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" +"Geben Sie so viele Buchstaben (S, A, T oder B) wie es Notenzeilen gibt.\n" +"Benutzen Sie die \"Was ist das\"-Hilfe für weitere Informationen." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:135 +#, fuzzy +msgid "Close unused MIDI output" +msgstr "MIDI-Ausgabe erstellen" + +#: frescobaldi_app/preferences/midi.py:137 +#, fuzzy +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" +"Geben Sie so viele Buchstaben (S, A, T oder B) wie es Notenzeilen gibt.\n" +"Benutzen Sie die \"Was ist das\"-Hilfe für weitere Informationen." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Verknüpfung" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:125 +#, fuzzy +msgid "Other commands:" +msgstr "Druckbefehl:" + +#: frescobaldi_app/preferences/shortcuts.py:173 +#, fuzzy +msgid "&Edit Shortcut for \"{name}\"" +msgstr "Verknüpfung" + +#: frescobaldi_app/preferences/shortcuts.py:178 +#, fuzzy +msgid "(no shortcut)" +msgstr "Verknüpfung" + +#: frescobaldi_app/preferences/shortcuts.py:206 +#, fuzzy +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "Entferne Notenhälse von den Schlagzeugnoten." +msgstr[1] "Entferne Notenhälse von den Schlagzeugnoten." + +#: frescobaldi_app/preferences/shortcuts.py:304 +#, fuzzy +msgid "(default)" +msgstr "Standard" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:142 +#, fuzzy +msgid "Magnifier Size:" +msgstr "Papier-Format:" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "" + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:220 +#, fuzzy +msgid "Group documents by directory" +msgstr "Öffne aktuellen Ordner" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Schnell einfügen" + +#: frescobaldi_app/quickinsert/__init__.py:48 +#, fuzzy +msgid "Quick &Insert" +msgstr "Schnell einfügen" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Erlaube Kürzel" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "Benutze kurze Notation für einige Artikulationszeichen wie Staccato." + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Artikulationszeichen" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Unterschiedliche Artikulationszeichen und andere Zeichen." + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Akzent" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Marcato" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Staccatissimo" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Staccato" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Portato" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Tenuto" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Ornamente" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Triller" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Pralltriller" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Mordent" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Doppelschlag" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "Doppelter Pralltriller" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "Pralltriller Mordent" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "Pralltriller aufwärts" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "Pralltriller abwärts" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "Mordent aufwärts" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "Mordent abwärts" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "Pralltriller aufwärts" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "Pralltriller abwärts" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "Pralltriller" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Umkehrung" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "Zeichen" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Fermate" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Kurze Fermate" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Lange Fermate" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Sehr lange Fermate" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Segno" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Varcoda" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "Signumcongruentiae" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Andere" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Oberbogen" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Unterbogen" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "Bartók-Pizzicato" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "Offen (z.B. Bläser)" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "Gestopft (z.B. Bläser)" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Flageolet" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Daumen" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Linke Ferse" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Rechte Ferse" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "Linke Fußspitze" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Rechte Fußspitze" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "Halb offen (z.B. Hi-Hat)" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "T&aktstriche" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "Taktstriche, Atemzeichen, usw." + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Doppelter Taktstrich" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "Schlussstrich" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "Gepunkteter Taktstrich" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "Gestrichelter Taktstrich" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Unsichtbarer Taktstrich" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "Wiederholungsanfang" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "Wiederhole beide" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "Wiederholungsende" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "Wiederhole beide (alt)" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "Wiederhole beide (klassisch)" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "Häkchen-Taktstrich" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "Einzelner Taktstrich" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "Schmaler-breiter-schmaler Taktstrich" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "Breiter-schmaler Taktstrich" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "Taktstrich doppelter Breite" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "Segno-Taktstrich" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "Atemzeichen" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "Standard-Atemzeichen" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "Gerades Atemzeichen" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "Gebogene Zäsur" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "Gerade Zäsur" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#, fuzzy +msgid "Configure Keyboard Shortcut ({key})" +msgstr "Richte Tastatur-Kurzbefehl ein (%1)" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Nichts" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "Dynamik" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "Dynamik-Symbole." + +#: frescobaldi_app/quickinsert/dynamics.py:128 +#, fuzzy +msgid "Dynamic sign {name}" +msgstr "Dynamikzeichen %1" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "Strecker" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "Haarnadel-Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "Haarnadel-Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "Decrescendo" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "Bindebögen, Strecker, usw." + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "Arpeggios" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "Arpeggio mit Pfeil nach oben" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "Arpeggio mit Pfeil nach unten" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "Eckige-Klammer-Arpeggio" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "Runde-Klammer-Arpeggio" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "Glissandos" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "Gestricheltes Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "Gepunktetes Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "Zickzack-Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "Glissando mit Triller" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "Phrasierungsbogen" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Richtung:" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Oben" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Neutral" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Unten" + +#: frescobaldi_app/quickinsert/widget.py:127 +#, fuzzy +msgid "The Quick Insert Panel" +msgstr "Schnell einfügen" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:146 +#, fuzzy +msgid "&Double durations" +msgstr "Notenlängen verdoppeln" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Verdopple alle Notenlängen in der Auswahl." + +#: frescobaldi_app/rhythm/__init__.py:149 +#, fuzzy +msgid "&Halve durations" +msgstr "Notenlängen halbieren" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Halbiere alle Notenlängen in der Auswahl." + +#: frescobaldi_app/rhythm/__init__.py:152 +#, fuzzy +msgid "Do&t durations" +msgstr "Notenlängen punktieren" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Alle Notenlängen in der Auswahl punktieren." + +#: frescobaldi_app/rhythm/__init__.py:155 +#, fuzzy +msgid "&Undot durations" +msgstr "Punktierung aller Notenlängen entfernen" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Entferne Punktierung von allen Werten der Auswahl." + +#: frescobaldi_app/rhythm/__init__.py:158 +#, fuzzy +msgid "Remove &scaling" +msgstr "Entferne Skalierung" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "Entferne alle Normierungen (*n/m) von den Notenlängen in der Auswahl." + +#: frescobaldi_app/rhythm/__init__.py:161 +#, fuzzy +msgid "&Remove durations" +msgstr "Notenlängen entfernen" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "Entferne alle Notenlängen der Auswahl." + +#: frescobaldi_app/rhythm/__init__.py:164 +#, fuzzy +msgid "Make &implicit" +msgstr "Implizit machen" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "Gib Notenlängen implizit an (wiederholte Werte entfernen)." + +#: frescobaldi_app/rhythm/__init__.py:167 +#, fuzzy +msgid "Make implicit (per &line)" +msgstr "Implizit machen (pro Zeile)" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" +"Notenlängen implizit angeben (wiederholte Werte entfernen), außer für die " +"erste Notenlänge pro Zeile." + +#: frescobaldi_app/rhythm/__init__.py:171 +#, fuzzy +msgid "Make &explicit" +msgstr "Explizit machen" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" +"Gib Notenlängen explizit an (der Note wird auch dann eine Länge zugeordnet, " +"wenn es die gleiche ist wie die vorhergehende)." + +#: frescobaldi_app/rhythm/__init__.py:175 +#, fuzzy +msgid "&Apply rhythm..." +msgstr "Rhytmus anwenden..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Wende den eingegebenen Rhythmus auf die ausgewählte Musik an." + +#: frescobaldi_app/rhythm/__init__.py:178 +#, fuzzy +msgid "&Copy rhythm" +msgstr "Rhytmus kopieren" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Kopiere den Rhythmus der ausgewählten Musik." + +#: frescobaldi_app/rhythm/__init__.py:181 +#, fuzzy +msgid "&Paste rhythm" +msgstr "Rhythmus einfügen" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Füge Rhythmus in die ausgewählte Musik ein." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Rhythmus anwenden" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Rhythmus eingeben:" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:279 +#, fuzzy +msgctxt "submenu title" +msgid "Rhythm" +msgstr "Rhythmus" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Neue Partitur vorbereiten..." + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "Musik folgt hier." + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Voreingestellte LilyPond-Tagline entfernen" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Assistent zum Erstellen einer Partitur" + +#: frescobaldi_app/scorewiz/dialog.py:80 +#, fuzzy +msgid "Clear" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:83 +#, fuzzy +msgid "Preview" +msgstr "PDF-Vorschau" + +#: frescobaldi_app/scorewiz/dialog.py:130 +#, fuzzy +msgid "Score Preview" +msgstr "PDF-Vorschau" + +#: frescobaldi_app/scorewiz/dialog.py:164 +#, fuzzy +msgid "&Titles and Headers" +msgstr "Titel und Kopfzeilen" + +#: frescobaldi_app/scorewiz/dialog.py:173 +#, fuzzy +msgid "&Parts" +msgstr "Teile" + +#: frescobaldi_app/scorewiz/dialog.py:182 +#, fuzzy +msgid "&Score settings" +msgstr "Partitur-Einstellungen" + +#: frescobaldi_app/scorewiz/dialog.py:191 +#, fuzzy +msgid "The Score Wizard" +msgstr "Assistent zum Erstellen einer Partitur" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Klicken, um Wert einzugeben." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "Fußzeile der ersten Seite" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "Fußzeile der letzten Seite" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "Gewidmet" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Titel" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Untertitel" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "zweiter Untertitel" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Instrument" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Komponist" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Arrangeur" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Dichter" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Metrum" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Stück" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Copyright" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Tagline" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Verfügbare Teile:" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Partitur:" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +#, fuzzy +msgid "&Remove" +msgstr "Entferne Notenhälse" + +#: frescobaldi_app/scorewiz/score.py:104 +#, fuzzy +msgid "Move up" +msgstr "Verschiebe nach" + +#: frescobaldi_app/scorewiz/score.py:105 +#, fuzzy +msgid "Move down" +msgstr "Verschiebe nach" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Tonart:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Taktart:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Auftakt:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Metronom-Markierung:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Tempo-Bezeichnung:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Dur" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Moll" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "Ionisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Dorich" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Phrygisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Lydisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Mixolydisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Aeolisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Lokrisch" + +#: frescobaldi_app/scorewiz/settings.py:73 +#, fuzzy +msgid "Score properties" +msgstr "Partitur-Einstellungen" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Allgemeine Einstellungen" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Benutze typografische Anführungszeichen" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "" +"Ersetze normale Anführungszeichen in Titeln durch schöne typografische." + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Lösche Standard-Tagline" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Unterdrücke LilyPond-Standard-Tagline." + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Lösche Taktzahlen" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "Unterdrücke Taktzahlen am Anfang jedes Systems." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "MIDI-Ausgabe erstellen" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "Zusätzlich zum PDF eine MIDI-Datei erstellen." + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Metronom-Markierung anzeigen" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"Wenn ausgewählt, Metronom-Markierung am Anfang der Partitur anzeigen. Die " +"MIDI-Ausgabe nutzt ebenfalls die Mentronom-Einstellungen." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Papier-Format:" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Quer" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Lang" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Kurz" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Instrumentennamen" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "Erstes System:" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Andere Systeme:" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "Benutze lange oder kurze Instrumentennamen vor dem ersten System." + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "" +"Füge kurze, lange oder keine Instrumentennamen vor dem nächsten System ein." + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "Welche Sprache für die Instrumentennamen benutzt werden sollen." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Sprache für die Name der Tonlagenn:" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "Die LilyPond-Sprache für die Namen der Tonlagen." + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Version:" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "Die LilyPond-Version für dieses Dokument." + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "Keine Einstellungen vorhanden." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Passen Sie die Anzahl separater Stimmen pro Zeile an." + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "" +"Das ist vor allem dann nützlich, wenn Sie polyphone Musik schreiben, wie z." +"B. eine Fuge." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Rechte Hand:" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Linke Hand:" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Akkord-Stil:" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Gitarren-Bund-Diagramme" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Zeige voreingestellte Gitarren-Bund-Diagramme unter den Akkord-Namen " +"(LilyPond 2.12 und neuer)." + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "Akkorde folgen hier." + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "Deutsch" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "Halb-Deutsch" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "Italienisch" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "Französisch" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Horn in F" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "Hn.F." + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Trompete in C" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +#, fuzzy +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Tr.C" + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Trompete in B" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +#, fuzzy +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Tr.B" + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Posaune" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Pos." + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Bass Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "B.Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Bläser" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +#, fuzzy +msgid "Staff Group" +msgstr "Notenzeilen-Typ:" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "Geschweifte Klammer" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "Runde Klammer" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +#, fuzzy +msgid "Square" +msgstr "Eckige Klammer" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "Art:" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +#, fuzzy +msgid "Connect Barlines" +msgstr "Verbinde Taktstriche" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +#, fuzzy +msgid "Score" +msgstr "Partitur:" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +#, fuzzy +msgid "Piece:" +msgstr "Stück" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +#, fuzzy +msgid "Opus:" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +#, fuzzy +msgid "Containers" +msgstr "Verbinde Taktstriche" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Klavier" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "Klav." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Harfe" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Hrf." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Spinnett" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Spin." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Orgel" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Org." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Pedal:" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Auf 0 setzen, um das Pedal abzuschalten." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Cel." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Tasteninstrumente" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Pauken" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Pk." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Xylofon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Xyl." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Marimba" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "Obere Notenzeile:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "Untere Notenzeile:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Vibrafon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Vib." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Röhrenglocken" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Röh." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Glockenspiel" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Gls." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +#, fuzzy +msgid "Carillon" +msgstr "Klarinette" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +#, fuzzy +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +#, fuzzy +msgid "Manual staff:" +msgstr "Normale Notenzeilen" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +#, fuzzy +msgid "Pedal staff:" +msgstr "Normale Notenzeilen" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Schlagzeug" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Schl." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Stimmen:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Entferne Notenhälse" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Entferne Notenhälse von den Schlagzeugnoten." + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "Schlagzeug folgt hier." + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "Halte etwas Abstand." + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Schlagzeug (5 Linien, Voreinstellung)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Kesselpauken-Stil (2 Linien)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Conga-Stil (2 Linien)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Bongo-Stil (2 Linien)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Percussion-Stil (1 Linie)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Schlagzeug" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Notenzeilen-Typ:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Stimmung:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Normale Notenzeilen" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Tabulatur" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Beides" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Mandoline" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mdl." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Mandoline-Stimmung" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Banjo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Bj." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "Offene G-Stimmung (aDGBD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "C-Stimmung (gCGBD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "Modale Stimmung (gDGCD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "Offene D-Stimmung (aDF#AD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "Offene D-moll-Stimmung (aDFAD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Vier Streicher (statt fünf)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Klassische Gitarre" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +#, fuzzy +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "Gt." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Gitarren-Stimmung" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "Offene G-Stimmung" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Jazz-Gitarre" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "J.Gt." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Bass" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "Bs." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "Bas- Stimmung" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Elektrischer Bass" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "E.Bs." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Harfe" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Hf." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Gezupfte Streicher" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Akkord-Namen" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Firgurierter Bass" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "Benutzer erweiterte Linien" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "Figur folgt hier." + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "Notenzeile" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Spezial" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Violine" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Vl." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Bratsche" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "Bra." + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Cello" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +#, fuzzy +msgid "Contrabass" +msgstr "" +"#-#-#-#-# de.po (frescobaldi 1.1.7) #-#-#-#-#\n" +"Konrabass\n" +"#-#-#-#-# de.po (frescobaldi 1.1.7) #-#-#-#-#\n" +"Kontrabass" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Kb." + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +msgid "Basso Continuo" +msgstr "Basso Continuo" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "B.C." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Streicher" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Strophen:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Die Anzahl der Strophen." + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Tonumfang" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "Zeige den Tonumfang jeder Stimme am Anfang jedes Systems." + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "Text folgt hier." + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Sopran" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +msgid "Mezzo-soprano" +msgstr "Mezzosopran" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "Ms." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Alt" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Tenor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Leadsheet" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"Das erste Blatt hat eine Zeile mit Akkord-Namen darüber und Text drunter. " +"Eine zweite Zeile ist optional." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Zeile für Begleitung hinzufügen" + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" +"Fügt eine Zeile für die Begleitung hinzu und ebenso eine Begleitstimme in " +"der oberen Zeile." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Chor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Bitte wählen Sie die Stimmen für den Chor aus. Benutzen Sie die Buchstaben " +"S, A, T, oder B. Ein Bindestrich markiert eine neue Zeile." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "Tipp: Für einen Doppelchor können Sie zwei Chorteile einrichten." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Stimmen:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "Text:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "Klavierauszug" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "Fügt einen automatisch erzeugten Klavierauszug hinzu." + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "MIDI-Dateien zum Proben" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" +"Erzeugt eine MIDI-Datei für jede Stimme, selbst wenn keine MIDI-Ausgabe der " +"Hauptpartitur erzeugt wird." + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "Ch." + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "MIDI-Dateien zum Proben:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Alle Stimmen mit gleichem Text" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "Ein Set gleichen Textes wird zwischen allen Notenzeilen plaziert." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Jede Stimme mit gleichem Text" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "" +"Jede Stimme hat ihren eigenen Text, benutzt aber den selben Text wie die " +"anderen Stimmen." + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Jede Stimme mit unterschiedlichem Text" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Jede Stimme hat ein unterschiedliches Set Textes." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "Strophen verteilen" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "Ein Set von Strophen wird über alle Notenzeilen verteilt." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "Vokal" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Flöte" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Piccolo-Flöte" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Pic." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Bass-Flöte" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Bfl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Oboe" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Ob." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +msgid "Oboe d'amore" +msgstr "Oboe d'amore" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Ob.d'am." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +msgid "English horn" +msgstr "English horn" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "Eng.h." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Fagott" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Fg." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Kontra-Fagott" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "K.Fg." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Klarinette" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Kl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Sopranino Saxophon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "SiSax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Sopransaxophon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "SoSax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Altsaxophon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "ASax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Tenorsaxophon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "TSax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Baritonsaxophon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "BSax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "Basssaxophon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "BsSax." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Sopran-Blockflöte" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "S.Bl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Alt-Blockflöte" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "A.Bl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Tenor-Blockflöte" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "T.Bl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Bass-Blockflöte" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "B.Bl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Holzbläser" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "Sitzungen verwalten" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "Name:" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "Immer die Liste der Dokumente in dieser Sitzung speichern" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "Basis-Verzeichnis:" + +#: frescobaldi_app/sessions/dialog.py:133 +#, fuzzy +msgid "Edit session: {name}" +msgstr "Bearbeite Sitzung: %1" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "Neue Sitzung bearbeiten" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "Bitte Namen für die Sitzung eingeben." + +#: frescobaldi_app/sessions/dialog.py:174 +#, fuzzy +msgid "Please do not use the name '{name}'." +msgstr "Bitte nicht den Namen '%1' benutzen." + +#: frescobaldi_app/sessions/dialog.py:180 +#, fuzzy +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" +"Eine andere Sitzung mit dem Namen %1 existiert bereits.\n" +"\n" +"Wollen Sie sie überschreiben?" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "" + +#: frescobaldi_app/sessions/manager.py:127 +#, fuzzy +msgctxt "New Session" +msgid "&New..." +msgstr "Neu..." + +#: frescobaldi_app/sessions/manager.py:129 +#, fuzzy +msgid "&Manage..." +msgstr "Sitzungen verwalten..." + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "Keine Sitzung" + +#: frescobaldi_app/sessions/menu.py:55 +#, fuzzy +msgctxt "menu title" +msgid "&Session" +msgstr "&Sitzung" + +#: frescobaldi_app/snippet/builtin.py:38 +#, fuzzy +msgid "Blank Line" +msgstr "T&aktstriche" + +#: frescobaldi_app/snippet/builtin.py:44 +#, fuzzy +msgid "Single Typographical Quotes" +msgstr "Benutze typografische Anführungszeichen" + +#: frescobaldi_app/snippet/builtin.py:49 +#, fuzzy +msgid "Double Typographical Quotes" +msgstr "Benutze typografische Anführungszeichen" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:125 +#, fuzzy +msgid "Modern 2/2 Time Signature" +msgstr "Taktart:" + +#: frescobaldi_app/snippet/builtin.py:131 +#, fuzzy +msgid "Modern 4/4 Time Signature" +msgstr "Taktart:" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:148 +#, fuzzy +msgid "LilyPond Version" +msgstr "Standard-LilyPond-Version" + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:166 +#, fuzzy +msgid "Upper case selection" +msgstr "Partitur-Einstellungen" + +#: frescobaldi_app/snippet/builtin.py:172 +#, fuzzy +msgid "Lower case selection" +msgstr "Partitur-Einstellungen" + +#: frescobaldi_app/snippet/builtin.py:178 +#, fuzzy +msgid "Title case selection" +msgstr "Zeilen-Auswahlmodus" + +#: frescobaldi_app/snippet/builtin.py:189 +#, fuzzy +msgid "Markup lines" +msgstr "T&aktstriche" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:202 +#, fuzzy +msgid "Tagline with date and LilyPond version" +msgstr "Kann LilyPond-Version nicht bestimmen." + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:227 +#, fuzzy +msgid "No Tagline" +msgstr "Tagline" + +#: frescobaldi_app/snippet/builtin.py:235 +#, fuzzy +msgid "No Barnumbers" +msgstr "Lösche Taktzahlen" + +#: frescobaldi_app/snippet/builtin.py:245 +#, fuzzy +msgid "Midi Tempo" +msgstr "Tempo:" + +#: frescobaldi_app/snippet/builtin.py:255 +#, fuzzy +msgid "Staff Size" +msgstr "Notenzeilen-Größe:" + +#: frescobaldi_app/snippet/builtin.py:310 +#, fuzzy +msgid "A5 Paper" +msgstr "Papier" + +#: frescobaldi_app/snippet/builtin.py:318 +#, fuzzy +msgid "Document Fonts..." +msgstr "&Dokument" + +#: frescobaldi_app/snippet/builtin.py:346 +#, fuzzy +msgid "Last note or chord" +msgstr "Wiederhole letzte Note oder Akkord" + +#: frescobaldi_app/snippet/builtin.py:427 +#, fuzzy +msgid "Color" +msgstr "Komponist" + +#: frescobaldi_app/snippet/builtin.py:464 +#, fuzzy +msgid "Basic Leadsheet" +msgstr "Leadsheet" + +#: frescobaldi_app/snippet/builtin.py:508 +#, fuzzy +msgid "Choir Hymn" +msgstr "Chor" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:119 +#, fuzzy +msgid "Title:" +msgstr "Titel" + +#: frescobaldi_app/snippet/edit.py:120 +#, fuzzy +msgid "Shortcut:" +msgstr "Verknüpfung" + +#: frescobaldi_app/snippet/edit.py:131 +#, fuzzy +msgid "Click to change the keyboard shortcut." +msgstr "Tastatur-Kurzbefehle festlegen" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:218 +#, fuzzy +msgctxt "menu title" +msgid "File" +msgstr "Titel" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:80 +#, fuzzy +msgid "The version of the default LilyPond program." +msgstr "Name oder vollständiger Pfad des LilyPond-Programms." + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:96 +#, fuzzy +msgid "The name of the current document." +msgstr "S&ynchronisiere Terminal mit aktuellem Dokument" + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +#, fuzzy +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Pausen abschneiden" + +#: frescobaldi_app/snippet/import_export.py:119 +#, fuzzy +msgid "New Snippets" +msgstr "Pausen abschneiden" + +#: frescobaldi_app/snippet/import_export.py:120 +#, fuzzy +msgid "Updated Snippets" +msgstr "Pausen abschneiden" + +#: frescobaldi_app/snippet/import_export.py:121 +#, fuzzy +msgid "Unchanged Snippets" +msgstr "Pausen abschneiden" + +#: frescobaldi_app/snippet/import_export.py:183 +#, fuzzy +msgid "Import Keyboard Shortcuts" +msgstr "Tastatur-Kurzbefehle festlegen" + +#: frescobaldi_app/snippet/import_export.py:188 +#, fuzzy +msgid "Choose which snippets you want to import:" +msgstr "Bitte wählen Sie die Dateien aus, die Sie drucken wollen:" + +#: frescobaldi_app/snippet/import_export.py:190 +#, fuzzy +msgid "There are no new or updated snippets in the file." +msgstr "Es gibt keine Dateien, die via Email verschickt werden können." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Einfügen" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "Name" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Beschreibung" + +#: frescobaldi_app/snippet/template.py:33 +#, fuzzy +msgid "Save as Template" +msgstr "Notenzeilen pro Seite:" + +#: frescobaldi_app/snippet/template.py:34 +#, fuzzy +msgid "Please enter a template name:" +msgstr "Bitte Namen für die Sitzung eingeben." + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +#, fuzzy +msgid "Snippets" +msgstr "Pausen abschneiden" + +#: frescobaldi_app/snippet/tool.py:54 +#, fuzzy +msgid "&Snippets" +msgstr "Pausen abschneiden" + +#: frescobaldi_app/snippet/tool.py:79 +#, fuzzy +msgid "Save as Template..." +msgstr "Speichere PDF unter..." + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +#, fuzzy +msgid "&Edit..." +msgstr "Drucken..." + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:179 +#, fuzzy +msgid "Remove the selected snippets." +msgstr "Wiederhole ausgewählte Musik" + +#: frescobaldi_app/snippet/widget.py:180 +#, fuzzy +msgid "A&pply" +msgstr "Anwenden" + +#: frescobaldi_app/snippet/widget.py:181 +#, fuzzy +msgid "Apply the current snippet." +msgstr "Den Cursor an diesem Punkt plazieren." + +#: frescobaldi_app/snippet/widget.py:182 +#, fuzzy +msgid "&Import..." +msgstr "Drucken..." + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:184 +#, fuzzy +msgid "E&xport..." +msgstr "Drucken..." + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:188 +#, fuzzy +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" +"Geben Sie so viele Buchstaben (S, A, T oder B) wie es Notenzeilen gibt.\n" +"Benutzen Sie die \"Was ist das\"-Hilfe für weitere Informationen." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +#, fuzzy +msgid "XML Files" +msgstr "Alle Dateien" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "" +msgstr[1] "" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:400 +#, fuzzy +msgctxt "menu title" +msgid "Insert" +msgstr "&Einfügen" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +#, fuzzy +msgid "Input" +msgstr "MIDI-Eingang:" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +#, fuzzy +msgid "Scheme:" +msgstr "Partitur:" + +#: frescobaldi_app/widgets/schemeselector.py:63 +#, fuzzy +msgctxt "New Scheme" +msgid "&New..." +msgstr "Neu..." + +#: frescobaldi_app/widgets/schemeselector.py:93 +#, fuzzy +msgid "Please enter a name for the new scheme:" +msgstr "" +"Bitte geben Sie den Namen der Variable ein, der der ausgewählte Text " +"zugewiesen werden soll:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +#, fuzzy +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Verknüpfung" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +#, fuzzy +msgid "&No shortcut" +msgstr "Verknüpfung" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +#, fuzzy +msgid "Use a &custom shortcut:" +msgstr "Benutze eigene Versionsnummer:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +#, fuzzy +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "Nichts" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Klicken Sie auf diesen Knopf, um das Tempo einzustellen." + +#: frescobaldi_app/widgets/urlrequester.py:75 +#, fuzzy +msgid "Open file dialog" +msgstr "Öffne Datei" + +#: frescobaldi_app/widgets/urlrequester.py:119 +#, fuzzy +msgid "Select a directory" +msgstr "Standard-Verzeichnis:" + +#: frescobaldi_app/widgets/urlrequester.py:121 +#, fuzzy +msgid "Select a file" +msgstr "Alle auswählen" + +#, fuzzy +#~ msgid "{appname} version {version}" +#~ msgstr "Rumor Version $version gefunden." + +#, fuzzy +#~ msgid "Edit..." +#~ msgstr "Drucken..." + +#, fuzzy +#~ msgid "Remove" +#~ msgstr "Entferne Notenhälse" + +#~ msgid "Copyright (c) 2008-2010, Wilbert Berendsen" +#~ msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your name" +#~ msgstr "Georg Hennig" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "i18n@frescobaldi.org" +#~ msgstr "georg.hennig@web.de" + +#~ msgid "Session to start" +#~ msgstr "Sitzung" + +#~ msgid "Start a new instance" +#~ msgstr "Starte neue Instanz" + +#~ msgid "Try to use smart line and column numbers" +#~ msgstr "Versuche, intelligente Zeilen- und Spaltennummer zu benutzen" + +#~ msgid "LilyPond files to open, may also be textedit URLs" +#~ msgstr "LilyPond-Dateien, können auch Textedit URLs sein" + +#~ msgid "Left Sidebar" +#~ msgstr "Linke Seitenleiste" + +#~ msgid "Right Sidebar" +#~ msgstr "Rechte Seitenleiste" + +#~ msgid "Top Sidebar" +#~ msgstr "Obere Seitenleiste" + +#~ msgid "Bottom Sidebar" +#~ msgstr "Untere Seitenleiste" + +#~ msgid "Show Path" +#~ msgstr "Zeige Pfad" + +#~ msgid "Show Document Tabs" +#~ msgstr "Zeige Dokumenten-Reiter" + +#~ msgid "" +#~ "Could not find the XMLGUI container \"%1\".\n" +#~ "\n" +#~ "Probably the local ui.rc file contains errors. It is recommended to " +#~ "delete this file because elements in the user interface will be missing. " +#~ "This is the full path of the file:\n" +#~ "\n" +#~ "%2\n" +#~ msgstr "" +#~ "Konnte den XMLGUI-Container \"%1\" nicht finden.\n" +#~ "\n" +#~ "Möglicherweise enthält die lokale ui.rc-Datei Fehler. Es wird empfohlen, " +#~ "diese Datei zu löschen, weil Teile der Benutzeroberfläche fehlen werden. " +#~ "Vollständiger Pfad der Datei:\n" +#~ "\n" +#~ "%2\n" + +#~ msgid "Please select some text first." +#~ msgstr "Bitte wählen Sie zuerst Text aus." + +#~ msgid "Line: %1 Col: %2" +#~ msgstr "Zeile: %1 Spalte: %2" + +#~ msgid "BLOCK" +#~ msgstr "BLOCK" + +#~ msgid "Block selection mode" +#~ msgstr "Block-Auswahlmodus" + +#~ msgid "LINE" +#~ msgstr "ZEILE" + +#~ msgid "Right-click for tab options" +#~ msgstr "Rechts klicken für Reiter-Optionen" + +#~ msgid "Please install %1" +#~ msgstr "Bitte installieren Sie %1" + +#~ msgid "Press the button to configure the keyboard shortcut for:" +#~ msgstr "Knopf drücken um Tastatur-Kurzbefehle einzurichten für:" + +#~ msgid "Session" +#~ msgstr "Sitzung" + +#~ msgid "Properties of this session" +#~ msgstr "Eigenschaften dieser Sitzung" + +#~ msgid "Please do not use the ampersand (&) character in a session name." +#~ msgstr "Bitte nicht das Zeichen 'Und' (&) in einem Sitzungsnamen verwenden." + +#~ msgid "Open %1 in external viewer" +#~ msgstr "Öffne %1 in externem Betrachter" + +#~ msgid "(No up-to-date MIDI or PDF files available.)" +#~ msgstr "(Keine aktuellen MIDI- oder PDF-Dateien verfügbar.)" + +#~ msgid "" +#~ "There are no up-to-date MIDI or PDF files available. Please run LilyPond " +#~ "to create one or more output files." +#~ msgstr "" +#~ "Es sind keine aktuellen MIDI- oder PDF-Dateien verfügbar. Bitte LilyPond " +#~ "starten, umd eine oder mehr Ausgabe-Dateien zu erzeugen." + +#~ msgid "No files to send" +#~ msgstr "Keine Dateien zu verschicken" + +#~ msgid "" +#~ "There are no PDF documents to print.\n" +#~ "\n" +#~ "You probably need to run LilyPond to create or update a PDF document. If " +#~ "you are creating MIDI files, be sure you also put a \\layout { } section " +#~ "in your score, otherwise LilyPond will not create a PDF." +#~ msgstr "" +#~ "Es sind keine PDF-Dokumente zum Drucken verfügbar.\n" +#~ "\n" +#~ "Sie müssen möglicherweise LilyPond starten, um ein PDF-Dokument zu " +#~ "erzeugen oder zu aktualisieren. Falls Sie MIDI-Dateien erzeugen, sorgen " +#~ "Sie dafür, dass sich ein \"\\layout { }\"-Abschnitt in der Partitur " +#~ "befindet, andernfalls wird LilyPond keine PDF-Datei erzeugen." + +#~ msgid "No files to print" +#~ msgstr "Keine Dateien zu drucken" + +#~ msgid "Email documents" +#~ msgstr "Email-Dokumente" + +#~ msgid "Please select the files you want to send:" +#~ msgstr "Bitte wählen Sie die Dateien aus, die Sie verschicken wollen:" + +#~ msgid "" +#~ "These are the files that are up-to-date (i.e. newer than the LilyPond " +#~ "source document). Also LilyPond files included by the source document are " +#~ "shown." +#~ msgstr "" +#~ "Das sind die Dateien, die aktuell sind (also neuer als das LilyPond " +#~ "Quellcode-Dokument). Es werden auch LilyPond-Dateien angezeigt, die vom " +#~ "Quellcode eingebettet werden." + +#~ msgid "" +#~ "Note: this PDF file has been created with embedded point-and-click URLs " +#~ "(preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the file in publish mode, because then the PDF file " +#~ "is much smaller." +#~ msgid_plural "" +#~ "Note: these PDF files have been created with embedded point-and-click " +#~ "URLs (preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the files in publish mode, because then the PDF files " +#~ "are much smaller." +#~ msgstr[0] "" +#~ "Diese PDF-Datei wurde mit Point-And-Click-URLs erstellt (im Vorschau-" +#~ "Modus), was die Dateigröße stark erhöht. Es ist besser, die Datei ohne " +#~ "Point-And-Click-URLs zu erstellen, weil die PDF-Datei dann kleiner ist." +#~ msgstr[1] "" +#~ "Diese PDF-Dateien wurden mit Point-And-Click-URLs erstellt (im Vorschau-" +#~ "Modus), was die Dateigröße stark erhöht. Es ist besser, die Dateien ohne " +#~ "Point-And-Click-URLs zu erstellen, weil die PDF-Dateien dann kleiner sind." +#~ "fortfahren?" + +#~ msgid "" +#~ "Note: If there are no PDF and no MIDI files, you probably need to run " +#~ "LilyPond to update those files, before sending the e-mail." +#~ msgstr "" +#~ "Bitte beachten: Falls keine PDF- und MIDI-Dateien existieren, müssen Sie " +#~ "möglicherweise LilyPond starten, um diese Dateien zu aktualisieren, bevor " +#~ "Sie das Email verschicken." + +#~ msgid "" +#~ "These are the PDF documents that are up-to-date (i.e. newer than the " +#~ "LilyPond source document). Check the documents you want to send to the " +#~ "printer." +#~ msgstr "" +#~ "Das sind die PDF-Dateien, die aktuell sind (also neuer als das LilyPond " +#~ "Quellcode-Dokument). Bitte die Dokumente auswählen, die Sie drucken " +#~ "wollen." + +#~ msgid "Print %1" +#~ msgstr "Drucke %1" + +#~ msgid "" +#~ "A print command (like 'lpr' or 'lp') could not be found on your system." +#~ msgstr "" +#~ "Auf Ihrem System konnte kein Druckbefehl (wie 'lpr' oder 'lp') gefunden " +#~ "werden." + +#~ msgid "The command '%1' could not be found on your system." +#~ msgstr "Der Befehl '%1' konnte auf Ihrem System nicht gefunden werden." + +#~ msgid "" +#~ "The command below has been run, but exited with a return code %1.\n" +#~ "\n" +#~ "%2" +#~ msgstr "" +#~ "Der unten stehende Befehl wurde ausgeführt, wurde aber mit Rückgabewert %" +#~ "1 beendet.\n" +#~ "\n" +#~ "%2" + +#~ msgid "Create blank staff paper" +#~ msgstr "Erzeuge leeres Notenpapier" + +#~ msgid "Choose what kind of empty staves you want to create." +#~ msgstr "" +#~ "Bitte wählen Sie aus, welche Art leerer Notenzeilen Sie erzeugen wollen." + +#~ msgid "Choose which action happens when clicking \"Ok\"." +#~ msgstr "Aktion auswählen, die ausgeführt wird, wenn \"Ok\" angeklickt wird." + +#~ msgid "Preview the empty staff paper." +#~ msgstr "Vorschau des leeren Notenpapiers anzeigen." + +#~ msgid "Click to see more settings." +#~ msgstr "Anklicken für weitere Einstellungen." + +#~ msgid "Print Bar Lines" +#~ msgstr "Erzeuge Taktstriche" + +#~ msgid "Bars per line:" +#~ msgstr "Takte pro Zeile:" + +#~ msgid "Blank staff paper preview" +#~ msgstr "Vorschau des Papiers mit leeren Notenzeilen" + +#~ msgid "No PDF was created." +#~ msgstr "PDF wurde nicht erzeugt." + +#~ msgid "Open in PDF viewer" +#~ msgstr "Öffne im PDF-Betrachter" + +#~ msgid "Print staff paper" +#~ msgstr "Drucke Notenpapier" + +#~ msgid "Copy LilyPond code to editor" +#~ msgstr "Kopiere LilyPond-Code in den Editor" + +#~ msgid "Clef:" +#~ msgstr "Schlüssel:" + +#~ msgid "Single Staff" +#~ msgstr "Einzelne Notenzeile" + +#~ msgid "Systems per page:" +#~ msgstr "Systeme pro Seite:" + +#~ msgid "Clefs" +#~ msgstr "Schlüssel" + +#~ msgid "Piano Staff" +#~ msgstr "Klavier-Notenzeilen" + +#~ msgid "Organ Staff" +#~ msgstr "Orgel-Notenzeilen" + +#~ msgid "Staves per system:" +#~ msgstr "Notenzeilen pro System:" + +#~ msgid "Clefs:" +#~ msgstr "Schlüssel:" + +#~ msgid "" +#~ "To configure clefs, first set the number of staves per system. Then enter " +#~ "as many letters (S, A, T or B) as there are staves.\n" +#~ "\n" +#~ "S or A: treble clef,\n" +#~ "T: treble clef with an \"8\" below,\n" +#~ "B: bass clef\n" +#~ "\n" +#~ "So when you want to create music paper for a four-part mixed choir score, " +#~ "first set the number of staves per system to 4. Then enter \"SATB" +#~ "\" (without the quotes) here." +#~ msgstr "" +#~ "Um Schlüssel einzurichten, wählen Sie zuerst die Zahl der Notenzeilen pro " +#~ "System. Dann geben Sie so viele Buchstaben (S, A, T oder B) ein wie es " +#~ "Notenzeilen gibt.\n" +#~ "\n" +#~ "S oder A: Violinschlüssel,\n" +#~ "T: Violinschlüssel mit einer \"8\" darunter,\n" +#~ "B: Bassschlüssel\n" +#~ "\n" +#~ "Wenn Sie also eine Seite mit vierstimmigem gemischten Chor erzeugen " +#~ "wollen, setzen Sie zuerst die Anzahl der Notenzeilen pro System auf 4. " +#~ "Dann geben Sie \"SATB\" (ohne die Anführungsstriche) hier ein." + +#~ msgid "Choir Staff" +#~ msgstr "Chor-Notenzeilen" + +#~ msgid "Custom Staff" +#~ msgstr "Eigene Notenzeilen" + +#~ msgid "Space below:" +#~ msgstr "Platz darunter:" + +#~ msgid "Please select a music expression, enclosed in << ... >> or { ... }." +#~ msgstr "" +#~ "Bitte Musik auswählen, die in << ... >> oder { ... } eingeschlossen ist." + +#~ msgid "Please enter a start pitch and a destination pitch:" +#~ msgstr "Bitte geben Sie eine Start- und eine Ziel-Tonart ein:" + +#~ msgid "Transpose from:" +#~ msgstr "Transponiere von:" + +#~ msgid "to:" +#~ msgstr "nach:" + +#~ msgid "Install" +#~ msgstr "Installieren" + +#~ msgid "Download LilyPond" +#~ msgstr "LilyPond herunterladen" + +#~ msgid "" +#~ "With this tool you can download packaged binary releases of LilyPond for " +#~ "your operating system." +#~ msgstr "" +#~ "Mit diesem Werkzeug können Sie LilyPond als Pakete für Ihr Betriebssystem " +#~ "herunterladen." + +#~ msgid "Select the LilyPond version you want to download." +#~ msgstr "" +#~ "Bitte wählen Sie die LilyPond-Version aus, die Sie herunterladen wollen." + +#~ msgid "" +#~ "Select a writable directory you want to install LilyPond to.\n" +#~ "(A version-numbered directory will be created in this directory.)" +#~ msgstr "" +#~ "Ein Verzeichnis mit Schreibzugriff auswählen, in das Sie LilyPond " +#~ "installieren wollen.\n" +#~ "(Ein Verzeichnis mit Versionsnummer wird in diesem Verzeichnis erzeugt.)" + +#~ msgid "Install into:" +#~ msgstr "Installiere nach:" + +#~ msgid "Details" +#~ msgstr "Details" + +#~ msgid "The website where LilyPond binaries can be downloaded." +#~ msgstr "Die Website, auf der LilyPond-Pakete heruntergeladen werden können." + +#~ msgid "Download from:" +#~ msgstr "Herunterladen von:" + +#~ msgid "Machine type:" +#~ msgstr "Machinentyp:" + +#~ msgid "" +#~ "This is the URL to the package that will be downloaded and installed.\n" +#~ "You can also browse to other places to select a LilyPond package." +#~ msgstr "" +#~ "Das ist die URL des Pakets, das heruntergeladen und installiert wird.\n" +#~ "Sie können auch an anderen suchen, um ein LilyPond-Paket auszuwählen." + +#~ msgid "Package Url:" +#~ msgstr "Paket-URL:" + +#~ msgid "Downloading directory listing..." +#~ msgstr "Lade Ordnerinhalt herunter..." + +#~ msgid "No packages found. You can browse to a package manually." +#~ msgstr "Keine Pakete gefunden. Sie können manuell ein Paket auswählen." + +#~ msgid "Latest Development Version (%1)" +#~ msgstr "Neueste Entwicklerversion (%1)" + +#~ msgid "Latest Stable Version (%1)" +#~ msgstr "Neueste stabile Version (%1)" + +#~ msgid "Downloading %1..." +#~ msgstr "Lade %1 herunter..." + +#~ msgid "Download cancelled." +#~ msgstr "Herunterladen abgebrochen." + +#~ msgid "Download failed: %1" +#~ msgstr "Herunterladen fehlgeschlagen: %1" + +#~ msgid "" +#~ "LilyPond %1 seems already to be installed in %2.\n" +#~ "\n" +#~ "Do you want to use it or to remove and re-install?" +#~ msgstr "" +#~ "LilyPond %1 scheint bereits in %2 installiert zu sein.\n" +#~ "\n" +#~ "Wollen Sie es benutzen, oder entfernen und neu installieren?" + +#~ msgid "Use existing LilyPond" +#~ msgstr "Vorhandenes LilyPond benutzen" + +#~ msgid "Remove and re-install" +#~ msgstr "Entfernen und neu installieren" + +#~ msgid "Unpacking %1..." +#~ msgstr "Entpacke %1..." + +#~ msgid "Unpacking finished." +#~ msgstr "Entpacken beendet." + +#~ msgid "Unpacking failed." +#~ msgstr "Entpacken fehlgeschlagen." + +#~ msgid "" +#~ "An error occurred:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Ein Fehler ist aufgetreten:\n" +#~ "\n" +#~ "%1" + +#~ msgid "" +#~ "This is the list of defined expansions.\n" +#~ "\n" +#~ "Click on a row to see or change the associated text. Doubleclick a " +#~ "shortcut or its description to change it. You can also press F2 to edit " +#~ "the current shortcut.\n" +#~ "\n" +#~ "Use the buttons below to add or remove expansions.\n" +#~ "\n" +#~ "There are two ways to use the expansion: either type the shortcut in the " +#~ "text and then call the Expand function, or just call the Expand function " +#~ "(default shortcut: Ctrl+.), choose the expansion from the list and press " +#~ "Enter or click Ok." +#~ msgstr "" +#~ "Das ist die Liste voreingestellter Erweiterungen.\n" +#~ "\n" +#~ "Klicken Sie auf eine Zeile um den verknüpften Text zu sehen oder um ihn " +#~ "zu ändern. Doppelklicken Sie auf eine Verknüpfung oder ihre Beschreibung, " +#~ "um sie zu ändern. Sie können auch F2 drücken, um die aktuelle Verknüpfung " +#~ "zu bearbeiten.\n" +#~ "\n" +#~ "Benutzen Sie die Knöpfe unten, um Erweiterungen hinzuzufügen oder zu " +#~ "entfernen.\n" +#~ "\n" +#~ "Erweiterungen können auf zwei Wegen benutzt werden: entweder das Kürzel " +#~ "im Text eingeben und dann die Erweiterungs-Funktion aufrufen, oder " +#~ "einfach die Erweiterung-Funktion aufrufen (Standard-Verknüpfung: Ctrl+.), " +#~ "die Erweiterung aus der Liste auswählen und Enter oder OK anklicken." + +#~ msgid "" +#~ "This is the text associated with the selected shortcut. Some characters " +#~ "have special meaning:" +#~ msgstr "" +#~ "Dieser Text ist mit dem ausgewählten Kürzel verknüpft. Einige Buchstaben " +#~ "haben besondere Bedeutung:" + +#~ msgid "Translate the following pitch." +#~ msgstr "Verschiebe die folgende Tonlage." + +#~ msgid "New Item" +#~ msgstr "Neues Objekt" + +#~ msgid "" +#~ "Another expansion already uses this name.\n" +#~ "\n" +#~ "Please use a different name." +#~ msgstr "" +#~ "Eine andere Erweiterung benutzt bereits diesen Namen.\n" +#~ "\n" +#~ "Bitte benutzen Sie einen anderen Namen." + +#~ msgid "" +#~ "Please only use letters, numbers and the underscore character in the " +#~ "expansion name." +#~ msgstr "" +#~ "Benutzen Sie bitte nur Buchstaben, Zahlen und Unterstriche im Namen für " +#~ "die Erweiterung." + +#~ msgid "Please don't leave the description empty." +#~ msgstr "Bitte lassen Sie diese Beschreibung nicht leer." + +#~ msgid "" +#~ "Could not find any hyphenation dictionaries.\n" +#~ "\n" +#~ "Please install a package containing some and/or or configure the search " +#~ "path to find them in the Frescobaldi settings under \"Paths.\"" +#~ msgstr "" +#~ "Konnte kein Wörterbuch für Silbentrennung finden.\n" +#~ "\n" +#~ "Bitte installieren Sie eines, und/oder richten Sie den Such-Pfad von " +#~ "Frescobaldi entsprechend ein (unter Einstellungen, \"Pfade\")." + +#~ msgid "Larger text" +#~ msgstr "Größerer Text" + +#~ msgid "Smaller text" +#~ msgstr "Kleinerer Text" + +#~ msgid "Up one level" +#~ msgstr "Eine Stufe nach oben" + +#~ msgid "Index" +#~ msgstr "Index" + +#~ msgid "Copy &Link" +#~ msgstr "Kopiere L&ink" + +#~ msgid "Open Link in &New Window" +#~ msgstr "Öffne Link in &neuem Fenster" + +#~ msgid "Open Document in &New Window" +#~ msgstr "Öffne Dokument in N&euem Fenster" + +#~ msgid "Loading..." +#~ msgstr "Lade..." + +#~ msgid "LilyPond Command Index" +#~ msgstr "LilyPond-Befehlsindex" + +#~ msgid "Learning Manual" +#~ msgstr "Anleitung für Einsteiger" + +#~ msgid "Learning Manual Index" +#~ msgstr "Index der Anleitung für Einsteiger" + +#~ msgid "Internals Reference" +#~ msgstr "Interne Referenz" + +#~ msgid "The %1 context" +#~ msgstr "Der %1-Kontext" + +#~ msgid "The %1 layout object" +#~ msgstr "Das %1-Layout-Objekt" + +#~ msgid "" +#~ "Where to add articulations et cetera: above or below the staff or in the " +#~ "default position." +#~ msgstr "" +#~ "Wo Artikulationen usw. hinzuzufügen sind: über oder unter der Zeile oder " +#~ "an der Standard-Position." + +#~ msgid "Click an articulation sign to add it to your document." +#~ msgstr "Artikulationszeichen anklicken, um es dem Dokument hinzuzufügen." + +#~ msgid "" +#~ "If you select some music first, the articulation will be added to all " +#~ "notes in the selection." +#~ msgstr "" +#~ "Wenn Sie zuerst einige Noten auswählen, wird das Artikulationszeichen zu " +#~ "allen Noten in der Auswahl hinzugefügt." + +#~ msgid "Click a dynamic sign to add it to your document." +#~ msgstr "Dynamikzeichen anklicken, um es dem Dokument hinzuzufügen." + +#~ msgid "" +#~ "If you select some music first, dynamic spanners will be added the " +#~ "selected fragment." +#~ msgstr "" +#~ "Wenn Sie zuerst einige Noten auswählen, werden dynamische Strecker zu " +#~ "diesem Notenfragment hinzugefügt." + +#~ msgid "" +#~ "If you have selected some music and you click a sign after a spanner, the " +#~ "sign will terminate the spanner." +#~ msgstr "" +#~ "Falls Sie einige Noten ausgewählt haben und auf ein Zeichen nach dem " +#~ "Strecker klicken, wird dieses Zeichen den Strecker beenden." + +#~ msgid "These spanners need a music fragment to be selected." +#~ msgstr "Für diese Strecker muss ein Musikabschnitt ausgewählt sein." + +#~ msgid "Arpeggios are used with chords with multiple notes." +#~ msgstr "Arpeggios werden mit Akkorden mit mehreren Noten benutzt." + +#~ msgid "" +#~ "Glissandos are attached to a note and automatically extend to the next " +#~ "note." +#~ msgstr "" +#~ "Glissandos werden an eine Note angefügt und automatisch zur nächsten Note " +#~ "verlängert." + +#~ msgid "Run LilyPond (preview)" +#~ msgstr "Starte LilyPond (Vorschau)" + +#~ msgid "Run LilyPond (publish)" +#~ msgstr "Starte LilyPond (Veröffentlichung)" + +#~ msgid "Run LilyPond (custom)..." +#~ msgstr "Starte LilyPond (eigene Einstellung)" + +#~ msgid "Interrupt LilyPond Job" +#~ msgstr "Unterbreche LilyPond-Job" + +#~ msgid "Email Documents..." +#~ msgstr "Email-Dokumente..." + +#~ msgid "Cut selection and assign it to a LilyPond variable." +#~ msgstr "Schneide Auswahl aus und weise sie einer LilyPond-Variable zu." + +#~ msgid "Repeat the last music expression (note or chord)." +#~ msgstr "Wiederhole den letzten musikalischen Ausdruck (Note oder Akkord)." + +#~ msgid "Insert or Manage Expansions..." +#~ msgstr "Erweiterungen einfügen oder verwalten..." + +#~ msgid "Expand last word or open the expansions dialog." +#~ msgstr "Erweitere das letzte Wort oder öffne den Erweiterungsdialog." + +#~ msgid "Insert special characters." +#~ msgstr "Füge besondere Zeichen ein." + +#~ msgid "Add to Expansions" +#~ msgstr "Zu Erweiterungen hinzufügen" + +#~ msgid "Go to the next blank line." +#~ msgstr "Gehe zur nächsten leeren Zeile." + +#~ msgid "Previous blank line" +#~ msgstr "Vorherige Leerzeile" + +#~ msgid "Go to the previous blank line." +#~ msgstr "Gehe zur vorherigen leeren Zeile." + +#~ msgid "Select to next blank line" +#~ msgstr "Wähle nächste Leerzeile aus" + +#~ msgid "" +#~ "Selects text from the current position down to and including the next " +#~ "blank line." +#~ msgstr "" +#~ "Wähle Text von der aktuellen Position einschließlich bis zur nächsten " +#~ "Leerzeile aus." + +#~ msgid "Select to previous blank line" +#~ msgstr "Wähle vorherige Leerzeile aus" + +#~ msgid "" +#~ "Selects text from the current position up to right after the previous " +#~ "blank line." +#~ msgstr "" +#~ "Wähle den Text von der aktuellen Position hinauf einschließlich bis zur " +#~ "nächsten vorherigen Leerzeile aus." + +#~ msgid "Move selection to next blank line" +#~ msgstr "Verschiebe Auswahl zur nächsten Leerzeile" + +#~ msgid "Moves selected block to next blank line." +#~ msgstr "Verschiebe ausgewählten Block zur nächsten Leerzeile." + +#~ msgid "Move selection to previous blank line" +#~ msgstr "Verschiebe Auswahl zur vorherigen Leerzeile" + +#~ msgid "Moves selected block to previous blank line." +#~ msgstr "Verschiebe ausgewählten Block zur vorherigen Leerzeile." + +#~ msgid "Single Quote" +#~ msgstr "Einfache Anführungsstriche" + +#~ msgid "Double Quote" +#~ msgstr "Doppelte Anführungszeichen" + +#~ msgid "Align" +#~ msgstr "Ausrichten" + +#~ msgid "Insert pair of braces" +#~ msgstr "Füge Klammern-Paar ein" + +#~ msgid "" +#~ "Your document has been modified and needs to be saved before LilyPond can " +#~ "be started.\n" +#~ "\n" +#~ "Save the document now?" +#~ msgstr "" +#~ "Ihr Dokument wurde verändert und muss gespeichert werden, bevor LilyPond " +#~ "gestartet werden kann.\n" +#~ "\n" +#~ "Das Dokument jetzt speichern?" + +#~ msgid "There is already a LilyPond job running for this document." +#~ msgstr "Es läuft bereits ein LilyPond-Job für dieses Dokument." + +#~ msgid "Can't process document" +#~ msgstr "Kann Dokument nicht verarbeiten" + +#~ msgid "Continue anyway?" +#~ msgstr "Trotzdem fortfahren?" + +#~ msgid "" +#~ "You want to run LilyPond in preview mode (with point and click enabled), " +#~ "but your document contains a command to turn point and click off." +#~ msgstr "" +#~ "Sie wollen LilyPond im Vorschau-Modus starten (mit \"Point and Click\"), " +#~ "aber Ihr Dokument enthält einen Befehl, der \"Point and Click\" " +#~ "abschaltet." + +#~ msgid "" +#~ "You want to run LilyPond in publish mode (with point and click disabled), " +#~ "but your document contains a command to turn point and click on." +#~ msgstr "" +#~ "Sie wollen LilyPond im Veröffentlichungs-Modus starten (ohne \"Point and " +#~ "Click\"), aber Ihr Dokument enthält einen Befehl, der \"Point and Click\" " +#~ "anschaltet." + +#~ msgid "Abort the running LilyPond process" +#~ msgstr "Breche den laufenden LilyPond-Prozess ab" + +#~ msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" +#~ msgstr "" +#~ "Starte LilyPond im Vorschau-Modus (Umschalten + Klicken für speziellen " +#~ "Dialog)" + +#~ msgid "LilyPond has successfully compiled %1." +#~ msgstr "LilyPond hat %1 erfolgreich kompiliert." + +#~ msgid "LilyPond exited with an error compiling %1." +#~ msgstr "LilyPond wurde beim Kompilieren von %1 mit Fehler beendet." + +#~ msgid "" +#~ "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" +#~ msgstr "" +#~ "Rhythmus mit von Leerzeichen getrennten Werten eingeben (z.B. 8. 16 8 4 8)" + +#~ msgid "Terminal" +#~ msgstr "Terminal" + +#~ msgid "" +#~ "Could not load the KMid part.\n" +#~ "Please install KMid 2.4.0 or higher." +#~ msgstr "" +#~ "Konte KMid-Part nicht laden.\n" +#~ "Bitte KMid 2.4.0 oder neuer installieren." + +#~ msgid "Show PDF Navigation Panel" +#~ msgstr "Zeige PDF-Navigationspanel" + +#~ msgid "Show PDF minipager" +#~ msgstr "Zeige PDF-Minipager" + +#~ msgid "Configure Okular..." +#~ msgstr "Konfiguriere Okular..." + +#~ msgid "S&ynchronize Preview with Current Document" +#~ msgstr "S&ynchronisiere Vorschau mit aktuellem Dokument" + +#~ msgid "Reload" +#~ msgstr "Neu laden" + +#~ msgid "no log" +#~ msgstr "Kein Log" + +#~ msgid "Only show on errors" +#~ msgstr "Zeige nur bei aufgetretenen Fehlern" + +#~ msgid "Rumor" +#~ msgstr "Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter " +#~ "from the LilyPond document." +#~ msgstr "" +#~ "Das Metrum. 'Auto' lässt Frescobaldi das Metrum aus dem LilyPond-Dokument " +#~ "bestimmen." + +#~ msgid "Quantize:" +#~ msgstr "Quantisiere:" + +#~ msgid "The shortest note duration to use." +#~ msgstr "Kürzester zu benutzender Notenwert." + +#~ msgid "Record LilyPond input note by note, without durations." +#~ msgstr "Nehme LilyPond-Input Note für Note auf, ohne Notenlängen." + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Record monophonic input, without chords." +#~ msgstr "Nehme einstimmig auf, ohne Akkorde." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let Frescobaldi determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Anzahl der Vorzeichen. Negative Nummern bedeuten Bs. 'Auto' lässt " +#~ "Frescobaldi die Vorzeichen aus dem LilyPond-Dokument bestimmen." + +#~ msgid "Meter:" +#~ msgstr "Metrum:" + +#~ msgid "Key:" +#~ msgstr "Tonart:" + +#~ msgid "Configure..." +#~ msgstr "Konfiguriere..." + +#~ msgid "Adjust more settings, like MIDI input and output." +#~ msgstr "Mehr Einstellungen, wie z.B. MIDI-Eingang und -Ausgabe." + +#~ msgid "Set these settings as default." +#~ msgstr "Speichere diese Einstellungen als Standard-Einstellung." + +#~ msgid "Found rumor version %1." +#~ msgstr "Rumor Version %1 gefunden." + +#~ msgid "Could not find Rumor: %1" +#~ msgstr "Konnte Rumor nicht finden: %1" + +#~ msgid "Settings have been saved." +#~ msgstr "Voreinstellungen wurden gespeichert." + +#~ msgid "Record" +#~ msgstr "Aufnahme" + +#~ msgid "Start or stop Rumor MIDI-recording." +#~ msgstr "Starte oder stoppe Rumor MIDI-Aufnahme." + +#~ msgid "Rumor is recording, press ESC to stop." +#~ msgstr "Rumor nimmt auf, drücken Sie ESC zum Stoppen." + +#~ msgid "Rumor stopped." +#~ msgstr "Rumor angehalten." + +#~ msgid "TiMidity" +#~ msgstr "TiMidity" + +#~ msgid "Start or stop the TiMidity ALSA MIDI client." +#~ msgstr "Starte oder stoppe den TiMidity-ALSA-MIDI-Client." + +#~ msgid "Rumor Settings" +#~ msgstr "Rumor Voreinstellungen" + +#~ msgid "OSS device %1" +#~ msgstr "OSS-Gerät %1" + +#~ msgid "" +#~ "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard " +#~ "of your computer." +#~ msgstr "" +#~ "Zu benutzende MIDI-Quelle. Wählen Sie 'Keyboard', wenn Sie auf der " +#~ "Tastatur ihres Rechners spielen möchten." + +#~ msgid "MIDI output:" +#~ msgstr "MIDI-Ausgabe:" + +#~ msgid "MIDI output to use." +#~ msgstr "Zu benutzende MIDI-Ausgabe." + +#~ msgid "The LilyPond language you want Rumor to output the pitches in." +#~ msgstr "Die LilyPond-Sprache, in der Rumor die Tonstufen ausgeben soll." + +#~ msgid "Explicit durations" +#~ msgstr "Explizite Notenlängen" + +#~ msgid "" +#~ "Add a duration after every note, even if it is the same as the preceding " +#~ "note." +#~ msgstr "" +#~ "Die Notenlänge nach jeder Note einfügen, auch wenn es die selbe ist wie " +#~ "die vorhergehende." + +#~ msgid "Absolute pitch" +#~ msgstr "Absolute Tonlage" + +#~ msgid "Use absolute pitches instead of relative." +#~ msgstr "Benutze alsolute Tonhöhen statt relativer." + +#~ msgid "No barlines" +#~ msgstr "Keine Taktstriche" + +#~ msgid "Filter the barlines out of Rumor's output." +#~ msgstr "Filtere die Taktstriche aus der Ausgabe von Rumor." + +#~ msgid "No dots" +#~ msgstr "Keine Punktierung" + +#~ msgid "Do not use dotted notes, but ties instead." +#~ msgstr "Benutze keine punktierten Noten sondern Bindebögen." + +#~ msgid "Legato" +#~ msgstr "Legato" + +#~ msgid "Do not use rests, but give all notes the maximum length." +#~ msgstr "Benutze keine Pausen, sondern gib allen Noten die maximale Länge." + +#~ msgid "Strip leading and trialing rests from output." +#~ msgstr "Schneide Pausen am Anfang und am Ende ab." + +#~ msgid "Guile scripts to load:" +#~ msgstr "Guile-Scripts, die geladen werden sollen:" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. Check " +#~ "\"What's this\" for more information." +#~ msgstr "" +#~ "Hier können Sie auswählen, welche Guile-Skripte von Rumor geladen werden " +#~ "sollen. Siehe auch \"Was ist das\" für mehr Informationen." + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %1. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Hier können Sie auswählen, welche Guile-Skripte von Rumor geladen werden " +#~ "sollen. Sie können Ihre eigenen Skripte hinzufügen, indem Sie sie in %1 " +#~ "angeben. Wenn die erste Zeile Ihres Skripts mit einem Semicolor (;) " +#~ "startet, wird die Zeile als Beschreibung hergenommen." + +#~ msgid "publish mode" +#~ msgstr "Veröffentlichungs-Modus" + +#~ msgid "LilyPond %1 [%2] starting (%3)..." +#~ msgstr "LilyPond %1 [%2] startet (%3)..." + +#~ msgid "LilyPond [%1] starting (%2)..." +#~ msgstr "LilyPond [%1] startet (%2)..." + +#~ msgid "LilyPond [%1] finished (%2)." +#~ msgstr "LilyPond [%1] ist fertig (%2)." + +#~ msgid "Select which LilyPond version you want to run:" +#~ msgstr "Bitte LilyPond-Version auswählen, die Sie starten wollen:" + +#~ msgid "LilyPond %1" +#~ msgstr "LilyPond %1" + +#~ msgid "Automatic LilyPond Version (determined from document)." +#~ msgstr "Automatische LilyPond-Version (bestimmt aus dem Dokument)." + +#~ msgid "Path: %1" +#~ msgstr "Pfad: %1" + +#~ msgid "LilyPond (version unknown)" +#~ msgstr "LilyPond (Version unbekannt)" + +#~ msgid "" +#~ "Use LilyPond (version unknown)\n" +#~ "Path: %1" +#~ msgstr "" +#~ "Benutze LilyPond (Version unbekannt)\n" +#~ "Pfad: %1" + +#~ msgid "Save LilyPond Log as" +#~ msgstr "Speichere LilyPond-Log unter" + +#~ msgid "" +#~ "Could not save LilyPond log:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Konnte LilyPond-Log nicht speichern:\n" +#~ "\n" +#~ "%1" + +#~ msgid "LilyPond-related settings" +#~ msgstr "Einstellungen zu LilyPond" + +#~ msgid "LilyPond version to use:" +#~ msgstr "Zu nutzende LilyPond-Version:" + +#~ msgid "" +#~ "Here you can set a fixed LilyPond version to run on documents in this " +#~ "session.\n" +#~ "\n" +#~ "The LilyPond version selected here is run by default on your documents, " +#~ "and it's also used by the \"Insert Version\" command." +#~ msgstr "" +#~ "Hier können Sie eine feste LilyPond-Version auswählen, die für Dokumente " +#~ "in dieser Sitzung benutzt wird.\n" +#~ "\n" +#~ "Die ausgewählte LilyPond-Version wird standardmäßig für Ihre Dokumente " +#~ "benutzt, und wird auch beim \"Versionsnummer einfügen\"-Befehl benutzt." + +#~ msgid "Configure" +#~ msgstr "Konfigurieren" + +#~ msgid "General Frescobaldi Preferences" +#~ msgstr "Allgemeine Einstellungen von Frescobaldi" + +#~ msgid "Paths to programs or data used by Frescobaldi" +#~ msgstr "" +#~ "Pfade zu den Programmen oder Daten, die von Frescobaldi benutzt werden" + +#~ msgid "Rumor MIDI input" +#~ msgstr "Rumor-MIDI-Eingang" + +#~ msgid "Rumor MIDI input plugin settings" +#~ msgstr "Einstellungen für Rumor-MIDI-Eingabe-Plugin" + +#~ msgid "Editor Component" +#~ msgstr "Editor-Komponente" + +#~ msgid "Editor Component Options" +#~ msgstr "Einstellungen der Editor-Komponente" + +#~ msgid "LilyPond version number to use for new documents" +#~ msgstr "" +#~ "Die LilyPond-Versionsnummer, die für neue Dokumente benutzt werden soll" + +#~ msgid "Use version number of installed LilyPond" +#~ msgstr "Benutze Versionsnummer der LilyPond-Installation" + +#~ msgid "Use version number of last convert-ly rule" +#~ msgstr "Benutze Versionsnummer der letzten convert-ly Regel" + +#~ msgid "Enter a valid LilyPond version number, e.g. 2.12.0" +#~ msgstr "Eine gültige LilyPond-Versionsnummer eingeben, z.B. 2.12.0" + +#~ msgid "Warnings and Notifications" +#~ msgstr "Warnungen und Benachrichtigungen" + +#~ msgid "Warn when a document contains a conflicting point and click setting" +#~ msgstr "" +#~ "Warnen, wenn ein Dokument einen Konflikt bei der \"Point and Click\"-" +#~ "Einstellung enthält" + +#~ msgid "Warn when a document needs to be saved before LilyPond is run" +#~ msgstr "" +#~ "Warne, wenn ein Dokument gespeichert werden muss, bevor LilyPond " +#~ "ausgeführt wird" + +#~ msgid "Warn when saving a session would overwrite another" +#~ msgstr "" +#~ "Warne, wenn das Speichern einer Sitzung eine andere überschreiben würde" + +#~ msgid "Point and Click" +#~ msgstr "\"Point and Click\"" + +#~ msgid "Enable Point and Click" +#~ msgstr "\"Point and Click\" anschalten" + +#~ msgid "" +#~ "Click this button if Point and Click does not work. See Shift+F1 (What's " +#~ "This) for more information." +#~ msgstr "" +#~ "Diesen Knopf drücken, falls \"Point and Click\" nicht funktioniert. Siehe " +#~ "\"Was ist das?\"-Hilfe (Umschalten + F1) für mehr Informationen." + +#~ msgid "" +#~ "On its first run, Frescobaldi tries to auto-configure Okular (which " +#~ "provides the PDF preview) to call Frescobaldi when a clickable object is " +#~ "clicked.\n" +#~ "\n" +#~ "But this setting can get lost when you move Frescobaldi to a different " +#~ "location or when other applications reconfigure Okular.\n" +#~ "\n" +#~ "Click this button to configure Frescobaldi as 'custom editor' inside " +#~ "Okular. This works best when all instances of Okular are closed and the " +#~ "PDF preview has not yet been opened." +#~ msgstr "" +#~ "Beim ersten Start versucht Frescobaldi, Okuklar (das für die PDF-Vorschau " +#~ "zuständig ist) automatisch zu konfigurieren, so dass Frescobaldi " +#~ "aufgerufen wird, wenn ein klickbares Objekt angeklickt wird.\n" +#~ "\n" +#~ "Wenn Sie Frescobaldi in einen anderen Ordner verschieben oder Okular von " +#~ "anderen Programmen neu konfiguriert wird, geht diese Konfiguration " +#~ "verloren.\n" +#~ "\n" +#~ "Klicken Sie diesen Knopf, um Frescobaldi als 'nutzerspezifischen Editor' " +#~ "innerhalb von Okular einzurichten. Das funktioniert am besten, wenn alle " +#~ "Instanzen von Okular geschlossen sind und die PDF-Vorschau noch nicht " +#~ "geöffnet wurde." + +#~ msgid "" +#~ "The Okular PDF preview has been reconfigured.\n" +#~ "\n" +#~ "If you already opened the PDF preview, restart Frescobaldi for the new " +#~ "settings to take effect." +#~ msgstr "" +#~ "Die Einstellungen zur Okular-PDF-Vorschau wurden geändert.\n" +#~ "\n" +#~ "Falls Sie die PDF-Vorschau bereits geöffnet haben, starten Sie " +#~ "Frescobaldi neu, um die neuen Einstellungen zu übernehmen." + +#~ msgid "PDF Viewer:" +#~ msgstr "PDF-Betrachter:" + +#~ msgid "PDF Viewer" +#~ msgstr "PDF-Betrachter" + +#~ msgid "(leave empty for operating system default)" +#~ msgstr "(leer lassen für Standardeinstellung des Betriebssystems)" + +#~ msgid "MIDI Player:" +#~ msgstr "MIDI-Player:" + +#~ msgid "Url:" +#~ msgstr "URL:" + +#~ msgid "Url or path to the LilyPond documentation." +#~ msgstr "URL oder Pfad zur LilyPond-Dokumentation." + +#~ msgid "Lyrics Hyphenation" +#~ msgstr "Text-Silbentrennung" + +#~ msgid "" +#~ "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " +#~ "KOffice, etc, one per line. If you leave out the starting slash, the " +#~ "prefixes from the KDEDIRS environment variable are prepended." +#~ msgstr "" +#~ "Orte, an denen nach Silbentrennungswörterbüchern (Hyphenation) von " +#~ "OpenOffice.org, Scribus, KOffice, etc, gesucht werden soll, je einer pro " +#~ "Zeile. Wenn Sie den Schrägstrich am Anfang weglassen, werden die Pfade " +#~ "aus der KDEDIRS-Variable benutzt." + +#~ msgid "Commands used by the Rumor MIDI input module" +#~ msgstr "Befehle, die vom Rumor-MIDI-Eingabe-Modul benutzt werden" + +#~ msgid "Name or full path of the Rumor program." +#~ msgstr "Name oder vollständiger Pfad des Programms Rumor." + +#~ msgid "" +#~ "Name or full path of the aconnect program (part of ALSA, for MIDI input " +#~ "and playback using Rumor)." +#~ msgstr "" +#~ "Name oder vollständiger Pfad des Programms aconnect (Teil von ALSA, für " +#~ "MIDI-Input und Abspielen mit Rumor)." + +#~ msgid "" +#~ "Full command to start Timidity (or any other program) as an ALSA MIDI " +#~ "client." +#~ msgstr "" +#~ "Vollständiger Befehl zum Starten von Timidity (oder einem anderen " +#~ "Programm) als ALSA-MIDI-Client." + +#~ msgid "Close Button" +#~ msgstr "Schließen-Knopf" + +#~ msgid "Large Tabs" +#~ msgstr "Große Dokumenten-Reiter" + +#~ msgid "Tabs can be moved" +#~ msgstr "Reiter können verschoben werden" + +#~ msgid "Download..." +#~ msgstr "Herunterladen..." + +#~ msgid "Download new binary LilyPond releases." +#~ msgstr "Neue LilyPond-Pakete herunterladen." + +#~ msgid "LilyPond Command" +#~ msgstr "LilyPond-Befehl" + +#~ msgid "Choose a session." +#~ msgstr "Eine Sitzung auswählen." + +#~ msgid "Choose..." +#~ msgstr "Auswählen..." + +#~ msgid "Your document has already a LilyPond version statement." +#~ msgstr "Die LilyPond-Version Ihres Dokuments ist bereits festgelegt." + +#~ msgid "Version already set" +#~ msgstr "Version bereits festgelegt" + +#~ msgid "" +#~ "Can't determine the version of LilyPond. Please check your LilyPond " +#~ "installation." +#~ msgstr "" +#~ "Konnte die LilyPond-Version nicht entdecken. Bitte kontrollieren Sie Ihre " +#~ "Installation." + +#~ msgid "" +#~ "Can't determine the LilyPond version of the current document. Please add " +#~ "a \\version statement with the correct version." +#~ msgstr "" +#~ "Konnte die LilyPond-Version nicht entdecken. Bitte fügen Sie eine " +#~ "\\version Deklaration mit der korrekten Version hinzu." + +#~ msgid "This LilyPond document is already up-to-date." +#~ msgstr "Dieses LilyPond-Dokument ist bereits auf dem neuesten Stand." + +#~ msgid "" +#~ "The document has been processed with convert-ly. You'll find the messages " +#~ "of convert-ly in a comment block at the end. You still may have to edit " +#~ "some parts manually." +#~ msgstr "" +#~ "Das Dokument wurde mit convert-ly verarbeitet. Sie finden die Meldungen " +#~ "von convert-ly in einem Kommentar-Block am Ende. Sie müssen vielleicht " +#~ "noch einige Teile manuell bearbeiten." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %1" +#~ msgstr "" +#~ "Das Dokument wurde mit convert-ly verarbeitet, blieb aber unverändert. " +#~ "Das ist die Meldung von convert-ly: %1" + +#~ msgid "Could not start convert-ly: %1" +#~ msgstr "Konnte convert-ly nicht starten: %1" + +#~ msgid "The tempo in beats per minute." +#~ msgstr "Das Tempo in BPM (beats per minute)." + +#~ msgid "Treble" +#~ msgstr "Sopran" + +#~ msgid "Treble 8" +#~ msgstr "Sopran 8" + +#~ msgid "Tab clef" +#~ msgstr "Tab-Schlüssel" + +#~ msgid "No Clef" +#~ msgstr "Kein Schlüssel" + +#~ msgid "Add selected part to your score." +#~ msgstr "Füge ausgewählten Teil der Partitur hinzu." + +#~ msgid "A tempo indication, e.g. \"Allegro.\"" +#~ msgstr "Eine Tempo-Bezeichnung, z.B. \"Allegro.\"" + +#~ msgid "Wrap score in \\book block" +#~ msgstr "Partitur in einen \\book-Block einbetten" + +#~ msgid "If checked, wraps the \\score block inside a \\book block." +#~ msgstr "" +#~ "Falls aktiviert, wird der \\score-Block in einen \\book-Block eingebettet." + +#~ msgid "How many voices to put in this staff." +#~ msgstr "Wie viele Stimmen in diese Notenzeile gehören." + +#~ msgid "Basso continuo" +#~ msgstr "Basso Continuo" + +#~ msgid "Guitar" +#~ msgstr "Gitarre" + +#~ msgid "Oboe d'Amore" +#~ msgstr "Oboe d'Amore" + +#~ msgid "English Horn" +#~ msgstr "English Horn" + +#~ msgid "Mezzo soprano" +#~ msgstr "Mezzosopran" + +#~ msgid "Open PDF" +#~ msgstr "Öffne PDF" + +#~ msgid "Email..." +#~ msgstr "Email..." + +#~ msgid "Disable the built-in PDF preview" +#~ msgstr "Schalte eingebettete PDF-Vorschau ab" + +#~ msgid "The direction to use for the articulations." +#~ msgstr "Die Richtung für die Artikulationszeichen." + +#~ msgid "Your document has been modified, please save first." +#~ msgstr "Ihr Dokument wurde verändert, bitte speichern Sie es zuerst ab." + +#~ msgid "" +#~ "Printing failed: %1\n" +#~ "\n" +#~ "The print command %2 does probably not exist. Please check your settings." +#~ msgstr "" +#~ "Drucken fehlgeschlagen: %1\n" +#~ "\n" +#~ "Der Druckbefehl %2 existiert vielleicht nicht. Bitte überprüfen Sie die " +#~ "Einstellungen." + +#~ msgid "The print command contains errors. Please check your settings." +#~ msgstr "" +#~ "Der Druckbefehl ist fehlerhaft. Bitte überprüfen Sie die Einstellungen." + +#~ msgid "Directly print on default printer" +#~ msgstr "Mit Standard-Drucker direkt drucken" + +#, fuzzy +#~ msgid "Notify when a document has been sent to the printer" +#~ msgstr "Das Dokument wurde zum Drucker geschickt." + +#~ msgid "" +#~ "Command to print a PDF file, for example lpr or kprinter. You may add " +#~ "some arguments, e.g. lpr -P myprinter." +#~ msgstr "" +#~ "Befehl, um ein PDF zu drucken, z.B. lpr oder kprinter. Sie können auch " +#~ "weitere Argumente hinzufügen, beispielsweise lpr -P meindrucker." + +#~ msgid "Space above:" +#~ msgstr "Platz darüber:" + +#~ msgid "Name or full path of the convert-ly program." +#~ msgstr "Name oder vollständiger Pfad des convert-ly-Programms." + +#~ msgid "Expand" +#~ msgstr "Erweitere" + +#~ msgid "Show" +#~ msgstr "Zeigen" + +#, fuzzy +#~ msgid "Paper Size A4" +#~ msgstr "Papier-Format:" + +#, fuzzy +#~ msgid "Paper Size A5" +#~ msgstr "Papier-Format:" + +#, fuzzy +#~ msgid "Paper Size Letter" +#~ msgstr "Papier-Format:" + +#, fuzzy +#~ msgid "Stem Up" +#~ msgstr "Schritt" + +#, fuzzy +#~ msgid "Stem Down" +#~ msgstr "Unten" + +#, fuzzy +#~ msgid "Lyric Stanza" +#~ msgstr "Strophen:" + +#, fuzzy +#~ msgid "Midi section" +#~ msgstr "Gewidmet" + +#, fuzzy +#~ msgid "With: instrumentName" +#~ msgstr "Instrumentennamen" + +#, fuzzy +#~ msgid "With: shortInstrumentName" +#~ msgstr "Instrumentennamen" + +#, fuzzy +#~ msgid "New Lyrics" +#~ msgstr "Text" + +#~ msgid "Your document currently has no filename, please save first." +#~ msgstr "" +#~ "Ihr Dokument hat zur Zeit keinen Namen. Bitte speichern Sie es zunächst " +#~ "ab." + +#~ msgid "" +#~ "Sorry, support for remote files is not yet implemented.\n" +#~ "Please save your document to a local file." +#~ msgstr "" +#~ "Remote-Files werden noch nicht unterstützt.\n" +#~ "Bitte speichern Sie Ihr Dokument lokal ab." + +#~ msgid "Already Running" +#~ msgstr "Läuft bereits" + +#, fuzzy +#~ msgid "LilyPond crashed." +#~ msgstr "LilyPond" + +#~ msgid "" +#~ "A LilyPond Kate/Pate plugin.\n" +#~ "\n" +#~ "This is LilyKDE, a plugin to make it easy to run the LilyPond music " +#~ "typesetter from within Kate.\n" +#~ "\n" +#~ "Version: $version\n" +#~ "Homepage: $homepage\n" +#~ msgstr "" +#~ "Ein LilyPond Kate/Pate Plugin.\n" +#~ "\n" +#~ "Hier ist LilyKDE, ein Plugin zum einfachen Editieren von LilyPond-Dateien " +#~ "mit Hilfe von Kate. \n" +#~ "\n" +#~ "Version: $version\n" +#~ "Homepage: $homepage\n" + +#~ msgid "LilyPond [$filename] was terminated by signal $signal." +#~ msgstr "LilyPond [$filename] wurde von Signal $signal beendet." + +#~ msgid "LilyPond [$filename] exited abnormally." +#~ msgstr "LilyPond [$filename] wurde vorzeitig beendet." + +#~ msgid "LilyPond did not write a PDF. You probably forgot \\layout?" +#~ msgstr "" +#~ "LilyPond hat kein PDF erzeugt. Möglicherweise haben Sie \\layout " +#~ "vergessen?" + +#~ msgid "Clear LilyPond Log" +#~ msgstr "Räume LilyPond-Logfile auf" + +#~ msgid "Record MIDI with Rumor" +#~ msgstr "Nehme MIDI mit Rumor auf" + +#~ msgid "Dock/Undock PDF preview" +#~ msgstr "PDF-Vorschau andocken/abdocken " + +#~ msgid "Name or full path of the pdftk program (see %s)." +#~ msgstr "Name oder vollständiger Pfad des Programms pdftk (siehe %s)." + +#~ msgid "" +#~ "Check the actions you want to display (if applicable) after LilyPond has " +#~ "successfully compiled your document." +#~ msgstr "" +#~ "Wählen Sie die Aktionen aus, die nach Abschluss der Übersetzung durch " +#~ "LilyPond angezeigt werden sollen." + +#~ msgid "Keep undocked windows on top of Kate" +#~ msgstr "Abgedockte Fenster über Kate halten" + +#~ msgid "Force reload of PDF preview when LilyPond has run" +#~ msgstr "Neuladen der PDF-Vorschau forcieren nach Ablauf von LilyPond" + +#~ msgid "Always embed LilyPond source files in published PDF" +#~ msgstr "Quellcode der LilyPond-Dateien immer in die PDF-Dateien einbetten" + +#~ msgid "TiMidity successfully started." +#~ msgstr "TiMidity erfolgreich gestartet." + +#~ msgid "TiMidity stopped." +#~ msgstr "TiMidity gestoppt." + +#~ msgid "" +#~ "Could not start TiMidity. Please try the command %s in a terminal to find " +#~ "out what went wrong." +#~ msgstr "" +#~ "Konnte TiMidity nicht starten. Starten Sie den Befehl %s in einer " +#~ "Konsole, um herauszufinden, was falsch gelaufen ist." + +#~ msgid "Configure %s" +#~ msgstr "Konfiguriere %s" + +#~ msgid "Remove selected part from your score." +#~ msgstr "Ausgewählten Teil der Partitur löschen." + +#~ msgid "Move selected part up." +#~ msgstr "Ausgewählten Teil hoch schieben." + +#~ msgid "Move selected part down." +#~ msgstr "Ausgewählten Teil herunter schieben" + +#~ msgid "Italian names" +#~ msgstr "Italienische Namen" + +#~ msgid "" +#~ "Choose standard Italian instrument names, like '%s' instead of 'Organ.'" +#~ msgstr "Italienische Instrumentennamen, wie %s, statt 'Orgel'." + +#~ msgid "Could not start Pdftk: %s" +#~ msgstr "Konnte Pdftk nicht starten: %s" + +#~ msgid "Embedded file %s in PDF." +#~ msgid_plural "Embedded files %s in PDF." +#~ msgstr[0] "Datei %s in PDF eingebettet." +#~ msgstr[1] "Dateien %s in PDF eingebettet." + +#~ msgid "Embedding files in PDF failed." +#~ msgstr "Einbetten von Dateien ins PDF missglückt." + +#~ msgid "Return code: %i" +#~ msgstr "Return-Code: %i" + +#~ msgid "Open the folder containing the LilyPond and PDF documents." +#~ msgstr "Öffene das Verzeichnis mit den LilyPond und PDF-Dokumenten" + +#~ msgid "Open the generated PDF file with the default PDF viewer." +#~ msgstr "Öffne das generierte PDF mit dem voreingestellten Anzeigeprogramm." + +#~ msgid "" +#~ "Print the PDF using the print command set in the Commands settings page." +#~ msgstr "Drucke das PDF mit dem angegebenen Druckbefehl." + +#~ msgid "Email PDF" +#~ msgstr "Verschicke PDF per Email" + +#~ msgid "Attach the PDF to an email message." +#~ msgstr "PDF als Email-Anhang." + +#~ msgid "" +#~ "Play the generated MIDI files using the default MIDI player (Timidity++ " +#~ "is recommended)." +#~ msgstr "Spiele das generierte MIDI mit dem voreingestellten MIDI-Player." + +#~ msgid "Embed source" +#~ msgstr "Quelle einbetten" + +#~ msgid "Embed the LilyPond source files in the published PDF (using pdftk)." +#~ msgstr "LilyPond-Quelldatei in das PDF einbetten (mit pdfk)" + +#~ msgid "Different tools to edit durations." +#~ msgstr "Verschiedene Werkzeuge zum Editieren von Tonlängen." + +#~ msgid "" +#~ "Press to apply the entered rhythm to the selected music. This will delete " +#~ "previously entered durations." +#~ msgstr "" +#~ "Drücken, um den eingegebenen Rhytmus der ausgewählten Musik zuzufügen. " +#~ "Dieslöscht zuvor eingegebe Werte." + +#~ msgid "LilyKDE servicemenu helper" +#~ msgstr "LilyKDE Servicemenü-Hilfe" + +#~ msgid "LilyPond [$filename] starting ($mode)..." +#~ msgstr "LilyPond [$filename] startet ($mode)..." + +#~ msgid "Could not start LilyPond." +#~ msgstr "Konnte LilyPond nicht starten." + +#~ msgid "LilyPond [$filename] exited with return code $retcode." +#~ msgstr "LilyPond [$filename] wurde mit dem Return-Code $retcode beendet." + +#~ msgid "LilyPond [$filename] finished." +#~ msgstr "LilyPond [$filename] ist fertig." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %s" +#~ msgstr "" +#~ "Das Dokument wurde mit convert-ly verarbeitet, aber blieb unverändert. " +#~ "Das ist die meldung von convert-ly: %s" + +#~ msgid "Start or stop Rumor" +#~ msgstr "Starte oder stoppe Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let LilyKDE determine the meter from " +#~ "the LilyPond document." +#~ msgstr "" +#~ "Das Metrum. 'Auto' lässt LilyKDE das Metrum vom LilPond-Dokument " +#~ "bestimmen." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let LilyKDE determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Anzahl der Vorzeichen. Negative Nummern bedeuten Bs. 'Auto' lässt LilyKDE " +#~ "die Vorzeichen aus dem LilyPond-Dokument bestimmen." + +#~ msgid "Could not find Rumor: %s" +#~ msgstr "Konnte Rumor nicht finden: %s" + +#~ msgid "OSS device %d" +#~ msgstr "OSS Gerät %d" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %s. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Hier können Sie auswählen, welche Guile-Skripte von Rumor geladen werden " +#~ "sollen. Sie können Ihre eigenen Skripte hinzufügen, indem Sie sie in %s " +#~ "angeben. Wenn die erste Zeile Ihres Skripts mit einem Semicolor (;) " +#~ "startet, wird die Zeile als Beschreibung hergenommen." + +#~ msgid "Use no, short or long instrument names before the next systems." +#~ msgstr "Keine, kurze oder lange Instrumentennamen vor dem nächsten System." + +#~ msgid "LilyPond files to convert" +#~ msgstr "LilyPont files, die konvertiert werden" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Set this to your name" +#~ msgstr "Henrik Evers" Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/es.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/es.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/es.po frescobaldi-2.0.0/frescobaldi_app/po/es.po --- frescobaldi-1.2.0/frescobaldi_app/po/es.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/es.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6381 @@ +# translation of es.po to Español +# Header entry was created by KBabel! +# Francisco Vila , 2008, 2009, 2010, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: es\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: 2011-12-21 01:04+0100\n" +"Last-Translator: Francisco Vila \n" +"Language-Team: Español \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: \n" +"#-#-#-#-# es.po (es) #-#-#-#-#\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "{appname} está escrito en {python} y usa el kit de herramientas {qt}." + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +msgid "Python" +msgstr "Python" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "Qt4" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" +"La Vista de música se realiza con la biblioteca {poppler} de {authors} y " +"otros." + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +msgid "Poppler" +msgstr "Poppler" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "Casi todos los iconos incluidos están creados con {tango}." + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "El proyecto de escritorio Tango Desktop" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "{appname} se encuentra traducido a los siguientes idiomas:" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "Acerca de {appname}" + +#: frescobaldi_app/about.py:87 +msgid "About" +msgstr "Acerca de" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "Créditos" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "Versión" + +#: frescobaldi_app/about.py:144 +msgid "Operating System" +msgstr "Sistema operativo" + +#: frescobaldi_app/about.py:151 +msgid "Version {version}" +msgstr "Versión {version}" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +msgid "A LilyPond Music Editor" +msgstr "Editor de música para LilyPond" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "Copyright (c) {year} por {author}" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "Enviar un mensaje de correo electrónico a los mantenedores." + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "Traducido por Francisco Vila." + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "Publicado bajo la licencia {gpl}." + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "Esta combinación entra en conflicto con la siguiente instrucción:" +msgstr[1] "" +"Esta combinación entra en conflicto con las siguientes instrucciones:" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +msgid "Shortcut Conflict" +msgstr "Conflicto de combinación de teclado" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "Editar de nuevo" + +#: frescobaldi_app/app.py:128 +msgid "LilyPond Files" +msgstr "Archivos de LilyPond" + +#: frescobaldi_app/app.py:129 +msgid "LaTeX Files" +msgstr "Archivos de LaTeX" + +#: frescobaldi_app/app.py:130 +msgid "DocBook Files" +msgstr "Archivos de DocBook" + +#: frescobaldi_app/app.py:131 +msgid "HTML Files" +msgstr "Archivos HTML" + +#: frescobaldi_app/app.py:132 +msgid "Texinfo Files" +msgstr "Archivos de Texinfo" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "Archivos de Scheme" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Todos los archivos" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "&Marcar línea actual" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "Borrar marcas de &error" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "Borrar todas las marc&as" + +#: frescobaldi_app/bookmarkmanager.py:115 +msgid "Next Mark" +msgstr "Marca siguiente" + +#: frescobaldi_app/bookmarkmanager.py:116 +msgid "Previous Mark" +msgstr "Marca anterior" + +#: frescobaldi_app/convert_ly.py:118 +msgid "From version:" +msgstr "De la versión:" + +#: frescobaldi_app/convert_ly.py:119 +msgid "To version:" +msgstr "A la versión:" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "Guardar los mensajes de convert-ly en el documento" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" +"Si está seleccionado, los mensajes de convert-ly se añaden al final del " +"documento en forma de comentarios." + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "&Mensajes" + +#: frescobaldi_app/convert_ly.py:125 +msgid "&Changes" +msgstr "&Cambios" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "Ejecutar de nuevo" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +msgid "" +msgstr "" + +#: frescobaldi_app/convert_ly.py:138 +msgid "Convert-ly from LilyPond {version}" +msgstr "Convert-ly de LilyPond {version}" + +#: frescobaldi_app/convert_ly.py:162 +msgid "(set in document)" +msgstr "(fijado en el documento)" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "Se deben establecer las dos versiones «de» y «a»" + +#: frescobaldi_app/convert_ly.py:190 +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "" +"No se pudo iniciar {convert_ly}:\n" +"\n" +"{message}\n" + +#: frescobaldi_app/convert_ly.py:196 +msgid "The document has not been changed." +msgstr "El documento no ha cambiado." + +#: frescobaldi_app/convert_ly.py:202 +msgid "Current Document" +msgstr "Documento actual" + +#: frescobaldi_app/convert_ly.py:202 +msgid "Converted Document" +msgstr "Documento convertido" + +#: frescobaldi_app/convert_ly.py:208 +msgid "Colors:" +msgstr "Colores:" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "Añadido" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "Cambiado" + +#: frescobaldi_app/convert_ly.py:211 +msgid "Deleted" +msgstr "Eliminado" + +#: frescobaldi_app/convert_ly.py:212 +msgid "Links:" +msgstr "Enlaces:" + +#: frescobaldi_app/convert_ly.py:213 +msgid "First Change" +msgstr "Primer cambio" + +#: frescobaldi_app/convert_ly.py:214 +msgid "Next Change" +msgstr "Siguiente cambio" + +#: frescobaldi_app/convert_ly.py:215 +msgid "Top" +msgstr "Principio" + +#: frescobaldi_app/cut_assign.py:39 +msgid "Cut and Assign" +msgstr "Cortar y asignar" + +#: frescobaldi_app/cut_assign.py:40 +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "" +"Escriba el nombre de la variable a la que asignar el texto seleccionado:" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +msgid "Untitled" +msgstr "Sin título" + +#: frescobaldi_app/document.py:145 +msgid "Untitled ({num})" +msgstr "Sin título ({num})" + +#: frescobaldi_app/documentactions.py:125 +msgid "Cut and Assign..." +msgstr "Cortar y asignar..." + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "Resaltado de sinta&xis" + +#: frescobaldi_app/documentactions.py:127 +msgid "&Automatic Indent" +msgstr "Sangrado &automático" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "Apl&icar sangrado" + +#: frescobaldi_app/documentactions.py:129 +msgid "&Format" +msgstr "&Formato" + +#: frescobaldi_app/documentactions.py:130 +msgid "&Update with convert-ly..." +msgstr "&Actualizar mediante convert-ly..." + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +msgid "&Save" +msgstr "&Guardar" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +msgid "Save &As..." +msgstr "Guard&ar como..." + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "&Cerrar" + +#: frescobaldi_app/documentmenu.py:42 +msgctxt "menu title" +msgid "&Document" +msgstr "&Documento" + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "[procesado siempre]" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Se ha producido un error interno:" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "Error interno" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Enviar informe de fallo..." + +#: frescobaldi_app/exception.py:79 +msgid "Optionally describe below what you were doing:" +msgstr "Opcionalmente, describa debajo lo que estaba haciendo:" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:76 +#, fuzzy +msgid "Roman Font:" +msgstr "Tipografía:" + +#: frescobaldi_app/globalfontdialog.py:77 +#, fuzzy +msgid "Sans Font:" +msgstr "Tipografía:" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:79 +#, fuzzy +msgid "Staff Size:" +msgstr "Tamaño del pentagrama" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Enguionar el texto de la letra" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Seleccione un idioma:" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +msgid "Lyrics" +msgstr "Letra" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +msgctxt "menu title" +msgid "Tools" +msgstr "Herramientas" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "Editar" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +msgid "Preferences" +msgstr "Preferencias" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi puede colocar guiones de separación de sílabas '{hyphen}' " +"automáticamente en los textos para hacerlos utilizables\n" +"como letra de canciones.\n" +"Puede usar diccionarios de enguionado de OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"Para usar esta funcionalidad, debe seleccionar primero el texto que quiere " +"enguionar. Después\n" +"presione {key_hyphen} o elija del menú {menu_hyphen}.\n" +"En el diáglogo que aparece, elija el idioma.\n" +"Pulse Aceptar o la tecla Enter para que se produzca el enguionado. \n" +"

\n" +"\n" +"

\n" +"Una pequeña limitación es que los diccionarios de enguionado de los editores " +"de texto a menudo no\n" +"quieren dividir una palabra justo después de la primera letra (p.ej. " +"'{example}'), porque eso no\n" +"deja buena impresión visual en los textos del editor. Así que podría ocurrir " +"que\n" +"tenga que añadir ciertos guiones después de la primera letra de tales textos " +"de canción. \n" +"

\n" +"\n" +"

\n" +"También hay una instrucción para quitar el enguionado. Esto puede ser de " +"utilidad si tiene un versículo\n" +"de texto que quiere mostrar como elemento de marcado debajo de la música.\n" +"Bajo {menu_settings} puede introducir una lista de los directorios\n" +"de búsqueda para la localización archivos de patrones de enguionado.\n" +"

\n" + +#: frescobaldi_app/inputdialog.py:101 +msgid "Select Color" +msgstr "Seleccionar color" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "Iniciando {job}..." + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "Abortando {job}..." + +#: frescobaldi_app/job.py:206 +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "" +"No se ha podido iniciar {program}.\n" +"Compruebe la ruta y los permisos." + +#: frescobaldi_app/job.py:209 +msgid "Could not read from the process." +msgstr "No se ha podido leer a partir del proceso." + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Se ha producido un error desconocido." + +#: frescobaldi_app/job.py:216 +msgid "Exited with return code {code}." +msgstr "Se ha devuelto al salir el código {code}." + +#: frescobaldi_app/job.py:218 +msgid "Exited with exit status {status}." +msgstr "Se ha salido con el estado {status}." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "Completado con éxito en {time}." + +#: frescobaldi_app/lyrics.py:132 +msgid "&Hyphenate Lyrics Text..." +msgstr "En&guionar el texto de la letra..." + +#: frescobaldi_app/lyrics.py:133 +msgid "&Remove hyphenation" +msgstr "Quita&r el enguionado" + +#: frescobaldi_app/lyrics.py:134 +msgid "&Copy Lyrics with hyphenation removed" +msgstr "&Copiar la letra sin los separadores de sílabas" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "{appname} [opciones] archivo ..." + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "ENC" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Codificación que usar" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "NUM" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Número de línea al que saltar, empezando por 1" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Columna a la que ir, empezando por 0" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "NAME" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "Sesión que iniciar ('{none}' para sesión vacía)" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +msgid "[modified]" +msgstr "[modificado]" + +#: frescobaldi_app/mainwindow.py:268 +msgctxt "dialog title" +msgid "Close Document" +msgstr "Cerrar el documento" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" +"El documento \"{name}\" se ha modificado.\n" +"¿Quiere guardar los cambios o descartarlos?" + +#: frescobaldi_app/mainwindow.py:281 +#, fuzzy +msgid "Tab Bar" +msgstr "Tablatura" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +msgid "Warning" +msgstr "Advertencia" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" +"No se pudo cargar el documento no local:\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:354 +msgctxt "dialog title" +msgid "Open File" +msgstr "Abrir archivo" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "Error" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" +"No se pudo escribir en el destino:\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:399 +msgctxt "dialog title" +msgid "Save File" +msgstr "Guardar archivo" + +#: frescobaldi_app/mainwindow.py:439 +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Guardar copia" + +#: frescobaldi_app/mainwindow.py:445 +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Guardar selección" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"No se pudo escibir en el destino:\n" +"\n" +"{url}\n" +"\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "Insertar desde archivo" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"No se pudo leer de la fuente:\n" +"\n" +"{url}\n" +"\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:541 +msgctxt "dialog title" +msgid "Print Source" +msgstr "Imprimir fuente" + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "Exportar como HTML" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" +"Describa el problema o petición de funcionalidad.\n" +"Aporte toda la información posible.\n" +"\n" +"\n" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "Barra principal" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "Barra de vista de música" + +#: frescobaldi_app/mainwindow.py:923 +msgctxt "action: new document" +msgid "&New" +msgstr "&Nuevo" + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "&Abrir..." + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "Abrir &reciente" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "&Insertar desde archivo..." + +#: frescobaldi_app/mainwindow.py:927 +msgid "Open Current Directory" +msgstr "Abrir carpeta actual" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "Guardar copia o selección como..." + +#: frescobaldi_app/mainwindow.py:931 +msgid "Save All" +msgstr "Guardar todo" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "Imprimir fuente..." + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "Cerrar otros documentos" + +#: frescobaldi_app/mainwindow.py:935 +msgid "Close All Documents" +msgstr "Cerrar todos los documentos" + +#: frescobaldi_app/mainwindow.py:936 +msgid "Closes all documents and leaves the current session." +msgstr "Cierra todos los documentos y deja la sesión actual." + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "Sal&ir" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "Exportar fuente como &HTML coloreado..." + +#: frescobaldi_app/mainwindow.py:941 +msgid "&Undo" +msgstr "Des&hacer" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "Reha&cer" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "Cor&tar" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Copiar" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "Copiar como &HTML coloreado" + +#: frescobaldi_app/mainwindow.py:946 +msgid "&Paste" +msgstr "&Pegar" + +#: frescobaldi_app/mainwindow.py:947 +msgid "Select &All" +msgstr "Seleccion&ar todo" + +#: frescobaldi_app/mainwindow.py:948 +msgid "Select &Block" +msgstr "Seleccionar &bloque" + +#: frescobaldi_app/mainwindow.py:949 +msgid "Select &None" +msgstr "Seleccionar &nada" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "Seleccionar líneas completas hacia arriba" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "Seleccionar líneas completas hacia abajo" + +#: frescobaldi_app/mainwindow.py:952 +msgid "&Find..." +msgstr "&Buscar..." + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "Buscar siguien&te" + +#: frescobaldi_app/mainwindow.py:954 +msgid "Find Pre&vious" +msgstr "Buscar an&terior" + +#: frescobaldi_app/mainwindow.py:955 +msgid "&Replace..." +msgstr "Sustitui&r..." + +#: frescobaldi_app/mainwindow.py:956 +msgid "Pr&eferences..." +msgstr "Pr&eferencias..." + +#: frescobaldi_app/mainwindow.py:958 +msgid "&Next Document" +msgstr "Docume&nto siguiente" + +#: frescobaldi_app/mainwindow.py:959 +msgid "&Previous Document" +msgstr "Documento an&terior" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "Desplazar hacia arriba" + +#: frescobaldi_app/mainwindow.py:961 +msgid "Scroll Down" +msgstr "Desplazar hacia abajo" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "&Ventana siguiente" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "Pantalla co&mpleta" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "Manual del &usuario" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "¿&Qué es esto?" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "Informe de &fallo..." + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "&Acerca de {appname}..." + +#: frescobaldi_app/menu.py:81 +msgctxt "menu title" +msgid "&File" +msgstr "&Archivo" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "&Exportar" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "&Editar" + +#: frescobaldi_app/menu.py:147 +msgctxt "menu title" +msgid "&View" +msgstr "&Vista" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "&Vista de música" + +#: frescobaldi_app/menu.py:189 +msgctxt "menu title" +msgid "&LilyPond" +msgstr "&LilyPond" + +#: frescobaldi_app/menu.py:208 +msgctxt "menu title" +msgid "&Tools" +msgstr "Herramien&tas" + +#: frescobaldi_app/menu.py:233 +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "&Letra" + +#: frescobaldi_app/menu.py:245 +msgctxt "submenu title" +msgid "&Pitch" +msgstr "&Altura" + +#: frescobaldi_app/menu.py:259 +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "Du&raciones" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "&Ventana" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "Ay&uda" + +#: frescobaldi_app/musicpreview.py:113 +msgid "Document:" +msgstr "Documento:" + +#: frescobaldi_app/musicpreview.py:195 +msgid "&Print" +msgstr "Im&primir" + +#: frescobaldi_app/musicpreview.py:196 +msgid "Music Preview" +msgstr "Vista previa de la música" + +#: frescobaldi_app/popplerdummy.py:42 +msgid "Could not load the {name} module." +msgstr "No se ha podido cargar el módulo {name}." + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" +"No se ha encontrado ninguna instrucción para imprimir un archivo " +"PostScript.\n" +"\n" +"Por este motivo, se imprimirá el documento usando imágenes de matriz de " +"puntos a {resolution} ppp. Se recomienda imprimir utilizando un programa " +"visor de documentos PDF dedicado.\n" +"\n" +"¿Quiere continuar?" + +#: frescobaldi_app/popplerprint.py:61 +msgid "PDF Document" +msgstr "Documento PDF" + +#: frescobaldi_app/popplerprint.py:69 +msgid "Print {filename}" +msgstr "Imprimir {filename}" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +msgid "Printing Error" +msgstr "Error de impresión" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +msgid "Could not send the document to the printer." +msgstr "No se pudo enviar el documento a la impresora." + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "Imprimiendo página {page} ({num} de {total})..." + +#: frescobaldi_app/search.py:99 +msgid "Search:" +msgstr "Buscar:" + +#: frescobaldi_app/search.py:100 +msgid "&Case" +msgstr "&May/min" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "Sensible a mayúsculas" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "Expr. ®ular" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "Expresión regular" + +#: frescobaldi_app/search.py:104 +msgid "The total number of matches" +msgstr "Número total de coincidencias" + +#: frescobaldi_app/search.py:105 +msgid "Close" +msgstr "Cerrar" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "Sustituir:" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "Sustitui&r" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "Sustituye la siguiente coincidencia del término buscado." + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "&Todo" + +#: frescobaldi_app/search.py:110 +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "" +"Sustituye todas las apariciones del término buscado dentro del documento o " +"selección." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "Lín.: {line}, Col.: {column}" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "Dividir &Horizontalmente" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "Dividir &Verticalmente" + +#: frescobaldi_app/viewmanager.py:91 +msgid "&Close View" +msgstr "&Cerrar vista" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "&Cerrar vista actual" + +#: frescobaldi_app/viewmanager.py:444 +msgid "Close &Other Views" +msgstr "Cerrar &Otras vistas" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "Siguie&nte vista" + +#: frescobaldi_app/viewmanager.py:446 +msgid "&Previous View" +msgstr "Vista anterio&r" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "&Completar automáticamente" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "Mostrar diálogo de c&ompletar" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +msgid "Special Characters" +msgstr "Caracteres especiales" + +#: frescobaldi_app/charmap/__init__.py:41 +msgid "Special Charac&ters" +msgstr "Carac&teres especiales" + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +msgid "Documentation Browser" +msgstr "Navegador de documentación" + +#: frescobaldi_app/docbrowser/__init__.py:47 +msgid "&Documentation Browser" +msgstr "Navegador de &documentación" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +msgid "Back" +msgstr "Atrás" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "Adelante" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "Inicio" + +#: frescobaldi_app/docbrowser/__init__.py:84 +msgid "&LilyPond Documentation" +msgstr "Documentación de &LilyPond" + +#: frescobaldi_app/docbrowser/__init__.py:85 +msgid "&Contextual LilyPond Help" +msgstr "Ayuda &contextual de LilyPond" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Buscar..." + +#: frescobaldi_app/docbrowser/browser.py:136 +msgid "(local)" +msgstr "(local)" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "({hostname})" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +msgid "LilyPond Source" +msgstr "Fuente de LilyPond" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +msgid "Documents" +msgstr "Documentos" + +#: frescobaldi_app/doclist/__init__.py:40 +msgid "Docum&ents" +msgstr "Docum&entos" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "Proces&ar siemrpe [{docname}]" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "Proces&ar siempre este documento" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "Procesar" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "Proc&esar (vista previa)" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "Procesar (&publicación)" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "Pro&cesar (personalizado)..." + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "A&bortar el procesado" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "Procesar personalizado" + +#: frescobaldi_app/engrave/custom.py:119 +msgid "LilyPond Version:" +msgstr "Versión de LilyPond:" + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "Formato de salida:" + +#: frescobaldi_app/engrave/custom.py:121 +msgid "Resolution:" +msgstr "Resolución:" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "" +"Ejecutar LilyPond en modo de vista previa (con enlaces de apuntar y pulsar)" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "Ejecutar LilyPond con salida prolija" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +msgid "Delete intermediate output files" +msgstr "Borrar los archivos de salida intermedios" + +#: frescobaldi_app/engrave/custom.py:126 +msgid "Command line:" +msgstr "Línea de órdenes:" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "Ejecutar LilyPond" + +#: frescobaldi_app/engrave/custom.py:149 +msgid "LilyPond {version}" +msgstr "LilyPond {version}" + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" +"En este cuadro de diálogo puede ajustar ciertos parámetros para se " +"utilizados por la orden LilyPond\n" +"para tipografiar el documento.\n" +"Es posible, incluso, editar la propia línea de órdenes.\n" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "Se harán las siguientes sustituciones:" + +#: frescobaldi_app/engrave/custom.py:218 +msgid "The LilyPond executable" +msgstr "El archivo ejecutable LilyPond" + +#: frescobaldi_app/engrave/custom.py:219 +msgid "All the include paths" +msgstr "Todas las rutas de inclusión" + +#: frescobaldi_app/engrave/custom.py:220 +msgid "The filename of the document" +msgstr "Nombre de archivo del documento" + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "PDF" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "PostScript" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "PNG" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "SVG" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "PDF (backend EPS)" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "PostScript encapsulado (backend EPS)" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "PNG (backend EPS)" + +#: frescobaldi_app/engrave/result_menu.py:45 +msgid "Generated &Files" +msgstr "Archivos &generados" + +#: frescobaldi_app/engrave/result_menu.py:66 +msgid "No files available" +msgstr "No hay archivos disponibles" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "Barra de herramientas" + +#: frescobaldi_app/help/browser.py:78 +msgid "Start" +msgstr "Inicio" + +#: frescobaldi_app/help/browser.py:79 +msgid "Contents" +msgstr "Contenido" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "Ayuda" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "Sin ayuda" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "No se encontró ninguna ayuda sobre el tema." + +#: frescobaldi_app/help/contents.py:46 +msgid "Frescobaldi Manual" +msgstr "Manual de Frescobaldi" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi es un editor ligero y potente para\n" +"documentos de partitura de LilyPond.\n" +"Este manual está escrito por {author} y es la documentación de {appname} " +"versión {version}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" +"

Cómo obtener ayuda en Frescobaldi

\n" +"\n" +"

\n" +"En muchos diálogos puede pulsar sobre un botón Ayuda o sobre la tecla " +"{key_help}.\n" +"Muchos elementos de la interfaz de usuario también tienen información de " +"\"Qué es esto\"\n" +"que se puede revelar pulsando {key_whatsthis} o seleccionando " +"{menu_whatsthis}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "Qué es esto" + +#: frescobaldi_app/help/contents.py:88 +msgid "Introduction" +msgstr "Introducción" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" +"

\n" +"LilyPond\n" +"es un programa de tipografía musical libre y de código abierto, que produce\n" +"impresiones de partituras de muy alta calidad a partir de archivos de " +"entrada\n" +"sencillos. Esots archivos de texto se pueden crear con cualquier editor de\n" +"texto, y después LilyPond carga este archivo y produce una hermosa\n" +"partitura, que de forma predeterminada está en formato PDF.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi es una aplicación diseñada para hacer más rápida y fácil la\n" +"edición de partituras musicales de LilyPond. Usted debe aprender el\n" +"lenguaje de entrada de LilyPond. Si lee la sección {getting_started} de\n" +"esta guía del usuario, encontrará también algunos conceptos básicos\n" +"de LilyPond.\n" +"

\n" +"\n" +"

\n" +"Después puede seguir aprendiendo mediante el Manual de Aprendizaje\n" +"que forma parte de de la excelente Documentación en línea de LilyPond.\n" +"

" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "Iniciación" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "Procesar (publicación)" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "Preferencias de LilyPond" + +#: frescobaldi_app/help/contents.py:142 +msgctxt "menu title" +msgid "View" +msgstr "Ver" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "Borrar marcas de error" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "Copiar a imagen..." + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" +"

\n" +"La pantalla predeterminada de Frescobaldi muestra un documento de texto\n" +"a la izquierda y una vista previa vacía de música a la derecha.

\n" +"\n" +"

\n" +"Ahora, en la vista de texto, escriba un código de LilyPond, como el " +"siguiente:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"A continuación, pulse sobre el botón del nenúfar de la barra de\n" +"herramientas o la tecla {key_engrave}.\n" +"Si todo está correcto LilyPond se inicia y procesa su archivo.\n" +"En la parte inferior de la pantalla puede seguir los avances de LilyPond.\n" +"Si LilyPond no encuentra ningún error por su parte, produce un\n" +"archivo PDF que se muestra en la vista previa de música:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"La vista de música tiene muchas posibilidades:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Al pasar por encima de las notas y otros objetos se resaltarán en el texto;\n" +"al pulsar sobre los objetos el cursor se moverá a su código " +"correspondiente.\n" +"
  • \n" +"\n" +"
  • \n" +"Use Ctrl-rueda para alterar el grado de ampliación.\n" +"La ampliación se centrará en el puntero del ratón.\n" +"
  • \n" +"\n" +"
  • \n" +"Haga Ctrl-clic sobre un lugar vacío para mostrar una lupa de ampliación\n" +"
  • \n" +"\n" +"
  • \n" +"Mueva el cursor de texto o selecciones texto para destacar\n" +"las notas sobre la vista previa; pulse la tecla {key_jump}\n" +"para centrar explícitamente y destacar una nota u otro objeto\n" +"de la vista previa.\n" +"
  • \n" +"\n" +"
  • \n" +"Puse Mayúsculas y arrastre una selección y después pulse\n" +"{key_copy_image} o elija {menu_copy_image} para copiar la\n" +"música seleccionada como una imagen de mapa de bits al\n" +"portapapeles, a un archivo o a otra aplicación.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"Si su música está terminada, se recomienda ejecutar LilyPond\n" +"una vez más con los enlaces de las notas desactivados:\n" +"menú {menu_engrave}. Esto produce documentos PDF\n" +"mucho más pequeños.\n" +"

\n" +"\n" +"

\n" +"Si LilyPond no se inicia en absoluto, compruebe que ha instalado LilyPond\n" +"correctamente y que la instrucción lilypond está dentro de la variable de " +"entorno PATH de su sistema.\n" +"Si es necesario, proporcione la ruta exacta a su ejecutable de LilyPond " +"bajo\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"Si LilyPond encuentra errores en su documento, se mostrarán en el registro,\n" +"y Frescobaldi marcará las líneas de su documento en que se encontraron los\n" +"errores. Al pulsar sobre el error en el registro o pulsando la tecla " +"{key_error} llevará\n" +"el cursor de texto inmediatamente al lugar problemático. Al pulsar la tecla " +"{key_error} de nuevo\n" +"el cursor se desplazará al siguiente mensaje de error y así sucesivamente. " +"Cuando ejecute LilyPond\n" +"nuevamente, se eliminarán las marcas de líneas de error.\n" +"Puede quitar manualmente las marcas de líneas de error con la opción\n" +"{menu_clear_error_marks}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:228 +msgid "Other Tools" +msgstr "Herramientas adicionales" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "

Otras herramientas importantes están relacionadas aquí.

\n" + +#: frescobaldi_app/help/contents.py:252 +msgid "About Frescobaldi" +msgstr "Acerca de Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi recibe su nombre de\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), organista y compositor italiano.\n" +"

\n" +"\n" +"

\n" +"La página principal de Frescobaldi está en\n" +"www.frescobaldi.org\n" +"y existe una lista de distribución de correo en\n" +"frescobaldi@googlegroups." +"com\n" +"(más información).\n" +"

\n" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "El autor principal de Frescobaldi es {author}." + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "Cómo contribuir" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi es un proyecto de Software Libre para crear un editor amigable de partituras " +"musicales de LilyPond.\n" +"La meta es hacer que Frescobaldi está disponible en todas las plataformas " +"principales.\n" +"

\n" +"\n" +"

\n" +"El desarrollo de Frescobaldi se realiza en un repositorio público de GitHub " +"en {url}.\n" +"Allí puede navegar o descargar el código fuente e informar de fallos y de " +"sus deseos de funcionalidades.\n" +"

\n" +"\n" +"

\n" +"Puede colaborar simplemente mediante la utilización de Frescobaldi y " +"aportando informes de fallos y sugerencias.\n" +"Las traducciones son también muy bienvenidas. La manera de crear " +"traducciones nuevas se describe en el archivo\n" +"README-translations dentro de la distribución del código fuente de " +"Frescobaldi.\n" +"Si quiere añadir alguna funcionalidad, encontrará información sobre la " +"estructura del\n" +"código fuente en el archivo README-development.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:321 +msgid "History of Frescobaldi" +msgstr "Historia de Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi tiene sus raíces en LilyKDE, que era un complemento para el " +"editor Kate de KDE3.\n" +"LilyKDE estaba escrito en Python y se lanzó en la Navidad del año 2007.\n" +"

\n" +"\n" +"

\n" +"Cuando KDE desarrolló la versión 4, no era posible de forma inmediata hacer " +"complementos de Kate\n" +"en Python. De manera que LilyKDE se convirtió en una aplicación " +"independiente, envolviendo\n" +"la parte del editor Kate, y cambió su nombre por el de Frescobaldi. Aún " +"usaba el componente Okular\n" +"de KDE para mostrar los documentos PDF.\n" +"Frescobaldi 0.7 fue la primera versión pública, en la Navidad de 2008.\n" +"En la Navidad de 2009 se lanzó la versión 1.0.0 y en la Navidad de 2010 la " +"versión 1.2.0.\n" +"

\n" +"\n" +"

\n" +"Por entonces se decidió abandonar las bibliotecas de KDE4 y utilizar " +"solamente\n" +"Python y Qt4 que se encuentran disponibles fácilmente en todas las " +"plataformas principales.\n" +"Frescobaldi 2.0 es una reescritura completa partiendo de cero. Su fecha de " +"lanzamiento está prevista para las navidades de 2011.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "El editor" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" +"

\n" +"En esta parte se estudian las funcionalidades del editor,\n" +"p.ej. cómo controlar el sangrado automático, cómo usar la\n" +"búsqueda y sustitución, ectétera.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "Buscar y sustituir" + +#: frescobaldi_app/help/contents.py:377 +msgid "Edit" +msgstr "Editar" + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" +"

\n" +"En el menú {edit_menu} están las instrucciones Buscar ({key_search})\n" +"y Sustituir ({key_replace}), que abren una pequeña ventana en la\n" +"parte inferior de la pantalla.\n" +"Es posible buscar texto normal o expresiones regulares.\n" +"

\n" +"\n" +"

\n" +"Las expresiones regulares son textos de búsqueda avanzada que\n" +"contienen caracteres que pueden corresponder con muchos caracteres\n" +"del documento.\n" +"Cuando se está sustituyendo texto, también es posible referirse a\n" +"partes entre paréntesis del texto de búsqueda.\n" +"

\n" +"\n" +"

\n" +"En el modo de búsqueda de expresiones regulares, ciertos caracteres\n" +"tienen un significado especial:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
corresponde al carácter o grupo anterior repetido cero o más veces
\n" +"
+
\n" +"
corresponde al carácter o grupo anterior repetido una o más veces
\n" +"
?
\n" +"
corresponde al carácter o grupo anterior una o ninguna vez
\n" +"
[ ]
\n" +"
corresponde a uno de los carcateres incluidos
\n" +"
( )
\n" +"
agrupar caracteres. También guarda el texto del grupo que ha " +"correspondido.\n" +"Durante la sustitución, puede usar caracteres como \\1, " +"\\2\n" +"etc. para escribir el texto del grupo correspondiente dentro del\n" +"texto de sustitución.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
corresponde, respectivamente, a una barra invertida, un salto\n" +"de línea, un tope de tabulación, un espacio en blanco, un dígito\n" +"o un carácter gnerérico de tipo palabra.
\n" +"
\n" +"\n" +"

\n" +"Hay una discusión completa acerca de las expresiones regulares en la\n" +"documentación de Python.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:427 +msgid "Document variables" +msgstr "Variables del documento" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" +"Las variables del documento son variables que influyen en el\n" +"comportamiento de Frescobaldi.\n" +"Se pueden escribir en las primeras cinco o en las últimas cinco líneas\n" +"de un documento.\n" +"Si una línea contiene '-*-', Frescobaldi recorre el " +"resto de las líneas en busca de definiciones de variable como\n" +"nombre: valor;.\n" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "Se reconocen las siguientes variables:" + +#: frescobaldi_app/help/contents.py:444 +msgid "mode" +msgstr "modo" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" +"Forzar el modo a lilypond, html, texinfo, latex, docbook o scheme. " +"Predeterminado: reconocimiento automático del modo." + +#: frescobaldi_app/help/contents.py:448 +msgid "filename" +msgstr "nombre de archivo" + +#: frescobaldi_app/help/contents.py:449 +msgid "Compiles another LilyPond document instead of the current." +msgstr "Compila otro documento de LilyPond en lugar del actual." + +#: frescobaldi_app/help/contents.py:450 +msgid "encoding" +msgstr "codificación" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "Usar una codificación distinta de la predeterminada UTF-8." + +#: frescobaldi_app/help/contents.py:452 +msgid "version" +msgstr "versión" + +#: frescobaldi_app/help/contents.py:453 +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "" +"Seleccionar la versión de LilyPond que usar, se puede utilizar para " +"documentos que no sean de LilyPond." + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +msgid "number" +msgstr "número" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "Ancho de la tabulación, por defecto es 8." + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "Si usar tabulaciones en el sangrado, de forma predeterminada {no}." + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" +"Si usar tabulaciones en otras partes del documento, de forma predeterminada " +"{yes}." + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" +"Número de espacios que usa cada nivel de sangrado, de forma predeterminada 2." + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "Puede poner variables del documento dentro de comentarios." + +#: frescobaldi_app/help/contents.py:479 +msgid "Table of Contents" +msgstr "Índice general" + +#: frescobaldi_app/help/helpimpl.py:115 +msgid "Up:" +msgstr "Arriba:" + +#: frescobaldi_app/help/helpimpl.py:130 +msgid "Next:" +msgstr "Siguiente:" + +#: frescobaldi_app/help/helpimpl.py:133 +msgid "See also:" +msgstr "Véase también:" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "(sin tecla definida)" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "Registro de LilyPond" + +#: frescobaldi_app/logtool/__init__.py:51 +msgid "LilyPond &Log" +msgstr "Registro de &LilyPond" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "Mensaje de error siguiente" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "Mensaje de error anterior" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Pulse para editar este archivo" + +#: frescobaldi_app/miditool/__init__.py:51 +msgid "MIDI" +msgstr "MIDI" + +#: frescobaldi_app/miditool/__init__.py:52 +msgid "MIDI &Player" +msgstr "Re&productor MIDI" + +#: frescobaldi_app/miditool/__init__.py:97 +msgctxt "midi player" +msgid "Pause" +msgstr "Pausa" + +#: frescobaldi_app/miditool/__init__.py:98 +msgctxt "midi player" +msgid "Play" +msgstr "Repr." + +#: frescobaldi_app/miditool/__init__.py:99 +msgctxt "midi player" +msgid "Stop" +msgstr "Parada" + +#: frescobaldi_app/miditool/__init__.py:100 +msgctxt "midi player" +msgid "Restart" +msgstr "Reinicio" + +#: frescobaldi_app/miditool/widget.py:102 +msgid "Tempo" +msgstr "Tempo" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "No se encontró ninguna salida" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "CARGADO" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "TOTAL" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "TIEMPO" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "TEMPO" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "PULSO" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "Vista de música" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "Vista de &música" + +#: frescobaldi_app/musicview/__init__.py:191 +msgid "Select Music View Document" +msgstr "Seleccione el documento de vista de música" + +#: frescobaldi_app/musicview/__init__.py:192 +msgid "&Print Music..." +msgstr "Im&primir la música..." + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "A&cercar" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "Ale&jar" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "Ajustar ampliación a la música" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "Ajustar al a&ncho" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "Ajustar al al&to" + +#: frescobaldi_app/musicview/__init__.py:198 +msgid "Fit &Page" +msgstr "Ajustar a la &página" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "Salta&r a la posición del cursor" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "Copiar a &imagen..." + +#: frescobaldi_app/musicview/__init__.py:339 +msgid "Choose the PDF document to display." +msgstr "Selecicone el documento PDF para mostrar." + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" +"Seleccione el documento PDF para mostrar o arrastre el archivo a otra " +"aplicación o lugar." + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "Ajustar al ancho" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "Ajustar a la altura" + +#: frescobaldi_app/musicview/__init__.py:401 +msgid "Fit Page" +msgstr "Ajustar a la página" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "PPP:" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "Color del papel" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "Autorrecorte" + +#: frescobaldi_app/musicview/image.py:129 +msgid "Antialias" +msgstr "Antialias" + +#: frescobaldi_app/musicview/image.py:130 +msgid "Drag" +msgstr "Arrastrar" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "Arrastrar como imagen PNG." + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "&Copiar al portapapeles" + +#: frescobaldi_app/musicview/image.py:133 +msgid "&Save As..." +msgstr "Guard&ar como..." + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" +"

La pulsación del ratón alterna el tamaño de la visualización entre 100% y " +"el tamaño de la ventana. Arrastre para copiar la imagen a otra aplicación. " +"Arrastre con Ctrl (o elija {command}) para desplazarse por una imagen " +"grande.\n" +"

\n" +"

\n" +"También puede arrastrar el pequeño icono de imagen de la parte inferior " +"derecha, que arrastra el propio archivo hacia el disco, p.ej. hacia un " +"mensaje de correo electrónico.\n" +"

" + +#: frescobaldi_app/musicview/image.py:167 +msgid "Image from {filename}" +msgstr "Imagen desde {filename}" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "Guardar imagen como" + +#: frescobaldi_app/musicview/image.py:214 +msgid "Could not save the image." +msgstr "No se ha podido guardar la imagen." + +#: frescobaldi_app/pitch/__init__.py:99 +msgid "Pitch Name &Language" +msgstr "Idioma de &las notas" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" +"Cambiar el idioma de LilyPond que se usa para los nombres de las notas en " +"este documento o en la selección." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "Convertir relativo en &absoluto" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" +"Convierte las notas del documento o la selección de alturas relativas a " +"absolutas." + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "Convertir absoluto en &relativo" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "" +"Convierte las notas del documento o selección de alturas absolutas a " +"relativas." + +#: frescobaldi_app/pitch/__init__.py:111 +msgid "&Transpose..." +msgstr "&Transportar..." + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "Trnasporta todas las notas del documento o selección." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Idioma de las notas" + +#: frescobaldi_app/pitch/pitch.py:82 +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"No se pudo realizar la traducción solicitada.\n" +"\n" +"La música contiene alteraciones de cuartos de tono, pero no están " +"disponibles en el idioma de notas \"{name}\"." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"El idioma de notas del texto seleccionado se ha actualizado, pero debe " +"añadir manualmente la siguiente instrucción al documento:" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "(para LilyPond inferior a 2.14), o" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "(para LilyPond 2.14 y superior.)" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "Transportar" + +#: frescobaldi_app/pitch/pitch.py:399 +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" +"Escriba dos alturas absolutas, separadas por un espacio, usando el idioma " +"\"{language}\"." + +#: frescobaldi_app/pitch/pitch.py:581 +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"No se pudo realizar la transposición solicitada.\n" +"\n" +"La música contiene alteraciones de cuartos de tono que no están disponibles " +"en el idioma de notas \"{language}\"." + +#: frescobaldi_app/pitch/pitch.py:712 +msgid "Pitch manipulation" +msgstr "Manipulación de alturas" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" +"

\n" +"Frescobaldi ofrece las siguientes funciones de manippulación de las alturas, " +"todas ellas en el menú {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Idioma de las notas
\n" +"
\n" +"Traduce los nombres de las notas en el documento completo o en la " +"selección.\n" +"
\n" +"\n" +"
Convertir música relativa en absoluta
\n" +"
\n" +"Convierte todas las partes de música dentro de \\relative a " +"nombres de nota absolutos.\n" +"Elimina las comprobaciones de octava pero las tiene en cuenta.\n" +"
\n" +"\n" +"
Convertir música absoluta en relativa
\n" +"
\n" +"Comprueba todas las expresiones musicales del nivel jerárquico superior, " +"cambiándolas al modo \\relative siempre que la expresión " +"contenga notas.\n" +"Si quiere hacer que las sub-expresiones separadas sean relativas, puede ser " +"necesario seleccionar música de la primera expresión, dejando fuera las " +"llaves de apertura de los niveles más altos.\n" +"
\n" +"\n" +"
\n" + +#: frescobaldi_app/pitch/pitch.py:744 +msgctxt "submenu title" +msgid "Pitch" +msgstr "Altura" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" +"

\n" +"Para transportar música, se necesita indicar dos alturas de nota absolutas\n" +"para especificar el intervalo del transporte. Las notas pueden incluir\n" +"marcas de octava.\n" +"Las notas se deben introducir en el idioma de nombres de nota que se\n" +"usa en el documento.\n" +"

\n" +"\n" +"

\n" +"La música se transportará de la primera altura a la segunda, de\n" +"igual forma que lo haría la instrucción \\transpose\n" +"de LilyPond.\n" +"

\n" +"\n" +"

\n" +"P. ej. para transportar una tercera menor ascendente, introduciríamos:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"Para transportar una segunda mayor descendente, podemos introducir:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"o:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"También es posible usar la función de transposición para cambiar una\n" +"pieza de Do sostenido a Re bemol, o para especificar cuartos de tono\n" +"si están contemplados en el idioma de nombres de nota que está en uso.\n" +"

\n" +"\n" +"

\n" +"La función de transposición puede transportar tanto música absoluta\n" +"como relativa, manejando correctamente las armaduras de tonalidad,\n" +"el modo de acordes y las comprobaciones de octava.\n" +"

\n" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "Uso" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "Uso: %s\n" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "mostrar este mensaje de ayuda y salir" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "mostrar el número de versión del programa y salir" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "Opciones" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "Cerrar solapa" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "¿Qué es esto?" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "Aplicar" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "Aceptar" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "Cancelar" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "Descartar" + +#: frescobaldi_app/po/messages.py:44 +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Guardar" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "Ayuda" + +#: frescobaldi_app/po/messages.py:46 +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Cerrar" + +#: frescobaldi_app/po/messages.py:47 +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Abrir" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "Reiniciar" + +#: frescobaldi_app/po/messages.py:50 +msgctxt "QFileDialog" +msgid "File" +msgstr "Archivo" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "Directorio" + +#: frescobaldi_app/po/messages.py:52 +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Buscar directorio" + +#: frescobaldi_app/po/messages.py:53 +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Todos los archivos (*)" + +#: frescobaldi_app/po/messages.py:55 +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "Desplazar aquí" + +#: frescobaldi_app/po/messages.py:56 +msgctxt "QScrollBar" +msgid "Top" +msgstr "Principio" + +#: frescobaldi_app/po/messages.py:57 +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Final" + +#: frescobaldi_app/po/messages.py:58 +msgctxt "QScrollBar" +msgid "Page up" +msgstr "Subir página" + +#: frescobaldi_app/po/messages.py:59 +msgctxt "QScrollBar" +msgid "Page down" +msgstr "Bajar página" + +#: frescobaldi_app/po/messages.py:60 +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "Desplazar hacia arriba" + +#: frescobaldi_app/po/messages.py:61 +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "Desplazar hacia abajo" + +#: frescobaldi_app/po/messages.py:62 +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Borde izquierdo" + +#: frescobaldi_app/po/messages.py:63 +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Borde derecho" + +#: frescobaldi_app/po/messages.py:64 +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Página a la izquierda" + +#: frescobaldi_app/po/messages.py:65 +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Página a la derecha" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "Desplazar a la izquierda" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "Desplazar a la derecha" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Preferencias generales" + +#: frescobaldi_app/preferences/__init__.py:182 +msgid "MIDI Settings" +msgstr "Ajustes de MIDI" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +msgid "Helper Applications" +msgstr "Aplicaciones complementarias" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Rutas" + +#: frescobaldi_app/preferences/__init__.py:212 +msgid "LilyPond Documentation" +msgstr "Documentación de LilyPond" + +#: frescobaldi_app/preferences/__init__.py:222 +msgid "Keyboard Shortcuts" +msgstr "Combinaciones de teclas" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "Tipografías y colores" + +#: frescobaldi_app/preferences/__init__.py:242 +msgid "Tools" +msgstr "Herramientas" + +#: frescobaldi_app/preferences/documentation.py:64 +msgid "Paths to LilyPond Documentation" +msgstr "Rutas a la documentación de LilyPond" + +#: frescobaldi_app/preferences/documentation.py:66 +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "" +"Añadir rutas o URLs. Consulte \"Qué es esto\" para ver más información." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" +"

Aquí puede añadir rutas o URLs locales que apunten a la documentación de " +"LilyPond. Una ruta local debe apuntar a la carpeta en que reside el " +"directorio \"{documentation}\", o la ruta completa \"share/doc/lilypond/html/" +"offline-root\".

\n" +"

Si no se encuentran, se busca la documentación en todas las subcarpetas " +"de la ruta especificada, a un nivel de profundidad. Ello permite colocar " +"varias versiones de la documentación de LilyPond en distintas subcarpetas y " +"hacer que Frescobaldi las encuentre automáticamente.

" + +#: frescobaldi_app/preferences/documentation.py:111 +msgid "Preferred Language:" +msgstr "Idioma preferido:" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "Predeterminado" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "Inglés (sin traducir)" + +#: frescobaldi_app/preferences/documentation.py:135 +msgid "Please enter a local path or a URL:" +msgstr "Introduzca una ruta o URL local:" + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "Usar este esquema para imprimir" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "Tipografía:" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "Colores básicos" + +#: frescobaldi_app/preferences/fontscolors.py:124 +msgid "Default Styles" +msgstr "Estilos predeterminados" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "(Hereda: {name})" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +msgid "Text" +msgstr "Texto" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "Fondo" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "Negrita" + +#: frescobaldi_app/preferences/fontscolors.py:363 +msgid "Italic" +msgstr "Cursiva" + +#: frescobaldi_app/preferences/fontscolors.py:364 +msgid "Underline" +msgstr "Subrayado" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +msgid "Selected Text" +msgstr "Texto seleccionado" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "Fondo de la selección" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "Línea actual" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +msgid "Marked Line" +msgstr "Línea marcada" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +msgid "Error Line" +msgstr "Línea de error" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "Resultado de la búsqueda" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +msgid "Matching Character" +msgstr "Carácter encontrado" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +msgid "Preview Background" +msgstr "Fondo de la vista previa" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "Resaltado de la vista previa" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +msgid "Keyword" +msgstr "Palabra clave" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +msgid "Function" +msgstr "Función" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "Variable" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +msgid "Value" +msgstr "Valor" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +msgid "String" +msgstr "Cadena" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +msgid "Escape" +msgstr "Escape" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +msgid "Comment" +msgstr "Comentario" + +#: frescobaldi_app/preferences/fontscolors.py:483 +msgid "Pitch" +msgstr "Altura" + +#: frescobaldi_app/preferences/fontscolors.py:484 +msgid "Octave" +msgstr "Octava" + +#: frescobaldi_app/preferences/fontscolors.py:485 +msgid "Duration" +msgstr "Duración" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "Comprobación de octava" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "Digitación" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +msgid "String Number" +msgstr "Número de cuerda" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "Ligadura de expresión" + +#: frescobaldi_app/preferences/fontscolors.py:491 +msgid "Dynamic" +msgstr "Indicación dinámica" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Articulación" + +#: frescobaldi_app/preferences/fontscolors.py:493 +msgid "Chord" +msgstr "Acorde" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "Barra" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "Comprobación" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +msgid "Repeat" +msgstr "Repetición" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "Instrucción" + +#: frescobaldi_app/preferences/fontscolors.py:499 +msgid "Specifier" +msgstr "Especificador" + +#: frescobaldi_app/preferences/fontscolors.py:500 +msgid "User Command" +msgstr "Instrucción de usuario" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +msgid "Markup" +msgstr "Marcado" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "Modo de letra" + +#: frescobaldi_app/preferences/fontscolors.py:503 +msgid "Lyric Text" +msgstr "Texto de la letra" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "Delimitador" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "Contexto" + +#: frescobaldi_app/preferences/fontscolors.py:506 +msgid "Layout Object" +msgstr "Objeto de presentación" + +#: frescobaldi_app/preferences/fontscolors.py:507 +msgid "Property" +msgstr "Propiedad" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "Variable del usuario" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +msgid "Escaped Character" +msgstr "Carácter con escape" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "HTML" + +#: frescobaldi_app/preferences/fontscolors.py:517 +msgid "Tag" +msgstr "Etiqueta" + +#: frescobaldi_app/preferences/fontscolors.py:518 +msgid "LilyPond Tag" +msgstr "Etiqueta de LilyPond" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "Atributo" + +#: frescobaldi_app/preferences/fontscolors.py:521 +msgid "Entity Reference" +msgstr "Referencia a entidad" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "Scheme" + +#: frescobaldi_app/preferences/fontscolors.py:527 +msgid "Number" +msgstr "Número" + +#: frescobaldi_app/preferences/fontscolors.py:528 +msgid "LilyPond Environment" +msgstr "Entorno de LilyPond" + +#: frescobaldi_app/preferences/fontscolors.py:532 +msgid "Texinfo" +msgstr "Texinfo" + +#: frescobaldi_app/preferences/fontscolors.py:534 +msgid "Block" +msgstr "Bloque" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "Literal" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Idioma:" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "Sin traducción" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "Idioma predeterminado del sistema (si está disponible)" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Estilo:" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "Usar iconos del sistema" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" +"Si está activado, los iconos del tema de iconos del escritorio se usarán en " +"lugar de los iconos incorporados.\n" +"Este ajuste cobra efecto la próxima vez que se inicie {appname}." + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "Sesión que cargar si Frescobaldi se inicia sin argumentos" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "Iniciar sin ninguna sesión" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "Iniciar con la última sesión utilizada" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "Iniciar con la sesión:" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "Al guardar los documentos" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "Conservar copia de seguridad" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" +"Frescobaldi siempre guarda una copia de seguridad de un archivo antes de " +"sobreescribirlo con otra versión.\n" +"Si esta casilla está seleccionada, se retienen estas copias de seguridad." + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "Recordar la posición del cursor, marcadores, etc." + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Directorio predeterminado:" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "La carpeta predeterminada para los documentos de LilyPond (opcional)." + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "PDF:" + +#: frescobaldi_app/preferences/helpers.py:71 +msgid "MIDI:" +msgstr "MIDI:" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "SVG:" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "Imagen:" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "Navegador:" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "E-mail:" + +#: frescobaldi_app/preferences/helpers.py:76 +msgid "File Manager:" +msgstr "Administrador de archivos:" + +#: frescobaldi_app/preferences/helpers.py:77 +msgid "Shell:" +msgstr "Consola:" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" +"Abajo puede introducir instrucciones para abrir distintos tipos de archivo. " +"$f se sustituye por el nombre del archivo, $u por " +"la URL. Si deja un campo vacío se utilizará la aplicación predeterminada del " +"sistema operativo." + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "Instrucción que debe aceptar una URL \"mailto:\"" + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "Instrucción para abrir un terminal o ventana de órdenes." + +#: frescobaldi_app/preferences/lilypond.py:81 +msgid "LilyPond versions to use" +msgstr "Versiones de LilyPond que usar" + +#: frescobaldi_app/preferences/lilypond.py:82 +msgid "Automatically choose LilyPond version from document" +msgstr "Elegir automáticamente la versión de LilyPond a partir del documento" + +#: frescobaldi_app/preferences/lilypond.py:84 +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" +"Si está seleccionado, la versión del documento determina la versión de " +"LilyPond que utilizar.\n" +"Consulte \"Qué es esto\" para ver más información." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" +"

Si este ajuste está activado, se busca en el documento una instrucción " +"\\version de LilyPond o una variable del documento " +"version.

\n" +"

El aspecto de la instrucción de versión de LilyPond es el siguiente:

\n" +"
\\version \"2.14.0\"
\n" +"

La variable del documento se parece a esto:

\n" +"
-*- version: 2.14.0;
\n" +"

en algún lugar (dentro de una sección de comentarios) de la primera o las " +"últimas cinco líneas del documento. De esta forma, la versión de LilyPond " +"que usar se puede especificar también en documentos que no son de LilyPond " +"como HTML, LaTeX, etc.

\n" +"

Si el documento especifica una versión, se elige la versión de LilyPond " +"más antigua que sea adecuada. En caso contrario, se elige la versión " +"predeterminada.

\n" + +#: frescobaldi_app/preferences/lilypond.py:101 +msgid "See also {link}." +msgstr "Véase también {link}." + +#: frescobaldi_app/preferences/lilypond.py:149 +msgid "Set as &Default" +msgstr "Establecer como pre&determinados" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "predeterminado" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "Instrucción de LilyPond:" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "El nombre o la ruta completa del programa LilyPond." + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "Convert-ly:" + +#: frescobaldi_app/preferences/lilypond.py:241 +msgid "LilyPond-book:" +msgstr "LilyPond-book:" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "Incluir en la selección automática de la versión" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "Ejecutar LilyPond" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "Guardar el documento si es posible" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" +"Se está activado, el documento se guarda cuando es un archivo local y ha " +"sido modificado.\n" +"En caso contrario, se usa un archivo temporal para ejecutar LilyPond." + +#: frescobaldi_app/preferences/lilypond.py:286 +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "" +"Si está activado, LilyPond borrará los archivos PostScript intermedios." + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "Ruta de inclusión para LilyPond:" + +#: frescobaldi_app/preferences/midi.py:77 +msgid "MIDI Ports" +msgstr "Puertos MIDI" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" +"Nota: no queda ningún puerto MIDI disponible en su sistema. Para usar el " +"MIDI, compruebe si está instalado PortMIDI en su sistema y que está " +"disponible o conectado un sintetizador MIDI." + +#: frescobaldi_app/preferences/midi.py:82 +msgid "Player output:" +msgstr "Salida del reproductor:" + +#: frescobaldi_app/preferences/midi.py:84 +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" +"Puerto MIDI hacia el que enviar la reproducción de música. Consulte \"Qué es " +"esto\" para ver más información." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" +"

Este menú desplegable relaciona los puertos MIDI disponibles en su " +"sistema. Puede seleccionar uno, o tan sólo teclear parte de un nombre. En " +"tal caso, se usa el nombre del primer puerto disponible que comienza con los " +"caracteres especificados.

\n" +"

Pulse el botón para refrescar la lista, p.ej. cuando conecta un " +"dispositivo MIDI o inicia un sintetizador de software.

" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "Refrescar puertos MIDI" + +#: frescobaldi_app/preferences/midi.py:135 +msgid "Close unused MIDI output" +msgstr "Cerrar las salidas MIDI sin utilizar" + +#: frescobaldi_app/preferences/midi.py:137 +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" +"Cierra los puertos MIDI no utilizados después de un minuto. Consulte \"Qué " +"es esto\" para ver más información." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" +"

Si está seleccionado, Frescobaldi cerrará los puertos MIDI que no se " +"hayan usado durante un minuto.

\n" +"

Esto podría liberar recursos del sistema que un sintetizador MIDI de " +"software podría estar utilizando,\n" +"ahorrando así energía de la batería.

\n" +"

Un efecto secundario es que si un archivo MIDI entra en pausa durante " +"mucho tiempo, todos los\n" +"instrumentos se reinician al piano predeterminado (instrumento 0). En tal " +"caso, la reproducción\n" +"del archivo desde el principio restablece los instrumentos de nuevo.

\n" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "Directorios que contienen diccionarios de enguionado" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Abreviatura" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "Menú {name}:" + +#: frescobaldi_app/preferences/shortcuts.py:125 +msgid "Other commands:" +msgstr "Otras instrucciones:" + +#: frescobaldi_app/preferences/shortcuts.py:173 +msgid "&Edit Shortcut for \"{name}\"" +msgstr "&Editar combinación de teclas para \"{name}\"" + +#: frescobaldi_app/preferences/shortcuts.py:178 +msgid "(no shortcut)" +msgstr "(sin combinación de tecla)" + +#: frescobaldi_app/preferences/shortcuts.py:206 +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "¿Eliminar la combinación de teclas de esa instrucción?" +msgstr[1] "¿Eliminar la combinación de teclas de esas instrucciones?" + +#: frescobaldi_app/preferences/shortcuts.py:304 +msgid "(default)" +msgstr "(predeterminado)" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "Mostrar el registro cuando se inicia una tarea" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "Mostrar la salida de registro normal" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" +"Si está activado, Frescobaldi no acorta los nombres de archivo en la salida " +"de registro." + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "Vista de la música" + +#: frescobaldi_app/preferences/tools.py:142 +msgid "Magnifier Size:" +msgstr "Tamaño de la lupa:" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "Tamaño de la lupa de ampliación(Ctrl+Clic en la Vista de música)." + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr " píxeles" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "Escala de la lupa:" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "Ampliación de la lupa." + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "%" + +#: frescobaldi_app/preferences/tools.py:220 +msgid "Group documents by directory" +msgstr "Agrupar documentos por carpeta" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Inserción rápida" + +#: frescobaldi_app/quickinsert/__init__.py:48 +msgid "Quick &Insert" +msgstr "&Inserción rápida" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Permitir abreviaturas" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "Utilizar notación corta para ciertas articulaciones como el picado." + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Articulaciones" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Distintos tipos de articulaciones y otros símbolos." + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Acento" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Marcato" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Staccatissimo" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Picado" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Portato" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Tenuto" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Adornos" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Trino" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Semitrino" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Mordente" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Grupeto" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "Semitrino largo" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "Semitrino con resolución" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "Semitrino ascendente" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "Semitrino descendente" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "Mordente ascendente" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "Mordente descendente" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "Semitrino con final ascendente" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "Semitrino con final descendente" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "Semitrino lineal" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Grupeto invertido" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "Símbolos" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Calderón" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Calderón corto" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Calderón largo" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Calderón muy largo" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Segno" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Varcoda" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "Signumcongruentiae" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Otros" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Arco arriba" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Arco abajo" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "Snappizzicato" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "Abierto (p.ej. metales)" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "Tapada (p.ej. metales)" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Flageolet (armónico)" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Pulgar" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Tacón izquierdo" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Tacón derecho" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "Punta izquierda" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Punta derecha" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "Semi-abierto (p.ej. hi-hat)" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "Barras de compás" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "Barras de compás, sisnos de respiración, etc." + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Doble barra" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "Doble barra final" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "Barra punteada" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "Barra discontinua" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Barra invisible" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "Inicio de repetición" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "Repecición doble" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "Fin de repetición" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "Repetición doble (antigua)" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "Repetición doble (clásica)" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "Línea divisoria corta" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "Línea divisoria simple" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "Barra fina-gruesa-fina" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "Barra gruesa-fina" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "Barra gruesa doble" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "Barra de compás en forma de Segno" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "Signos de respiración" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "Signo de respiración predeterminado" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "Signo de respiración recto" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "Cesura curva" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "Cesura recta" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "{name} ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +msgid "Configure Keyboard Shortcut ({key})" +msgstr "Configurar combinación de teclas ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Ninguno" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "Indicaciones dinámicas" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "Símbolos de dinámica." + +#: frescobaldi_app/quickinsert/dynamics.py:128 +msgid "Dynamic sign {name}" +msgstr "Indicación de matiz dinámico {name}" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "Extensores" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "Regulador crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "Regulador diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "Decrescendo" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "Ligaduras, extensiones de texto, etc." + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "Acordes arpegiados" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "Acorde arpegiado" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "Arpegio con flecha arriba" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "Arpegio con flecha abajo" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "Arpegio de corchete" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "Arpegio de paréntesis" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "Glissandos" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "Glissando discontinuo" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "Glissando de puntos" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "Glissando en zig-zag" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "Glissando de trino" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "Ligadura de fraseo" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" +"

Con el panel de inserción rápida puede añadir distintos elementos " +"musicales a la nota actual o a la música seleccionada.

\n" +"

Consulte {link} para ver más información.

" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Dirección:" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Arriba" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Neutro" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Abajo" + +#: frescobaldi_app/quickinsert/widget.py:127 +msgid "The Quick Insert Panel" +msgstr "Panel de inserción rápida" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" +"

\n" +"Con las herramientas del Panel de inserción rápida, puede añadir varios " +"elementos musicales\n" +"a la nota actual o a la música seleccionada.\n" +"

\n" +"\n" +"

\n" +"El especificador de Dirección determina si las articulaciones, " +"matices dinámicos o ligaduras de expresión\n" +"aparecen en una posición neutra (es decir, determinada por la dirección de " +"las plicas), o por encima\n" +"o debajo del pentagrama mediante la anteposición de un símbolo -, ^ o\n" +"_.\n" +"

\n" +"\n" +"

\n" +"Pulse sobre una solapa para seleccionar una herramienta. Puede recorrer " +"circularmente la lista de solapas para elegir una herramienta. Puede " +"recorrer circularmente la lista de herramientas con Ctrl\n" +"(o {command}) y la rueda del ratón.\n" +"Todos los botones del Panel de inserción rápida tienen combinaciones de " +"tecla configurables;\n" +"puede cambiarlas mediante una pulsación con el botón derecho sobre un " +"botón.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" +"

Articulaciones

\n" +"\n" +"

\n" +"Estos símbolos musicales se pueden añadir a una nota o silencio,\n" +"o a un fragmento seleccionado de música.\n" +"Si los añade a una selección, se saltarán los silencios.\n" +"Se no hay ningún texto seleccionado, el cursor se moverá\n" +"automáticamente a la siguiente nota, silencio, separación o acorde.\n" +"

\n" +"\n" +"

\n" +"Si está seleccionado Permitir abreviaturas, Frescobaldi\n" +"usará símbolos abreviados para las articulaciones, si existen\n" +"(p.ej. -. en lugar de -\\staccato).\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" +"

Matices dinámicos

\n" +"\n" +"

\n" +"También se pueden añadir indicaciones dinámicas a una nota o\n" +"silencio. Si selecciona un fragmento de música, puede añadir\n" +"elementos extensos que terminan automáticamente en la última\n" +"nota, silencio o acorde de la selección.\n" +"Si a continuación pulsa sobre un signo, sustituirá al terminador.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" +"

Elementos extensos

\n" +"\n" +"

\n" +"Esta herramiento le permite añadir arpegios, glissandos y otros\n" +"elementos extensos como ligaduras de expresión y de fraseo,\n" +"barras manuales y trinos.\n" +"

\n" +"\n" +"

\n" +"Los arpegios y glissandos se aplican a la nota actual; no requieren\n" +"que se seleccione ningún fragmento de música. Las ligaduras, barras\n" +"o trinos se aplican a la nota actual y a la siguiente si no hay\n" +"ninguna selección de música, o a la primera y la última nota o\n" +"acorde de la selección.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" +"

Líneas divisorias

\n" +"\n" +"

\n" +"Aquí puede insertar barras de compás o diversos símbolos de respiración.\n" +"

\n" + +#: frescobaldi_app/rhythm/__init__.py:146 +msgid "&Double durations" +msgstr "&Doblar duraciones" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Duplicar todas las duraciones de la selección." + +#: frescobaldi_app/rhythm/__init__.py:149 +msgid "&Halve durations" +msgstr "Re&ducir a la mitad" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Reducir a la mitad todas las duraciones de la selección." + +#: frescobaldi_app/rhythm/__init__.py:152 +msgid "Do&t durations" +msgstr "Añadir pun&tillos" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Añadir puntillo a todas las duraciones de la selección." + +#: frescobaldi_app/rhythm/__init__.py:155 +msgid "&Undot durations" +msgstr "Quitar p&untillos" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Quitar un puntillo de todas las duraciones de la selección." + +#: frescobaldi_app/rhythm/__init__.py:158 +msgid "Remove &scaling" +msgstr "Quitar e&scalado" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "" +"Eliminar todos los factores de escala (*n/m) de las duraciones de la " +"selección." + +#: frescobaldi_app/rhythm/__init__.py:161 +msgid "&Remove durations" +msgstr "Quita&r duraciones" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "Quitar todas las duraciones de la selección." + +#: frescobaldi_app/rhythm/__init__.py:164 +msgid "Make &implicit" +msgstr "Hacer &implícitas" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "" +"Hacer que las duraciones sean implícitas (quitar las duraciones repetidas)." + +#: frescobaldi_app/rhythm/__init__.py:167 +msgid "Make implicit (per &line)" +msgstr "Hacer implícitas (&línea a línea)" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" +"Hacer que las duraciones sean implícitas (quitar las duraciones repetidas), " +"excepto para la primera duración de cada línea." + +#: frescobaldi_app/rhythm/__init__.py:171 +msgid "Make &explicit" +msgstr "Hacer &explícitas" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" +"Hacer explícitas las duraciones (escribir la duración después de cada nota, " +"incluso cuando es la misma que la de la nota anterior)." + +#: frescobaldi_app/rhythm/__init__.py:175 +msgid "&Apply rhythm..." +msgstr "&Aplicar duraciones..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Aplicar unas duraciones dadas a la música seleccionada." + +#: frescobaldi_app/rhythm/__init__.py:178 +msgid "&Copy rhythm" +msgstr "&Copiar duraciones" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Copiar las duraciones de la música seleccionada." + +#: frescobaldi_app/rhythm/__init__.py:181 +msgid "&Paste rhythm" +msgstr "&Pegar duraciones" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Pegar duraciones a la música seleccionada." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Aplicar ritmo" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Introduzca unas duraciones:" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "Manipulación de las duraciones" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" +"

\n" +"Las funciones de duraciones de Frescobaldi alteran las duraciones\n" +"escritas a continuación de las notas, acordes, silencios etc.\n" +"Usando dichas funciones, todas situadas en el menú {menu}, es\n" +"posible doblar o dividir a la mitad las duraciones de las notas,\n" +"añadir o quitar puntillos y eliminar factores de escala.\n" +"

\n" +"\n" +"

\n" +"También es posible cambiar la forma en que se especifican las\n" +"duraciones: por cada nota (explícita), o sólo cuando cambia\n" +"la duración (implícita). Algunos usuarios pueden preferir la\n" +"opción implícita por cada línea, que especifica siempre la\n" +"duración de la primera nota, acorde o silencio de una línea.\n" +"

\n" +"\n" +"

\n" +"Las tres últimas instrucciones del menú pueden copiar, pegar o\n" +"aplicar una serie de duraciones que se introduce en un cuadro\n" +"de diálogo.\n" +"

\n" +"\n" +"

\n" +"En el cuadro de diálogo \"Aplicar duraciones\" puede introducir\n" +"una serie de duraciones, p.ej.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"que se aplicarán entonces, de forma repetitiva, a una selección de notas.\n" +"

\n" + +#: frescobaldi_app/rhythm/rhythm.py:279 +msgctxt "submenu title" +msgid "Rhythm" +msgstr "Duraciones" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Preparar partitura nueva..." + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "La música continúa aquí." + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Eliminar el pie de página predeterminado de LilyPond" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Asistente de partitura" + +#: frescobaldi_app/scorewiz/dialog.py:80 +msgid "Clear" +msgstr "Borrar" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "Borra la página actual del Asistente de partitura." + +#: frescobaldi_app/scorewiz/dialog.py:83 +msgid "Preview" +msgstr "Vista previa" + +#: frescobaldi_app/scorewiz/dialog.py:130 +msgid "Score Preview" +msgstr "Vista previa de la partitura" + +#: frescobaldi_app/scorewiz/dialog.py:164 +msgid "&Titles and Headers" +msgstr "&Títulos y encabezamientos" + +#: frescobaldi_app/scorewiz/dialog.py:173 +msgid "&Parts" +msgstr "&Partes" + +#: frescobaldi_app/scorewiz/dialog.py:182 +msgid "&Score settings" +msgstr "Con&figuración de la partitura" + +#: frescobaldi_app/scorewiz/dialog.py:191 +msgid "The Score Wizard" +msgstr "Asistente de partitura" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" +"

\n" +"El Asistente de partitura ({key}) en {menu} está diseñado\n" +"para preparar una partitura musical de LilyPond rápidamente.\n" +"

\n" +"\n" +"

\n" +"En la primera solapa, Títulos y Encabezamientos, puede escribir " +"títulos.\n" +"

\n" +"\n" +"

\n" +"En la segunda solapa, Partes, puede componer su partitura a partir " +"de muchos\n" +"tipos de parte disponibles.\n" +"Haga doble clic sobre un tipo de parte para añadirla a su partitura (o pulse " +"el botón Añadir).\n" +"Seleccione la parte en la lista de la partitura para cambiar algunos ajustes " +"de la parte seleccionada,\n" +"si lo desea.\n" +"Muchas partes, especialmente las corales, tienen opciones muy potentes para " +"la preparación de la partitura de la forma\n" +"en que desee hacerlo.\n" +"

\n" +"\n" +"

\n" +"En la tercera solapa, Ajustes de la partitura, se pueden ajustar " +"las propiedades y\n" +"preferencias globales de la partitura.\n" +"

\n" +"\n" +"

\n" +"Pulse sobre el botón Vista previa para obtener una previsualización con algo " +"de música de relleno.\n" +"Pulse Aceptar para copiar el texto fuente de LilyPond generado al editor.\n" +"

\n" +"\n" +"

Varias piezas o movimientos

\n" +"\n" +"

\n" +"Una funcionalidad especial muy potente de la solapa Partes se " +"encuentra oculta en la\n" +"categoría \"Contenedores\" de la lista de tipos de parte.\n" +"

\n" +"\n" +"

\n" +"Esta categoría contiene los tipos de Partitura, Libro y Partes de libro, con " +"las que\n" +"puede preparar un documento de LilyPond que contenga varias partituras o " +"incluso libros.\n" +"Puede añadir elementos de Partitura, Parte de libro o Libro a la vista de " +"Partitura.\n" +"Se pueden anidar unos dentro de otros: se puede añadir una Partitura a una " +"Parte de libro o a un Libro pero no se puede\n" +"añadir un Libro a una Parte de libro o a una Partitura.\n" +"

\n" +"\n" +"

\n" +"A continuación puede añadir partes musicales.\n" +"Si quiere crear varias partituras con las mismas partes exactamente, puede " +"limitarse a\n" +"añadir las partes en el nivel superior de la vista de partitura, y después " +"las partituras, sin\n" +"añadir partes musicales a las partituras.\n" +"Las partituras usarán las partes que haya puesto en el nivel superior.\n" +"

\n" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Pulse para introducir un valor." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "final de la primera página" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "final de la última página" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "Dedicatoria" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Título" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Subtítulo" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "Sub-subtítulo" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Instrumento" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Compositor" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Arreglista" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Poeta" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Compás" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Pieza" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Copyright" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Pie de página" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Partes disponibles:" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Partitura:" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "&Añadir" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +msgid "&Remove" +msgstr "Elimina&r" + +#: frescobaldi_app/scorewiz/score.py:104 +msgid "Move up" +msgstr "Subir" + +#: frescobaldi_app/scorewiz/score.py:105 +msgid "Move down" +msgstr "Bajar" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Armadura de la tonalidad:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Compás:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Compás de anacrusa:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Indicación metronómica:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Indicación de tempo:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Mayor" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Menor" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "Jónico" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Dórico" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Frigio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Lidio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Mixolidio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Eolio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Locrio" + +#: frescobaldi_app/scorewiz/settings.py:73 +msgid "Score properties" +msgstr "Propiedades de la partitura" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Preferencias generales" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Utilizar comillas tipográficas" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "" +"Sustituir las comillas normales con las vistosas comillas tipográficas." + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Quitar el pie de página predeterminado" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Eliminar el pie de página predeterminado que LilyPond produce." + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Quitar números de compás" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "" +"Eliminar la numeración de compases que aparece a la izquierda de los " +"sistemas." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "Producir salida de MIDI" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "Crear un archivo MIDI además del archivo PDF." + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Imprimir metrónomo" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"Si se encuentra seleccionado, imprimir una indicación metronómica al " +"principio de la partitura. La salida MIDI también usa este ajuste de " +"metrónomo." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Tamaño del papel:" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Apaisado" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Completo" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Abreviado" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Nombres de instrumentos" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "Primer sistema:" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Otros sistemas:" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "" +"Utilizar un nombre corto o largo para el instrumento antes del primer " +"sistema." + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "" +"Usar los nombres de instrumento corto, largo o ninguno a la izquierda de los " +"siguientes sistemas." + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "El idioma que quiere usar para los nombres de instrumento." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Idioma de los nombres de nota:" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "El idioma de LilyPond en que quiere escribir los nombres de las notas." + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Versión:" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "La versión de LilyPond que se va a usar para este documento." + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "No hay ajustes disponibles." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Configurar el número de voces distintas deseado en cada pentagrama." + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "" +"Esto es de utilidad sobre todo al escribir música polifónica como una fuga." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Mano derecha:" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Mano izquierda:" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Estilo de acordes:" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Diagramas de posiciones de acorde" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Mostrar diagramas de posiciones de guitarra predefinidos debajo de los " +"nombres de acorde (LilyPond 2.12 o superior)." + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "Los acordes continúan aquí." + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "Alemán" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "Semi alemán" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "Italiano" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "Francés" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Trompa en Fa" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "Tpa." + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Trompeta en Do" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Tpta.Do" + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Trompeta en Sib" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Tpta.Sib" + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Trombón" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Tbn." + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "Tba." + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Tuba baja" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "Tba.B." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Viento metal" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +msgid "Staff Group" +msgstr "Grupo de pentagramas" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "Llave curva" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "Corchete" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +msgid "Square" +msgstr "Recto" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "Tipo:" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +msgid "Connect Barlines" +msgstr "Conectar las divisorias" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "" +"Si está activado, las líneas divisorias se conectan entre los pentagramas." + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +msgid "Score" +msgstr "Partitura" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +msgid "Piece:" +msgstr "Pieza:" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +msgid "Opus:" +msgstr "Opus:" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "Propiedades" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "Parte de libro" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "Libro" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" +"

Aquí puede especificar un nombre de archivo o sufijo (sin la extensión) " +"para fijar los nombres de los archivos de salida generados para este libro.\n" +"

Si elige \"Sufijo\" el nombre introducido se añadirá al final del nombre " +"de archivo del documento; si elige \"Nombre de archivo\", solo se usará el " +"nombre introducido.

" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "Nombre del archivo de salida:" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "Nombre de archivo" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "Sufijo" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +msgid "Containers" +msgstr "Contenedores" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Piano" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "P." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Clave" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Clav." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Clavicordio" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Clvc." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Órgano" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Org." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Pedal:" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Establezca a 0 para desactivar el pedal." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Cel." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Teclados" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Timbales" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Tmb." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Xilófono" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Xil." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Marimba" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "Pentagrama superior:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "Pentagrama inferior:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "Fijar el número de voces a 0 para inhabilitar el segundo pentagrama." + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Vibráfono" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Vib." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Campanas tubulares" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Ca.T." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Carrillón" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Carr." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +msgid "Carillon" +msgstr "Carillón" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Car." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +msgid "Manual staff:" +msgstr "Pentagrama de manual:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +msgid "Pedal staff:" +msgstr "Pentagrama de pedal:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Percusión" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Perc." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Voces:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Eliminar plicas" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Quitar las plicas de las notas de percusión." + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "La percusión continúa aquí." + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "guardar una distancia." + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Tambores (5 líneas, predeterminado)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Estilo de timbales (2 líneas)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Estilo de congas (2 líneas)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Estilo de bongos (2 líneas)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Estilo de percusión (1 línea)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Percusión" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Tipo de pentagrama:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Afinación:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Normal" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Tablatura" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Ambos" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Mandolina" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mna." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Afinación de la mandolina" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Banjo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Bjo." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "Afinación de Sol al aire (la-Re-Sol-Si-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "Afinación de Do (sol-Do-Sol-Si-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "Afinación modal (sol-Re-Sol-Do-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "Ainfación de Re al ailre (la-Re-Fa#-La-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "Afinación de Re menor al aire (la-Re-Fa-La-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Cuatro cuerdas (en vez de cinco)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Guitarra clásica" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "G." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Afinación de la guitarra" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "Afinación de Sol al aire" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Guitarra de jazz" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "G.jz." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Bajo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "Bj." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "Afinación del bajo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Bajo eléctrico" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "Bj.E." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Arpa" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Ar." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Cuerda pulsada" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Nombres de acorde" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Bajo cifrado" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "Usar líneas de extensión" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "Las cifras van aquí." + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "Pentagrama" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Especiales" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Violín" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Vln." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Viola" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "Vla." + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Violoncello" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Vclo." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "Contrabajo" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Cbjo." + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +msgid "Basso Continuo" +msgstr "Bajo continuo" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "B.c." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Instrumentos de cuerda" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Estrofas:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Número de estrofas." + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Ámbito" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "Mostrar la tesitura de la voz al principio del pentagrama." + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "La letra sigue aquí." + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Soprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +msgid "Mezzo-soprano" +msgstr "Mezzosoprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "Mezz." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Alto" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Tenor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Hoja guía de acordes" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"La hoja guía proporciona un pentagrama con nombres de acorde encima y letra " +"debajo. Es opcional un segundo pentagrama." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Añadir pentagrama de acompañamiento" + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" +"Añade un pentagrama de acompañamiento y pone una voz de acompañamiento en el " +"pentagrama superior." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Coro" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Seleccione las voces para el coro. Use las letras S, A, T o B. Un guión " +"denota un pentagrama nuevo." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "Consejo: para doble coro puede usar dos partes de coro." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Canto:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "Letra:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "Reducción de piano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "Añade una reducción de piano generada automáticamente." + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "Archivos MIDI para ensayo" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" +"Crea un archivo MIDI de ensayo para todas las voces, incluso si no se genera " +"ninguna salida MIDI para la partitura principal." + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "Co." + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "Archivos MIDI de ensayo:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Misma letra en todas las voces" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "Se coloca el mismo conjunto de letras entre todos los pentagramas." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Misma letra todas las voces" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "Cada letra tiene su voz, usando el mismo texto que las otras voces." + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Cada voz tiene diferente letra" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Cada una de las voces recibe un bloque de letras distinto." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "Distribuir las estrofas" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "Se distribuye un conjunto de estrofas a través de los pentagramas." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "Vocal" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Flauta" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Flautín" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Fltn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Flauta baja" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Fl.B." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Oboe" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Ob." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +msgid "Oboe d'amore" +msgstr "Oboe d'amore" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Ob.d'am." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +msgid "English horn" +msgstr "Corno inglés" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "Co.ing." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Fagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Fg." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Contrafagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "Cfg." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Clarinete" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Saxofón sopranino" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "SxSn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Saxofón soprano" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "SxSo." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Saxofón alto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "SxA." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Saxofón tenor" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "SxT." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Saxofón barítono" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "SxB." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "Saxofón bajo" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "SxBj." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Flauta dulce soprano" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "Fl.d.s." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Flauta dulce alto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "Fl.d.A." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Flauta dulce tenor" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "Fl.d.T." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Flauta dulce baja" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "Fl.d.B." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Instrumentos de viento" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "Gestionar sesiones" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "Nombre:" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "Guardar siempre la lista de documentos en esta sesión" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "Directorio base:" + +#: frescobaldi_app/sessions/dialog.py:133 +msgid "Edit session: {name}" +msgstr "Editar sesión: {name}" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "Editar sesión nueva" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "Introduzca un nombre para la sesión." + +#: frescobaldi_app/sessions/dialog.py:174 +msgid "Please do not use the name '{name}'." +msgstr "No utilice el nombre '{name}'." + +#: frescobaldi_app/sessions/dialog.py:180 +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" +"Ya existe otra sesión con el nombre {name}.\n" +"\n" +"¿Quiere sobreescribirla?" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "Sobreescribir" + +#: frescobaldi_app/sessions/manager.py:127 +msgctxt "New Session" +msgid "&New..." +msgstr "&Nuevo..." + +#: frescobaldi_app/sessions/manager.py:129 +msgid "&Manage..." +msgstr "&Gestionar..." + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "Ninguna sesión" + +#: frescobaldi_app/sessions/menu.py:55 +msgctxt "menu title" +msgid "&Session" +msgstr "&Sesión" + +#: frescobaldi_app/snippet/builtin.py:38 +msgid "Blank Line" +msgstr "Línea vacía" + +#: frescobaldi_app/snippet/builtin.py:44 +msgid "Single Typographical Quotes" +msgstr "Comilla tipográfica simple" + +#: frescobaldi_app/snippet/builtin.py:49 +msgid "Double Typographical Quotes" +msgstr "Comillas tipográficas dobles" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "Tresillos" + +#: frescobaldi_app/snippet/builtin.py:125 +msgid "Modern 2/2 Time Signature" +msgstr "Compás de 2/2 moderno" + +#: frescobaldi_app/snippet/builtin.py:131 +msgid "Modern 4/4 Time Signature" +msgstr "Compás de 4/4 moderno" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "Compás de «tactus» (número con nota)" + +#: frescobaldi_app/snippet/builtin.py:148 +msgid "LilyPond Version" +msgstr "Versión de LilyPond" + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "Música relativa" + +#: frescobaldi_app/snippet/builtin.py:166 +msgid "Upper case selection" +msgstr "Selección a mayúsculas" + +#: frescobaldi_app/snippet/builtin.py:172 +msgid "Lower case selection" +msgstr "Selección a minúsculas" + +#: frescobaldi_app/snippet/builtin.py:178 +msgid "Title case selection" +msgstr "Selección a tamaño título" + +#: frescobaldi_app/snippet/builtin.py:189 +msgid "Markup lines" +msgstr "Líneas de marcado" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "Columna de marcado" + +#: frescobaldi_app/snippet/builtin.py:202 +msgid "Tagline with date and LilyPond version" +msgstr "Pie de página con fecha y versión de LilyPond" + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "Plantilla de encabezamiento" + +#: frescobaldi_app/snippet/builtin.py:227 +msgid "No Tagline" +msgstr "Sin pie de página" + +#: frescobaldi_app/snippet/builtin.py:235 +msgid "No Barnumbers" +msgstr "Sin números de compás" + +#: frescobaldi_app/snippet/builtin.py:245 +msgid "Midi Tempo" +msgstr "Tempo del MIDI" + +#: frescobaldi_app/snippet/builtin.py:255 +msgid "Staff Size" +msgstr "Tamaño del pentagrama" + +#: frescobaldi_app/snippet/builtin.py:310 +msgid "A5 Paper" +msgstr "Hoja A5" + +#: frescobaldi_app/snippet/builtin.py:318 +#, fuzzy +msgid "Document Fonts..." +msgstr "Documentos" + +#: frescobaldi_app/snippet/builtin.py:346 +msgid "Last note or chord" +msgstr "Última nota o acorde" + +#: frescobaldi_app/snippet/builtin.py:427 +msgid "Color" +msgstr "Color" + +#: frescobaldi_app/snippet/builtin.py:464 +msgid "Basic Leadsheet" +msgstr "Hoja guía de acordes básica" + +#: frescobaldi_app/snippet/builtin.py:508 +msgid "Choir Hymn" +msgstr "Himno coral" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "Editar fragmento de código" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "Nuevo fragmento de código" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "Texto del fragmento de código:" + +#: frescobaldi_app/snippet/edit.py:119 +msgid "Title:" +msgstr "Título:" + +#: frescobaldi_app/snippet/edit.py:120 +msgid "Shortcut:" +msgstr "Combinación de teclado:" + +#: frescobaldi_app/snippet/edit.py:131 +msgid "Click to change the keyboard shortcut." +msgstr "Pulse para modificar la combinación de teclas." + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "Fragmento vacío" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "Un fragmento de código no puede estar vacío." + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "Editor de fragmentos de código" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" +"

Aquí puede editar el texto del fragmento de código.

Si inicia la " +"primera o primeras líneas con '-*- ' (observe el espacio), el " +"resto de la línea o líneas define variables como nombre: valor; " +"o simplemente nombre; lo que influye en el comportamiento del " +"fragmento de código. Se pueden usar las siguientes variables:

" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" +"Poner el fragmento de código en el menú Insertar, agrupado por el valor " +"(opcional)." + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" +"Colocar el fragmento de código en el menú {file_new_from_template}, agrupado " +"por el valor (opcional). Cuando se activa por medio del menú, el fragmento " +"de código se inserta en un documento nuevo." + +#: frescobaldi_app/snippet/edit.py:218 +msgctxt "menu title" +msgid "File" +msgstr "Archivo" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "Nuevo a partir de plantilla" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "Nombre corto nemotécnico para seleccionar el fragmento de código." + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "No aplicar sangrado automático después de la inserción." + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "Icono que mostrar en el menú y la lista de fragmentos." + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" +"El símbolo que mostrar en el menú y en la lista de fragmentos de código. Los " +"símbolos son iconos que usan el color del texto predeterminado y están en " +"{directory}." + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "Ejecutar el fragmento como un guión de Python. Véase {link}." + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "Una o más de las palabras siguientes (separadas con espacios o comas):" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "Requiere la selección de un texto." + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "" +"Ajusta la selección de forma que no incluya los espacios inicial y final." + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "Selecciona todo el texto insertado." + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" +"

Las otras líneas del fragmento de código definen el texto que se " +"insertará en el editor. Aquí puede insertar variables prefijadas con un " +"símbolo de dólar $. Un doble $ se sutsituirá con un solo $. Se reconocen los " +"siguientes valores:

" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "Fragmentos de código de Python" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" +"

Los fragmentos de código Python pueden leer y deben escribir la variable " +"{text}. La variable {text} contiene el texto seleccionado actualmente (que " +"puede ser una cadena vacía).

\n" +"

Puede fijar {text} a una cadena o a una lista de cadenas.

\n" +"

Se pueden referenciar otras variables:

" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "Lista de cadenas que describe el tipo de texto en que está el cursor." + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" +"El QTextCursor actual, que da acceso al documento. Sin embargo, no cambie el " +"documento a través del cursor." + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" +"Cuando establezca {text} a una lista en vez de a una cadena, puede usar este " +"valor para especificar el lugar en que el cursor de texto se situará después " +"de insertar el fragmento de código." + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" +"Cuando establezca {text} a una lista en lugar de a una cadena, este valor se " +"puede usar junto a {cursor} para seleccionar texto cuando se inserten las " +"partes de cadena de la lista." + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "Fecha actual en formato AAAA-MM-DD." + +#: frescobaldi_app/snippet/expand.py:80 +msgid "The version of the default LilyPond program." +msgstr "Versión del programa LilyPond predeterminado." + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "Versión de Frescobaldi." + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "URL del documento actual." + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "Nombre local completo del documento actual." + +#: frescobaldi_app/snippet/expand.py:96 +msgid "The name of the current document." +msgstr "Nombre del documento actual." + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "Mueve aquí el cursor de texto después de la inserción." + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" +"Selecciona texto desde aquí hasta la posición dada usando la variable " +"$CURSOR" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" +"El texto seleccionado, si está disponible. Si no, el cursor de texto se " +"desplaza a este punto." + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "No se ha encontrado ningún fragmento de código." + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Importar fragmentos de código" + +#: frescobaldi_app/snippet/import_export.py:119 +msgid "New Snippets" +msgstr "Nuevos fragmentos de código" + +#: frescobaldi_app/snippet/import_export.py:120 +msgid "Updated Snippets" +msgstr "Fragmentos de código actualizados" + +#: frescobaldi_app/snippet/import_export.py:121 +msgid "Unchanged Snippets" +msgstr "Fragmentos de código no modificados" + +#: frescobaldi_app/snippet/import_export.py:183 +msgid "Import Keyboard Shortcuts" +msgstr "Importar combinaciones de teclas" + +#: frescobaldi_app/snippet/import_export.py:188 +msgid "Choose which snippets you want to import:" +msgstr "Seleccione qué fragmentos de código quiere importar:" + +#: frescobaldi_app/snippet/import_export.py:190 +msgid "There are no new or updated snippets in the file." +msgstr "No hay ningún fragmento nuevo o actualizado en el archivo." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" +"

Aquí se muestran los fragmentos de código del archivo {filename}.

\n" +"

Si hay fragmentos nuevos o actualizados, puede seleccionarlos\n" +"o deseleccionarlos uno a uno o todos a la vez, usando la casilla\n" +"de selección del grupo. A continuación pulse Aceptar para importar\n" +"todos los fragmentos seleccionados.

\n" +"

Los fragmentos existentes que no han cambiado no se pueden\n" +"importar.

\n" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "Error del fragmento de código" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Insertar" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "Nuevo a partir de plan&tilla" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "Nombre" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Descripción" + +#: frescobaldi_app/snippet/template.py:33 +msgid "Save as Template" +msgstr "Guardar como plantilla" + +#: frescobaldi_app/snippet/template.py:34 +msgid "Please enter a template name:" +msgstr "Introduzca un nombre para la plantilla:" + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +msgid "Snippets" +msgstr "Fragmentos de código" + +#: frescobaldi_app/snippet/tool.py:54 +msgid "&Snippets" +msgstr "Fragmento&s de código" + +#: frescobaldi_app/snippet/tool.py:79 +msgid "Save as Template..." +msgstr "Guardar como plantilla..." + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "Fragmento&s de código..." + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "&Menú" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "&Añadir..." + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "Añadir un nuevo fragmento de código. ({key})" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +msgid "&Edit..." +msgstr "&Editar..." + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "Editar el fragmento actual. ({key})" + +#: frescobaldi_app/snippet/widget.py:179 +msgid "Remove the selected snippets." +msgstr "Eliminar los fragmentos selecccionados." + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "A&plicar" + +#: frescobaldi_app/snippet/widget.py:181 +msgid "Apply the current snippet." +msgstr "Aplicar el fragmento de código actual." + +#: frescobaldi_app/snippet/widget.py:182 +msgid "&Import..." +msgstr "&Importar..." + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "Importar fragmentos de un archivo." + +#: frescobaldi_app/snippet/widget.py:184 +msgid "E&xport..." +msgstr "E&xportar..." + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "Exportar fragmentos hacia un archivo." + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "Ay&uda" + +#: frescobaldi_app/snippet/widget.py:188 +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" +"Introduzca el texto que buscar en la lista de fragmentos de código.\n" +"Véase \"Qué es esto\" para mayor información." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" +"Introduzca el texto que buscar en la lista de fragmentos de código y pulse " +"Intro para aplicar el fragmento seleccionado actualmente." + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" +"Si el texto buscado corresponde perfectamente con el valor de la variable " +"'{name}' de un fragmento de código, se selecciona ese fragmento." + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" +"Si el texto buscado comienza con dos puntos ':', el resto del texto de " +"búsqueda filtra los fragmentos de código que definen la variable dada. " +"Después de un espacio se puede introducir también un valor, y entonces los " +"fragmentos que se corresponderán serán aquellos en los que el valor de la " +"variable dada contenga el texto después del espacio." + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" +"P. ej. escribiendo {menu} se mostrarán todos los fragmentos de código que " +"aparecen en el menú Insertar." + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +msgid "XML Files" +msgstr "Archivos XML" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "Exportar {num} fragmento" +msgstr[1] "Exportar {num} fragmentos" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" +"

\n" +"Con el gestor de fragmentos de código puede almacenar piezas de texto usadas " +"frecuentemente llamadas\n" +"\"fragmentos de código o snippets\", y pegarlos fácilmente en el editor de " +"texto.\n" +"

\n" +"\n" +"

\n" +"El gestor de fragmentos de código se puede activar por medio del menú " +"{menu_snippets} o\n" +"pulsando la tecla {key_snippets}.\n" +"

\n" +"Los fragmentos de código se pueden buscar navegando por la lista o " +"escribiendo algunos caracteres en el cuadro de búsqueda.\n" +"Los fragmentos de código pueden tener también una combinación de teclas que " +"los aplica directamente.\n" +"Ciertos fragmentos de código tienen una combinación nemotécnica especial " +"(nombre abreviado) que puede también teclear\n" +"en el cuadro de búsqueda para seleccionar el fragmento. Al pulsar la tecla " +"Intro aplicará\n" +"el fragmento en el editor y ocultará el gestor de fragmentos.\n" +"

\n" +"\n" +"

\n" +"Añada fragmentos nuevos usando la tecla {key_add}. Edite el fragmento " +"seleccionado con la tecla {key_edit}.\n" +"Elimine los fragmentos seleccionados usando la tecla {key_delete}. " +"Advertencia: ¡no hay función de Deshacer!\n" +"

\n" +"\n" +"

\n" +"Los fragmentos se pueden poner también en el menú (véase {link}).\n" +"Finalmente, hay fragmentos que pueden incluir o alterar el texto " +"seleccionado.\n" +"Algunos fragmentos hacen esto utilizando variables especiales, mientras que\n" +"otros son pequeños guiones escritos en Python.\n" +"

\n" + +#: frescobaldi_app/snippet/widget.py:400 +msgctxt "menu title" +msgid "Insert" +msgstr "Insertar" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "Fragmentos de código..." + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "Comenzar a grabar una secuencia de teclas." + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "Borrar la secuencia de teclas." + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +msgid "Input" +msgstr "Entrada" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +msgid "Scheme:" +msgstr "Esquema:" + +#: frescobaldi_app/widgets/schemeselector.py:63 +msgctxt "New Scheme" +msgid "&New..." +msgstr "&Nuevo..." + +#: frescobaldi_app/widgets/schemeselector.py:93 +msgid "Please enter a name for the new scheme:" +msgstr "Introduzca el nombre del nuevo esquema:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Editar combinación de teclas" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +msgid "&No shortcut" +msgstr "Si&n tecla" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +msgid "Use a &custom shortcut:" +msgstr "Usar &combinación personalizada:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "Alternativa número {num}:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "Combinación primaria:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "Aquí puede editar las combinaciones de tecla para {name}" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "ninguna" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "Usar la combinación pre&determinada ({name})" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Pulse este botón varias veces para establecer el tempo." + +#: frescobaldi_app/widgets/urlrequester.py:75 +msgid "Open file dialog" +msgstr "Diálogo de abrir archivo" + +#: frescobaldi_app/widgets/urlrequester.py:119 +msgid "Select a directory" +msgstr "Seleccione un directorio" + +#: frescobaldi_app/widgets/urlrequester.py:121 +msgid "Select a file" +msgstr "Seleccione un archivo" + +#~ msgid "&Help Browser" +#~ msgstr "Navegador de a&yuda" + +#~ msgid "{appname} version {version}" +#~ msgstr "{appname} versión {version}" + +#~ msgid "Add..." +#~ msgstr "Añadir..." + +#~ msgid "Edit..." +#~ msgstr "Editar..." + +#~ msgid "Remove" +#~ msgstr "Eliminar" + +#~ msgid "" +#~ "Could not understand the entered pitches.\n" +#~ "\n" +#~ "Please make sure you use pitch names in the language \"{language}\"." +#~ msgstr "" +#~ "No se entienden las alturas introducidas.\n" +#~ "\n" +#~ "Asegúrese de que usa nombres de notas en el idioma \"{language}\"." Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/fr.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/fr.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/fr.po frescobaldi-2.0.0/frescobaldi_app/po/fr.po --- frescobaldi-1.2.0/frescobaldi_app/po/fr.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/fr.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7897 @@ +# French translations for frescobaldi package. +# Copyright (C) 2011 THE frescobaldi'S COPYRIGHT HOLDER +# This file is distributed under the same license as the frescobaldi package. +# +# Philippe Massart <>, 2011. +# Raphaël Doursenaud , 2011. +# Valentin Villenave , 2008, 2010 +# David Bouriaud , 2009 +# Ryan Kavanagh , 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: frescobaldi 1.9.0\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-20 10:54+0100\n" +"PO-Revision-Date: 2011-12-25 14:42-0500\n" +"Last-Translator: Ryan Kavanagh \n" +"Language-Team: Français <>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bits\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Lokalize 1.2\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "{appname} est écrit en {python} et utilise le toolkit {qt}." + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +msgid "Python" +msgstr "Python" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "Qt4" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" +"L'aperçu est généré par la bibliothèque {poppler} de {authors} et d'autres." + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +msgid "Poppler" +msgstr "Poppler" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "La plupart des icônes embarquées sont créées par {tango}." + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "Le Projet de Bureau Tango" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "{appname} est traduit dans les langues suivantes :" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "À propos de {appname}" + +#: frescobaldi_app/about.py:87 +msgid "About" +msgstr "À propos" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "Crédits" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "Version" + +#: frescobaldi_app/about.py:144 +msgid "Operating System" +msgstr "Système d'exploitation" + +#: frescobaldi_app/about.py:151 +msgid "Version {version}" +msgstr "Version {version}" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +msgid "A LilyPond Music Editor" +msgstr "Un éditeur de partitions LilyPond" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "Copyright (c) {year} par {author}" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "Envoyer un message par email aux mainteneurs." + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "" +"Traduit par Valentin Villenave, David Bouriaud, Ryan Kavanagh, Raphaël " +"Doursenaud et Philippe Massart." + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "Sous licence {gpl}." + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "Ce raccourci est en conflit avec la commande suivante :" +msgstr[1] "Ce raccourci est en conflit avec les commandes suivantes :" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +msgid "Shortcut Conflict" +msgstr "Conflit de raccourci" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "Éditer à nouveau" + +#: frescobaldi_app/app.py:128 +msgid "LilyPond Files" +msgstr "Fichiers LilyPond" + +#: frescobaldi_app/app.py:129 +msgid "LaTeX Files" +msgstr "Fichiers LaTeX" + +#: frescobaldi_app/app.py:130 +msgid "DocBook Files" +msgstr "Fichiers DocBook" + +#: frescobaldi_app/app.py:131 +msgid "HTML Files" +msgstr "Fichiers HTML" + +#: frescobaldi_app/app.py:132 +msgid "Texinfo Files" +msgstr "Fichiers Texinfo" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "Fichiers Scheme" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Tous les fichiers" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "&Repérer la ligne courante" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "Effacer tous les repères d'&erreur" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "Effacer tous les repères" + +#: frescobaldi_app/bookmarkmanager.py:115 +msgid "Next Mark" +msgstr "Repère suivant" + +#: frescobaldi_app/bookmarkmanager.py:116 +msgid "Previous Mark" +msgstr "Repère précédent" + +#: frescobaldi_app/convert_ly.py:118 +msgid "From version:" +msgstr "Depuis la version :" + +#: frescobaldi_app/convert_ly.py:119 +msgid "To version:" +msgstr "Vers la version :" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "Enregistrer les messages de convert-ly dans le document" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" +"Si coché, les messages de convert-ly sont ajoutés comme commentaires en fin " +"de document" + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "&Messages" + +#: frescobaldi_app/convert_ly.py:125 +msgid "&Changes" +msgstr "&Changements" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "Exécuter à nouveau" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +msgid "" +msgstr "" + +#: frescobaldi_app/convert_ly.py:138 +msgid "Convert-ly from LilyPond {version}" +msgstr "Lancer convert-ly depuis la version {version} de LilyPond" + +#: frescobaldi_app/convert_ly.py:162 +msgid "(set in document)" +msgstr "(défini(e) dans le document)" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "Cible et source doivent être définies" + +#: frescobaldi_app/convert_ly.py:190 +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "" +"Impossible de lancer convert-ly :\n" +"\n" +"{message}\n" + +#: frescobaldi_app/convert_ly.py:196 +msgid "The document has not been changed." +msgstr "Le document n'a pas été modifié." + +#: frescobaldi_app/convert_ly.py:202 +msgid "Current Document" +msgstr "Document en cours" + +#: frescobaldi_app/convert_ly.py:202 +msgid "Converted Document" +msgstr "Document converti" + +#: frescobaldi_app/convert_ly.py:208 +msgid "Colors:" +msgstr "Couleurs :" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "Ajouté" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "Modifié" + +#: frescobaldi_app/convert_ly.py:211 +msgid "Deleted" +msgstr "Supprimé" + +#: frescobaldi_app/convert_ly.py:212 +msgid "Links:" +msgstr "Liens :" + +#: frescobaldi_app/convert_ly.py:213 +msgid "First Change" +msgstr "Première modification" + +#: frescobaldi_app/convert_ly.py:214 +msgid "Next Change" +msgstr "Modification suivante" + +#: frescobaldi_app/convert_ly.py:215 +msgid "Top" +msgstr "Haut" + +#: frescobaldi_app/cut_assign.py:39 +msgid "Cut and Assign" +msgstr "Couper et assigner" + +#: frescobaldi_app/cut_assign.py:40 +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "" +"Veuillez saisir le nom de la variable à laquelle vous souhaitez assigner le " +"texte sélectionné :" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +msgid "Untitled" +msgstr "Sans titre" + +#: frescobaldi_app/document.py:145 +msgid "Untitled ({num})" +msgstr "Sans titre ({num})" + +#: frescobaldi_app/documentactions.py:125 +msgid "Cut and Assign..." +msgstr "Couper et assigner..." + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "Coloration syntaxique" + +#: frescobaldi_app/documentactions.py:127 +msgid "&Automatic Indent" +msgstr "Indentation &automatique" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "Ré-&indenter" + +#: frescobaldi_app/documentactions.py:129 +msgid "&Format" +msgstr "&Format" + +#: frescobaldi_app/documentactions.py:130 +msgid "&Update with convert-ly..." +msgstr "Mettre à jour avec convert-ly" + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +msgid "&Save" +msgstr "Enregistrer" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +msgid "Save &As..." +msgstr "Enregistrer sous..." + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "Fermer" + +#: frescobaldi_app/documentmenu.py:42 +msgctxt "menu title" +msgid "&Document" +msgstr "&Document" + +# Trouver un meilleur terme +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "[toujours gravé]" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Une erreur interne s'est produite :" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "Erreur interne" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Rapport de bogue par email..." + +#: frescobaldi_app/exception.py:79 +msgid "Optionally describe below what you were doing:" +msgstr "Décrivez ci-dessous ce que vous faisiez (facultatif) :" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "Polices globales" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should " +"also set the staff size to the global staff size you use in the document (20 " +"by default)." +msgstr "" +"Veuillez sélectionner les trois polices globales à utiliser respectivement " +"pour \\roman, \\sans et \\typewriter. " +"Vous pouvez également définir la taille de portée globale que vous utilisez " +"dans le document (20 par défaut)." + +#: frescobaldi_app/globalfontdialog.py:76 +msgid "Roman Font:" +msgstr "Police « romaine » :" + +#: frescobaldi_app/globalfontdialog.py:77 +msgid "Sans Font:" +msgstr "Police « linéale » :" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "Police « largeur fixe » :" + +#: frescobaldi_app/globalfontdialog.py:79 +msgid "Staff Size:" +msgstr "Taille des portées :" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Séparer les syllabes des paroles (césure)" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Veuillez choisir une langue :" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +msgid "Lyrics" +msgstr "Paroles" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +msgctxt "menu title" +msgid "Tools" +msgstr "Outils" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "Édition" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +msgid "Preferences" +msgstr "Préférences" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi peut placer automatiquement des césures « {hyphen} » dans un " +"texte pour le rendre\n" +"utilisable comme paroles.\n" +"Frescobaldi peut utiliser les dictionnaires de césure d'OpenOffice.org, " +"Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"Pour utiliser cette fonction, vous devez d'abord sélectionner le texte à " +"traiter. Ensuite\n" +"appuyez {key_hyphen} ou choisissez {menu_hyphen}.\n" +"Dans la fenêtre de dialogue qui apparaît, sélectionnez la langue.\n" +"Appuyez Ok ou appuyez Entrée pour effecter la césure. \n" +"

\n" +"\n" +"

\n" +"Une petite limitation est que les dictionnaires de césure d'un traitement de " +"texte couperont\n" +"rarement un mot juste après la première lettre (p. ex. « {example} »), parce " +"que ce\n" +"n'est pas beau dans un texte traité avec ce type de logiciel. Ainsi, il est " +"possible que\n" +"vous deviez ajouter quelques césures après la première lettre dans les " +"paroles. \n" +"

\n" +"\n" +"

\n" +"Il existe également une commande pour supprimer la césure. Cela peut " +"s'avérer utile si vous avez une\n" +"strophe de paroles que vous désirez seulement afficher sous la musique.\n" +"Sous le menu {menu_settings}, vous pouvez saisir la liste des dossiers où " +"rechercher\n" +"les fichiers de césure.\n" +"

\n" + +#: frescobaldi_app/inputdialog.py:101 +msgid "Select Color" +msgstr "Sélectionner une couleur" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "Démarrage {job}..." + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "Abandon {job}..." + +#: frescobaldi_app/job.py:206 +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "" +"Impossible de démarrer {program}.\n" +"Veuillez vérifier l'emplacement et les permissions." + +#: frescobaldi_app/job.py:209 +msgid "Could not read from the process." +msgstr "Impossible de lire le processus." + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Une erreur inconnue s'est produite." + +#: frescobaldi_app/job.py:216 +msgid "Exited with return code {code}." +msgstr "Arrêté avec le code de retour {code}." + +#: frescobaldi_app/job.py:218 +msgid "Exited with exit status {status}." +msgstr "Arrêté avec l'état de sortie {status}." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "Terminé avec succès en {time}." + +#: frescobaldi_app/lyrics.py:132 +msgid "&Hyphenate Lyrics Text..." +msgstr "&Séparer les syllabes des paroles (césure)" + +#: frescobaldi_app/lyrics.py:133 +msgid "&Remove hyphenation" +msgstr "Supp&rimer la césure" + +#: frescobaldi_app/lyrics.py:134 +msgid "&Copy Lyrics with hyphenation removed" +msgstr "&Copier les paroles en enlevant la césure" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "{appname} [options] fichier..." + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "ENC" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Encodage à utiliser" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "NUM" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Numéro de ligne à atteindre, en partant de 1" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Numéro de colonne à atteindre, en partant de 0" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "NOM" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "Session à démarrer (« {none} » pour une session vide)" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +msgid "[modified]" +msgstr "[modifié]" + +#: frescobaldi_app/mainwindow.py:268 +msgctxt "dialog title" +msgid "Close Document" +msgstr "Fermer le document" + +# Sauvegarder, sauver ou enregistrer… +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" +"Le document « {name} » a été modifié.\n" +"Voulez-vous enregistrer les changements ou les supprimer ?" + +#: frescobaldi_app/mainwindow.py:281 +msgid "Tab Bar" +msgstr "Barre d'onglets" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +msgid "Warning" +msgstr "Avertissement" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" +"Impossible de charger le document distant :\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:354 +msgctxt "dialog title" +msgid "Open File" +msgstr "Ouvrir fichier" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "Erreur" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" +"Impossible d'écrire sur la cible :\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:399 +msgctxt "dialog title" +msgid "Save File" +msgstr "Enregistrer le fichier" + +#: frescobaldi_app/mainwindow.py:439 +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Enregistrer une copie" + +#: frescobaldi_app/mainwindow.py:445 +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Enregistrer la sélection" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"Impossible d'écrire sur la cible :\n" +"\n" +"{url}\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "Insérer depuis le fichier" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"Impossible de lire depuis la source :\n" +"\n" +"{url}\n" +"\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:541 +msgctxt "dialog title" +msgid "Print Source" +msgstr "Imprimer le code source" + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "Exporter en HTML" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" +"Merci de décrire le problème ou la demande de fonctionnalité.\n" +"Fournissez un maximum d'informations.\n" +"\n" +"\n" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "Barre principale" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "Barre d'aperçu" + +#: frescobaldi_app/mainwindow.py:923 +msgctxt "action: new document" +msgid "&New" +msgstr "&Nouveau" + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "&Ouvrir..." + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "Ouvrir &récent" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "Insérer depuis le fichier..." + +#: frescobaldi_app/mainwindow.py:927 +msgid "Open Current Directory" +msgstr "Ouvrir le dossier courant" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "Enregistrer une copie ou la sélection sous..." + +#: frescobaldi_app/mainwindow.py:931 +msgid "Save All" +msgstr "Tout enregistrer" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "Imprimer le code source" + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "Fermer les autres documents" + +#: frescobaldi_app/mainwindow.py:935 +msgid "Close All Documents" +msgstr "Fermer tous les documents" + +#: frescobaldi_app/mainwindow.py:936 +msgid "Closes all documents and leaves the current session." +msgstr "Fermer tous les documents et quitter la session courante" + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "&Quitter" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "Exporter le code source en &HTML coloré..." + +#: frescobaldi_app/mainwindow.py:941 +msgid "&Undo" +msgstr "Annuler" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "Refaire" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "Couper" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Copier" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "Copier en HTML coloré" + +#: frescobaldi_app/mainwindow.py:946 +msgid "&Paste" +msgstr "Coller" + +#: frescobaldi_app/mainwindow.py:947 +msgid "Select &All" +msgstr "Tout sélectionner" + +#: frescobaldi_app/mainwindow.py:948 +msgid "Select &Block" +msgstr "Sélectionner le bloc" + +#: frescobaldi_app/mainwindow.py:949 +msgid "Select &None" +msgstr "Ne rien sélectionner" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "Sélectionner des lignes entières au-dessus" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "Sélectionner des lignes entières en-dessous" + +#: frescobaldi_app/mainwindow.py:952 +msgid "&Find..." +msgstr "Rechercher..." + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "Rechercher le suivant" + +#: frescobaldi_app/mainwindow.py:954 +msgid "Find Pre&vious" +msgstr "Rechercher le précédent" + +#: frescobaldi_app/mainwindow.py:955 +msgid "&Replace..." +msgstr "&Remplacer..." + +#: frescobaldi_app/mainwindow.py:956 +msgid "Pr&eferences..." +msgstr "Préfér&ences..." + +#: frescobaldi_app/mainwindow.py:958 +msgid "&Next Document" +msgstr "Document suivant" + +#: frescobaldi_app/mainwindow.py:959 +msgid "&Previous Document" +msgstr "Document précédent" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "Défiler vers le haut" + +#: frescobaldi_app/mainwindow.py:961 +msgid "Scroll Down" +msgstr "Défiler vers le bas" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "Nouvelle fenêtre" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "Plein écran" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "Manuel utilisateur" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "Qu'est-ce que c'est ?" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "Rapporter un &bogue..." + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "&À propos de {appname}..." + +#: frescobaldi_app/menu.py:81 +msgctxt "menu title" +msgid "&File" +msgstr "&Fichier" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "&Exporter" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "&Édition" + +#: frescobaldi_app/menu.py:147 +msgctxt "menu title" +msgid "&View" +msgstr "&Affichage" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "Aperçu" + +#: frescobaldi_app/menu.py:189 +msgctxt "menu title" +msgid "&LilyPond" +msgstr "&LilyPond" + +#: frescobaldi_app/menu.py:208 +msgctxt "menu title" +msgid "&Tools" +msgstr "Outils" + +#: frescobaldi_app/menu.py:233 +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "Paroles" + +#: frescobaldi_app/menu.py:245 +msgctxt "submenu title" +msgid "&Pitch" +msgstr "Hauteur" + +#: frescobaldi_app/menu.py:259 +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "&Rythme" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "&Fenêtre" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "Aide" + +#: frescobaldi_app/musicpreview.py:113 +msgid "Document:" +msgstr "Document :" + +#: frescobaldi_app/musicpreview.py:195 +msgid "&Print" +msgstr "Im&primer" + +#: frescobaldi_app/musicpreview.py:196 +msgid "Music Preview" +msgstr "Aperçu" + +#: frescobaldi_app/popplerdummy.py:42 +msgid "Could not load the {name} module." +msgstr "Impossible de charger le module {name}." + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" +"Aucune commande d'impression pour imprimer un fichier PostScript n'a pû être " +"trouvée.\n" +"\n" +"Le document sera donc imprimé avec une image point par point à {resolution} " +"DPI. Il est recommandé d'imprimer avec un lecteur PDF dédié.\n" +"\n" +"Voulez-vous continuer ?" + +#: frescobaldi_app/popplerprint.py:61 +msgid "PDF Document" +msgstr "Document PDF" + +#: frescobaldi_app/popplerprint.py:69 +msgid "Print {filename}" +msgstr "Imprimer {filename}" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +msgid "Printing Error" +msgstr "Erreur d'impression" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +msgid "Could not send the document to the printer." +msgstr "Impossible d'envoyer le document à l'imprimante." + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "Impression de la page {page} ({num} de {total})..." + +#: frescobaldi_app/search.py:99 +msgid "Search:" +msgstr "Rechercher :" + +#: frescobaldi_app/search.py:100 +msgid "&Case" +msgstr "&Casse" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "Sensible à la casse" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "&Regex" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "Expression rationelle" + +#: frescobaldi_app/search.py:104 +msgid "The total number of matches" +msgstr "Nombre total de résultats" + +#: frescobaldi_app/search.py:105 +msgid "Close" +msgstr "Fermer" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "Remplacer :" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "Rem&placer" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "Remplacer la prochaine occurrence du terme recherché." + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "Tous" + +#: frescobaldi_app/search.py:110 +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "" +"Remplace toutes les occurrences du terme recherché dans le document ou dans " +"la sélection." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "Ligne : {line}, Colonne : {column}" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "Diviser &horizontalement" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "Diviser &verticalement" + +#: frescobaldi_app/viewmanager.py:91 +msgid "&Close View" +msgstr "Fermer l'aperçu" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "Fermer l'aperçu courant" + +#: frescobaldi_app/viewmanager.py:444 +msgid "Close &Other Views" +msgstr "Fermer les autres aperçus" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "Aperçu suivant" + +#: frescobaldi_app/viewmanager.py:446 +msgid "&Previous View" +msgstr "Aperçu précédent" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "Complètement &automatique" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "Afficher les propositions de c&omplètement" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +msgid "Special Characters" +msgstr "Caractères spéciaux" + +#: frescobaldi_app/charmap/__init__.py:41 +msgid "Special Charac&ters" +msgstr "Carac&tères spéciaux" + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +msgid "Documentation Browser" +msgstr "Documentation" + +#: frescobaldi_app/docbrowser/__init__.py:47 +msgid "&Documentation Browser" +msgstr "&Documentation" + +#: frescobaldi_app/docbrowser/__init__.py:80 frescobaldi_app/help/browser.py:76 +msgid "Back" +msgstr "Précédent" + +#: frescobaldi_app/docbrowser/__init__.py:81 frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "Suivant" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "Accueil" + +#: frescobaldi_app/docbrowser/__init__.py:84 +msgid "&LilyPond Documentation" +msgstr "Documentation LilyPond" + +#: frescobaldi_app/docbrowser/__init__.py:85 +msgid "&Contextual LilyPond Help" +msgstr "Aide LilyPond &contextuelle" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Rechercher..." + +#: frescobaldi_app/docbrowser/browser.py:136 +msgid "(local)" +msgstr "(local)" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "({hostname})" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +msgid "LilyPond Source" +msgstr "Code source LilyPond" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +msgid "Documents" +msgstr "Documents" + +#: frescobaldi_app/doclist/__init__.py:40 +msgid "Docum&ents" +msgstr "Docum&ents :" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "Toujours gr&aver [{docname}]" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "Toujours gr&aver ce document" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "Graver" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "Grav&er (aperçu)" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "Graver (&publication)" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "Graver (personnalisé)..." + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "Interrompre le travail de gravure" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "Graver (personnalisé)" + +#: frescobaldi_app/engrave/custom.py:119 +msgid "LilyPond Version:" +msgstr "Version de LilyPond :" + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "Fomat de sortie :" + +#: frescobaldi_app/engrave/custom.py:121 +msgid "Resolution:" +msgstr "Résolution :" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "Lancer LilyPond en mode aperçu (avec l'option point-and-click)" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "Lancer LilyPond avec des messages détaillés" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +msgid "Delete intermediate output files" +msgstr "Effacer les fichiers de sortie intermédiaires" + +#: frescobaldi_app/engrave/custom.py:126 +msgid "Command line:" +msgstr "Ligne de commande" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "Lancer LilyPond" + +#: frescobaldi_app/engrave/custom.py:149 +msgid "LilyPond {version}" +msgstr "LilyPond {version}" + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" +"Dans ce dialogue, vous pouvez définir des paramètres à utiliser avec la " +"commande LilyPond\n" +"pour graver votre document.\n" +"Il est même possible d'éditer la ligne de commande elle-même.\n" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "Les variables suivantes sont reconnues :" + +#: frescobaldi_app/engrave/custom.py:218 +msgid "The LilyPond executable" +msgstr "L'exécutable LilyPond" + +#: frescobaldi_app/engrave/custom.py:219 +msgid "All the include paths" +msgstr "Tous les emplacements d'inclusion" + +#: frescobaldi_app/engrave/custom.py:220 +msgid "The filename of the document" +msgstr "Le nom du document." + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "PDF" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "PostScript" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "PNG" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "SVG" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "PDF (Backend EPS)" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "PostScript encapsulé (Backend EPS)" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "PNG (Backend EPS)" + +#: frescobaldi_app/engrave/result_menu.py:45 +msgid "Generated &Files" +msgstr "Fichiers &générés" + +#: frescobaldi_app/engrave/result_menu.py:66 +msgid "No files available" +msgstr "Aucun fichier disponible" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "Barre d'outils" + +#: frescobaldi_app/help/browser.py:78 +msgid "Start" +msgstr "Démarrer" + +#: frescobaldi_app/help/browser.py:79 +msgid "Contents" +msgstr "Table des matières" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "Aide" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "Pas d'aide" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "Aucune aide n'a été trouvée à ce sujet." + +#: frescobaldi_app/help/contents.py:46 +msgid "Frescobaldi Manual" +msgstr "Manuel de Frescobaldi" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version {version}." +"\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi est un éditeur léger et puissant pour les\n" +" partitions musicales LilyPond.\n" +"Ce manuel est écrit par {author} et documente {appname} version {version}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" +"

Comment obtenir de l'aide dans Frescobaldi

\n" +"\n" +"

\n" +"Dans la plupart des fenêtres de dialogue, vous pouvez cliquer sur\n" +"un bouton Aide ou appuyer la touche {key_help}.\n" +"La plupart des éléments d'interface ont aussi une information « Qu'est-ce " +"que c'est ? »\n" +"qui peut être affichée en appuyant {key_whatsthis} ou en sélectionnant " +"{menu_whatsthis}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "Qu'est-ce que c'est ?" + +#: frescobaldi_app/help/contents.py:88 +msgid "Introduction" +msgstr "Introduction" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input language." +"\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" +"

\n" +"LilyPond\n" +"est un logiciel libre de gravure musicale qui produit des partitions de très " +"haute qualité\n" +"à partir de fichiers textes d'entrés relativement simples.\n" +"Ces fichiers textes peuvent être créés avec n'importe quel éditeur de texte." +"\n" +"LilyPond charge alors le fichier texte et sort une magnifique gravure, par " +"défaut au format PDF.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi est un application conçue pour rendre l'édition de partitions " +"musicales LilyPond\n" +"plus facile et plus rapide. Vous devez cependant apprendre d'abord le " +"langage de saisie de LilyPond.\n" +"Si vous lisez la section {getting_started} de ce Guide de l'Utilisateur, " +"vous verrez aussi\n" +"certaines bases de LilyPond.\n" +"

\n" +"\n" +"

\n" +"Vous pourrez alors continuer à apprendre en vous servant du Manuel " +"d'Initiation de \n" +"l'excellente documentation en ligne de " +"LilyPond.\n" +"

" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "Démarrage" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "Graver (publication)" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "Préférences de LilyPond" + +#: frescobaldi_app/help/contents.py:142 +msgctxt "menu title" +msgid "View" +msgstr "Affichage" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "Effacer tous les repère d'erreur" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "Copier vers une image..." + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the preview;" +"\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the log," +"\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" +"

\n" +"L'écran par défaut de Frescobaldi montre un document texte sur la gauche et " +"un\n" +"aperçu musical vide sur la droite.\n" +"

\n" +"\n" +"

\n" +"Maintenant, dans l'éditeur de texte, saisissez un peu de code LilyPond, " +"comme ceci : \n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Cliquez ensuite le bouton LilyPond ou appuyez {key_engrave}.\n" +"Si tout se déroule normalement, LilyPond démarre et compile votre fichier.\n" +"Au bas de l'écran, vous pouvez suivre la progression de LilyPond.\n" +"Si LilyPond ne rencontre aucune erreur de votre part, il produira un " +"fichier\n" +"PDF qui sera affiché dans l'aperçu : \n" +"

\n" +"h\n" +"

\n" +"\n" +"

\n" +"L'aperçu offre de nombreuses possibilités : \n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Survoler des notes ou autres objets les surlignera dans le texte ; \n" +"cliquez des objets pour déplacer le curseur de texte vers leur emplacement.\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-molette change le zoom. Le zooming centrera la vue sur le pointeur de " +"la souris.\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-clic à un endroit vide fait apparaître une loupe.\n" +"
  • \n" +"\n" +"
  • \n" +"Déplacer le curseur de texte ou sélectionner du texte surligne les notes " +"dans l'aperçu ; \n" +"appuyez {key_jump} pour center explicitement et surligner une note ou un " +"autre objet\n" +"dans l'aperçu.\n" +"
  • \n" +"\n" +"
  • \n" +"Maj-glissez une sélection et appuyez {key_copy_image} ou {menu_copy_image}\n" +"pour copier la musique sélectionnée comme image vers le presse-papiers, un " +"fichier ou\n" +"une autre application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"Si votre partition est terminée, il est recommandé de lancer LilyPond une " +"fois de plus\n" +"en désactivant les notes cliquables : menu {menu_engrave}.\n" +"Les fichiers PDF seront plus petits.\n" +"

\n" +"\n" +"

\n" +"Si LilyPond ne démarre pas du tout, vérifiez que vous avez correctement " +"installé LilyPond\n" +"et que la commande lilypond se trouve bien dans la variable PATH de votre " +"système.\n" +"Si nécessaire, précisez l'emplacement exact de votre exécutable LilyPond " +"dans\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"Si LilyPond rencontre des erreurs dans votre document, elles seront " +"affichées dans le journal,\n" +"et Frescobaldi marquera les lignes de votre document où se trouvent les " +"erreurs.\n" +"Cliquer sur une erreur dans le journal ou appuyer {key_error} immédiatement\n" +"place le curseur de texte à l'emplacement fautif. En appuyant à nouveau " +"{key_error},\n" +" le curseur se déplacera à l'erreur suivante, et ainsi de suite. Et " +"relançant LilyPond,\n" +"les marques d'erreurs seront supprimées.\n" +"Vous pouvez supprimer ces marques d'erreurs manuellement en utilisant " +"l'option\n" +"{menu_clear_error_marks}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:228 +msgid "Other Tools" +msgstr "Autres outils" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "

D'autres outils importants sont listés ici.

\n" + +#: frescobaldi_app/help/contents.py:252 +msgid "About Frescobaldi" +msgstr "À propos de Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi est nommé en honneur de\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), un compositeur et organiste Italien.\n" +"

\n" +"\n" +"

\n" +"La page d'accueil de Frescobaldi est\n" +"www.frescobaldi.org\n" +"et une liste de diffusion est disponible sur\n" +"frescobaldi@googlegroups." +"com\n" +"(plus d'infos).\n" +"

\n" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "L'auteur principal de Frescobaldi est {author}." + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "Contribuer" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and wishes." +"\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi est un Logiciel\n" +"Libre visant à développer un éditeur de partitions LilyPond facile " +"d'accès.\n" +"Le but est de rendre Frescobaldi accessible sur les principales plate-formes." +"\n" +"

\n" +"\n" +"

\n" +"Frescobaldi est développé sur un dépôt public GitHub : {url}.\n" +"Vous pouvez parcourir le code source et rendre compte de bogues et de vos " +"remarques et souhaits.\n" +"

\n" +"\n" +"

\n" +"Vous pouvez contribuer simplement en utilisant Frescobaldi et en rendant " +"compte de bogues et suggestions.\n" +"Les traductions sont bienvenues. La création de nouvelles traductions est " +"expliquée\n" +"dans le fichier README-translations dans la source de Frescobaldi.\n" +"Si vous désirez ajouter des fonctionnalités, vous trouverez les informations " +"concernant la structure\n" +"du code source dans le fichier README-development.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:321 +msgid "History of Frescobaldi" +msgstr "Histoire de Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version 1." +"2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi puise ses racines dans LilyKDE, qui était un module externe pour " +"Kate, l'éditeur de KDE3.\n" +"LilyKDE était écrit en Python et a été publié à Noël 2007.\n" +"

\n" +"\n" +"

\n" +"Lorsque KDE a développé la version 4, il n'était pas possible de développer " +"directement\n" +"des modules externes pour Kate en Python. LilyKDE est alors devenu une " +"application indépendante, incluant\n" +"la partie éditeur de texte de Kate, et a été renommé Frescobaldi. " +"Frescobaldi utilisait encore Okular,\n" +"partie de KDE, pour afficher les fichiers PDF.\n" +"Frescobaldi 0.7 fut publié à Noël 2008.\n" +"À Noël 2009, la version 1.0.0 fut publiée, et à Noël 2010 la version 1.2.0.\n" +"

\n" +"\n" +"

\n" +"À ce moment, il fut décidé d'abandonner les librairies KDE4 et de n'utiliser " +"que\n" +"Python et Qt4 qui sont disponibles sur les platformes informatiques les plus " +"courantes.\n" +"Frescobaldi 2.0 est une ré-écriture complète. Sa publication est\n" +"prévue pour Noël 2011.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "L'éditeur" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" +"

\n" +"Dans cette partie sont présentées les fonctionnalités de l'éditeur,\n" +"parmi lesquelles le contrôle de l'indentation automatique, l'utilisation de " +"la recherche\n" +"et remplacement etc.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "Recherche et remplacer" + +#: frescobaldi_app/help/contents.py:377 +msgid "Edit" +msgstr "Édition" + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" +"

\n" +"Dans le menu {edit_menu} se trouvent les commandes Rechercher ({key_search})" +"\n" +"et Remplacer ({key_replace}), ouvrant une petite fenêtre dans le bas de\n" +"l'éditeur.\n" +"Il est possible de rechercher du texte ou des expressions rationnelles.\n" +"

\n" +"\n" +"

\n" +"Les expressions rationnelles sont des textes de recherche avancés contenant " +"des caractères qui peuvent\n" +"correspondre à plusieurs caractères dans le document.\n" +"En remplaçant le texte, il est également possible de faire référence à des " +"parties du texte recherché écrites\n" +"entre parenthèses.\n" +"

\n" +"\n" +"

\n" +"Dans le mode de recherche en expression rationelle, certains caractères ont " +"une signification particulière :\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
correspond au précédent caractère ou groupe, aucune ou plusieurs fois\n" +"
+
\n" +"
correspond au précédent caractère ou groupe, une ou plusieurs fois
\n" +"
?
\n" +"
correspond au précédent caractère ou groupe, aucune ou une fois
\n" +"
[ ]
\n" +"
correspond à un des caractères contenus
\n" +"
( )
\n" +"
groupe caractères. Ceci enregistre également les textes correspondants " +"dans le groupe.\n" +"En remplaçant, vous pouvez utiliser des caractères comme \\1, " +"\\2\n" +"etc., pour écrire le texte du groupe de texte de remplacement correspondant." +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
correspondent respectivement à un antislash, une nouvelle ligne, une " +"tabulation,\n" +"un caractère d'espace, un nombre, un caractère textuel générique.
\n" +"
\n" +"\n" +"

\n" +"Des informations plus complètes concernant les expressions rationnelles se " +"trouvent dans\n" +"la documentation\n" +"Python.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:427 +msgid "Document variables" +msgstr "Variables de document" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of Frescobaldi." +"\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" +"Les variables de document sont des variables qui influencent le comportement " +"de Frescobaldi.\n" +"Elles peuvent être écrites dans les cinq premières ou derrières lignes d'un " +"document.\n" +"Si une ligne contient « -*- », Frescobaldi recherche le " +"reste des\n" +"lignes de définitions de variable comme name: value;.\n" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "Les variables suivantes sont reconnues :" + +#: frescobaldi_app/help/contents.py:444 +msgid "mode" +msgstr "mode" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" +"Force un mode parmi les suivants : lilypond, html, texinfo, LaTeX, docbook " +"ou scheme. Par défaut : reconnaissance automatique du mode." + +#: frescobaldi_app/help/contents.py:448 +msgid "filename" +msgstr "Nom de fichier" + +#: frescobaldi_app/help/contents.py:449 +msgid "Compiles another LilyPond document instead of the current." +msgstr "Compile un autre document LilyPond au lieu du document en cours." + +#: frescobaldi_app/help/contents.py:450 +msgid "encoding" +msgstr "encodage" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "Utiliser un autre encodage que l'encodage par défaut UTF-8." + +#: frescobaldi_app/help/contents.py:452 +msgid "version" +msgstr "version" + +#: frescobaldi_app/help/contents.py:453 +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "" +"Définit la version de LilyPond à utiliser ; elle peut être utilisée pour des " +"documents non-LilyPond." + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +msgid "number" +msgstr "Nombre" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "La largeur d'une tabulation, par défaut 8 espaces." + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "Utilisation de tabulations pour l'indentation. Par défaut : {no}." + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" +"Utilisation de tabulations n'importe où dans le document. Par défaut : {yes}." + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" +"Nombre d'espaces utilisé par chaque niveau d'indentation. Par défaut : 2." + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "Vous pouvez placer des variables de document dans les commentaires." + +#: frescobaldi_app/help/contents.py:479 +msgid "Table of Contents" +msgstr "Table des matières" + +#: frescobaldi_app/help/helpimpl.py:115 +msgid "Up:" +msgstr "Haut :" + +#: frescobaldi_app/help/helpimpl.py:130 +msgid "Next:" +msgstr "Suivant :" + +#: frescobaldi_app/help/helpimpl.py:133 +msgid "See also:" +msgstr "Voir aussi :" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "(pas de touche définie)" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "Journal de LilyPond" + +#: frescobaldi_app/logtool/__init__.py:51 +msgid "LilyPond &Log" +msgstr "Journal de &LilyPond" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "Message d'erreur suivant" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "Message d'erreur précédent" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Cliquer pour éditer ce fichier" + +#: frescobaldi_app/miditool/__init__.py:51 +msgid "MIDI" +msgstr "MIDI" + +#: frescobaldi_app/miditool/__init__.py:52 +msgid "MIDI &Player" +msgstr "Lecteur MIDI" + +#: frescobaldi_app/miditool/__init__.py:97 +msgctxt "midi player" +msgid "Pause" +msgstr "Pause" + +#: frescobaldi_app/miditool/__init__.py:98 +msgctxt "midi player" +msgid "Play" +msgstr "Jouer" + +#: frescobaldi_app/miditool/__init__.py:99 +msgctxt "midi player" +msgid "Stop" +msgstr "Arrêter" + +#: frescobaldi_app/miditool/__init__.py:100 +msgctxt "midi player" +msgid "Restart" +msgstr "Redémarrer" + +#: frescobaldi_app/miditool/widget.py:102 +msgid "Tempo" +msgstr "Tempo :" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "Aucune sortie trouvée !" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "CHARGÉ" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "TOTAL" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "TEMPS" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "TEMPO" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "PULSATION" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "Aperçu" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "Aperçu" + +#: frescobaldi_app/musicview/__init__.py:191 +msgid "Select Music View Document" +msgstr "Sélectionner le document de l'aperçu" + +#: frescobaldi_app/musicview/__init__.py:192 +msgid "&Print Music..." +msgstr "&Imprimer la partition..." + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "Zoom avant" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "Zoom arrière" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "Zoom partition" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "Ajuster à la largeur" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "Ajuster à la &hauteur" + +#: frescobaldi_app/musicview/__init__.py:198 +msgid "Fit &Page" +msgstr "Ajuster à la &page" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "Aller à la position du curseur" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "Copier vers une image..." + +#: frescobaldi_app/musicview/__init__.py:339 +msgid "Choose the PDF document to display." +msgstr "Choisir le document PDF à afficher." + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" +"Choisir le document PDF à afficher ou déposer le fichier sur une autre " +"application ou un autre emplacement." + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "Ajuster à la largeur" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "Ajuster à la hauteur" + +#: frescobaldi_app/musicview/__init__.py:401 +msgid "Fit Page" +msgstr "Ajuster à la page" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "DPI :" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "Couleur de papier" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "Auto-rogner" + +#: frescobaldi_app/musicview/image.py:129 +msgid "Antialias" +msgstr "Lissage" + +#: frescobaldi_app/musicview/image.py:130 +msgid "Drag" +msgstr "Glisser" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "Glisser l'image comme ficher PNG." + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "Copier vers le presse-papiers" + +#: frescobaldi_app/musicview/image.py:133 +msgid "&Save As..." +msgstr "Enregistrer &sous..." + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" +"

\n" +"Cliquer permit de basculer l'affichage de la taille 100 % à la taille de la " +"fenêtre. Glissez pour copier l'image vers une autre application. Glissez " +"avec Ctrl (ou {command}) pour naviguer sur une grande image.\n" +"

\n" +"

\n" +"Vous pouvez également glisser une petite icône dans le coin inférieur droit, " +"ce qui enverra le fichier en cours vers le disque, p. ex. pour un email.\n" +"

" + +#: frescobaldi_app/musicview/image.py:167 +msgid "Image from {filename}" +msgstr "Image depuis {filename}" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "Enregistrer l'image sous" + +#: frescobaldi_app/musicview/image.py:214 +msgid "Could not save the image." +msgstr "Impossible d'enregistrer l'image." + +#: frescobaldi_app/pitch/__init__.py:99 +msgid "Pitch Name &Language" +msgstr "&Langue du nom des notes" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" +"Changer la langue des noms de notes LilyPond dans ce document ou dans la " +"sélection." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "Convertir du mode relatif au mode &absolu" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" +"Convertit les notes dans le document ou la sélection du mode de hauteurs " +"relatives au mode absolu." + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "Convertir du mode absolu au mode &relatif" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "" +"Convertit les notes dans le document ou la sélection du mode de hauteurs " +"absolues au mode relatif." + +#: frescobaldi_app/pitch/__init__.py:111 +msgid "&Transpose..." +msgstr "&Transposer..." + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "Transpose toutes les notes du document ou de la sélection." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Langue du nom des notes" + +#: frescobaldi_app/pitch/pitch.py:82 +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"Impossible d'effectuer la traduction demandée.\n" +"\n" +"La partition contient des altérations en quarts de ton qui ne sont pas " +"disponibles avec les noms de note en « {name} »." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"La langue des noms de notes a été mise à jour dans le code sélectionné. Vous " +"devez maintenant ajouter manuellement la commande suivante dans votre " +"document :" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "(pour LilyPond antérieur à 2.14), ou" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "(pour LilyPond 2.14 et ultérieur.)" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "Transposer" + +#: frescobaldi_app/pitch/pitch.py:399 +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" +"Veuillez saisir deux hauteurs absolues séparées par un espace, en utilisant " +"la langue « {language} »." + +#: frescobaldi_app/pitch/pitch.py:581 +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"Impossible d'effectuer la transposition demandée.\n" +"\n" +"La musique transposée contiendrait des altérations en quarts de ton qui ne " +"sont pas disponibles avec la langue « {language} »." + +#: frescobaldi_app/pitch/pitch.py:712 +msgid "Pitch manipulation" +msgstr "Manipulation des hauteurs" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" +"

\n" +"Frescobaldi propose des fonctions de manipulation des hauteurs,\n" +"toutes situées dans le menu {menu} : \n" +"

\n" +"\n" +"
\n" +"\n" +"
Langue des hauteurs
\n" +"
\n" +"Cette fonction traduit les hauteurs dans tout le document ou une sélection.\n" +"
\n" +"\n" +"
Convertir musique relative vers absolue
\n" +"
\n" +"Cette fonction convertit toute musique \\relative en hauteurs " +"absolues.\n" +"Cela enlève, mais respecte, les vérifications d'octave.\n" +"
\n" +"\n" +"
Convertir musique absolue vers relative
\n" +"
\n" +"Vérifie toutes les expressions musicales haut niveau, en le changeant en " +"mode\n" +"\\relative dès qu'une expression contient une hauteur.\n" +"Si vous désirez rendre des sous-expressions séparées relatives, il peut " +"s'avérer nécessaire de\n" +"sélectionner la musique de la première expression, en laissant en dehors les " +"accolades\n" +"du niveau supérieur.\n" +"
\n" +"\n" +"
\n" + +#: frescobaldi_app/pitch/pitch.py:744 +msgctxt "submenu title" +msgid "Pitch" +msgstr "Hauteur" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the document." +"\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" +"

\n" +"En transposant de la musique, deux hauteurs absolues doivent être spécifiées " +"pour\n" +"définir l'intervalle de transposition. Des hauteurs peuvent inclure des " +"marques d'octaviation.\n" +"Les hauteurs doivent être saisies dans la langue de hauteurs utilisée dans " +"le document.\n" +"

\n" +"\n" +"

\n" +"La musique sera ensuite transposée depuis la première hauteur vers la " +"deuxième,\n" +"comme la commande LilyPond \\transpose le ferait.\n" +"

\n" +"\n" +"

\n" +"P. ex. pour transposer d'une tierce mineure vers le haut, il faudrait " +"saisir :
\n" +"do mib\n" +"

\n" +"\n" +"

\n" +"Pour transposer d'une seconde majeure vers le bas, vous pouvez saisir :
\n" +"do sib,\n" +"

\n" +"\n" +"

\n" +"ou
\n" +"re do\n" +"

\n" +"\n" +"

\n" +"Il est également possible d'utiliser la fonction de transposition pour " +"changer une pièce de musique\n" +"de do dièse vers ré bémol, ou de définir des quarts de tons si cela est " +"accepté dans\n" +"la langue utilisée pour les hauteurs de notes.\n" +"

\n" +"\n" +"

\n" +"La fonction de transposition peut transposer des musiques en modes relatif " +"ou absolu, \n" +"en gérant correctement les armures, modes d'accords et vérifications " +"d'octave.\n" +"

\n" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "Utilisation" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "Utilisation : %s\n" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "afficher ce message d'aide et quitter" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "afficher le numéro de version du programme et quitter" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "Options" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "Fermer l'onglet" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "Qu'est-ce que c'est ?" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "Appliquer" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "Valider" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "Annuler" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "Abandonner" + +#: frescobaldi_app/po/messages.py:44 +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Enregistrer" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "Aide" + +#: frescobaldi_app/po/messages.py:46 +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Fermer" + +#: frescobaldi_app/po/messages.py:47 +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Ouvrir" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "Réinitialiser" + +#: frescobaldi_app/po/messages.py:50 +msgctxt "QFileDialog" +msgid "File" +msgstr "Fichier" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "Dossier" + +#: frescobaldi_app/po/messages.py:52 +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Trouver le dossier" + +#: frescobaldi_app/po/messages.py:53 +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Tous les fichiers (*)" + +#: frescobaldi_app/po/messages.py:55 +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "Faire défiler jusqu'ici" + +#: frescobaldi_app/po/messages.py:56 +msgctxt "QScrollBar" +msgid "Top" +msgstr "Haut" + +#: frescobaldi_app/po/messages.py:57 +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Bas" + +#: frescobaldi_app/po/messages.py:58 +msgctxt "QScrollBar" +msgid "Page up" +msgstr "Page haut" + +#: frescobaldi_app/po/messages.py:59 +msgctxt "QScrollBar" +msgid "Page down" +msgstr "Page bas" + +# Faire ? +#: frescobaldi_app/po/messages.py:60 +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "Défiler vers le haut" + +# Faire ? +#: frescobaldi_app/po/messages.py:61 +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "Défiler vers le bas" + +#: frescobaldi_app/po/messages.py:62 +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Bord gauche" + +#: frescobaldi_app/po/messages.py:63 +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Bord droit" + +#: frescobaldi_app/po/messages.py:64 +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Page de gauche" + +#: frescobaldi_app/po/messages.py:65 +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Page de droite" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "Défiler vers la gauche" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "Défiler vers la droite" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Préférences générales" + +#: frescobaldi_app/preferences/__init__.py:182 +msgid "MIDI Settings" +msgstr "Réglages MIDI" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +msgid "Helper Applications" +msgstr "Applications auxiliaires" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Emplacements" + +#: frescobaldi_app/preferences/__init__.py:212 +msgid "LilyPond Documentation" +msgstr "Documentation LilyPond" + +#: frescobaldi_app/preferences/__init__.py:222 +msgid "Keyboard Shortcuts" +msgstr "Raccourcis clavier" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "Polices et couleurs" + +#: frescobaldi_app/preferences/__init__.py:242 +msgid "Tools" +msgstr "Outils" + +#: frescobaldi_app/preferences/documentation.py:64 +msgid "Paths to LilyPond Documentation" +msgstr "Emplacements vers la documentation LilyPond" + +#: frescobaldi_app/preferences/documentation.py:66 +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "" +"Ajouter les emplacements ou URLs.\n" +"Voir « Qu'est-ce que c'est ? » pour plus d'information." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" +"

Vous pouvez ici ajouter les emplacements locaux ou URLs pointant vers la " +"documentation de LilyPond. Un emplacement local doit pointer vers le dossier " +"où se trouve soit le dossier « {documentation} », soit l'emplacement complet " +"« share/doc/lilypond/html/offline-root ».

\n" +"

Si ceux-ci ne sont pas trouvés, la documentation est cherchée dans tous " +"les sous-dossiers de l'emplacement donné, un niveau plus loin. Il est alors " +"possible de placer plusieurs versions de la documentation de LilyPond dans " +"differents sous-dossiers et demander à Frescobaldi de les trouver.

" + +#: frescobaldi_app/preferences/documentation.py:111 +msgid "Preferred Language:" +msgstr "Langue :" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "Par défaut" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "Anglais (non traduit)" + +#: frescobaldi_app/preferences/documentation.py:135 +msgid "Please enter a local path or a URL:" +msgstr "Veuillez saisir un emplacement local ou une URL." + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "Utiliser ce profil pour l'impression" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "Police :" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "Couleurs de base" + +#: frescobaldi_app/preferences/fontscolors.py:124 +msgid "Default Styles" +msgstr "Styles par défaut" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "(Hérite de : {name})" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +msgid "Text" +msgstr "Texte" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "Arrière-plan" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "Gras" + +#: frescobaldi_app/preferences/fontscolors.py:363 +msgid "Italic" +msgstr "Italique" + +#: frescobaldi_app/preferences/fontscolors.py:364 +msgid "Underline" +msgstr "Souligné" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +msgid "Selected Text" +msgstr "Texte sélectionné" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "Arrière-plan de la sélection" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "Ligne courante" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +msgid "Marked Line" +msgstr "Signet" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +msgid "Error Line" +msgstr "Ligne en erreur" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "Résultat de recherche" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +msgid "Matching Character" +msgstr "Caractère correspondant" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +msgid "Preview Background" +msgstr "Arrière-plan de l'aperçu" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "Surlignage de l'aperçu" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +msgid "Keyword" +msgstr "Mot-clé" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +msgid "Function" +msgstr "Fonction" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "Variable" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +msgid "Value" +msgstr "Valeur" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +msgid "String" +msgstr "Chaîne de caractères" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +msgid "Escape" +msgstr "Échappement" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +msgid "Comment" +msgstr "Commentaire" + +#: frescobaldi_app/preferences/fontscolors.py:483 +msgid "Pitch" +msgstr "Hauteur" + +#: frescobaldi_app/preferences/fontscolors.py:484 +msgid "Octave" +msgstr "Octave" + +#: frescobaldi_app/preferences/fontscolors.py:485 +msgid "Duration" +msgstr "Durée" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "Repère d'oOctave" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "Doigté" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +msgid "String Number" +msgstr "Numéro de corde" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "Liaison" + +#: frescobaldi_app/preferences/fontscolors.py:491 +msgid "Dynamic" +msgstr "Nuance" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Articulation" + +#: frescobaldi_app/preferences/fontscolors.py:493 +msgid "Chord" +msgstr "Accord" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "Ligature" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "Repère" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +msgid "Repeat" +msgstr "Reprise" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "Commande" + +#: frescobaldi_app/preferences/fontscolors.py:499 +msgid "Specifier" +msgstr "Spécificateur" + +#: frescobaldi_app/preferences/fontscolors.py:500 +msgid "User Command" +msgstr "Commande utilisateur" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +msgid "Markup" +msgstr "Markup" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "Mode Paroles" + +#: frescobaldi_app/preferences/fontscolors.py:503 +msgid "Lyric Text" +msgstr "Texte de paroles" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "Marqueur de région" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "Contexte" + +#: frescobaldi_app/preferences/fontscolors.py:506 +msgid "Layout Object" +msgstr "Objet de mise en page" + +#: frescobaldi_app/preferences/fontscolors.py:507 +msgid "Property" +msgstr "Propriété" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "Variable utilisateur" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +msgid "Escaped Character" +msgstr "Caractère d'échappement" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "HTML" + +#: frescobaldi_app/preferences/fontscolors.py:517 +msgid "Tag" +msgstr "Balise" + +#: frescobaldi_app/preferences/fontscolors.py:518 +msgid "LilyPond Tag" +msgstr "Balise LilyPond" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "Attribut" + +#: frescobaldi_app/preferences/fontscolors.py:521 +msgid "Entity Reference" +msgstr "Référence d'élément" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "Scheme" + +#: frescobaldi_app/preferences/fontscolors.py:527 +msgid "Number" +msgstr "Nombre" + +#: frescobaldi_app/preferences/fontscolors.py:528 +msgid "LilyPond Environment" +msgstr "Environnement LilyPond" + +#: frescobaldi_app/preferences/fontscolors.py:532 +msgid "Texinfo" +msgstr "Texinfo" + +#: frescobaldi_app/preferences/fontscolors.py:534 +msgid "Block" +msgstr "Bloc" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "Verbatim" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Langue :" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "Pas de traduction" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "Langue système par défaut (si disponible)" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Style :" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "Utiliser les icônes système" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" +"Si coché, les icônes du thème de bureau seront utilisées à la place des " +"icônes embarquées.\n" +"Ce réglage prend effet au prochain démarrage de {appname}." + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "Session à charger si Frescobaldi est lancé sans arguments" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "Démarrer sans session" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "Démarrer avec la dernière session utilisée" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "Démarrer avec la session :" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "Lors de l'enregistrement de documents" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "Conserver une copie de sauvegarde" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" +"Frescobaldi sauvegarde toujours un fichier avant de l'écraser avec une " +"nouvelle version.\n" +"Si coché, ces copies de sauvegarde sont conservées." + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "Retenir la position du curseur, des repères, etc." + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Dossier par défaut :" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "Le dossier par défaut pour vos documents LilyPond (optionnel)." + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "PDF : " + +#: frescobaldi_app/preferences/helpers.py:71 +msgid "MIDI:" +msgstr "MIDI : " + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "SVG : " + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "Image : " + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "Navigateur : " + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "Courriel : " + +#: frescobaldi_app/preferences/helpers.py:76 +msgid "File Manager:" +msgstr "Gestionnaire de fichiers : " + +#: frescobaldi_app/preferences/helpers.py:77 +msgid "Shell:" +msgstr "Interpréteur : " + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" +"Vous pouvez saisir ci-dessous les commandes pour ouvrir divers types de " +"fichiers. $f est remplacé par le nom du fichier, $u par l'URL. Laissez un champ vide pour utiliser l'application défaut du " +"système d'exploitation." + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "Commande qui accepte un URL mailto:." + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "" +"Commande pour ouvrir un émulateur de terminal ou une ligne de commande." + +#: frescobaldi_app/preferences/lilypond.py:81 +msgid "LilyPond versions to use" +msgstr "Versions de LilyPond à utiliser" + +#: frescobaldi_app/preferences/lilypond.py:82 +msgid "Automatically choose LilyPond version from document" +msgstr "Choisir automatiquement la version de LilyPond à partir du document" + +#: frescobaldi_app/preferences/lilypond.py:84 +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" +"Si coché, la version du document détermine la version de LilyPond à utiliser." +"\n" +"Voir « Qu'est-ce que c'est » pour plus d'informations." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" +"

Si ce réglage est activé, le document est cherché pour une commande " +"LilyPond \\version ou une variable de document version.

\n" +"

La commande LilyPond version ressemble à ceci :

\n" +"
\\version \"2.14.0\"
\n" +"

La variable de document ressemble à :

\n" +"
-*- version: 2.14.0;
\n" +"

quelque part (dans une section de commentaires) dans les premières ou " +"dernières 5 lignes du document. De cette façon, la version LilyPond à " +"utiliser peut également être spécifiée dans des fichiers non-LilyPond comme " +"HTML, LaTeX, etc.

\n" +"

Si le document spécifie une version, la plus ancienne version LilyPond " +"utilisable est choisie. Autrement, la version par défaut est choisie.

\n" + +#: frescobaldi_app/preferences/lilypond.py:101 +msgid "See also {link}." +msgstr "Voir aussi {link}" + +#: frescobaldi_app/preferences/lilypond.py:149 +msgid "Set as &Default" +msgstr "Définir par &défaut" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "par défaut" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "Commande de LilyPond :" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "Nom ou emplacement complet du programme LilyPond." + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "Convert-ly :" + +#: frescobaldi_app/preferences/lilypond.py:241 +msgid "LilyPond-book:" +msgstr "LilyPond-book :" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "Inclure dans la sélection automatique de version" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "Lancement de LilyPond" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "Enregistrer le document si possible" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" +"Si coché, le document est enregistré lorsqu'il est local et modifié.\n" +"Sinon, un fichier temporaire est utilisé pour lancer LilyPond." + +#: frescobaldi_app/preferences/lilypond.py:286 +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "Si coché, LilyPond supprimera les fichiers PostScript intermédiaires." + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "Emplacement d'inclusion LilyPond :" + +#: frescobaldi_app/preferences/midi.py:77 +msgid "MIDI Ports" +msgstr "Ports MIDI" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" +"Remarque : il n'y a pas de sortie MIDI disponible sur votre système. Pour " +"utiliser le MIDI, vérifiez si PortMIDI est installé sur votre système et " +"s'il y a un synthétiseur MIDI disponible ou connecté." + +#: frescobaldi_app/preferences/midi.py:82 +msgid "Player output:" +msgstr "Sortie du lecteur :" + +#: frescobaldi_app/preferences/midi.py:84 +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" +"Le port MIDI pour faire jouer la musique.\n" +"Voir « Qu'est-ce que c'est ? » pour plus d'information." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" +"

Ce menu déroulant liste les ports MIDI disponibles sur voter système. " +"Vous pouvez en sélectionner un, ou simplement saisir une partie de nom. Dans " +"ce cas, le premier nom de port disponible commençant par ces caractères est " +"utilisé.

\n" +"

Cliquez le bouton pour rafraîchir la liste, p. ex. lorsque vous connectez " +"un périphérique MIDI ou démarrez un synthétiseur logiciel.

" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "Rafraîchir les ports MIDI" + +#: frescobaldi_app/preferences/midi.py:135 +msgid "Close unused MIDI output" +msgstr "Fermer les sorties MIDI non utilisées" + +#: frescobaldi_app/preferences/midi.py:137 +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" +"Ceci ferme les ports MIDI non utilisés pendant une minute.\n" +"Voir « Qu'est-ce que c'est ? » pour plus d'information." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" +"

Si coché, Frescobaldi fermera les ports de sortie MIDI inutilisés depuis " +"une minute.

\n" +"

Cela permet de libérer des ressources système qu'un synthétiseur logiciel " +"MIDI pour utiliser, économisant ainsi de l'énergie.

\n" +"

Une conséquence est que si vous interrompez un fichier MIDI pendant un " +"certain temps, les instruments sont réinitialisés au piano par défaut " +"(instrument 0). Dans ce cas, rejouer le fichier depuis le début redéfinit " +"correctement les instruments.

\n" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "Dossiers contenant les dictionnaires de césures de paroles" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Raccourci" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "Menu {name} :" + +#: frescobaldi_app/preferences/shortcuts.py:125 +msgid "Other commands:" +msgstr "Autres commandes :" + +#: frescobaldi_app/preferences/shortcuts.py:173 +msgid "&Edit Shortcut for \"{name}\"" +msgstr "Éditer le raccourci pour « {name} »" + +#: frescobaldi_app/preferences/shortcuts.py:178 +msgid "(no shortcut)" +msgstr "(pas de raccourci)" + +#: frescobaldi_app/preferences/shortcuts.py:206 +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "Supprimer le raccourci pour cette commande ?" +msgstr[1] "Supprimer le raccourci pour ces commandes ?" + +#: frescobaldi_app/preferences/shortcuts.py:304 +msgid "(default)" +msgstr "(par défaut)" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "Afficher le journal quand un travail est démarré" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "Afficher le journal" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" +"Si coché, Frescobaldi ne raccourcira pas les noms de fichier dans la sortie " +"du journal." + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "Aperçu" + +#: frescobaldi_app/preferences/tools.py:142 +msgid "Magnifier Size:" +msgstr "Taille de la loupe :" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "Taille de la loupe (Ctrl+Clic dans l'aperçu)" + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr " pixels" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "Échelle de zoom" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "Niveau de zoom de la loupe" + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "%" + +#: frescobaldi_app/preferences/tools.py:220 +msgid "Group documents by directory" +msgstr "Regrouper les documents par dossier" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Insertion rapide" + +#: frescobaldi_app/quickinsert/__init__.py:48 +msgid "Quick &Insert" +msgstr "&Insertion rapide" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Autoriser les raccourcis" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "" +"Utiliser la notation abrégée pour certaines articulations comme le staccato." + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Articulations" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Articulations et signes divers" + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Accent" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Marcato" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Staccatissimo" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Staccato" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Portato" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Tenuto" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Ornements" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Trille" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Mordant" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Mordant barré" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Grupetto" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "Double mordant" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "Mordant puis mordant barré" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "Mordant amorcé par le haut" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "Mordant amorcé par le bas" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "Mordant barré montant" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "Mordant barré descendant" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "Mordant montant" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "Mordant descendant" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "Mordant en ligne" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Grupetto inversé" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "Symboles" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Point d'orgue" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Point d'orgue court" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Point d'arrêt" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Point d'arrêt long" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Segno" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Coda alternative" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "Signumcongruentiae" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Autre" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Poussé" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Tiré" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "Pizz. Bartók" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "Ouvert (ex. cuivres)" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "Bouché (ex. cuivres)" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Harmonique" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Pouce" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Talon gauche" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Talon droit" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "Pointe gauche" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Pointe droite" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "Demi-ouvert (ex. cymbale charleston)" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "Barres de mesure" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "Barres de mesure, respirations, etc." + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Double barre de mesure" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "Barre de fin" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "Barre de mesure pointillée" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "Barre de mesure en tirets" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Barre de mesure invisible" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "Début de reprise" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "Reprise dans les deux sens" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "Fin de reprise" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "Reprise dans les deux sens (ancien)" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "Reprise dans les deux sens (classique)" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "Barre de mesure style « tic »" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "Barre de mesure simple" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "Barre de mesure fine-épaisse-fine" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "Barre de mesure épaisse-fine" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "Double barre épaisse" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "Barre de mesure segno" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "Respirations" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "Respiration par défaut" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "Respiration droite" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "Césure courbée" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "Césure droite" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "{name} ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +msgid "Configure Keyboard Shortcut ({key})" +msgstr "Configurer le raccourci clavier ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Aucun" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "Nuances" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "Symboles pour les nuances." + +#: frescobaldi_app/quickinsert/dynamics.py:128 +msgid "Dynamic sign {name}" +msgstr "Nuance {name}" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "Liaisons" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "Crescendo graphique" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "Diminuendo graphique" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "Decrescendo" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "Liaisons, nuances progressives etc." + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "Arpèges" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "Arpège" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "Arpège vers le haut" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "Arpège vers le bas" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "Arpège en crochet" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "Arpège en parenthèse" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "Glissandos" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "Glissando en tirets" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "Glissando en pointillés" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "Glissando en zigzag" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "Glissando en trille" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "Liaison de phrasé" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" +"

Avec le panneau d'insertion rapide, vous pouvez ajouter divers éléments " +"musicaux à la note actuelle ou à la musique sélectionnée.

\n" +"

Voir {link} pour plus d'informations.

" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Orientation :" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Haut" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Neutre" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Bas" + +#: frescobaldi_app/quickinsert/widget.py:127 +msgid "The Quick Insert Panel" +msgstr "Le panneau d'insertion rapide" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" +"

\n" +"Avec les outils du panneau d'insertion rapide, vous pouvez ajouter divers " +"éléments musicaux à la note actuelle ou à la musique sélectionnée.\n" +"

\n" +"\n" +"

\n" +"Le sélecteur de Direction définit si les articulations, dynamiques " +"ou liaisons\n" +"apparaissent en position neutre (p. ex. déterminée par la direction de la " +"hampe de note),\n" +"au-dessus ou en-dessous de la portée en insérant un caractère -, ^ ou\n" +"_.\n" +"

\n" +"\n" +"

\n" +"Cliquez sur l'onglet pour choisir un outil. Vous pouvez voyager d'un outil à " +"l'autre avec la touche Ctrl\n" +"(ou {command}) et la molette de la souris.\n" +"Tous les boutons du panneau d'insertion rapide ont un raccourci clavier " +"configurable;\n" +"vous pouvez le modifier par un clic-droit sur un bouton.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" +"

Articulations

\n" +"\n" +"

\n" +"Ces symboles musicaux peuvent être ajoutés à une note, un silence ou une " +"sélection\n" +"musicale.\n" +"Si vous les appliquez à une sélection, les silences ne seront pas pris en " +"compte.\n" +"Si aucun texte n'est sélectionné, le curseur ira automatiquement au prochain " +"son,\n" +"silence, espace ou accord.\n" +"

\n" +"\n" +"

\n" +"Si Autoriser les raccourcis est coché, Frescobaldi utilisera les " +"signes abrégés\n" +"pour les articulations s'ils existent\n" +"(p. ex. -. au lieu de -\\staccato).\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" +"

Nuances

\n" +"\n" +"

\n" +"Les nuances peuvent être ajoutées à une note ou un silence.\n" +"Si vous sélectionnez une région musicale, vous pouvez ajouter une indication " +"continue qui s'arrêtera automatiquement\n" +"à la derrière note, silence ou accord de la sélection.\n" +"Si vous choisissez ensuite un signe, il remplacera la terminaison.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" +"

Indications étendues

\n" +"\n" +"

\n" +"Cet outil permet d'ajouter des arpeggios, glissandos et d'autres indications " +"étendues,\n" +"telles que des liaisons, liaisons de phrasé, ligatures manuelles ou trilles." +"\n" +"

\n" +"\n" +"

\n" +"Les arpeggios et glissandos s'appliquent à la note courante;\n" +"aucune musique ne peut être sélectionnée.\n" +"Les liaisons, ligatures ou trilles s'appliquent à la note courante et à la " +"suivante\n" +"si aucune musique n'est sélectionnée,\n" +"ou à la première et dernière note ou accord de la sélection.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" +"

Barres de mesures

\n" +"\n" +"

\n" +"Vous pouvez insérer des barres de mesures ou divers signes de respirations.\n" +"

\n" + +#: frescobaldi_app/rhythm/__init__.py:146 +msgid "&Double durations" +msgstr "&Doubler les durées" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Doubler toutes les durées dans la sélection." + +#: frescobaldi_app/rhythm/__init__.py:149 +msgid "&Halve durations" +msgstr "Diviser les durées" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Diviser par deux les durées dans la sélection." + +#: frescobaldi_app/rhythm/__init__.py:152 +msgid "Do&t durations" +msgstr "Poin&ter les durées" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Ajouter un point à toutes les durées dans la sélection." + +#: frescobaldi_app/rhythm/__init__.py:155 +msgid "&Undot durations" +msgstr "Dépointer les d&urées" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Supprimer un point à toutes les durées de la sélection." + +#: frescobaldi_app/rhythm/__init__.py:158 +msgid "Remove &scaling" +msgstr "Supprimer les multiplicateur&s" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "" +"Supprimer tous les multiplicateurs (*n/m) des durées dans la sélection." + +#: frescobaldi_app/rhythm/__init__.py:161 +msgid "&Remove durations" +msgstr "Enleve&r les durées" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "Supprimer toutes les durées de la sélection." + +#: frescobaldi_app/rhythm/__init__.py:164 +msgid "Make &implicit" +msgstr "Durées &implicites" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "Rendre les durées implicites (supprimer les durées répétées)." + +#: frescobaldi_app/rhythm/__init__.py:167 +msgid "Make implicit (per &line)" +msgstr "Durées implicites (&ligne par ligne)" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" +"Rendre les durées implicites (supprimer les durées répétées), sauf au début " +"de chaque ligne." + +#: frescobaldi_app/rhythm/__init__.py:171 +msgid "Make &explicit" +msgstr "Durées &explicites" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" +"Rendre les durées explicites (ajouter une durée à chaque note, même si une " +"valeur est répétée)." + +#: frescobaldi_app/rhythm/__init__.py:175 +msgid "&Apply rhythm..." +msgstr "&Appliquer un rythme..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Appliquer un rythme saisi à la musique sélectionnée." + +#: frescobaldi_app/rhythm/__init__.py:178 +msgid "&Copy rhythm" +msgstr "&Copier le rythme" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Copie le rythme de la musique sélectionnée." + +#: frescobaldi_app/rhythm/__init__.py:181 +msgid "&Paste rhythm" +msgstr "Coller le rythme" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Colle le rythme à la musique sélectionnée." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Appliquer un rythme" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Saisissez un rythme :" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "Manipulation rythmique" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after notes," +"\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" +"

\n" +"Les fonctions de rythme de Frescobaldi modifient les durées écrites après " +"les notes,\n" +"accords, silences, etc. En utilisant ces fonctions, toutes présentes dans le " +"menu {menu},\n" +"il est possible de doubler ou diviser par deux la longueur des notes, " +"d'ajouter ou supprimer les points\n" +"et de supprimer des facteurs d'échelle.\n" +"

\n" +"\n" +"

\n" +"Il est également possible de changer la façon dont le rythme est spécifié : " +"pour chaque note\n" +"(explicite), ou seulement quand les durées changent (implicite). Certaines " +"personnes prefèrent\n" +"l'option implicite par ligne, qui spécifie toujours la durée pour la " +"première\n" +"note, le premier accord ou silence d'une ligne.\n" +"

\n" +"\n" +"

\n" +"Les trois dernières commandes permettent de copier, coller ou appliquer un " +"rythme qui est saisi\n" +"dans un dialogue.\n" +"

\n" +"\n" +"

\n" +"Dans le dialogue « Appliquer un rythme » vous pouvez saisir une série de " +"durées, p. ex. :\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"qui sera alors, de façon répétitive, appliquée à une sélection de notes.\n" +"

\n" + +#: frescobaldi_app/rhythm/rhythm.py:279 +msgctxt "submenu title" +msgid "Rhythm" +msgstr "Rythme" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Nouvelle partition..." + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "En avant la musique !" + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Supprimer le pied de page par défaut" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Assistant de réglage de partition" + +#: frescobaldi_app/scorewiz/dialog.py:80 +msgid "Clear" +msgstr "Effacer" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "Efface la page courante de l'assistant de partition." + +#: frescobaldi_app/scorewiz/dialog.py:83 +msgid "Preview" +msgstr "Aperçu" + +#: frescobaldi_app/scorewiz/dialog.py:130 +msgid "Score Preview" +msgstr "Aperçu de la Partition" + +#: frescobaldi_app/scorewiz/dialog.py:164 +msgid "&Titles and Headers" +msgstr "&Titres et en-têtes" + +#: frescobaldi_app/scorewiz/dialog.py:173 +msgid "&Parts" +msgstr "&Parties" + +#: frescobaldi_app/scorewiz/dialog.py:182 +msgid "&Score settings" +msgstr "Réglage&s de la partition" + +#: frescobaldi_app/scorewiz/dialog.py:191 +msgid "The Score Wizard" +msgstr "L'assistant de partition" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled in." +"\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" +"

\n" +"L'assistant de réglages de partition ({key}) dans {menu} est conçu\n" +"pour configurer rapidement une partition LilyPond.\n" +"

\n" +"\n" +"

\n" +"Dans le premier onglet, Titres et en-têtes, vous pouvez saisir les " +"informations\n" +"de titrage.\n" +"

\n" +"\n" +"

\n" +"Dans le second onglet, Parties, vous pouvez composer votre " +"partition en\n" +"choisissant parmi les types de parties disponibles.\n" +"Double-cliquez un type de partie pour l'ajouter à la partition (ou cliquez " +"Ajouter).\n" +"Sélectionnez la partie dans la liste pour modifier certains réglages pour la " +"partie sélectionnée\n" +"si nécessaire.\n" +"De nombreuses parties, particulièrement dans les chœurs, disposent de " +"nombreuses options pour régler la partition de façon\n" +"personnalisée.\n" +"

\n" +"\n" +"

\n" +"Dans le troisième onglet, Réglages de partition, les propriétés " +"globales de la partition\n" +"et les préférences peuvent être définies.\n" +"

\n" +"\n" +"

\n" +"Cliquez sur le bouton Aperçu pour obtenir un aperçu avec quelques exemples " +"musicaux.\n" +"Cliquez Ok pour copier le code LilyPond généré dans l'éditeur de texte.\n" +"

\n" +"\n" +"

Pièces multiples ou mouvements

\n" +"\n" +"

\n" +"Une fonction spéciale et puissante de l'onglet Parties est caché " +"dans la catégorie\n" +"« Contenants » de la liste des types de parties.\n" +"

\n" +"\n" +"

\n" +"Cette catégorie contient les types Score, Book et Bookpart, avec lesquels " +"vous\n" +"pouvez configurer un document LilyPond contenant plusieurs partitions ou " +"livres.\n" +"Vous pouvez ajouter des entrées Score, Bookpart ou Book dans l'éditeur de " +"partition.\n" +"Elles peuvent être imbriquées : un Score peut être ajouté à un Bookpart ou " +"Book mais vous ne pouvez pas\n" +"ajouter un Book à un Bookpart ou un Score.\n" +"

\n" +"\n" +"

\n" +"Ensuite, vous pouvez ajouter les parties musicales.\n" +"Si vous voulez créer plusieurs partitions avec les mêmes parties, vous " +"pouvez simplement\n" +"ajouter les parties en début de vue de partition, et ensuite les partitions, " +"sans\n" +"ajouter les parties musicales dans les partitions.\n" +"Les partitions utiliseront alors les parties en début de partition.\n" +"

\n" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Cliquez pour saisir une valeur." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "bas de la première page" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "bas de la dernière page" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "Dédicace" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Titre" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Sous-titre" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "Sous-sous-titre" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Instrument" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Compositeur" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Arrangeur" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Parolier" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Mètre" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Pièce" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Copyright" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Slogan" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Parties disponibles :" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Partition :" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "&Ajouter" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +msgid "&Remove" +msgstr "Supp&rimer" + +#: frescobaldi_app/scorewiz/score.py:104 +msgid "Move up" +msgstr "Déplacer vers le haut" + +#: frescobaldi_app/scorewiz/score.py:105 +msgid "Move down" +msgstr "Déplacer vers le bas" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Armure :" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Chiffre de mesure :" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Anacrouse :" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Indication métronomique :" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Indication de tempo :" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Majeur" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Mineur" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "Ionien" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Dorien" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Phrygien" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Lydien" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Mixolydien" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Éolien" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Locrien" + +#: frescobaldi_app/scorewiz/settings.py:73 +msgid "Score properties" +msgstr "Propriétés de la partition" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Préférences générales" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Utiliser des guillemets typographiques" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "Remplacer les guillemets standard par des guillemets typographiques." + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Supprimer le pied de page par défaut." + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Supprimer le pied de page ajouté par défaut à la dernière page." + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Supprimer les numéros de mesure" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "Empêcher l'affichage de numéros de mesure au début de chaque système." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "Créer un rendu MIDI" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "Créer un fichier MIDI en plus du rendu PDF." + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Afficher l'indication de métronome" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"Cochez cette case pour afficher une indication métronomique au début de la " +"partition ; elle sera également utilisée dans la sortie MIDI." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Taille du papier :" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Paysage" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Long" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Court" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Noms des instruments" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "Premier système :" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Autres systèmes :" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "" +"Utiliser des noms d'instruments longs ou abrégés avant le premier système." + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "" +"Utiliser ou non des noms d'instruments, longs ou courts, avant le prochain " +"système." + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "Quel langue utiliser pour les noms d'instruments." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Langue du nom des notes :" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "Langue du nom des notes dans le code LilyPond." + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Version :" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "Version de LilyPond que vous utiliserez pour ce document." + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "Pas de réglages possibles." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Indiquez le nombre de voix distinctes prévues par portée." + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "C'est surtout utile dans de la musique polyphonique (fugue, …)." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Main droite :" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Main gauche :" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Styles d'accords :" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Diagrammes d'accords de guitare" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Afficher les diagrammes d'accords sous le nom de l'accord (Lilypond 2.12 et " +"plus récent). " + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "Ajouter ici des chiffrages." + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "Allemand" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "Semi-Allemand" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "Italien" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "Français" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Cor en fa" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "C. Fa" + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Trompette en ut" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Trp. ut" + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Trompette en Sib" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Trp. Sib" + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Trombone" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Trb." + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "Tub." + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Tuba Basse" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "Tub. B." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Cuivres" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +msgid "Staff Group" +msgstr "Groupe de portées" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "Accolade" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "Crochet" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +msgid "Square" +msgstr "Carré" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "Type :" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +msgid "Connect Barlines" +msgstr "Joindre les barres de mesures" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "Si coché, les barres de mesures sont connectées entre les portées." + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +msgid "Score" +msgstr "Partition" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +msgid "Piece:" +msgstr "Pièce :" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +msgid "Opus:" +msgstr "Opus :" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "Propriétés" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "Partie de Livre" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "Livre" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" +"

Vous pouvez spécifier ici un nom de fichier ou un suffixe (sans " +"extension) afin de régler les noms des fichier de sortie générés pour ce " +"livre..

\n" +"

Si vous avez choisi « Suffixe », le nom choisi sera accolé au nom de " +"fichier du document ; si vous avez choisi « Nom de fichier », seul le nom " +"saisi sera utilisé.

" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "Nom du fichier de sortie :" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "Nom de Fichier" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "Suffixe" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +msgid "Containers" +msgstr "Contenants" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Piano" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "Pno" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Clavecin" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Clav." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Clavicorde" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Clav." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Orgue" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Org." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Pédale :" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Définir à 0 pour désactiver la pédale." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Célesta" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Cél." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Claviers" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Timbales" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Timb." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Xylophone" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Xyl." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Marimba" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "Portée supérieure :" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "Portée inférieure :" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "Régler le nombre de voix à 0 pour désactiver la seconde portée." + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Vibraphone" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Vib." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Cloches tubulaires" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Cl. Tub." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Glockenspiel" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Glock." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +msgid "Carillon" +msgstr "Carillon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Car." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +msgid "Manual staff:" +msgstr "Portée manuelle :" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +msgid "Pedal staff:" +msgstr "Portée de pédalier :" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Batterie" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Bat." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Voix :" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Ôter les hampes" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Supprimer les hampes des notes de percussion." + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "Ajouter notation de percussions." + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "maintenir de l'espace" + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Batterie (5 lignes, par défaut)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Style Timbales (2 lignes)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Style Congas (2 lignes)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Style Bongos (2 lignes)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Style Percussion(1 ligne)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Percussion" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Type de portée :" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Accord :" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Portée standard" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Tablature" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Mixte" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Mandoline" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mdl." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Accord de mandoline" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Banjo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Bj." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "Accord en Sol ouvert (la Ré Sol Si Ré)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "Accord en Do (sol Do Sol Si Ré)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "Accord modal (sol Ré Sol Do Ré)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "Accord en Ré ouvert (la Ré Fad La Ré)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "Accord en Ré mineur (la Ré Fa La Ré)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Quatre cordes (au lieu de cinq)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Guitare Classique" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "Guit." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Accord de Guitare" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "Accord de Sol ouvert" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Guitare Jazz" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "Guit. J." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Basse" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "Bas." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "Accord de basse" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Basse électrique" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "Bas. E." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Harpe" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Hp." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Cordes pincées" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Chiffrages d'accords" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Basse chiffrée" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "Utiliser des lignes d'extension" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "Ajouter des chiffrages ici." + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "Portée" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Spécial" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Violon" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Vl." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Alto" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "Alt." + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Violoncelle" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Vlc." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "Contrebasse" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Cb." + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +msgid "Basso Continuo" +msgstr "Basse continue" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "B.c." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Cordes" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Couplets :" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Nombre de couplets." + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Ambitus" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "Afficher la tessiture de la voix au début de la portée." + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "Ajouter ici des paroles." + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Soprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +msgid "Mezzo-soprano" +msgstr "Mezzo-soprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "M.S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Alto" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Ténor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Song book" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"Un Song book s'écrit sur une portée, entourée de chiffrages d'accords et de " +"paroles. Une seconde portée peut être ajoutée." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Ajouter une portée d'accompagnement." + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" +"Ajoute une portée d'accompagnement, et une voix d'accompagnement à la portée " +"du haut." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Chœur" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Veuillez choisir les voix du chœur, au moyen des lettres S A T B. Ajoutez " +"des tirets pour délimiter les portées." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "Astuce : un double chœur peut s'écrire avec deux parties de chœur." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Harmonisation :" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "Paroles :" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "Réduction pour piano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "Ajoute une réduction pour piano générée de façon automatique." + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "Fichiers MIDI de répétitions" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" +"Génère un fichier MIDI pour répéter voix par voix, même si aucun MIDI n'est " +"généré pour la partition d'ensemble." + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "Ch." + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "Fichiers MIDI pour répétitions :" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Mêmes paroles pour toutes les voix" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "L'ensemble des paroles est imprimé entre toutes les portées." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Mêmes paroles pour chaque voix" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "" +"Chaque voix a ses propres paroles, mais le texte est le même pour toutes." + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Différentes paroles pour chaque voix" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Chaque voix a son propre texte." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "Répartir les couplets" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "L'ensemble des couplets est réparti entre les portées." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "Section vocale" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Flûte" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Piccolo" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Pic." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Flûte Basse" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Fl. B." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Hautbois" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Htb." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +msgid "Oboe d'amore" +msgstr "Hautbois d'amour" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Htb.d'am." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +msgid "English horn" +msgstr "Cor Anglais" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "C. Angl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Basson" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Bsn" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Contrebasson" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "Cbn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Clarinette" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Saxophone Sopranino" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "Sax. Snn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Saxophone Soprano" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "Sax. Spn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Saxophone Alto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "Sax. Alt." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Saxophone Ténor" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "Sax. Tén." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Saxophone Baryton" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "Sax. Bar." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "Saxophone Basse" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "Sax. Bas." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Flûte à bec Soprano" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "Fl. S." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Flûte à bec Alto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "Fl. A." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Flûte à bec Ténor" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "Fl. T." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Flûte à bec Basse" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "Fl. B." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Bois" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "Gérer les Sessions" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "Nom :" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "Toujours enregistrer la liste des documents dans cette session" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "Dossier de base :" + +#: frescobaldi_app/sessions/dialog.py:133 +msgid "Edit session: {name}" +msgstr "Éditer la session : {name}" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "Éditer une nouvelle session" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "Veuillez saisir un nom de session." + +#: frescobaldi_app/sessions/dialog.py:174 +msgid "Please do not use the name '{name}'." +msgstr "Veuillez ne pas utiliser le nom « {name} »." + +#: frescobaldi_app/sessions/dialog.py:180 +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" +"Une autre session nommée {name} existe déjà.\n" +"\n" +"Voulez-vous l'écraser ?" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "Écraser" + +#: frescobaldi_app/sessions/manager.py:127 +msgctxt "New Session" +msgid "&New..." +msgstr "&Nouveau..." + +#: frescobaldi_app/sessions/manager.py:129 +msgid "&Manage..." +msgstr "Gérer..." + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "Pas de session" + +#: frescobaldi_app/sessions/menu.py:55 +msgctxt "menu title" +msgid "&Session" +msgstr "&Session" + +#: frescobaldi_app/snippet/builtin.py:38 +msgid "Blank Line" +msgstr "Ligne vierge" + +#: frescobaldi_app/snippet/builtin.py:44 +msgid "Single Typographical Quotes" +msgstr "Guillemets typographiques simples" + +#: frescobaldi_app/snippet/builtin.py:49 +msgid "Double Typographical Quotes" +msgstr "Guillemets typographiques doubles" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "Tuplets" + +#: frescobaldi_app/snippet/builtin.py:125 +msgid "Modern 2/2 Time Signature" +msgstr "Indicateur de mesure 2/2 moderne" + +#: frescobaldi_app/snippet/builtin.py:131 +msgid "Modern 4/4 Time Signature" +msgstr "Indicateur de mesure 4/4 moderne" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "Indicateur de mesure tactus (nombre avec note)" + +#: frescobaldi_app/snippet/builtin.py:148 +msgid "LilyPond Version" +msgstr "Version de LilyPond" + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "Musique relative" + +#: frescobaldi_app/snippet/builtin.py:166 +msgid "Upper case selection" +msgstr "Sélection en haut de casse" + +#: frescobaldi_app/snippet/builtin.py:172 +msgid "Lower case selection" +msgstr "Sélection en bas de casse" + +#: frescobaldi_app/snippet/builtin.py:178 +msgid "Title case selection" +msgstr "Sélection en casse de titre" + +#: frescobaldi_app/snippet/builtin.py:189 +msgid "Markup lines" +msgstr "Markup en lignes" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "Markup en colonne" + +#: frescobaldi_app/snippet/builtin.py:202 +msgid "Tagline with date and LilyPond version" +msgstr "Slogan avec date et version de LilyPond" + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "Modèle d'en-tête" + +#: frescobaldi_app/snippet/builtin.py:227 +msgid "No Tagline" +msgstr "Pas de slogan" + +#: frescobaldi_app/snippet/builtin.py:235 +msgid "No Barnumbers" +msgstr "Pas de numéros de mesure" + +#: frescobaldi_app/snippet/builtin.py:209 +msgid "Midi Tempo" +msgstr "Tempo MIDI :" + +#: frescobaldi_app/snippet/builtin.py:255 +msgid "Staff Size" +msgstr "Taille des portées" + +#: frescobaldi_app/snippet/builtin.py:310 +msgid "A5 Paper" +msgstr "Papier A5" + +#: frescobaldi_app/snippet/builtin.py:318 +msgid "Document Fonts..." +msgstr "Polices du document..." + +#: frescobaldi_app/snippet/builtin.py:346 +msgid "Last note or chord" +msgstr "Répéter la dernière note ou accord" + +#: frescobaldi_app/snippet/builtin.py:427 +msgid "Color" +msgstr "Couleur" + +#: frescobaldi_app/snippet/builtin.py:464 +msgid "Basic Leadsheet" +msgstr "Grille d'accords basique" + +#: frescobaldi_app/snippet/builtin.py:508 +msgid "Choir Hymn" +msgstr "Chœur" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "Éditer le fragment" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "Nouveau fragment" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "Texte du fragment :" + +#: frescobaldi_app/snippet/edit.py:119 +msgid "Title:" +msgstr "Titre :" + +#: frescobaldi_app/snippet/edit.py:120 +msgid "Shortcut:" +msgstr "Raccourci :" + +#: frescobaldi_app/snippet/edit.py:131 +msgid "Click to change the keyboard shortcut." +msgstr "Cliquez pour changer le raccourci clavier" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "Snippet vide" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "Un fragment ne peut pas être vide." + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "Éditeur de fragments" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" +"

Vous pouvez ici éditer le texte du fragment.

Si vous commencez la " +"(les) première(s) ligne(s) avec '-*- ' (notez les espaces), le " +"rappel de cette ligne définit des variables comme name: value; " +"ou simplement name;, ce qui influence le comportement du " +"fragment. Les variables suivantes peuvent être utilisées :

" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" +"Placer le fragment dans le menu Insérer groupé par la valeur (optionnelle)." + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" +"Place le fragment dans le menu {file_new_from_template}, groupé par valeur " +"(optionnelle). Quand il est utilisé via le menu, le fragment est inséré dans " +"un nouveau document." + +#: frescobaldi_app/snippet/edit.py:218 +msgctxt "menu title" +msgid "File" +msgstr "Fichier" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "Nouveau d'après un modèle" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "Mnémonique à saisir pour sélectionner le fragment." + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "Ne pas indenter automatiquement le fragment après insertion." + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "Le symbole à afficher dans le menu et la liste de fragments." + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" +"Le symbole à afficher dans le menu et la liste de fragments. Les symboles " +"sont des icônes qui utilisent la couleur de texte par défaut et se trouvent " +"dans le dossier {directory}." + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "Exécuter le fragment comme un script Python. Voir {link}." + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "" +"Un ou plusieurs des mots suivants (séparés par des espaces ou des virgules) :" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "Nécessite du texte pour être sélectionné." + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "" +"Ajuste la sélection afin de ne pas inclure les espaces de début et de fin." + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "Sélectionne tout le texte inséré." + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" +"

Les autres lignes du fragment définissent le texte à insérer dans " +"l'éditeur. Ici, vous pouvez insérer des variables précédées d'un caractère " +"$. Un double $ sera remplacé par un simple. Les variables suivantes sont " +"reconnues :

" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "Snippets Python" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" +"

Les fragments Python peuvent lire et définir la variable {text}. La " +"variable {text} contient le texte actuellement sélectionné (qui peut être " +"une chaîne vide).

\n" +"

Vous pouvez définir {text} comme chaîne ou liste de chaînes.

\n" +"

Autres variables qui peuvent être référencées :

" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "" +"Une liste de chaînes de caractères décrivant le type de texte sur lequel le " +"curseur se trouve." + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" +"Le QTextCursor courant donne accès au document. Cependant, ne changez pas le " +"document au moyen du curseur." + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" +"En définissant {text} comme une liste plutôt qu'une chaîne, vous pouvez " +"utiliser cette valeur pour spécifier la place que le curseur de texte " +"occupera après l'insertion du fragment." + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" +"En définissant {text} comme une liste plutôt qu'une chaîne, cette valeur " +"peut être utilisée conjointement au {cursor} pour sélectionner du texte lors " +"de l'insertion des morceaux de chaînes de la liste." + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "La date du jour au format AAAA-MM-JJ." + +#: frescobaldi_app/snippet/expand.py:80 +msgid "The version of the default LilyPond program." +msgstr "La version du programme LilyPond par défaut." + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "La version de Frescobaldi." + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "L'URL du document courant." + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "Le nom local complet du document courant." + +#: frescobaldi_app/snippet/expand.py:96 +msgid "The name of the current document." +msgstr "Le nom du document courant." + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "Déplace le curseur de texte après l'insertion." + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" +"Sélectionne le texte d'ici jusqu'à la position donnée par la variable " +"$CURSOR" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" +"Le texte sélectionné si disponible. Sinon, le curseur de texte est déplacé " +"ici." + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "Aucun fragment trouvé" + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Importer des fragments" + +#: frescobaldi_app/snippet/import_export.py:119 +msgid "New Snippets" +msgstr "Nouveaux fragments" + +#: frescobaldi_app/snippet/import_export.py:120 +msgid "Updated Snippets" +msgstr "Snippets mis à jour" + +#: frescobaldi_app/snippet/import_export.py:121 +msgid "Unchanged Snippets" +msgstr "Snippets non modifiés" + +#: frescobaldi_app/snippet/import_export.py:183 +msgid "Import Keyboard Shortcuts" +msgstr "Importer les raccourcis clavier" + +#: frescobaldi_app/snippet/import_export.py:188 +msgid "Choose which snippets you want to import:" +msgstr "Veuillez choisir les fragments à importer :" + +#: frescobaldi_app/snippet/import_export.py:190 +msgid "There are no new or updated snippets in the file." +msgstr "Il n'y a aucun fragment nouveau ou mis à jour dans ce fichier." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click Ok to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" +"

Les fragments de {filename} sont affichés ici.

\n" +"

S'il y a des fragments nouveaux ou mis à jour, vous pouvez les " +"sélectionner ou les désélectionner un par un, ou tous ensembleen utilisant " +"la case à cocher du groupe. Cliquez Ok pour importer tous les fragments " +"sélectionnés.

\n" +"

Les fragments existants ou non modifiés ne peuvent pas être importés.\n" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "Erreur de fragment" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Insérer" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "Nouveau dep&uis un modèle" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "Nom" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Description" + +#: frescobaldi_app/snippet/template.py:33 +msgid "Save as Template" +msgstr "Enregistrer comme modèle" + +#: frescobaldi_app/snippet/template.py:34 +msgid "Please enter a template name:" +msgstr "Veuillez saisir un nom de modèle." + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +msgid "Snippets" +msgstr "Snippets" + +#: frescobaldi_app/snippet/tool.py:54 +msgid "&Snippets" +msgstr "&Fragments" + +#: frescobaldi_app/snippet/tool.py:79 +msgid "Save as Template..." +msgstr "Enregistrer comme modèle..." + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "&Fragments..." + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "&Menu" + +#: frescobaldi_app/snippet/widget.py:172 frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "&Ajouter..." + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "Ajouter un nouveau fragment. ({key})" + +#: frescobaldi_app/snippet/widget.py:175 frescobaldi_app/widgets/listedit.py:92 +msgid "&Edit..." +msgstr "&Éditer..." + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "Éditer le fragment courant. ({key})" + +#: frescobaldi_app/snippet/widget.py:179 +msgid "Remove the selected snippets." +msgstr "Supprimer les fragments sélectionnés" + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "A&ppliquer" + +#: frescobaldi_app/snippet/widget.py:181 +msgid "Apply the current snippet." +msgstr "Appliquer le fragment courrant." + +#: frescobaldi_app/snippet/widget.py:182 +msgid "&Import..." +msgstr "&Importer" + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "Importer des fragments depuis un fichier." + +#: frescobaldi_app/snippet/widget.py:184 +msgid "E&xport..." +msgstr "E&xporter" + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "Exporter des fragments vers un fichier." + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "Aide" + +#: frescobaldi_app/snippet/widget.py:188 +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" +"Saisissez le texte à rechercher dans la liste des fragments.\n" +"Voir « Qu'est-ce que c'est ? » pour plus d'information." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" +"Saisissez le texte à rechercher dans la liste des fragments et appuyez " +"Entrée pour appliquer le fragment sélectionné." + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" +"Si le texte recherché correspond parfaitement à la valeur de la variable « " +"{name} » d'un fragment, ce fragment est sélectionné." + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" +"Si le texte de recherche commence par deux points « : », le reste du texte " +"de recherche filtre les fragments qui définissent la variable donnée. Après " +"un espace, une valeur peut aussi être saisie. Les fragments seront alors " +"triés si la valeur de la variable donnée contient le texte après l'espace." + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" +"Par exemple, saisir {menu} affichera tous les fragments qui sont affichés " +"dans le menu Insérer." + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +msgid "XML Files" +msgstr "Fichiers XML" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "Exporter {num} fragment" +msgstr[1] "Exporter {num} fragments" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with {key_edit}." +"\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" +"

\n" +"Le gestionnaire de fragmens vous permet de conserver des fragments de texte\n" +"fréquemment utilisés et de les coller facilement dans l'éditeur de texte.\n" +"

\n" +"\n" +"

\n" +"Le gestionnaire de fragments peut être activé via le menu {menu_snippets} " +"ou\n" +"par le raccourci {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Les fragments sont recherchables en navigant dans la liste ou en saisissant " +"quelques caractères\n" +"dans le champ de recherche.\n" +"Les fragments peuvent également être appliqués par un raccourci clavier.\n" +"Certains fragments ont un nom spécifique que vous pouvez saiser dans le " +"champ de recherche.\n" +"Il suffit ensuite de valider avec Entrée pour\n" +"appliquer le fragment dans l'éditeur de texte et de masquer le gestionnaire " +"de fragments.\n" +"

\n" +"\n" +"

\n" +"Ajoutez de nouveaux fragments avec {key_add}. Éditez le fragment sélectionné " +"avec {key_edit}.\n" +"Supprimer les fragments sélectionnés avec {key_delete}. Attention : " +"impossible d'annuler !\n" +"

\n" +"\n" +"

\n" +"Les fragments peuvent également être placés dans le menu (voir {link}).\n" +"Il y a aussi des fragments pouvant inclure ou modifier du texte sélectionné." +"\n" +"Certains fragments utilisent pour cela des variables spéciales, d'autres " +"sont de \n" +" petits scripts écrits en Python.\n" +"

\n" + +#: frescobaldi_app/snippet/widget.py:400 +msgctxt "menu title" +msgid "Insert" +msgstr "Insérer" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "Snippets..." + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "Commencer l'enregistrement d'une séquence de touches" + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "Effacer la séquence de touches" + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +msgid "Input" +msgstr "Entrée" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +msgid "Scheme:" +msgstr "Profil :" + +#: frescobaldi_app/widgets/schemeselector.py:63 +msgctxt "New Scheme" +msgid "&New..." +msgstr "&Nouveau..." + +#: frescobaldi_app/widgets/schemeselector.py:93 +msgid "Please enter a name for the new scheme:" +msgstr "Veuillez saisir un nom pour le nouveau profil :" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Éditer le raccourci" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +msgid "&No shortcut" +msgstr "Pas de raccourci" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +msgid "Use a &custom shortcut:" +msgstr "Utiliser un ra&ccourci personnalisé :" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "Alternative n°{num} :" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "Raccourci principal :" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "Vous pouvez éditer les raccourcis pour {name}" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "aucun" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "Utiliser le raccourci par &défaut ({name})" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Cliquez plusieurs fois sur ce bouton pour régler le tempo." + +#: frescobaldi_app/widgets/urlrequester.py:75 +msgid "Open file dialog" +msgstr "Fenêtre d'ouverture de fichier" + +#: frescobaldi_app/widgets/urlrequester.py:119 +msgid "Select a directory" +msgstr "Sélectionner un dossier" + +#: frescobaldi_app/widgets/urlrequester.py:121 +msgid "Select a file" +msgstr "Sélectionner un fichier" + +#~ msgid "&Help Browser" +#~ msgstr "Navigateur d'aide" + +#~ msgid "{appname} version {version}" +#~ msgstr "{appname} version {version}" + +#~ msgid "Add..." +#~ msgstr "Ajouter..." + +#~ msgid "Edit..." +#~ msgstr "Éditer..." + +#~ msgid "Remove" +#~ msgstr "Supprimer" + +#~ msgid "" +#~ "Could not understand the entered pitches.\n" +#~ "\n" +#~ "Please make sure you use pitch names in the language \"{language}\"." +#~ msgstr "" +#~ "Impossible de reconnaître les hauteurs saisies.\n" +#~ "\n" +#~ "Veillez à utiliser les noms de notes dans la langue « {language} »." + +#~ msgid "Not Supported" +#~ msgstr "Non accepté" + +#~ msgid "" +#~ "No Print command could be found and direct printing is not yet supported." +#~ msgstr "" +#~ "Aucune commande d'impression n'a pu être trouvée et l'impression directe " +#~ "n'est pas encore disponible" + +#~ msgid "LilyPond version number to use for new documents" +#~ msgstr "Version de LilyPond à utiliser pour les nouveaux documents" + +#~ msgid "Use version number of installed LilyPond" +#~ msgstr "Utiliser le numéro de la version installée de LilyPond" + +#~ msgid "Use custom version number:" +#~ msgstr "Utiliser un numéro de version personnalisé" + +#~ msgid "Click to select a different color." +#~ msgstr "Cliquer pour sélectionner une autre couleur" + +#~ msgid "LilyPond Music Editor" +#~ msgstr "Éditeur de musique LilyPond" + +#~ msgid "Copyright (c) 2008-2010, Wilbert Berendsen" +#~ msgstr "Copyright (c) 2008-2010 par Wilbert Berendsen" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your name" +#~ msgstr "Valentin Villenave,David Bouriaud,Ryan Kavanagh" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "i18n@frescobaldi.org" +#~ msgstr "" +#~ "valentin@villenave.net,david.bouriaud@ac-rouen.fr,ryanakca@kubuntu.org" + +#~ msgid "Session to start" +#~ msgstr "Session à ouvrir" + +#~ msgid "Start a new instance" +#~ msgstr "Ouvrir une nouvelle instance" + +#~ msgid "Try to use smart line and column numbers" +#~ msgstr "Essayer de numéroter intelligemment les lignes et colonnes" + +#~ msgid "LilyPond files to open, may also be textedit URLs" +#~ msgstr "Fichiers Lilypond à ouvrir, ou adresses textedit://" + +#~ msgid "&LilyPond" +#~ msgstr "&LilyPond" + +#~ msgid "&Sessions" +#~ msgstr "&Sessions" + +#~ msgid "&Lyrics" +#~ msgstr "&Paroles" + +#~ msgid "Optionally describe what you were doing below:" +#~ msgstr "(Facultatif) Décrivez ce que vous faisiez ci-dessous :" + +#~ msgid "Left Sidebar" +#~ msgstr "Panneau de gauche" + +#~ msgid "Right Sidebar" +#~ msgstr "Panneau de droite" + +#~ msgid "Top Sidebar" +#~ msgstr "Panneau du haut" + +#~ msgid "Bottom Sidebar" +#~ msgstr "Panneau du bas" + +#~ msgid "Show Path" +#~ msgstr "Afficher l'emplacement" + +#~ msgid "Show Document Tabs" +#~ msgstr "Afficher les onglets" + +#~ msgid "&Tool Views" +#~ msgstr "Voir les &outils" + +#~ msgid "New..." +#~ msgstr "Nouveau..." + +#~ msgid "Manage Sessions..." +#~ msgstr "Gérer les sessions..." + +#~ msgid "" +#~ "Could not find the XMLGUI container \"%1\".\n" +#~ "\n" +#~ "Probably the local ui.rc file contains errors. It is recommended to " +#~ "delete this file because elements in the user interface will be missing. " +#~ "This is the full path of the file:\n" +#~ "\n" +#~ "%2\n" +#~ msgstr "" +#~ "Impossible de trouver l'encadrement XMLGUI « %1 »\n" +#~ "\n" +#~ "Le fichier local ui.rc contient probablement des erreurs. Il est " +#~ "recommandé de supprimer ce fichier, sans quoi des éléments de l'interface " +#~ "ne s'afficheront pas. Voici l'emplacement de ce fichier :\n" +#~ "\n" +#~ "%2\n" + +#~ msgid "Please select some text first." +#~ msgstr "Sélectionnez d'abord du texte." + +#~ msgid "Line: %1 Col: %2" +#~ msgstr "Ligne : %1 Col. : %2" + +#~ msgid "BLOCK" +#~ msgstr "BLOC" + +#~ msgid "Block selection mode" +#~ msgstr "Mode sélection de blocs" + +#~ msgid "LINE" +#~ msgstr "LIGNE" + +#~ msgid "Line selection mode" +#~ msgstr "Mode sélection de ligne" + +#~ msgid "Open File" +#~ msgstr "Ouvrir Fichier" + +#~ msgid "Right-click for tab options" +#~ msgstr "Clic droit : options de l'onglet" + +#~ msgid "Undock" +#~ msgstr "Détacher" + +#~ msgid "Please install %1" +#~ msgstr "Veuillez installer %1" + +#~ msgid "Press the button to configure the keyboard shortcut for:" +#~ msgstr "Configurer le raccourci clavier pour :" + +#~ msgid "Session" +#~ msgstr "Session" + +#~ msgid "Properties of this session" +#~ msgstr "Propriétés de cette session" + +#~ msgid "Edit session: %1" +#~ msgstr "Modifier la session %1" + +#~ msgid "Please do not use the name '%1'." +#~ msgstr "N'utilisez pas le nom « %1 »." + +#~ msgid "Please do not use the ampersand (&) character in a session name." +#~ msgstr "N'utilisez pas l'esperluette (&) dans un nom de session." + +#~ msgid "" +#~ "Another session with the name %1 exists already.\n" +#~ "\n" +#~ "Do you want to overwrite it?" +#~ msgstr "" +#~ "Une autre session avec le nom %1 existe déjà.\n" +#~ "\n" +#~ "Voulez-vous l'écraser ?" + +#~ msgid "Open %1 in external viewer" +#~ msgstr "Ouvrir %1 dans l'afficheur externe" + +#~ msgid "(No up-to-date MIDI or PDF files available.)" +#~ msgstr "(Pas de fichier MIDI ou PDF à jour disponible)." + +#~ msgid "" +#~ "There are no up-to-date MIDI or PDF files available. Please run LilyPond " +#~ "to create one or more output files." +#~ msgstr "" +#~ "Aucun fichier MIDI ou PDF n'est disponible. Lancez Lilypond afin de créer " +#~ "un ou plus de fichiers de rendu." + +#~ msgid "No files to send" +#~ msgstr "Pas de fichier à envoyer" + +#~ msgid "" +#~ "There are no PDF documents to print.\n" +#~ "\n" +#~ "You probably need to run LilyPond to create or update a PDF document. If " +#~ "you are creating MIDI files, be sure you also put a \\layout { } section " +#~ "in your score, otherwise LilyPond will not create a PDF." +#~ msgstr "" +#~ "Aucun fichier PDF à imprimer.\n" +#~ "\n" +#~ "Vous devez probablement lancer Lilypond pour créer ou mettre à jour un " +#~ "document PDF. Si vous cherchez à créer des fichiers MIDI, incluez " +#~ "également un bloc \\layout { } dans votre partition, sans quoi Lilypond " +#~ "ne créera pas de fichier PDF." + +#~ msgid "No files to print" +#~ msgstr "Pas de fichier à imprimer" + +#~ msgid "Email documents" +#~ msgstr "Envoyer les documents par courriel" + +#~ msgid "Please select the files you want to send:" +#~ msgstr "Veuillez choisir les fichiers à envoyer :" + +#~ msgid "" +#~ "These are the files that are up-to-date (i.e. newer than the LilyPond " +#~ "source document). Also LilyPond files included by the source document are " +#~ "shown." +#~ msgstr "" +#~ "Voici les fichiers à jour (c'est-à-dire plus récents que le code source " +#~ "LilyPond). Les fichiers LilyPond inclus dans le document source sont " +#~ "également affichés." + +#~ msgid "" +#~ "Note: this PDF file has been created with embedded point-and-click URLs " +#~ "(preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the file in publish mode, because then the PDF file " +#~ "is much smaller." +#~ msgid_plural "" +#~ "Note: these PDF files have been created with embedded point-and-click " +#~ "URLs (preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the files in publish mode, because then the PDF files " +#~ "are much smaller." +#~ msgstr[0] "" +#~ "Remarque : ce document PDF contient des liens point-and-click (mode " +#~ "aperçu), ce qui accroît considérablement la taille du fichier. En " +#~ "recompilant votre code en mode publication, vous obtiendrez un fichier " +#~ "PDF sera bien plus léger." +#~ msgstr[1] "" +#~ "Remarque : ces documents PDF contiennent des liens point-and-click (mode " +#~ "aperçu), ce qui accroît considérablement la taille du fichier. En " +#~ "recompilant votre code en mode publication, vous obtiendrez des fichiers " +#~ "PDF bien plus légers." + +#~ msgid "" +#~ "Note: If there are no PDF and no MIDI files, you probably need to run " +#~ "LilyPond to update those files, before sending the e-mail." +#~ msgstr "" +#~ "Remarque : s'il n'existe pas de fichier PDF ni MIDI, vous devez " +#~ "probablement lancer LilyPond pour mettre à jour ces fichiers avant " +#~ "d'envoyer le courriel." + +#~ msgid "" +#~ "These are the PDF documents that are up-to-date (i.e. newer than the " +#~ "LilyPond source document). Check the documents you want to send to the " +#~ "printer." +#~ msgstr "" +#~ "Voici les fichiers à jour (c'est-à-dire plus récents que le code source " +#~ "LilyPond). Vérifiez les documents que vous voulez envoyer à l'imprimante." + +#~ msgid "Print %1" +#~ msgstr "Imprimer %1" + +#~ msgid "Print 1 file" +#~ msgid_plural "Print %1 files" +#~ msgstr[0] "Imprimer 1 fichier" +#~ msgstr[1] "Imprimer %1 fichiers" + +#~ msgid "" +#~ "A print command (like 'lpr' or 'lp') could not be found on your system." +#~ msgstr "" +#~ "Impossible de trouver une commande d'impression (telle que « lpr » ou " +#~ "« lp ») sur votre système." + +#~ msgid "The command '%1' could not be found on your system." +#~ msgstr "Impossible de trouver la commande « %1 » sur votre système." + +#~ msgid "" +#~ "The command below has been run, but exited with a return code %1.\n" +#~ "\n" +#~ "%2" +#~ msgstr "" +#~ "La commande suivante a été lancée, mais s'est terminée avec un code %1.\n" +#~ "\n" +#~ "%2" + +#~ msgid "Create blank staff paper" +#~ msgstr "Créer du papier à musique vierge" + +#~ msgid "Action:" +#~ msgstr "Action :" + +#~ msgid "Choose what kind of empty staves you want to create." +#~ msgstr "Veuillez choisir le type de portées vides à créer." + +#~ msgid "Choose which action happens when clicking \"Ok\"." +#~ msgstr "" +#~ "Veuillez choisir l'action à accomplir lorsque vous cliquerez sur « Ok »." + +#~ msgid "Preview the empty staff paper." +#~ msgstr "Aperçu du papier à musique vierge." + +#~ msgid "Click to see more settings." +#~ msgstr "Afficher plus de réglages." + +#~ msgid "Print Bar Lines" +#~ msgstr "Imprimer les barres de mesures" + +#~ msgid "Bars per line:" +#~ msgstr "Mesures par ligne :" + +#~ msgid "Blank staff paper preview" +#~ msgstr "Aperçu du papier à musique vierge" + +#~ msgid "No PDF was created." +#~ msgstr "Aucun PDF n'a été créé." + +#~ msgid "Open in PDF viewer" +#~ msgstr "Ouvrir avec l'afficheur PDF" + +#~ msgid "Save PDF As..." +#~ msgstr "Enregistrer le PDF sous..." + +#~ msgid "PDF Files" +#~ msgstr "Fichiers PDF" + +#~ msgid "Save PDF" +#~ msgstr "Enregistrer le PDF" + +#~ msgid "Print..." +#~ msgstr "Imprimer..." + +#~ msgid "Print staff paper" +#~ msgstr "Imprimer du papier à musique vierge" + +#~ msgid "Copy LilyPond code to editor" +#~ msgstr "Copier le code LilyPond dans l'éditeur" + +#~ msgid "Staves per page:" +#~ msgstr "Portées par page :" + +#~ msgid "Clef:" +#~ msgstr "Clé :" + +#~ msgid "Single Staff" +#~ msgstr "Portée seule" + +#~ msgid "Systems per page:" +#~ msgstr "Systèmes par page :" + +#~ msgid "Clefs" +#~ msgstr "Clés" + +#~ msgid "Piano Staff" +#~ msgstr "Portée de piano" + +#~ msgid "Organ Staff" +#~ msgstr "Portée d'orgue" + +#~ msgid "Staves per system:" +#~ msgstr "Portées par système :" + +#~ msgid "Clefs:" +#~ msgstr "Clés :" + +#~ msgid "" +#~ "To configure clefs, first set the number of staves per system. Then enter " +#~ "as many letters (S, A, T or B) as there are staves.\n" +#~ "\n" +#~ "S or A: treble clef,\n" +#~ "T: treble clef with an \"8\" below,\n" +#~ "B: bass clef\n" +#~ "\n" +#~ "So when you want to create music paper for a four-part mixed choir score, " +#~ "first set the number of staves per system to 4. Then enter \"SATB\" " +#~ "(without the quotes) here." +#~ msgstr "" +#~ "Pour configurer les clés, saisissez le nombre de portées par système. " +#~ "Ensuite saisissez autant de lettres (S, A, T ou B) qu'il y a de portées.\n" +#~ "\n" +#~ "S ou A : clé de sol,\n" +#~ "T : clé de sol 8va bassa,\n" +#~ "B : clé de fa.\n" +#~ "\n" +#~ "Ainsi, pour créer du papier à musique pour un chœur à quatre voix, " +#~ "définissez d'abord 4 portées par système, puis saisissez « SATB » (sans " +#~ "les guillemets)." + +#~ msgid "Choir Staff" +#~ msgstr "Portée de chœur" + +#~ msgid "Custom Staff" +#~ msgstr "Portée personnalisée" + +#~ msgid "Space below:" +#~ msgstr "Espace en dessous :" + +#~ msgid "Square Bracket" +#~ msgstr "Crochet carré" + +#~ msgid "Open %1" +#~ msgstr "Ouvrir %1" + +#~ msgid "Please select a music expression, enclosed in << ... >> or { ... }." +#~ msgstr "" +#~ "Veuillez sélectionner une expression musicale, contenue dans un bloc << … " +#~ ">> ou { … }." + +#~ msgid "Please enter a start pitch and a destination pitch:" +#~ msgstr "Veuillez indiquer la hauteur de départ et la hauteur d'arrivée :" + +#~ msgid "Transpose from:" +#~ msgstr "Transposer à partir de :" + +#~ msgid "to:" +#~ msgstr "vers :" + +#~ msgid "Install" +#~ msgstr "Installer" + +#~ msgid "Download LilyPond" +#~ msgstr "Télécharger LilyPond" + +#~ msgid "" +#~ "With this tool you can download packaged binary releases of LilyPond for " +#~ "your operating system." +#~ msgstr "" +#~ "Cet outil vous permet de télécharger une version toute-prête de LilyPond " +#~ "adaptée à votre système d'exploitation." + +#~ msgid "Select the LilyPond version you want to download." +#~ msgstr "Choisissez la version de LilyPond que vous voulez utiliser." + +#~ msgid "" +#~ "Select a writable directory you want to install LilyPond to.\n" +#~ "(A version-numbered directory will be created in this directory.)" +#~ msgstr "" +#~ "Choisissez l'emplacement où vous voulez installer LilyPond.\n" +#~ "(Un sous-dossier sera créé avec le numéro de version)." + +#~ msgid "Install into:" +#~ msgstr "Installer dans :" + +#~ msgid "Details" +#~ msgstr "Détails" + +#~ msgid "The website where LilyPond binaries can be downloaded." +#~ msgstr "Le site de LilyPond d'où télécharger les fichiers." + +#~ msgid "Download from:" +#~ msgstr "Télécharger depuis :" + +#~ msgid "Machine type:" +#~ msgstr "Type d'ordinateur :" + +#~ msgid "" +#~ "This is the URL to the package that will be downloaded and installed.\n" +#~ "You can also browse to other places to select a LilyPond package." +#~ msgstr "" +#~ "Ceci est l'adresse du paquetage qui sera téléchargé et installé. Il vous " +#~ "est\n" +#~ "également possible de choisir un paquetage à partir d'un autre " +#~ "emplacement." + +#~ msgid "Package Url:" +#~ msgstr "URL du paquetage :" + +#~ msgid "Downloading directory listing..." +#~ msgstr "Téléchargement de la liste des paquetages..." + +#~ msgid "No packages found. You can browse to a package manually." +#~ msgstr "Aucun paquetage trouvé. Veuillez choisir un paquetage manuellement." + +#~ msgid "Latest Development Version (%1)" +#~ msgstr "Dernière version de développement (%1)" + +#~ msgid "Latest Stable Version (%1)" +#~ msgstr "Dernière version stable (%1)" + +#~ msgid "Downloading %1..." +#~ msgstr "Téléchargement de %1..." + +#~ msgid "Download cancelled." +#~ msgstr "Téléchargement annulé." + +#~ msgid "Download failed: %1" +#~ msgstr "Le téléchargement a échoué : %1" + +#~ msgid "" +#~ "LilyPond %1 seems already to be installed in %2.\n" +#~ "\n" +#~ "Do you want to use it or to remove and re-install?" +#~ msgstr "" +#~ "Il semble que LilyPond %1 soit déjà installé dans %2.\n" +#~ "\n" +#~ "Voulez-vous utiliser cette version ou la supprimer pour réinstaller ?" + +#~ msgid "Use existing LilyPond" +#~ msgstr "Utiliser la version existante" + +#~ msgid "Remove and re-install" +#~ msgstr "Enlever et réinstaller" + +#~ msgid "Unpacking %1..." +#~ msgstr "Décompression de %1..." + +#~ msgid "Unpacking finished." +#~ msgstr "Décompression terminée." + +#~ msgid "Unpacking failed." +#~ msgstr "La décompression a échoué." + +#~ msgid "" +#~ "An error occurred:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Une erreur est survenue :\n" +#~ "\n" +#~ "%1" + +#~ msgid "Expansion Manager" +#~ msgstr "Gestionnaire d'abréviations" + +#~ msgid "" +#~ "This is the list of defined expansions.\n" +#~ "\n" +#~ "Click on a row to see or change the associated text. Doubleclick a " +#~ "shortcut or its description to change it. You can also press F2 to edit " +#~ "the current shortcut.\n" +#~ "\n" +#~ "Use the buttons below to add or remove expansions.\n" +#~ "\n" +#~ "There are two ways to use the expansion: either type the shortcut in the " +#~ "text and then call the Expand function, or just call the Expand function " +#~ "(default shortcut: Ctrl+.), choose the expansion from the list and press " +#~ "Enter or click Ok." +#~ msgstr "" +#~ "Voici la liste des abréviations définies.\n" +#~ "\n" +#~ "Cliquez sur une ligne pour voir ou changer le texte associé. Double-" +#~ "cliquez sur une abréviation ou sa description pour la modifier, ou " +#~ "appuyez sur F2 pour éditer l'abréviation sélectionnée.\n" +#~ "\n" +#~ "Utilisez les boutons ci-dessous pour ajouter ou enlever des abréviations." +#~ "\n" +#~ "\n" +#~ "Les abréviations peuvent être utilisées de deux façons : saisissez-les " +#~ "dans le code puis en utilisez la fonction Développer, ou appelez " +#~ "directement la fonction Développer (raccourci par défaut : Ctrl+.), puis " +#~ "choisissez une abréviation dans la liste et appuyez sur Entrée ou cliquez " +#~ "sur Ok." + +#~ msgid "" +#~ "This is the text associated with the selected shortcut. Some characters " +#~ "have special meaning:" +#~ msgstr "" +#~ "Ceci est le texte associé à l'abréviation sélectionnée. Certains " +#~ "caractères ont un sens particulier :" + +#~ msgid "Translate the following pitch." +#~ msgstr "Traduire la hauteur suivante." + +#~ msgid "New Item" +#~ msgstr "Nouvel élément" + +#~ msgid "" +#~ "Another expansion already uses this name.\n" +#~ "\n" +#~ "Please use a different name." +#~ msgstr "" +#~ "Une autre abréviation emploie déjà ce nom.\n" +#~ "\n" +#~ "Utilisez un autre nom." + +#~ msgid "" +#~ "Please only use letters, numbers and the underscore character in the " +#~ "expansion name." +#~ msgstr "" +#~ "N'utilisez que des lettres, chiffres ou le caractère souligné dans le nom " +#~ "de l'abréviation." + +#~ msgid "Please don't leave the description empty." +#~ msgstr "Ne laissez pas la description vide." + +#~ msgid "" +#~ "Could not find any hyphenation dictionaries.\n" +#~ "\n" +#~ "Please install a package containing some and/or or configure the search " +#~ "path to find them in the Frescobaldi settings under \"Paths.\"" +#~ msgstr "" +#~ "Impossible de trouver un dictionnaire de césure.\n" +#~ "\n" +#~ "Vous devez soit en installer un, soit configurer l'emplacement de " +#~ "recherche de Frescobaldi, dans « Emplacements. »" + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Larger text" +#~ msgstr "Agrandir le texte" + +#~ msgid "Smaller text" +#~ msgstr "Réduire le texte" + +#~ msgid "Previous" +#~ msgstr "Précédent" + +#~ msgid "Up one level" +#~ msgstr "Remonter d'un niveau" + +#~ msgid "Index" +#~ msgstr "Index" + +#~ msgid "Copy &Link" +#~ msgstr "Copier le &lien" + +#~ msgid "Open Link in &New Window" +#~ msgstr "Ouvrir le lien dans une &nouvelle fenêtre" + +#~ msgid "Open Document in &New Window" +#~ msgstr "Ouvrir le document dans une &nouvelle fenêtre" + +#~ msgid "Loading..." +#~ msgstr "Chargement..." + +#~ msgid "Notation Reference" +#~ msgstr "Manuel de notation" + +#~ msgid "LilyPond Command Index" +#~ msgstr "Index des commandes LilyPond" + +#~ msgid "Learning Manual" +#~ msgstr "Manuel d'apprentissage" + +#~ msgid "Learning Manual Index" +#~ msgstr "Index du manuel d'apprentissage" + +#~ msgid "Internals Reference" +#~ msgstr "Référence internes" + +#~ msgid "The %1 context" +#~ msgstr "Le contexte %1" + +#~ msgid "The %1 layout object" +#~ msgstr "Le %1 objet de disposition" + +#~ msgid "" +#~ "Where to add articulations et cetera: above or below the staff or in the " +#~ "default position." +#~ msgstr "" +#~ "Où ajouter les articulations et autres : en-dessus, en-dessous de la " +#~ "portée, ou avec le placement par défaut." + +#~ msgid "Configure Keyboard Shortcut (%1)" +#~ msgstr "Configurer le raccourci clavier (%1)" + +#~ msgid "Click an articulation sign to add it to your document." +#~ msgstr "Cliquez sur une articulation pour l'ajouter dans votre document." + +#~ msgid "" +#~ "If you select some music first, the articulation will be added to all " +#~ "notes in the selection." +#~ msgstr "" +#~ "Si vous sélectionnez d'abord un fragment, l'articulation sera ajoutée à " +#~ "toutes les notes de la sélection." + +#~ msgid "Click a dynamic sign to add it to your document." +#~ msgstr "Cliquez sur une nuance pour l'ajouter dans votre document." + +#~ msgid "" +#~ "If you select some music first, dynamic spanners will be added the " +#~ "selected fragment." +#~ msgstr "" +#~ "Si vous sélectionnez d'abord un fragment, des nuances progressives seront " +#~ "ajoutées au fragment sélectionné." + +#~ msgid "" +#~ "If you have selected some music and you click a sign after a spanner, the " +#~ "sign will terminate the spanner." +#~ msgstr "" +#~ "Si vous avez sélectionné un fragment et que vous choisissez un symbole " +#~ "après une nuance progressive, cette nuance s'achèvera sur ce symbole." + +#~ msgid "These spanners need a music fragment to be selected." +#~ msgstr "" +#~ "Il est requis de sélectionner un fragment pour ces indications étendues." + +#~ msgid "Arpeggios are used with chords with multiple notes." +#~ msgstr "Les arpèges sont utilisés avec des accords" + +#~ msgid "" +#~ "Glissandos are attached to a note and automatically extend to the next " +#~ "note." +#~ msgstr "" +#~ "Les glissandos sont attachés à une note, et s'étendent automatiquement " +#~ "jusqu'à la prochaine." + +#~ msgid "LilyPond files" +#~ msgstr "Fichiers LilyPond" + +#~ msgid "Run LilyPond (preview)" +#~ msgstr "Lancer LilyPond (aperçu)" + +#~ msgid "Run LilyPond (publish)" +#~ msgstr "Lancer LilyPond (publication)" + +#~ msgid "Run LilyPond (custom)..." +#~ msgstr "Lancer LilyPond (personnalisé)..." + +#~ msgid "Interrupt LilyPond Job" +#~ msgstr "Interrompre le processus Lilypond" + +#~ msgid "Print Music..." +#~ msgstr "Imprimer la partition..." + +#~ msgid "Email Documents..." +#~ msgstr "Envoyer les documents..." + +#~ msgid "Cut selection and assign it to a LilyPond variable." +#~ msgstr "Couper la sélection et l'assigner à une variable LilyPond." + +#~ msgid "Repeat the last music expression (note or chord)." +#~ msgstr "Répéter la dernière expression musicale (notes ou accords)." + +#~ msgid "Insert or Manage Expansions..." +#~ msgstr "Insérer ou gérer les abréviations..." + +#~ msgid "Expand last word or open the expansions dialog." +#~ msgstr "Développer le dernier mot ou ouvrir la fenêtre des abréviations." + +#~ msgid "Special Characters..." +#~ msgstr "Caractères spéciaux..." + +#~ msgid "Insert special characters." +#~ msgstr "Insérer des caractères spéciaux." + +#~ msgid "Add to Expansions" +#~ msgstr "Ajouter aux abréviations" + +#~ msgid "Go to the next blank line." +#~ msgstr "Aller à la prochaine ligne vide." + +#~ msgid "Previous blank line" +#~ msgstr "Ligne vide précédente" + +#~ msgid "Go to the previous blank line." +#~ msgstr "Aller à la ligne vide précédente." + +#~ msgid "Select to next blank line" +#~ msgstr "Sélectionner jusqu'à la prochaine ligne vide" + +#~ msgid "" +#~ "Selects text from the current position down to and including the next " +#~ "blank line." +#~ msgstr "" +#~ "Sélectionne le texte de la position courante jusqu'à la prochaine ligne " +#~ "vide, incluse." + +#~ msgid "Select to previous blank line" +#~ msgstr "Sélectionner jusqu'à la ligne vide précédente" + +#~ msgid "" +#~ "Selects text from the current position up to right after the previous " +#~ "blank line." +#~ msgstr "" +#~ "Sélectionne le texte de la position courante jusqu'à après la ligne vide " +#~ "précédente." + +#~ msgid "Move selection to next blank line" +#~ msgstr "Déplacer la sélection vers la prochaine ligne vide" + +#~ msgid "Moves selected block to next blank line." +#~ msgstr "Déplace le bloc sélectionné vers la prochaine ligne vide." + +#~ msgid "Move selection to previous blank line" +#~ msgstr "Déplacer la sélection vers la ligne vide précédente" + +#~ msgid "Moves selected block to previous blank line." +#~ msgstr "Déplace le bloc sélectionné vers la ligne vide précédente." + +#~ msgid "Play/View" +#~ msgstr "Jouer/Afficher" + +#~ msgid "Remove hyphenation" +#~ msgstr "Réunir les syllabes des paroles" + +#~ msgid "Copy Lyrics with hyphenation removed" +#~ msgstr "Copier les paroles avec les syllabes réunies" + +#~ msgid "Single Quote" +#~ msgstr "Guillemets simples" + +#~ msgid "Double Quote" +#~ msgstr "Guillemets doubles" + +#~ msgid "Align" +#~ msgstr "Aligner" + +#~ msgid "Open Current Folder" +#~ msgstr "Ouvrir le dossier courant" + +#~ msgid "Repeat selected music" +#~ msgstr "Répéter la musique sélectionnée." + +#~ msgid "Insert pair of braces" +#~ msgstr "Insérer une paire d'accolades" + +#~ msgid "" +#~ "Your document has been modified and needs to be saved before LilyPond can " +#~ "be started.\n" +#~ "\n" +#~ "Save the document now?" +#~ msgstr "" +#~ "Votre document a été modifié et doit être enregistré avant de lancer " +#~ "Lilypond.\n" +#~ "\n" +#~ "Enregistrer le document maintenant ?" + +#~ msgid "There is already a LilyPond job running for this document." +#~ msgstr "LilyPond traite déjà ce document." + +#~ msgid "Can't process document" +#~ msgstr "Impossible de traiter le document" + +#~ msgid "Continue anyway?" +#~ msgstr "Continuer quand même ?" + +#~ msgid "" +#~ "You want to run LilyPond in preview mode (with point and click enabled), " +#~ "but your document contains a command to turn point and click off." +#~ msgstr "" +#~ "Vous souhaitez lancer LilyPond en mode aperçu (avec l'option point-and-" +#~ "click), mais votre document contient une commande qui désactive le point-" +#~ "and-click." + +#~ msgid "" +#~ "You want to run LilyPond in publish mode (with point and click disabled), " +#~ "but your document contains a command to turn point and click on." +#~ msgstr "" +#~ "Vous souhaitez lancer LilyPond en mode publication (sans l'option point-" +#~ "and-click), mais votre document contient une commande qui active le point-" +#~ "and-click." + +#~ msgid "Abort the running LilyPond process" +#~ msgstr "Mettre fin au processus Lilypond en cours d'exécution" + +#~ msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" +#~ msgstr "Lancer LilyPond en mode aperçu (Maj-clic pour personnaliser)" + +#~ msgid "LilyPond has successfully compiled %1." +#~ msgstr "LilyPond a correctement compilé %1." + +#~ msgid "LilyPond exited with an error compiling %1." +#~ msgstr "La compilation de %1 s'est arrêtée avec une erreur." + +#~ msgid "" +#~ "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" +#~ msgstr "Saisissez des durées séparées par des espaces (ex. : 8. 16 8 4 8)" + +#~ msgid "Terminal" +#~ msgstr "Terminal" + +#~ msgid "" +#~ "Could not load the KMid part.\n" +#~ "Please install KMid 2.4.0 or higher." +#~ msgstr "" +#~ "Impossible de charger le module KMid.\n" +#~ "Veuillez installer KMid 2.4.0 ou plus récent." + +#~ msgid "Show PDF Navigation Panel" +#~ msgstr "Afficher le panneau de navigation PDF" + +#~ msgid "Show PDF minipager" +#~ msgstr "Afficher les miniatures du PDF." + +#~ msgid "Configure Okular..." +#~ msgstr "Configurer Okular..." + +#~ msgid "S&ynchronize Preview with Current Document" +#~ msgstr "S&ynchroniser l'aperçu avec le document courant" + +#~ msgid "Reload" +#~ msgstr "Recharger" + +#~ msgid "no log" +#~ msgstr "pas de messages" + +#~ msgid "Only show on errors" +#~ msgstr "N'afficher qu'en cas d'erreurs." + +#~ msgid "Rumor" +#~ msgstr "Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter " +#~ "from the LilyPond document." +#~ msgstr "" +#~ "Chiffre de mesure. Laissez « Auto » pour que Frescobaldi le détermine à " +#~ "partir du document LilyPond." + +#~ msgid "Quantize:" +#~ msgstr "Quantifier :" + +#~ msgid "The shortest note duration to use." +#~ msgstr "La plus courte valeur à autoriser." + +#~ msgid "Record LilyPond input note by note, without durations." +#~ msgstr "Enregistrer le code LilyPond note par note, sans durées." + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Record monophonic input, without chords." +#~ msgstr "Enregistrer du code LilyPond monophonique, sans accords." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let Frescobaldi determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Nombre d'altérations (un nombre négatif désigne des bémols). Laissez " +#~ "« Auto » pour que Frescobaldi le détermine à partir du document." + +#~ msgid "Meter:" +#~ msgstr "Chiffre de mesure :" + +#~ msgid "Key:" +#~ msgstr "Tonalité :" + +#~ msgid "Configure..." +#~ msgstr "Réglages..." + +#~ msgid "Adjust more settings, like MIDI input and output." +#~ msgstr "Réglages avancés, tels que l'entrée et sortie MIDI." + +#~ msgid "Set these settings as default." +#~ msgstr "Enregistrer ces réglages en tant que défaut." + +#~ msgid "Found rumor version %1." +#~ msgstr "Trouvé Rumor version %1." + +#~ msgid "Could not find Rumor: %1" +#~ msgstr "Impossible de trouver Rumor : %1" + +#~ msgid "Settings have been saved." +#~ msgstr "Les réglages ont été enregistrés." + +#~ msgid "Record" +#~ msgstr "Enregistre" + +#~ msgid "Start or stop Rumor MIDI-recording." +#~ msgstr "Lancer ou arrêter l'enregistrement MIDI Rumor." + +#~ msgid "Rumor is recording, press ESC to stop." +#~ msgstr "Rumor enregistre, appuyez sur ESC pour l'arrêter." + +#~ msgid "Rumor stopped." +#~ msgstr "Rumor arrêté." + +#~ msgid "TiMidity" +#~ msgstr "TiMidity" + +#~ msgid "Start or stop the TiMidity ALSA MIDI client." +#~ msgstr "Lancer ou arrêter le client ALSA TiMidity." + +#~ msgid "Rumor Settings" +#~ msgstr "Réglages de Rumor" + +#~ msgid "OSS device %1" +#~ msgstr "Périphérique OSS %1" + +#~ msgid "Keyboard" +#~ msgstr "Clavier" + +#~ msgid "MIDI input:" +#~ msgstr "Entrée MIDI :" + +#~ msgid "" +#~ "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard " +#~ "of your computer." +#~ msgstr "" +#~ "Entrée MIDI à utiliser. Choisissez « Clavier » pour jouer sur le clavier " +#~ "de votre ordinateur." + +#~ msgid "MIDI output:" +#~ msgstr "Sortie MIDI :" + +#~ msgid "MIDI output to use." +#~ msgstr "Sortie MIDI à utiliser." + +#~ msgid "The LilyPond language you want Rumor to output the pitches in." +#~ msgstr "Langue du nom des notes pour la saisie par Rumor." + +#~ msgid "Explicit durations" +#~ msgstr "Durées explicites" + +#~ msgid "" +#~ "Add a duration after every note, even if it is the same as the preceding " +#~ "note." +#~ msgstr "" +#~ "Ajouter une durée à chaque note, même si une valeur identique est répétée." + +#~ msgid "Absolute pitch" +#~ msgstr "Hauteurs absolues" + +#~ msgid "Use absolute pitches instead of relative." +#~ msgstr "Utiliser des hauteurs absolues, et non relatives." + +#~ msgid "No barlines" +#~ msgstr "Pas de barres de mesures" + +#~ msgid "Filter the barlines out of Rumor's output." +#~ msgstr "Enlever les barres de mesures de la saisie par Rumor." + +#~ msgid "No dots" +#~ msgstr "Pas de points" + +#~ msgid "Do not use dotted notes, but ties instead." +#~ msgstr "Utiliser des notes liées et non pointées." + +#~ msgid "Legato" +#~ msgstr "Legato" + +#~ msgid "Do not use rests, but give all notes the maximum length." +#~ msgstr "Donner à chaque note sa durée maximale, en supprimant les silences." + +#~ msgid "Strip leading and trialing rests from output." +#~ msgstr "Enlever les silences d'introduction et de fin." + +#~ msgid "Guile scripts to load:" +#~ msgstr "Scripts Guile à charger :" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. Check " +#~ "\"What's this\" for more information." +#~ msgstr "" +#~ "Sélectionnez ici des scripts Guile que vous voulez charger dans Rumor. " +#~ "Voir « Qu'est-ce que c'est » pour plus d'informations." + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %1. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Sélectionnez ici des scripts Guile que vous voulez charger dans Rumor. " +#~ "Vous pouvez ajouter vos propres scripts dans %1. Si la première ligne de " +#~ "votre script commence par un point-virgule (;), cette ligne sera affichée " +#~ "comme description." + +#~ msgid "preview mode" +#~ msgstr "mode aperçu" + +#~ msgid "publish mode" +#~ msgstr "mode publication" + +#~ msgid "LilyPond %1 [%2] starting (%3)..." +#~ msgstr "LilyPond %1 [%2] : lancement (%3)..." + +#~ msgid "LilyPond [%1] starting (%2)..." +#~ msgstr "LilyPond [%1] : lancement (%2)..." + +#~ msgid "LilyPond [%1] exited with return code %2." +#~ msgstr "LilyPond [%1] : interruption avec le code %2." + +#~ msgid "LilyPond [%1] exited with exit status %2." +#~ msgstr "LilyPond [%1] : interruption avec le code %2." + +#~ msgid "LilyPond [%1] finished (%2)." +#~ msgstr "LilyPond [%1] : traitement achevé (%2)." + +#~ msgid "Could not start LilyPond. Please check path and permissions." +#~ msgstr "" +#~ "Impossible de lancer LilyPond. Veuillez vérifier l'emplacement et les " +#~ "permissions." + +#~ msgid "Could not read from the LilyPond process." +#~ msgstr "Impossible de lire à partir du processus LilyPond." + +#~ msgid "Select which LilyPond version you want to run:" +#~ msgstr "Choisissez la version de LilyPond que vous voulez utiliser :" + +#~ msgid "LilyPond %1" +#~ msgstr "LilyPond %1" + +#~ msgid "Use LilyPond version %1" +#~ msgstr "Utiliser la version %1 de LilyPond" + +#~ msgid "automatic" +#~ msgstr "automatique" + +#~ msgid "Automatic LilyPond Version (determined from document)." +#~ msgstr "Version automatique de LilyPond (d'après le document)." + +#~ msgid "Path: %1" +#~ msgstr "Emplacement : %1" + +#~ msgid "LilyPond (version unknown)" +#~ msgstr "LilyPond (version inconnue)" + +#~ msgid "" +#~ "Use LilyPond (version unknown)\n" +#~ "Path: %1" +#~ msgstr "" +#~ "Utiliser LilyPond (version inconnue)\n" +#~ "Emplacement : %1" + +#~ msgid "Save LilyPond Log as" +#~ msgstr "Enregistrer les messages de LilyPond sous..." + +#~ msgid "" +#~ "Could not save LilyPond log:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Impossible d'enregistrer les messages de LilyPond :\n" +#~ "\n" +#~ "%1" + +#~ msgid "LilyPond-related settings" +#~ msgstr "Préférences de LilyPond" + +#~ msgid "LilyPond version to use:" +#~ msgstr "Version de LilyPond à utiliser :" + +#~ msgid "" +#~ "Here you can set a fixed LilyPond version to run on documents in this " +#~ "session.\n" +#~ "\n" +#~ "The LilyPond version selected here is run by default on your documents, " +#~ "and it's also used by the \"Insert Version\" command." +#~ msgstr "" +#~ "Sélectionnez ici une version précise de LilyPond à utiliser pour traiter " +#~ "les documents de cette session.\n" +#~ "\n" +#~ "La version de LilyPond choisie ici sera utilisée par défaut sur vos " +#~ "documents, et déterminera également la commande « Insérer version »." + +#~ msgid "Configure" +#~ msgstr "Réglages" + +#~ msgid "General Frescobaldi Preferences" +#~ msgstr "Préférences générales de Frescobaldi" + +#~ msgid "Paths to programs or data used by Frescobaldi" +#~ msgstr "" +#~ "Emplacements vers les programmes ou données utilisées par Frescobaldi" + +#~ msgid "Rumor MIDI input" +#~ msgstr "Entrée MIDI Rumor" + +#~ msgid "Rumor MIDI input plugin settings" +#~ msgstr "Configurations du module de saisie MIDI Rumor" + +#~ msgid "Editor Component" +#~ msgstr "Éditeur intégré" + +#~ msgid "Editor Component Options" +#~ msgstr "Réglages de l'éditeur intégré." + +#~ msgid "Use version number of last convert-ly rule" +#~ msgstr "Utiliser le numéro de version de la dernière règle convert-ly" + +#~ msgid "Enter a valid LilyPond version number, e.g. 2.12.0" +#~ msgstr "Saisissez un numéro version de LilyPond valable, par exemple 2.12.0" + +#~ msgid "Warnings and Notifications" +#~ msgstr "Avertissements et notifications" + +#~ msgid "Warn when a document contains a conflicting point and click setting" +#~ msgstr "" +#~ "Avertir lorsqu'un document contient des options point-and-click " +#~ "contradictoires" + +#~ msgid "Warn when a document needs to be saved before LilyPond is run" +#~ msgstr "" +#~ "Avertir lorsqu'un document doit être enregistré avant de lancer LilyPond" + +#~ msgid "Warn when saving a session would overwrite another" +#~ msgstr "Avertir lorsqu'une session risque d'en écraser une autre" + +#~ msgid "Point and Click" +#~ msgstr "Point-and-click" + +#~ msgid "Enable Point and Click" +#~ msgstr "Activer l'option point-and-click" + +#~ msgid "" +#~ "Click this button if Point and Click does not work. See Shift+F1 (What's " +#~ "This) for more information." +#~ msgstr "" +#~ "Cliquez ici si le point-and-click ne fonctionne pas. Voir Maj+F1 " +#~ "(« Qu'est-ce que c'est ? ») pour plus de détails." + +#~ msgid "" +#~ "On its first run, Frescobaldi tries to auto-configure Okular (which " +#~ "provides the PDF preview) to call Frescobaldi when a clickable object is " +#~ "clicked.\n" +#~ "\n" +#~ "But this setting can get lost when you move Frescobaldi to a different " +#~ "location or when other applications reconfigure Okular.\n" +#~ "\n" +#~ "Click this button to configure Frescobaldi as 'custom editor' inside " +#~ "Okular. This works best when all instances of Okular are closed and the " +#~ "PDF preview has not yet been opened." +#~ msgstr "" +#~ "Lors de la première compilation, Frescobaldi essaye de configurer " +#~ "l'aperçu des PDF dans Okular, pour que les liens des objets cliquables " +#~ "renvoient vers Frescobaldi.\n" +#~ "\n" +#~ "Cependant, ce réglage peut être perdu si Frescobaldi est déplacé ou si " +#~ "d'autres applications reconfigurent Okular.\n" +#~ "\n" +#~ "Cliquez ici pour faire de Frescobaldi l'« éditeur personnalisé » " +#~ "d'Okular. Ce changement ne sera pris en compte que si aucune fenêtre " +#~ "d'Okular n'est ouverte, et si l'aperçu PDF n'a pas encore été activé." + +#~ msgid "" +#~ "The Okular PDF preview has been reconfigured.\n" +#~ "\n" +#~ "If you already opened the PDF preview, restart Frescobaldi for the new " +#~ "settings to take effect." +#~ msgstr "" +#~ "L'aperçu PDF dans Okular a été reconfiguré.\n" +#~ "\n" +#~ "Si vous avez déjà ouvert l'aperçu PDF, redémarrez Frescobaldi pour que " +#~ "les nouveaux réglages soient pris en compte." + +#~ msgid "PDF Viewer:" +#~ msgstr "Lecteur PDF :" + +#~ msgid "PDF Viewer" +#~ msgstr "Lecteur PDF" + +#~ msgid "(leave empty for operating system default)" +#~ msgstr "(laissez vide pour le réglage par défaut de votre système)" + +#~ msgid "MIDI Player:" +#~ msgstr "Lecteur MIDI :" + +#~ msgid "Url:" +#~ msgstr "URL :" + +#~ msgid "Url or path to the LilyPond documentation." +#~ msgstr "URL ou emplacement complet de la documentation de LilyPond." + +#~ msgid "Lyrics Hyphenation" +#~ msgstr "Césure des paroles" + +#~ msgid "" +#~ "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " +#~ "KOffice, etc, one per line. If you leave out the starting slash, the " +#~ "prefixes from the KDEDIRS environment variable are prepended." +#~ msgstr "" +#~ "Emplacements à parcourir pour les dictionnaires de césure d'OpenOffice." +#~ "org, Scribus, KOffice, … (un seul par ligne). Tout emplacement ne " +#~ "commençant pas par une barre oblique sera parcouru à partir de la " +#~ "variable d'environnement KDEDIRS." + +#~ msgid "Commands used by the Rumor MIDI input module" +#~ msgstr "Commandes utilisées par le module de saisie MIDI Rumor" + +#~ msgid "Name or full path of the Rumor program." +#~ msgstr "Nom ou emplacement complet de l'exécutable Rumor." + +#~ msgid "" +#~ "Name or full path of the aconnect program (part of ALSA, for MIDI input " +#~ "and playback using Rumor)." +#~ msgstr "" +#~ "Nom ou emplacement de l'exécutable aconnect (inclus dans ALSA, pour " +#~ "saisie et sortie MIDI via Rumor)." + +#~ msgid "" +#~ "Full command to start Timidity (or any other program) as an ALSA MIDI " +#~ "client." +#~ msgstr "" +#~ "Commande complète de lancement de TiMidity (ou autre) en tant que client " +#~ "MIDI pour ALSA." + +#~ msgid "LilyPond versions to use:" +#~ msgstr "Versions de LilyPond à utiliser :" + +#~ msgid "Close Button" +#~ msgstr "Bouton de fermeture" + +#~ msgid "Large Tabs" +#~ msgstr "Grands onglets" + +#~ msgid "Tabs can be moved" +#~ msgstr "Les onglets peuvent être déplacés" + +#~ msgid "Lilypond-book:" +#~ msgstr "LilyPond-book :" + +#~ msgid "Download..." +#~ msgstr "Téléchargement..." + +#~ msgid "Download new binary LilyPond releases." +#~ msgstr "Télécharger de nouvelles versions de LilyPond." + +#~ msgid "LilyPond Command" +#~ msgstr "Commande de LilyPond" + +#~ msgid "Set as default" +#~ msgstr "Définir en tant que défaut" + +#~ msgid "Choose a session." +#~ msgstr "Choisir une session." + +#~ msgid "Choose..." +#~ msgstr "Choisissez..." + +#~ msgid "Your document has already a LilyPond version statement." +#~ msgstr "Ce document comprend déjà une indication de version." + +#~ msgid "Version already set" +#~ msgstr "Version déjà définie" + +#~ msgid "" +#~ "Can't determine the version of LilyPond. Please check your LilyPond " +#~ "installation." +#~ msgstr "" +#~ "Impossible de déterminer la version de LilyPond. Veuillez vérifier votre " +#~ "installation." + +#~ msgid "" +#~ "Can't determine the LilyPond version of the current document. Please add " +#~ "a \\version statement with the correct version." +#~ msgstr "" +#~ "Impossible de déterminer la version de LilyPond utilisée dans ce " +#~ "document. Ajoutez une indication de \\version correcte." + +#~ msgid "This LilyPond document is already up-to-date." +#~ msgstr "Ce document LilyPond est déjà à jour." + +#~ msgid "" +#~ "The document has been processed with convert-ly. You'll find the messages " +#~ "of convert-ly in a comment block at the end. You still may have to edit " +#~ "some parts manually." +#~ msgstr "" +#~ "Ce document a été mis à jour par convert-ly. Vous trouverez à la fin les " +#~ "messages de convert-ly, en commentaire. Certains endroits peuvent " +#~ "nécessiter des modifications manuelles." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %1" +#~ msgstr "" +#~ "Ce document a été traité par convert-ly, mais n'a subi aucun changement. " +#~ "Voici le message rapporté par convert-ly : %1" + +#~ msgid "Tap" +#~ msgstr "Pulsation" + +#~ msgid "The tempo in beats per minute." +#~ msgstr "Tempo, en pulsations par minute." + +#~ msgid "Treble" +#~ msgstr "Clé de sol" + +#~ msgid "Treble 8" +#~ msgstr "Clé de sol 8" + +#~ msgid "Tab clef" +#~ msgstr "Clé de tablature" + +#~ msgid "No Clef" +#~ msgstr "Pas de clé" + +#~ msgid "Add selected part to your score." +#~ msgstr "Ajouter la partie sélectionnée à votre partition." + +#~ msgid "A tempo indication, e.g. \"Allegro.\"" +#~ msgstr "Indiquez le tempo, par exemple « Allegro »." + +#~ msgid "Wrap score in \\book block" +#~ msgstr "Inclure la partition dans un bloc \\book" + +#~ msgid "If checked, wraps the \\score block inside a \\book block." +#~ msgstr "Si activé, le bloc \\score sera inclus dans un bloc \\book." + +#~ msgid "How many voices to put in this staff." +#~ msgstr "Nombre de voix sur cette portée." + +#~ msgid "Basso continuo" +#~ msgstr "Basse Continue" + +#~ msgid "Guitar" +#~ msgstr "Guitare" + +#~ msgid "Oboe d'Amore" +#~ msgstr "Hautbois d'amour" + +#~ msgid "English Horn" +#~ msgstr "Cor Anglais" + +#~ msgid "Mezzo soprano" +#~ msgstr "Mezzo-soprano" + +#~ msgid "Open PDF" +#~ msgstr "Ouvrir PDF" + +#~ msgid "Email..." +#~ msgstr "Envoyer..." + +#~ msgid "Disable the built-in PDF preview" +#~ msgstr "Désactiver l'aperçu PDF intégré" + +#~ msgid "The direction to use for the articulations." +#~ msgstr "Direction à utiliser pour les articulations." + +#~ msgid "Your document has been modified, please save first." +#~ msgstr "Ce document a été modifié. Veuillez l'enregistrer." + +#~ msgid "LilyPond documentation:" +#~ msgstr "Documentation LilyPond :" + +#~ msgid "" +#~ "Printing failed: %1\n" +#~ "\n" +#~ "The print command %2 does probably not exist. Please check your settings." +#~ msgstr "" +#~ "L'impression a échoué : %1\n" +#~ "\n" +#~ "La commande d'impression %2 n'existe probablement pas. Veuillez vérifier " +#~ "vos réglages." + +#~ msgid "The print command contains errors. Please check your settings." +#~ msgstr "" +#~ "La commande d'impression contient des erreurs. Veuillez vérifier vos " +#~ "réglages." + +#~ msgid "Directly print on default printer" +#~ msgstr "Imprimer directement avec l'imprimante par défaut" + +#~ msgid "Notify when a document has been sent to the printer" +#~ msgstr "Avertir quand le document a été envoyé à l'imprimante." + +#~ msgid "Printcommand:" +#~ msgstr "Commande d'impression :" + +#~ msgid "" +#~ "Command to print a PDF file, for example lpr or kprinter. You may add " +#~ "some arguments, e.g. lpr -P myprinter." +#~ msgstr "" +#~ "Commande d'impression des fichiers PDF, telle que lpr ou kprinter. Des " +#~ "arguments peuvent être ajoutés, tels que lpr -P Imprimante." + +#~ msgid "Space above:" +#~ msgstr "Espace au-dessus :" + +#~ msgid "Name or full path of the convert-ly program." +#~ msgstr "Nom ou emplacement complet de l'exécutable convert-ly." + +#~ msgid "Expand" +#~ msgstr "Abréviation" + +#~ msgid "Could not understand the entered pitches." +#~ msgstr "Impossible de comprendre les hauteurs saisies." + +#~ msgid "Dock" +#~ msgstr "Ancrer" + +#~ msgid "Show" +#~ msgstr "Afficher" + +#~ msgid "Paper Size A4" +#~ msgstr "Format A4" + +#~ msgid "Paper Size A5" +#~ msgstr "Format A5" + +#~ msgid "Paper Size Letter" +#~ msgstr "Format Letter" + +#~ msgid "Stem Up" +#~ msgstr "Hampes vers le haut" + +#~ msgid "Stem Down" +#~ msgstr "Hampes vers le bas" + +#~ msgid "Lyric Stanza" +#~ msgstr "Couplet" + +#~ msgid "Layout Section" +#~ msgstr "Section Layout (mise en page)" + +#~ msgid "Midi section" +#~ msgstr "Section MIDI" + +#~ msgid "With: instrumentName" +#~ msgstr "Avec instrumentName (nom de l'instrument)" + +#~ msgid "With: shortInstrumentName" +#~ msgstr "Avec shortInstrumentName (abréviation)" + +#~ msgid "New Lyrics" +#~ msgstr "Nouvelles paroles (lyrics)" + +#~ msgid "Your document currently has no filename, please save first." +#~ msgstr "Votre document n'a pas de nom, veuillez d'abord l'enregistrer." + +#~ msgid "" +#~ "Sorry, support for remote files is not yet implemented.\n" +#~ "Please save your document to a local file." +#~ msgstr "" +#~ "Le traitement de fichiers distants n'est pas encore pris en charge.\n" +#~ "Enregistrez ce document dans un fichier local." + +#~ msgid "Already Running" +#~ msgstr "Déjà en cours" Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/gl.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/gl.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/gl.po frescobaldi-2.0.0/frescobaldi_app/po/gl.po --- frescobaldi-1.2.0/frescobaldi_app/po/gl.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/gl.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7229 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Manuel A. Vazquez , 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: frescobaldi 0.7.17\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: 2011-01-03 17:37+0100\n" +"Last-Translator: Manuel A. Vazquez \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "" + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +#, fuzzy +msgid "Python" +msgstr "Ruta" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +#, fuzzy +msgid "Poppler" +msgstr "Papel" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "" + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "" + +#: frescobaldi_app/about.py:87 +#, fuzzy +msgid "About" +msgstr "Automático" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "Versión" + +#: frescobaldi_app/about.py:144 +#, fuzzy +msgid "Operating System" +msgstr "Outros sistemas:" + +#: frescobaldi_app/about.py:151 +#, fuzzy +msgid "Version {version}" +msgstr "Inserir a versión de LilyPond" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +#, fuzzy +msgid "A LilyPond Music Editor" +msgstr "Editor de música para LilyPond" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "" + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "" + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "" + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "" +msgstr[1] "" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +#, fuzzy +msgid "Shortcut Conflict" +msgstr "Atallo" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "" + +#: frescobaldi_app/app.py:128 +#, fuzzy +msgid "LilyPond Files" +msgstr "Ficheiros de LilyPond" + +#: frescobaldi_app/app.py:129 +#, fuzzy +msgid "LaTeX Files" +msgstr "Todos os ficheiros" + +#: frescobaldi_app/app.py:130 +#, fuzzy +msgid "DocBook Files" +msgstr "Ficheiros PDF" + +#: frescobaldi_app/app.py:131 +#, fuzzy +msgid "HTML Files" +msgstr "Todos os ficheiros" + +#: frescobaldi_app/app.py:132 +#, fuzzy +msgid "Texinfo Files" +msgstr "Abrir ficheiro" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Todos os ficheiros" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:115 +#, fuzzy +msgid "Next Mark" +msgstr "Seguinte" + +#: frescobaldi_app/bookmarkmanager.py:116 +#, fuzzy +msgid "Previous Mark" +msgstr "Anterior" + +#: frescobaldi_app/convert_ly.py:118 +#, fuzzy +msgid "From version:" +msgstr "Inserir a versión de LilyPond" + +#: frescobaldi_app/convert_ly.py:119 +#, fuzzy +msgid "To version:" +msgstr "Versión:" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "" + +#: frescobaldi_app/convert_ly.py:125 +#, fuzzy +msgid "&Changes" +msgstr "Pausa" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +#, fuzzy +msgid "" +msgstr "descoñecido" + +#: frescobaldi_app/convert_ly.py:138 +#, fuzzy +msgid "Convert-ly from LilyPond {version}" +msgstr "Empregar a versión de LilyPond %1" + +#: frescobaldi_app/convert_ly.py:162 +#, fuzzy +msgid "(set in document)" +msgstr "Imprimir documentos" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "" + +#: frescobaldi_app/convert_ly.py:190 +#, fuzzy +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "Non foi posible iniciar convert-ly: %1" + +#: frescobaldi_app/convert_ly.py:196 +msgid "The document has not been changed." +msgstr "" + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Current Document" +msgstr "&Documento" + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Converted Document" +msgstr "Pechar outros documentos" + +#: frescobaldi_app/convert_ly.py:208 +#, fuzzy +msgid "Colors:" +msgstr "Compositor" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "" + +#: frescobaldi_app/convert_ly.py:211 +#, fuzzy +msgid "Deleted" +msgstr "Seleccionar todo" + +#: frescobaldi_app/convert_ly.py:212 +#, fuzzy +msgid "Links:" +msgstr "Letra:" + +#: frescobaldi_app/convert_ly.py:213 +#, fuzzy +msgid "First Change" +msgstr "Primeira páxina" + +#: frescobaldi_app/convert_ly.py:214 +#, fuzzy +msgid "Next Change" +msgstr "Liña en branco seguinte" + +#: frescobaldi_app/convert_ly.py:215 +#, fuzzy +msgid "Top" +msgstr "Marcar" + +#: frescobaldi_app/cut_assign.py:39 +#, fuzzy +msgid "Cut and Assign" +msgstr "Cortar e asignar" + +#: frescobaldi_app/cut_assign.py:40 +#, fuzzy +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "Introduza o nome da variábel para asignarlle o texto seleccionado:" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +#, fuzzy +msgid "Untitled" +msgstr "Subtítulo" + +#: frescobaldi_app/document.py:145 +msgid "Untitled ({num})" +msgstr "" + +#: frescobaldi_app/documentactions.py:125 +#, fuzzy +msgid "Cut and Assign..." +msgstr "Cortar e asignar" + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "" + +#: frescobaldi_app/documentactions.py:127 +#, fuzzy +msgid "&Automatic Indent" +msgstr "automática" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "" + +#: frescobaldi_app/documentactions.py:129 +#, fuzzy +msgid "&Format" +msgstr "Caldeirón" + +#: frescobaldi_app/documentactions.py:130 +#, fuzzy +msgid "&Update with convert-ly..." +msgstr "Actualizar mediante convert-ly" + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +#, fuzzy +msgid "&Save" +msgstr "Gardar" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +#, fuzzy +msgid "Save &As..." +msgstr "Gardar PDF como..." + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "" + +#: frescobaldi_app/documentmenu.py:42 +#, fuzzy +msgctxt "menu title" +msgid "&Document" +msgstr "&Documento" + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Houbo un erro interno:" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "Erro interno" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Enviar informe de erro..." + +#: frescobaldi_app/exception.py:79 +#, fuzzy +msgid "Optionally describe below what you were doing:" +msgstr "Opcionalmente, describe aquí o que estaba a facer:" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:76 +msgid "Roman Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:77 +msgid "Sans Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:79 +#, fuzzy +msgid "Staff Size:" +msgstr "Tamaño do pentagrama" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Guionizar o texto da letra" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Seleccione un idioma:" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +#, fuzzy +msgid "Lyrics" +msgstr "Letra:" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +#, fuzzy +msgctxt "menu title" +msgid "Tools" +msgstr "Vistas de ferramen&tas" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +#, fuzzy +msgid "Preferences" +msgstr "Preferencias xerais" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/inputdialog.py:101 +#, fuzzy +msgid "Select Color" +msgstr "Seleccionar todo" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:206 +#, fuzzy +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "Non se puido iniciar LilyPond. Comprobe a ruta e os permisos." + +#: frescobaldi_app/job.py:209 +#, fuzzy +msgid "Could not read from the process." +msgstr "Non se puido ler a partires do proceso LilyPond." + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Houbo un erro descoñecido." + +#: frescobaldi_app/job.py:216 +#, fuzzy +msgid "Exited with return code {code}." +msgstr "LilyPond [%1] devolveu ao saír o código %2." + +#: frescobaldi_app/job.py:218 +#, fuzzy +msgid "Exited with exit status {status}." +msgstr "LilyPond [%1] devolveu ao saír o código %2." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "" + +#: frescobaldi_app/lyrics.py:132 +#, fuzzy +msgid "&Hyphenate Lyrics Text..." +msgstr "Guionizar o texto da letra" + +#: frescobaldi_app/lyrics.py:133 +#, fuzzy +msgid "&Remove hyphenation" +msgstr "Eliminar a guionización" + +#: frescobaldi_app/lyrics.py:134 +#, fuzzy +msgid "&Copy Lyrics with hyphenation removed" +msgstr "Copiar a letra sen os guions separadores" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "" + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Codificación para usar" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Número de liña ao que saltar, comezando por 1" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Columna á que ir, comezando por 0" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +#, fuzzy +msgid "[modified]" +msgstr "modificado" + +#: frescobaldi_app/mainwindow.py:268 +#, fuzzy +msgctxt "dialog title" +msgid "Close Document" +msgstr "Pechar outros documentos" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:281 +#, fuzzy +msgid "Tab Bar" +msgstr "Tabulatura" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +#, fuzzy +msgid "Warning" +msgstr "Afinación da guitarra" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:354 +#, fuzzy +msgctxt "dialog title" +msgid "Open File" +msgstr "Abrir ficheiro" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:399 +#, fuzzy +msgctxt "dialog title" +msgid "Save File" +msgstr "Gardar PDF" + +#: frescobaldi_app/mainwindow.py:439 +#, fuzzy +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Gardar" + +#: frescobaldi_app/mainwindow.py:445 +#, fuzzy +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Modo de selección de liñas" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:541 +#, fuzzy +msgctxt "dialog title" +msgid "Print Source" +msgstr "Imprimir código fonte..." + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:923 +#, fuzzy +msgctxt "action: new document" +msgid "&New" +msgstr "Novo..." + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:927 +#, fuzzy +msgid "Open Current Directory" +msgstr "Abrir o cartafol actual" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:931 +#, fuzzy +msgid "Save All" +msgstr "Gardar" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "Imprimir código fonte..." + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "Pechar outros documentos" + +#: frescobaldi_app/mainwindow.py:935 +#, fuzzy +msgid "Close All Documents" +msgstr "Pechar outros documentos" + +#: frescobaldi_app/mainwindow.py:936 +#, fuzzy +msgid "Closes all documents and leaves the current session." +msgstr "Transporta todas as notas do documento ou da selección." + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:941 +#, fuzzy +msgid "&Undo" +msgstr "Desacoplar" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Copiar" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:946 +#, fuzzy +msgid "&Paste" +msgstr "Pausa" + +#: frescobaldi_app/mainwindow.py:947 +#, fuzzy +msgid "Select &All" +msgstr "Seleccionar todo" + +#: frescobaldi_app/mainwindow.py:948 +#, fuzzy +msgid "Select &Block" +msgstr "Seleccionar todo" + +#: frescobaldi_app/mainwindow.py:949 +#, fuzzy +msgid "Select &None" +msgstr "Seleccionar todo" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "" + +#: frescobaldi_app/mainwindow.py:952 +#, fuzzy +msgid "&Find..." +msgstr "Imprimir..." + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "" + +#: frescobaldi_app/mainwindow.py:954 +#, fuzzy +msgid "Find Pre&vious" +msgstr "Anterior" + +#: frescobaldi_app/mainwindow.py:955 +#, fuzzy +msgid "&Replace..." +msgstr "Busca..." + +#: frescobaldi_app/mainwindow.py:956 +#, fuzzy +msgid "Pr&eferences..." +msgstr "Preferencias xerais" + +#: frescobaldi_app/mainwindow.py:958 +#, fuzzy +msgid "&Next Document" +msgstr "&Documento" + +#: frescobaldi_app/mainwindow.py:959 +#, fuzzy +msgid "&Previous Document" +msgstr "&Código fonte do documento" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:961 +#, fuzzy +msgid "Scroll Down" +msgstr "Semitrino con final descendente" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "" + +#: frescobaldi_app/menu.py:81 +#, fuzzy +msgctxt "menu title" +msgid "&File" +msgstr "Título" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "" + +#: frescobaldi_app/menu.py:147 +#, fuzzy +msgctxt "menu title" +msgid "&View" +msgstr "Vistas de ferramen&tas" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "" + +#: frescobaldi_app/menu.py:189 +#, fuzzy +msgctxt "menu title" +msgid "&LilyPond" +msgstr "&LilyPond" + +#: frescobaldi_app/menu.py:208 +#, fuzzy +msgctxt "menu title" +msgid "&Tools" +msgstr "Vistas de ferramen&tas" + +#: frescobaldi_app/menu.py:233 +#, fuzzy +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "&Letra" + +#: frescobaldi_app/menu.py:245 +#, fuzzy +msgctxt "submenu title" +msgid "&Pitch" +msgstr "&Altura" + +#: frescobaldi_app/menu.py:259 +#, fuzzy +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "Du&racións" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "" + +#: frescobaldi_app/musicpreview.py:113 +#, fuzzy +msgid "Document:" +msgstr "&Documento" + +#: frescobaldi_app/musicpreview.py:195 +#, fuzzy +msgid "&Print" +msgstr "Imprimir" + +#: frescobaldi_app/musicpreview.py:196 +#, fuzzy +msgid "Music Preview" +msgstr "Vista previa do PDF" + +#: frescobaldi_app/popplerdummy.py:42 +#, fuzzy +msgid "Could not load the {name} module." +msgstr "Non se puido cargar %1" + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" + +#: frescobaldi_app/popplerprint.py:61 +#, fuzzy +msgid "PDF Document" +msgstr "&Documento" + +#: frescobaldi_app/popplerprint.py:69 +#, fuzzy +msgid "Print {filename}" +msgstr "Imprimir 1 ficheiro" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +#, fuzzy +msgid "Printing Error" +msgstr "Erro interno" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +#, fuzzy +msgid "Could not send the document to the printer." +msgstr "Enviouse o documento á impresora." + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "" + +#: frescobaldi_app/search.py:99 +#, fuzzy +msgid "Search:" +msgstr "Busca..." + +#: frescobaldi_app/search.py:100 +#, fuzzy +msgid "&Case" +msgstr "Pausa" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "" + +#: frescobaldi_app/search.py:104 +#, fuzzy +msgid "The total number of matches" +msgstr "Número de estrofas." + +#: frescobaldi_app/search.py:105 +#, fuzzy +msgid "Close" +msgstr "Compositor" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "" + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "" + +#: frescobaldi_app/search.py:110 +#, fuzzy +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "Transporta todas as notas do documento ou da selección." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "" + +#: frescobaldi_app/viewmanager.py:91 +#, fuzzy +msgid "&Close View" +msgstr "Vistas de ferramen&tas" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:444 +#, fuzzy +msgid "Close &Other Views" +msgstr "Pechar outros documentos" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:446 +#, fuzzy +msgid "&Previous View" +msgstr "Anterior" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +#, fuzzy +msgid "Special Characters" +msgstr "Caracteres especiais..." + +#: frescobaldi_app/charmap/__init__.py:41 +#, fuzzy +msgid "Special Charac&ters" +msgstr "Caracteres especiais..." + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +#, fuzzy +msgid "Documentation Browser" +msgstr "Documentación de LilyPond" + +#: frescobaldi_app/docbrowser/__init__.py:47 +#, fuzzy +msgid "&Documentation Browser" +msgstr "Documentación de LilyPond" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +#, fuzzy +msgid "Back" +msgstr "Corchete" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "Inicio" + +#: frescobaldi_app/docbrowser/__init__.py:84 +#, fuzzy +msgid "&LilyPond Documentation" +msgstr "Documentación de LilyPond:" + +#: frescobaldi_app/docbrowser/__init__.py:85 +#, fuzzy +msgid "&Contextual LilyPond Help" +msgstr "A&xuda de LilyPond" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Busca..." + +#: frescobaldi_app/docbrowser/browser.py:136 +#, fuzzy +msgid "(local)" +msgstr "Vocal" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +#, fuzzy +msgid "LilyPond Source" +msgstr "Rexistro de LilyPond" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +#, fuzzy +msgid "Documents" +msgstr "&Documento" + +#: frescobaldi_app/doclist/__init__.py:40 +#, fuzzy +msgid "Docum&ents" +msgstr "&Documento" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:119 +#, fuzzy +msgid "LilyPond Version:" +msgstr "Versión predeterminada de LilyPond." + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:121 +#, fuzzy +msgid "Resolution:" +msgstr "Versión:" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "Executar LilyPond en modo vista previa (con apuntar e premer)" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "Executar LilyPond con saída detallada" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +#, fuzzy +msgid "Delete intermediate output files" +msgstr "Permitir a LilyPond eliminar os ficheiros de saída intermedios" + +#: frescobaldi_app/engrave/custom.py:126 +#, fuzzy +msgid "Command line:" +msgstr "Orde" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "Executar LilyPond" + +#: frescobaldi_app/engrave/custom.py:149 +#, fuzzy +msgid "LilyPond {version}" +msgstr "Versión predeterminada de LilyPond." + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:218 +#, fuzzy +msgid "The LilyPond executable" +msgstr "Preferencias de LilyPond" + +#: frescobaldi_app/engrave/custom.py:219 +#, fuzzy +msgid "All the include paths" +msgstr "Ruta de inclusión para LilyPond:" + +#: frescobaldi_app/engrave/custom.py:220 +#, fuzzy +msgid "The filename of the document" +msgstr "&Sincronizar o terminal co documento actual" + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/result_menu.py:45 +#, fuzzy +msgid "Generated &Files" +msgstr "Ficheiros &xerados" + +#: frescobaldi_app/engrave/result_menu.py:66 +#, fuzzy +msgid "No files available" +msgstr "Non dispoñible" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "" + +#: frescobaldi_app/help/browser.py:78 +#, fuzzy +msgid "Start" +msgstr "Comezar en:" + +#: frescobaldi_app/help/browser.py:79 +#, fuzzy +msgid "Contents" +msgstr "Orde" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "" + +#: frescobaldi_app/help/contents.py:46 +#, fuzzy +msgid "Frescobaldi Manual" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "" + +#: frescobaldi_app/help/contents.py:88 +#, fuzzy +msgid "Introduction" +msgstr "Redución de piano" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "Preferencias de LilyPond" + +#: frescobaldi_app/help/contents.py:142 +#, fuzzy +msgctxt "menu title" +msgid "View" +msgstr "Reproducir/Ver" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "" + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:228 +#, fuzzy +msgid "Other Tools" +msgstr "Ferramentas &adicionais" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:252 +#, fuzzy +msgid "About Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "" + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:321 +#, fuzzy +msgid "History of Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "" + +#: frescobaldi_app/help/contents.py:377 +#, fuzzy +msgid "Edit" +msgstr "Imprimir..." + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:427 +#, fuzzy +msgid "Document variables" +msgstr "Lapelas de documento" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "" + +#: frescobaldi_app/help/contents.py:444 +#, fuzzy +msgid "mode" +msgstr "Eliminar as plicas" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" + +#: frescobaldi_app/help/contents.py:448 +#, fuzzy +msgid "filename" +msgstr "Imprimir 1 ficheiro" + +#: frescobaldi_app/help/contents.py:449 +#, fuzzy +msgid "Compiles another LilyPond document instead of the current." +msgstr "Enviouse o documento á impresora." + +#: frescobaldi_app/help/contents.py:450 +#, fuzzy +msgid "encoding" +msgstr "Codificación para usar" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "" + +#: frescobaldi_app/help/contents.py:452 +#, fuzzy +msgid "version" +msgstr "Versión" + +#: frescobaldi_app/help/contents.py:453 +#, fuzzy +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "A versión de LilyPond que se vai empregar para este documento." + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +#, fuzzy +msgid "number" +msgstr "Nome" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "" + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "" + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "" + +#: frescobaldi_app/help/contents.py:479 +#, fuzzy +msgid "Table of Contents" +msgstr "Táboa de contidos" + +#: frescobaldi_app/help/helpimpl.py:115 +#, fuzzy +msgid "Up:" +msgstr "Arriba" + +#: frescobaldi_app/help/helpimpl.py:130 +#, fuzzy +msgid "Next:" +msgstr "Seguinte" + +#: frescobaldi_app/help/helpimpl.py:133 +#, fuzzy +msgid "See also:" +msgstr "Seleccionar todo" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "Rexistro de LilyPond" + +#: frescobaldi_app/logtool/__init__.py:51 +#, fuzzy +msgid "LilyPond &Log" +msgstr "Rexistro de LilyPond" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Prema para editar este ficheiro" + +#: frescobaldi_app/miditool/__init__.py:51 +#, fuzzy +msgid "MIDI" +msgstr "Reproducir MIDI" + +#: frescobaldi_app/miditool/__init__.py:52 +#, fuzzy +msgid "MIDI &Player" +msgstr "Reprodutor MIDI" + +#: frescobaldi_app/miditool/__init__.py:97 +#, fuzzy +msgctxt "midi player" +msgid "Pause" +msgstr "Pausa" + +#: frescobaldi_app/miditool/__init__.py:98 +#, fuzzy +msgctxt "midi player" +msgid "Play" +msgstr "Reproducir %1" + +#: frescobaldi_app/miditool/__init__.py:99 +#, fuzzy +msgctxt "midi player" +msgid "Stop" +msgstr "Pasos" + +#: frescobaldi_app/miditool/__init__.py:100 +#, fuzzy +msgctxt "midi player" +msgid "Restart" +msgstr "Inicio de repetición" + +#: frescobaldi_app/miditool/widget.py:102 +#, fuzzy +msgid "Tempo" +msgstr "Tempo:" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:191 +#, fuzzy +msgid "Select Music View Document" +msgstr "&Código fonte do documento" + +#: frescobaldi_app/musicview/__init__.py:192 +#, fuzzy +msgid "&Print Music..." +msgstr "Imprimir música..." + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:198 +#, fuzzy +msgid "Fit &Page" +msgstr "Primeira páxina" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:339 +#, fuzzy +msgid "Choose the PDF document to display." +msgstr "Pechar outros documentos" + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:401 +#, fuzzy +msgid "Fit Page" +msgstr "Primeira páxina" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "" + +#: frescobaldi_app/musicview/image.py:129 +#, fuzzy +msgid "Antialias" +msgstr "Italiano" + +#: frescobaldi_app/musicview/image.py:130 +#, fuzzy +msgid "Drag" +msgstr "Dórico" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "" + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "" + +#: frescobaldi_app/musicview/image.py:133 +#, fuzzy +msgid "&Save As..." +msgstr "Gardar PDF como..." + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" + +#: frescobaldi_app/musicview/image.py:167 +#, fuzzy +msgid "Image from {filename}" +msgstr "Imprimir 1 ficheiro" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "" + +#: frescobaldi_app/musicview/image.py:214 +#, fuzzy +msgid "Could not save the image." +msgstr "Non se puido cargar %1" + +#: frescobaldi_app/pitch/__init__.py:99 +#, fuzzy +msgid "Pitch Name &Language" +msgstr "Idioma das notas" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" +"Mudar o idioma de LilyPond que se emprega para os nomes das notas neste " +"documento ou na selección." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "Converter relativo en &absoluto" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" +"Converte as notas do documento ou a selección de alturas relativas a " +"absolutas." + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "Converter absoluto a &relativo" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "" +"Converte as notas do documento ou a selección de alturas absolutas a " +"relativas." + +#: frescobaldi_app/pitch/__init__.py:111 +#, fuzzy +msgid "&Transpose..." +msgstr "Transportar..." + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "Transporta todas as notas do documento ou da selección." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Idioma das notas" + +#: frescobaldi_app/pitch/pitch.py:82 +#, fuzzy +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"Non se puido realizar a tradución solicitada.\n" +"\n" +"A música contén alteracións de cuartos de ton, pero non están dispoñibles no " +"idioma de notas \"%1\"." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"Actualizouse o idioma de notas do texto seleccionado, pero debe engadir " +"manualmente a seguinte orde ao documento:" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "(para LilyPond inferior a 2.14), ou" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "(para LilyPond 2.14 e superior.)" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "Transportar" + +#: frescobaldi_app/pitch/pitch.py:399 +#, fuzzy +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" +"Non se entenden as alturas introducidas.\n" +"\n" +"Asegúrese que emprega nomes de notas no idioma \"%1\"." + +#: frescobaldi_app/pitch/pitch.py:581 +#, fuzzy +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"Non se puido realizar a transposición solicitada.\n" +"\n" +"A música contén alteracións de cuartos de ton que non están dispoñibles no " +"idioma das notas \"%1\"." + +#: frescobaldi_app/pitch/pitch.py:712 +#, fuzzy +msgid "Pitch manipulation" +msgstr "Articulación" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:744 +#, fuzzy +msgctxt "submenu title" +msgid "Pitch" +msgstr "&Altura" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "" + +#: frescobaldi_app/po/messages.py:44 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Gardar" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "" + +#: frescobaldi_app/po/messages.py:46 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Compositor" + +#: frescobaldi_app/po/messages.py:47 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Abrir %1" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "" + +#: frescobaldi_app/po/messages.py:50 +#, fuzzy +msgctxt "QFileDialog" +msgid "File" +msgstr "Título" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "" + +#: frescobaldi_app/po/messages.py:52 +#, fuzzy +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Directorio base:" + +#: frescobaldi_app/po/messages.py:53 +#, fuzzy +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Todos os ficheiros" + +#: frescobaldi_app/po/messages.py:55 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "A percusión continúa aquí." + +#: frescobaldi_app/po/messages.py:56 +#, fuzzy +msgctxt "QScrollBar" +msgid "Top" +msgstr "Marcar" + +#: frescobaldi_app/po/messages.py:57 +#, fuzzy +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Portato" + +#: frescobaldi_app/po/messages.py:58 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page up" +msgstr "Semitrino con final ascendente" + +#: frescobaldi_app/po/messages.py:59 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page down" +msgstr "Semitrino con final descendente" + +#: frescobaldi_app/po/messages.py:60 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "Semitrino con final ascendente" + +#: frescobaldi_app/po/messages.py:61 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "Semitrino con final descendente" + +#: frescobaldi_app/po/messages.py:62 +#, fuzzy +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Talón esquerdo" + +#: frescobaldi_app/po/messages.py:63 +#, fuzzy +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Talón dereito" + +#: frescobaldi_app/po/messages.py:64 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Flageolet (harmónico)" + +#: frescobaldi_app/po/messages.py:65 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Pegar duracións" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Preferencias xerais" + +#: frescobaldi_app/preferences/__init__.py:182 +#, fuzzy +msgid "MIDI Settings" +msgstr "Configuración" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +#, fuzzy +msgid "Helper Applications" +msgstr "Asistente" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Rutas" + +#: frescobaldi_app/preferences/__init__.py:212 +#, fuzzy +msgid "LilyPond Documentation" +msgstr "Documentación de LilyPond:" + +#: frescobaldi_app/preferences/__init__.py:222 +#, fuzzy +msgid "Keyboard Shortcuts" +msgstr "Configurar atallo de teclado" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:242 +#, fuzzy +msgid "Tools" +msgstr "Vistas de ferramen&tas" + +#: frescobaldi_app/preferences/documentation.py:64 +#, fuzzy +msgid "Paths to LilyPond Documentation" +msgstr "Documentación de LilyPond:" + +#: frescobaldi_app/preferences/documentation.py:66 +#, fuzzy +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "" +"Introduza tantas letras (S, A, T ou B) como pentagramas haxa.\n" +"Consulte \"Que é isto\" para máis información." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:111 +#, fuzzy +msgid "Preferred Language:" +msgstr "Idioma:" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "Predeterminado" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:135 +#, fuzzy +msgid "Please enter a local path or a URL:" +msgstr "Introduza o nome da sesión." + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:124 +#, fuzzy +msgid "Default Styles" +msgstr "Predeterminado" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +#, fuzzy +msgid "Text" +msgstr "Seguinte" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:363 +#, fuzzy +msgid "Italic" +msgstr "Italiano" + +#: frescobaldi_app/preferences/fontscolors.py:364 +#, fuzzy +msgid "Underline" +msgstr "Usar liñas de extensión" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +#, fuzzy +msgid "Selected Text" +msgstr "Seleccionar todo" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +#, fuzzy +msgid "Marked Line" +msgstr "Barras de compás" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +#, fuzzy +msgid "Error Line" +msgstr "Barras de compás" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +#, fuzzy +msgid "Matching Character" +msgstr "Caracteres especiais" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +#, fuzzy +msgid "Preview Background" +msgstr "Modo vista previa" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +#, fuzzy +msgid "Keyword" +msgstr "Teclado" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +#, fuzzy +msgid "Function" +msgstr "Acción:" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +#, fuzzy +msgid "Value" +msgstr "Volume" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +#, fuzzy +msgid "String" +msgstr "Instrumentos de corda" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +#, fuzzy +msgid "Escape" +msgstr "Apaisado" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +#, fuzzy +msgid "Comment" +msgstr "Orde" + +#: frescobaldi_app/preferences/fontscolors.py:483 +#, fuzzy +msgid "Pitch" +msgstr "&Altura" + +#: frescobaldi_app/preferences/fontscolors.py:484 +#, fuzzy +msgid "Octave" +msgstr "Gardar" + +#: frescobaldi_app/preferences/fontscolors.py:485 +#, fuzzy +msgid "Duration" +msgstr "Duracións con punto" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +#, fuzzy +msgid "String Number" +msgstr "Imprimir os números de páxina" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "Ligadura" + +#: frescobaldi_app/preferences/fontscolors.py:491 +#, fuzzy +msgid "Dynamic" +msgstr "Indicacións dinámicas" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Articulación" + +#: frescobaldi_app/preferences/fontscolors.py:493 +#, fuzzy +msgid "Chord" +msgstr "Coro" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "Barra" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +#, fuzzy +msgid "Repeat" +msgstr "Fin de repetición" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "Orde" + +#: frescobaldi_app/preferences/fontscolors.py:499 +#, fuzzy +msgid "Specifier" +msgstr "Especial" + +#: frescobaldi_app/preferences/fontscolors.py:500 +#, fuzzy +msgid "User Command" +msgstr "Orde" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +#, fuzzy +msgid "Markup" +msgstr "Arpa" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:503 +#, fuzzy +msgid "Lyric Text" +msgstr "Guionizar o texto da letra" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:506 +#, fuzzy +msgid "Layout Object" +msgstr "O obxecto de disposición %1" + +#: frescobaldi_app/preferences/fontscolors.py:507 +#, fuzzy +msgid "Property" +msgstr "Poeta" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +#, fuzzy +msgid "Escaped Character" +msgstr "Caracteres especiais" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:517 +#, fuzzy +msgid "Tag" +msgstr "Marcar" + +#: frescobaldi_app/preferences/fontscolors.py:518 +#, fuzzy +msgid "LilyPond Tag" +msgstr "Rexistro de LilyPond" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:521 +#, fuzzy +msgid "Entity Reference" +msgstr "Referencia da notación" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:527 +#, fuzzy +msgid "Number" +msgstr "Nome" + +#: frescobaldi_app/preferences/fontscolors.py:528 +#, fuzzy +msgid "LilyPond Environment" +msgstr "Documentación de LilyPond" + +#: frescobaldi_app/preferences/fontscolors.py:532 +#, fuzzy +msgid "Texinfo" +msgstr "Tenor" + +#: frescobaldi_app/preferences/fontscolors.py:534 +msgid "Block" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Idioma:" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Estilo:" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "Sesión para cargar se Frescobaldi iníciase sen argumentos" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "Iniciar sen ningunha sesión" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "Iniciar coa última sesión empregada" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "Iniciar coa sesión:" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "Gardando os documentos" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "Lembrar a posición do cursor, marcadores, etc." + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Directorio predeterminado:" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "O cartafol predeterminado para os documentos de LilyPond (opcional)." + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:71 +#, fuzzy +msgid "MIDI:" +msgstr "Reproducir MIDI" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:76 +#, fuzzy +msgid "File Manager:" +msgstr "Xestor de expansións" + +#: frescobaldi_app/preferences/helpers.py:77 +#, fuzzy +msgid "Shell:" +msgstr "Partitura:" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:81 +#, fuzzy +msgid "LilyPond versions to use" +msgstr "Versións de LilyPond para empregar:" + +#: frescobaldi_app/preferences/lilypond.py:82 +#, fuzzy +msgid "Automatically choose LilyPond version from document" +msgstr "" +"Activar a selección automática da versión (escolla a versión de LilyPond " +"desde o documento)" + +#: frescobaldi_app/preferences/lilypond.py:84 +#, fuzzy +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" +"Aquí pode establecer unha versión fixa de LilyPond para executar nos " +"documentos dentro desta sesión.\n" +"Seleccione Que é isto (Maiús+F1) para obter máis información." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:101 +#, fuzzy +msgid "See also {link}." +msgstr "Seleccionar todo" + +#: frescobaldi_app/preferences/lilypond.py:149 +#, fuzzy +msgid "Set as &Default" +msgstr "Fixar como predeterminado" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "predeterminado" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "Orde de LilyPond:" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "O nome ou a ruta completa do aplicativo LilyPond." + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "Convert-ly:" + +#: frescobaldi_app/preferences/lilypond.py:241 +#, fuzzy +msgid "LilyPond-book:" +msgstr "Lilypond-book:" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "Incluír na selección automática da versión" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "Executando LilyPond" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:286 +#, fuzzy +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "Permitir a LilyPond eliminar os ficheiros de saída intermedios" + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "Ruta de inclusión para LilyPond:" + +#: frescobaldi_app/preferences/midi.py:77 +#, fuzzy +msgid "MIDI Ports" +msgstr "Reprodutor MIDI" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" + +#: frescobaldi_app/preferences/midi.py:82 +#, fuzzy +msgid "Player output:" +msgstr "Número de páxinas:" + +#: frescobaldi_app/preferences/midi.py:84 +#, fuzzy +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" +"Introduza tantas letras (S, A, T ou B) como pentagramas haxa.\n" +"Consulte \"Que é isto\" para máis información." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:135 +#, fuzzy +msgid "Close unused MIDI output" +msgstr "Crear saída de MIDI" + +#: frescobaldi_app/preferences/midi.py:137 +#, fuzzy +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" +"Introduza tantas letras (S, A, T ou B) como pentagramas haxa.\n" +"Consulte \"Que é isto\" para máis información." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Atallo" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:125 +#, fuzzy +msgid "Other commands:" +msgstr "Orde de impresión:" + +#: frescobaldi_app/preferences/shortcuts.py:173 +#, fuzzy +msgid "&Edit Shortcut for \"{name}\"" +msgstr "Atallo" + +#: frescobaldi_app/preferences/shortcuts.py:178 +#, fuzzy +msgid "(no shortcut)" +msgstr "Atallo" + +#: frescobaldi_app/preferences/shortcuts.py:206 +#, fuzzy +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "Eliminar as plicas das notas de percusión." +msgstr[1] "Eliminar as plicas das notas de percusión." + +#: frescobaldi_app/preferences/shortcuts.py:304 +#, fuzzy +msgid "(default)" +msgstr "predeterminado" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:142 +#, fuzzy +msgid "Magnifier Size:" +msgstr "Tamaño do papel:" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "" + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:220 +#, fuzzy +msgid "Group documents by directory" +msgstr "Abrir o cartafol actual" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Inserción rápida" + +#: frescobaldi_app/quickinsert/__init__.py:48 +#, fuzzy +msgid "Quick &Insert" +msgstr "Inserción rápida" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Permitir abreviaturas" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "Empregar notación curta para certas articulacións como picado." + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Articulacións" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Diferentes tipos de articulacións e outros símbolos." + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Acento" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Marcato" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Staccatissimo" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Picado" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Portato" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Tenuto" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Ornamentos" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Trino" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Semitrino" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Mordente" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Grupeto" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "Semitrino longo" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "Semitrino con resolución" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "Semitrino ascendente" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "Semitrino descendente" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "Mordente ascendente" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "Mordente descendente" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "Semitrino con final ascendente" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "Semitrino con final descendente" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "Semitrino liñal" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Grupeto invertido" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "Símbolos" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Caldeirón" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Caldeirón curto" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Caldeirón longo" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Caldeirón moi longo" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Segno" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Varcoda" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "Signumcongruentiae" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Outro" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Arco arriba" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Arco abaixo" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "Pizzicato estalado" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "Aberto (ex. metais)" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "Tapado (ex. metais)" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Flageolet (harmónico)" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Polgar" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Talón esquerdo" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Talón dereito" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "Punta esquerda" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Punta dereita" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "Semi-abierto (p.ex. hi-hat)" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "Barras de compás" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "Barras de compás, signos de respiración, etc." + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Dobre barra" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "Dobre barra final" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "Barra con puntos de repetición" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "Barra descontinua" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Barra invisible" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "Inicio de repetición" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "Repetición dobre" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "Fin de repetición" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "Repetición dobre (vella)" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "Repetición dobre (clásica)" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "Liña divisoria curta" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "Liñas divisoria simple" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "Barra fina-grosa-fina" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "Barra grosa-fina" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "Barra grosa dobre" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "Barra de compás en forma de Segno" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "Signos de respiración" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "Signo de respiración predeterminado" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "Signo de respiración recto" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "Cesura curva" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "Cesura recta" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#, fuzzy +msgid "Configure Keyboard Shortcut ({key})" +msgstr "Configurar atallo de teclado (%1)" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Ningún" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "Indicacións dinámicas" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "Símbolos de dinámica." + +#: frescobaldi_app/quickinsert/dynamics.py:128 +#, fuzzy +msgid "Dynamic sign {name}" +msgstr "Indicación de matiz dinámico %1" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "Extensores" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "Regulador crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "Regulador diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "Decrescendo" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "Ligaduras, extensións de texto, etc." + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "Arpexos" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "Arpexo" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "Arpexo con frecha arriba" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "Arpexo con frecha abaixo" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "Arpexo de corchete" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "Arpexo de paréntese" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "Glissandos" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "Glissando descontinuo" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "Glissando de puntos" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "Glissando en zig-zag" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "Glissando de trino" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "Ligadura de fraseo" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Dirección:" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Arriba" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Neutro" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Abaixo" + +#: frescobaldi_app/quickinsert/widget.py:127 +#, fuzzy +msgid "The Quick Insert Panel" +msgstr "Inserción rápida" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:146 +#, fuzzy +msgid "&Double durations" +msgstr "Duplicar duracións" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Duplicar todas as duracións na selección." + +#: frescobaldi_app/rhythm/__init__.py:149 +#, fuzzy +msgid "&Halve durations" +msgstr "Reducir á metade" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Reducir á metade todas as duracións na selección." + +#: frescobaldi_app/rhythm/__init__.py:152 +#, fuzzy +msgid "Do&t durations" +msgstr "Duracións con punto" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Engadir punto a todas as duracións na selección." + +#: frescobaldi_app/rhythm/__init__.py:155 +#, fuzzy +msgid "&Undot durations" +msgstr "Quitar puntos" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Eliminar o punto de todas as duracións da selección." + +#: frescobaldi_app/rhythm/__init__.py:158 +#, fuzzy +msgid "Remove &scaling" +msgstr "Eliminar escalado" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "" +"Eliminar todos os factores de escala (*n/m) das duracións da selección." + +#: frescobaldi_app/rhythm/__init__.py:161 +#, fuzzy +msgid "&Remove durations" +msgstr "Eliminar duracións" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "Eliminar todas as duracións da selección." + +#: frescobaldi_app/rhythm/__init__.py:164 +#, fuzzy +msgid "Make &implicit" +msgstr "Facer implícitas" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "" +"Facer que as duracións sexan implícitas (eliminar as duracións repetidas)." + +#: frescobaldi_app/rhythm/__init__.py:167 +#, fuzzy +msgid "Make implicit (per &line)" +msgstr "Facer implícitas (liña a liña)" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" +"Facer que as duracións sexan implícitas (eliminar as duracións repetidas), " +"agás a primeira duración de cada liña." + +#: frescobaldi_app/rhythm/__init__.py:171 +#, fuzzy +msgid "Make &explicit" +msgstr "Facer explícitas" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" +"Facer explícitas as duracións (escribir a duración despois de cada nota, " +"incluso cando é a mesma que a da nota anterior)." + +#: frescobaldi_app/rhythm/__init__.py:175 +#, fuzzy +msgid "&Apply rhythm..." +msgstr "Aplicar ritmo..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Aplicar unhas duracións dadas á música seleccionada." + +#: frescobaldi_app/rhythm/__init__.py:178 +#, fuzzy +msgid "&Copy rhythm" +msgstr "Copiar duracións" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Copiar as duracións da música seleccionada." + +#: frescobaldi_app/rhythm/__init__.py:181 +#, fuzzy +msgid "&Paste rhythm" +msgstr "Pegar duracións" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Pegar duracións á música seleccionada." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Aplicar ritmo" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Introduza unhas duracións:" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:279 +#, fuzzy +msgctxt "submenu title" +msgid "Rhythm" +msgstr "Du&racións" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Configurar unha nova partitura..." + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "A música continúa aquí." + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Eliminar o pé de páxina predeterminado de LilyPond" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Asistente de configuración de partitura" + +#: frescobaldi_app/scorewiz/dialog.py:80 +#, fuzzy +msgid "Clear" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:83 +#, fuzzy +msgid "Preview" +msgstr "Vista previa do PDF" + +#: frescobaldi_app/scorewiz/dialog.py:130 +#, fuzzy +msgid "Score Preview" +msgstr "Vista previa do PDF" + +#: frescobaldi_app/scorewiz/dialog.py:164 +#, fuzzy +msgid "&Titles and Headers" +msgstr "Títulos e encabezamentos" + +#: frescobaldi_app/scorewiz/dialog.py:173 +#, fuzzy +msgid "&Parts" +msgstr "Partes" + +#: frescobaldi_app/scorewiz/dialog.py:182 +#, fuzzy +msgid "&Score settings" +msgstr "Configuración da partitura" + +#: frescobaldi_app/scorewiz/dialog.py:191 +#, fuzzy +msgid "The Score Wizard" +msgstr "Asistente de configuración de partitura" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Prema para introducir un valor." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "final da primeira páxina" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "final de última páxina" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "Dedicatoria" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Título" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Subtítulo" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "Sub-subtítulo" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Instrumento" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Compositor" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Autor/a dos arranxos" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Poeta" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Compás" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Peza" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Copyright" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Pé de páxina" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Partes dispoñibles:" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Partitura:" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +#, fuzzy +msgid "&Remove" +msgstr "Eliminar as plicas" + +#: frescobaldi_app/scorewiz/score.py:104 +#, fuzzy +msgid "Move up" +msgstr "Mover a" + +#: frescobaldi_app/scorewiz/score.py:105 +#, fuzzy +msgid "Move down" +msgstr "Mover a" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Armadura:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Compás:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Compás de anacruse:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Marca de metrónomo:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Indicación de tempo:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Maior" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Menor" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "Xónico" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Dórico" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Frixio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Lidio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Mixolidio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Eolio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Locrio" + +#: frescobaldi_app/scorewiz/settings.py:73 +#, fuzzy +msgid "Score properties" +msgstr "Configuración da partitura" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Preferencias xerais" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Empregar comiñas tipográficas" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "Substituír as comiñas normais polas vistosas comiñas tipográficas." + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Eliminar o pé de páxina predeterminado" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Eliminar o pé de páxina predeterminado que LilyPond produce." + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Eliminar números de compás" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "" +"Eliminar a numeración de compases que se amosa á esquerda dos sistemas." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "Crear saída de MIDI" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "Crear un ficheiro MIDI ademais do ficheiro PDF." + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Amosar marca de metrónomo" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"Se está seleccionado, imprimir unha marca de metrónomo ao comezo da " +"partitura. A saída MIDI tamén usa este axuste metronómico." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Tamaño do papel:" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Apaisado" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Completo" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Breve" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Nomes de instrumentos" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "Primeiro sistema:" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Outros sistemas:" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "" +"Empregar un nome curto ou longo para o instrumento antes do primeiro sistema." + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "" +"Empregar os nomes de instrumento curto, longo ou ningún á esquerda dos " +"seguintes sistemas:" + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "Idioma que desexa empregar para os nomes de instrumento." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Idioma dos nomes de nota:" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "Idioma de Lilypond no que quere escribir os nomes das notas." + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Versión:" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "A versión de LilyPond que se vai empregar para este documento." + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "Non hai axustes dispoñibles." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Configurar o número de voces distintas desexado en cada pentagrama." + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "" +"Isto é moi útil sobre todo ao escribir música polifónica como unha fuga." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Man dereita:" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Man esquerda:" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Estilo de acordes:" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Diagramas de posición de acorde" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Amosar os diagramas de posicións de guitarra predeterminados debaixo dos " +"nomes de acorde (LilyPond 2.12 ou superior)." + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "Os acordes continúa aquí." + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "Alemán" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "Semi-alemán" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "Italiano" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "Francés" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Trompa en Fa" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "Tpa." + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Trompeta en Do" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +#, fuzzy +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Tpta.Do" + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Trompeta en Sib" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +#, fuzzy +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Tpta.Sib" + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Trombón" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Tbn." + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Tuba baixa" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "Tba.B." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Vento metal" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +#, fuzzy +msgid "Staff Group" +msgstr "Tipo de pentagrama:" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "Chave curva" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "Corchete" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +#, fuzzy +msgid "Square" +msgstr "Corchete" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "Tipo:" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +#, fuzzy +msgid "Connect Barlines" +msgstr "Conectar as liñas divisorias" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +#, fuzzy +msgid "Score" +msgstr "Partitura:" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +#, fuzzy +msgid "Piece:" +msgstr "Peza" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +#, fuzzy +msgid "Opus:" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +#, fuzzy +msgid "Containers" +msgstr "Conectar as liñas divisorias" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Piano" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "Pno." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Clave" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Clav." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Clavicordio" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Clvc." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Órgano" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Org." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Pedal:" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Estableza a 0 para desactivar o pedal." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Cel." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Teclados" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Timbais" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Tmb." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Xilófono" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Xil." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Marimba" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "Pentagrama superior:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "Pentagrama inferior" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Vibráfono" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Vib." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Campás tubulares" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Tub." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Carillón" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Car." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +#, fuzzy +msgid "Carillon" +msgstr "Clarinete" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +#, fuzzy +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +#, fuzzy +msgid "Manual staff:" +msgstr "Normal" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +#, fuzzy +msgid "Pedal staff:" +msgstr "Normal" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Percusión" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Perc." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Voces:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Eliminar as plicas" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Eliminar as plicas das notas de percusión." + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "A percusión continúa aquí." + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "gardar algunha distancia." + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Percusión (5 liñas, predeterminado)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Estilo timbais (2 liñas)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Estilo congas (2 liñas)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Estilo bongos (2 liñas)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Estilo-percusión (1 liña)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Percusión" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Tipo de pentagrama:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Afinación:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Normal" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Tabulatura" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Ambos" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Mandolina" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mna." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Afinación da mandolina" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Banxo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Bxo." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "Afinación de Sol ao aire (la-Re-Sol-Si-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "Afinación de Do (sol-Do-Sol-Si-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "Afinación modal (sol-Re-Sol-Do-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "Afinación de re maior ao aire (la-Re-Fa#-La-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "Afinación de re menor ao aire (la-Re-Fa-La-Re)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Catro cordas (en vez de cinco)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Guitarra clásica" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +#, fuzzy +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "Gt." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Afinación da guitarra" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "Afinación de sol ao aire" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Guitarra de jazz" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "G.jz." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Baixo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "Bx." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "Afinación do baixo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Baixo eléctrico" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "E. Bx." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Arpa" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Ar." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Corda pulsada" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Nomes de acorde" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Baixo cifrado" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "Usar liñas de extensión" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "As cifras van aquí." + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "Pentagrama" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Especial" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Violín" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Vl." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Viola" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "Vla." + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Violoncello" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Vclo." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "Contrabaixo" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Cb." + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +msgid "Basso Continuo" +msgstr "Baixo continuo" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "B.c." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Instrumentos de corda" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Estrofas:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Número de estrofas." + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Ámbito" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "Amosar a tesitura da voz ao principio do pentagrama." + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "A letra segue aquí." + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Soprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +msgid "Mezzo-soprano" +msgstr "Mezzosoprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "Mezz." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Alto" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Tenor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Folla guía de acordes" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"A folla guía fornece un pentagrama con nomes de acorde enriba e letra " +"debaixo. É opcional un segundo pentagrama." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Engadir pentagrama de acompañamento" + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" +"Engade un pentagrama de acompañamento e pon unha voz de acompañamento no " +"pentagrama superior." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Coro" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Seleccione as voces para o coro. Empregue as letras S, A, T ou B. Un guión " +"indica un pentagrama novo." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "Suxestión: para dobre coro pode empregar dúas partes de coro." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Canto:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "Letra:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "Redución de piano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "Engade unha redución de piano xerada automaticamente." + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "Ficheiros MIDI para ensaio" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" +"Crea un ficheiro MIDI de ensaio para todas as voces, tamén se non se xera " +"ningunha saída MIDI para a partitura principal." + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "Co." + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "Ficheiros MIDI de ensaio:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Mesma letra en todas as voces" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "Colócase un bloque de letra único entre todos os pentagramas." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Mesma letra todas as voces" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "Cada voz ten a súa letra, emprégase o mesmo texto ca as outras voces." + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Cada voz ten diferente letra" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Cada unha das voces recibe un bloque de letras distinto." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "Distribuír as estrofas" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "Distribúese un conxunto de estrofas a través dos pentagramas." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "Vocal" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Frauta" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fr." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Frautín" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Frtn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Frauta baixa" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Fr.B." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Óboe" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Ób" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +msgid "Oboe d'amore" +msgstr "Óboe d'amore" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Ób.d'am." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +msgid "English horn" +msgstr "Corno inglés" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "Cor.Ing." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Fagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Fg." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Contrafagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "Cfg." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Clarinete" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Saxofón sopranino" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "SxSn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Saxofón soprano" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "SxSo." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Saxofón alto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "SxA." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Saxofón tenor" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "SxT." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Saxofón barítono" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "SxB." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +#, fuzzy +msgid "Bass Sax" +msgstr "" +"#-#-#-#-# gl.po (frescobaldi 0.7.17) #-#-#-#-#\n" +"Saxofón baixo\n" +"#-#-#-#-# gl.po (frescobaldi 0.7.17) #-#-#-#-#\n" +"Saxofón bajo" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "SxBx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Frauta doce soprano" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "Fr.d.s." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Frauta doce alto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "Fr.d.A." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Frauta doce tenor" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "Fr.d.T." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Frauta doce baixo" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "Fr.d.B." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Vento madeira" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "Xestionar sesións" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "Nome:" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "Gardar sempre a lista de documentos nesta sesión" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "Directorio base:" + +#: frescobaldi_app/sessions/dialog.py:133 +#, fuzzy +msgid "Edit session: {name}" +msgstr "Editar sesión: %1" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "Editar nova sesión" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "Introduza o nome da sesión." + +#: frescobaldi_app/sessions/dialog.py:174 +#, fuzzy +msgid "Please do not use the name '{name}'." +msgstr "Non usar o nome '%1'." + +#: frescobaldi_app/sessions/dialog.py:180 +#, fuzzy +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" +"Xa existe outra sesión co nome %1.\n" +"\n" +"Quere sobrescribila?" + +#: frescobaldi_app/sessions/dialog.py:183 +#, fuzzy +msgid "Overwrite" +msgstr "&Sobreescribir" + +#: frescobaldi_app/sessions/manager.py:127 +#, fuzzy +msgctxt "New Session" +msgid "&New..." +msgstr "Novo..." + +#: frescobaldi_app/sessions/manager.py:129 +#, fuzzy +msgid "&Manage..." +msgstr "Xestionar sesións..." + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "Sen sesión" + +#: frescobaldi_app/sessions/menu.py:55 +#, fuzzy +msgctxt "menu title" +msgid "&Session" +msgstr "&Sesións" + +#: frescobaldi_app/snippet/builtin.py:38 +#, fuzzy +msgid "Blank Line" +msgstr "Barras de compás" + +#: frescobaldi_app/snippet/builtin.py:44 +#, fuzzy +msgid "Single Typographical Quotes" +msgstr "Empregar comiñas tipográficas" + +#: frescobaldi_app/snippet/builtin.py:49 +#, fuzzy +msgid "Double Typographical Quotes" +msgstr "Empregar comiñas tipográficas" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:125 +#, fuzzy +msgid "Modern 2/2 Time Signature" +msgstr "Compás:" + +#: frescobaldi_app/snippet/builtin.py:131 +#, fuzzy +msgid "Modern 4/4 Time Signature" +msgstr "Compás:" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:148 +#, fuzzy +msgid "LilyPond Version" +msgstr "Versión predeterminada de LilyPond." + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:166 +msgid "Upper case selection" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:172 +#, fuzzy +msgid "Lower case selection" +msgstr "Modo de selección de liñas" + +#: frescobaldi_app/snippet/builtin.py:178 +#, fuzzy +msgid "Title case selection" +msgstr "Modo de selección de liñas" + +#: frescobaldi_app/snippet/builtin.py:189 +#, fuzzy +msgid "Markup lines" +msgstr "Barras de compás" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:202 +#, fuzzy +msgid "Tagline with date and LilyPond version" +msgstr "Non se pode determinar a versión de LilyPond." + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:227 +#, fuzzy +msgid "No Tagline" +msgstr "Pé de páxina" + +#: frescobaldi_app/snippet/builtin.py:235 +#, fuzzy +msgid "No Barnumbers" +msgstr "Eliminar números de compás" + +#: frescobaldi_app/snippet/builtin.py:245 +#, fuzzy +msgid "Midi Tempo" +msgstr "Tempo:" + +#: frescobaldi_app/snippet/builtin.py:255 +#, fuzzy +msgid "Staff Size" +msgstr "Tamaño do pentagrama" + +#: frescobaldi_app/snippet/builtin.py:310 +#, fuzzy +msgid "A5 Paper" +msgstr "Papel" + +#: frescobaldi_app/snippet/builtin.py:318 +#, fuzzy +msgid "Document Fonts..." +msgstr "&Documento" + +#: frescobaldi_app/snippet/builtin.py:346 +#, fuzzy +msgid "Last note or chord" +msgstr "Repetir a última nota ou acorde" + +#: frescobaldi_app/snippet/builtin.py:427 +#, fuzzy +msgid "Color" +msgstr "Compositor" + +#: frescobaldi_app/snippet/builtin.py:464 +#, fuzzy +msgid "Basic Leadsheet" +msgstr "Folla guía de acordes" + +#: frescobaldi_app/snippet/builtin.py:508 +#, fuzzy +msgid "Choir Hymn" +msgstr "Coro" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:119 +#, fuzzy +msgid "Title:" +msgstr "Título" + +#: frescobaldi_app/snippet/edit.py:120 +#, fuzzy +msgid "Shortcut:" +msgstr "Atallo" + +#: frescobaldi_app/snippet/edit.py:131 +#, fuzzy +msgid "Click to change the keyboard shortcut." +msgstr "Configurar atallo de teclado" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:218 +#, fuzzy +msgctxt "menu title" +msgid "File" +msgstr "Título" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:80 +#, fuzzy +msgid "The version of the default LilyPond program." +msgstr "O nome ou a ruta completa do aplicativo LilyPond." + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:96 +#, fuzzy +msgid "The name of the current document." +msgstr "&Sincronizar o terminal co documento actual" + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +#, fuzzy +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Quitar silencios" + +#: frescobaldi_app/snippet/import_export.py:119 +#, fuzzy +msgid "New Snippets" +msgstr "Quitar silencios" + +#: frescobaldi_app/snippet/import_export.py:120 +#, fuzzy +msgid "Updated Snippets" +msgstr "Quitar silencios" + +#: frescobaldi_app/snippet/import_export.py:121 +#, fuzzy +msgid "Unchanged Snippets" +msgstr "Quitar silencios" + +#: frescobaldi_app/snippet/import_export.py:183 +#, fuzzy +msgid "Import Keyboard Shortcuts" +msgstr "Configurar atallo de teclado" + +#: frescobaldi_app/snippet/import_export.py:188 +#, fuzzy +msgid "Choose which snippets you want to import:" +msgstr "Seleccione os ficheiros que quere imprimir:" + +#: frescobaldi_app/snippet/import_export.py:190 +#, fuzzy +msgid "There are no new or updated snippets in the file." +msgstr "Non hai ningún ficheiro para enviar por correo-e." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Inserir" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "Nome" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Descrición" + +#: frescobaldi_app/snippet/template.py:33 +#, fuzzy +msgid "Save as Template" +msgstr "Pentagramas por páxina:" + +#: frescobaldi_app/snippet/template.py:34 +#, fuzzy +msgid "Please enter a template name:" +msgstr "Introduza o nome da sesión." + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +#, fuzzy +msgid "Snippets" +msgstr "Quitar silencios" + +#: frescobaldi_app/snippet/tool.py:54 +#, fuzzy +msgid "&Snippets" +msgstr "Quitar silencios" + +#: frescobaldi_app/snippet/tool.py:79 +#, fuzzy +msgid "Save as Template..." +msgstr "Gardar PDF como..." + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +#, fuzzy +msgid "&Edit..." +msgstr "Imprimir..." + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:179 +#, fuzzy +msgid "Remove the selected snippets." +msgstr "Repetir a música seleccionada" + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:181 +#, fuzzy +msgid "Apply the current snippet." +msgstr "Situar o cursor sobre este punto." + +#: frescobaldi_app/snippet/widget.py:182 +#, fuzzy +msgid "&Import..." +msgstr "Imprimir..." + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:184 +#, fuzzy +msgid "E&xport..." +msgstr "Imprimir..." + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:188 +#, fuzzy +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" +"Introduza tantas letras (S, A, T ou B) como pentagramas haxa.\n" +"Consulte \"Que é isto\" para máis información." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +#, fuzzy +msgid "XML Files" +msgstr "Todos os ficheiros" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "" +msgstr[1] "" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:400 +#, fuzzy +msgctxt "menu title" +msgid "Insert" +msgstr "&Inserir" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +#, fuzzy +msgid "Input" +msgstr "Entrada de MIDI:" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +#, fuzzy +msgid "Scheme:" +msgstr "Partitura:" + +#: frescobaldi_app/widgets/schemeselector.py:63 +#, fuzzy +msgctxt "New Scheme" +msgid "&New..." +msgstr "Novo..." + +#: frescobaldi_app/widgets/schemeselector.py:93 +#, fuzzy +msgid "Please enter a name for the new scheme:" +msgstr "Introduza o nome da variábel para asignarlle o texto seleccionado:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +#, fuzzy +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Atallo" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +#, fuzzy +msgid "&No shortcut" +msgstr "Atallo" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +#, fuzzy +msgid "Use a &custom shortcut:" +msgstr "Usar número de versión personalizado:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +#, fuzzy +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "Ningún" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Prema neste botón varias veces para establecer o tempo." + +#: frescobaldi_app/widgets/urlrequester.py:75 +#, fuzzy +msgid "Open file dialog" +msgstr "Abrir ficheiro" + +#: frescobaldi_app/widgets/urlrequester.py:119 +#, fuzzy +msgid "Select a directory" +msgstr "Directorio predeterminado:" + +#: frescobaldi_app/widgets/urlrequester.py:121 +#, fuzzy +msgid "Select a file" +msgstr "Seleccionar todo" + +#, fuzzy +#~ msgid "Edit..." +#~ msgstr "Imprimir..." + +#, fuzzy +#~ msgid "Remove" +#~ msgstr "Eliminar as plicas" + +#~ msgid "Copyright (c) 2008-2010, Wilbert Berendsen" +#~ msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your name" +#~ msgstr "Manuel A. Vázquez" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "i18n@frescobaldi.org" +#~ msgstr "xixirei@yahoo.es" + +#~ msgid "Session to start" +#~ msgstr "Sesión para iniciar" + +#~ msgid "Start a new instance" +#~ msgstr "Iniciar unha nova instancia" + +#~ msgid "Try to use smart line and column numbers" +#~ msgstr "Tartar de empregar números intelixentes de liña e columna" + +#~ msgid "LilyPond files to open, may also be textedit URLs" +#~ msgstr "Ficheiro de Lilypond para abrir, tamén poden ser URLs de texedit" + +#~ msgid "Left Sidebar" +#~ msgstr "Barra lateral esquerda" + +#~ msgid "Right Sidebar" +#~ msgstr "Barra lateral dereita" + +#~ msgid "Top Sidebar" +#~ msgstr "Barra superior" + +#~ msgid "Bottom Sidebar" +#~ msgstr "Barra inferior" + +#~ msgid "Show Path" +#~ msgstr "Amosar a ruta" + +#~ msgid "Show Document Tabs" +#~ msgstr "Amosar separadores do documento" + +#~ msgid "" +#~ "Could not find the XMLGUI container \"%1\".\n" +#~ "\n" +#~ "Probably the local ui.rc file contains errors. It is recommended to " +#~ "delete this file because elements in the user interface will be missing. " +#~ "This is the full path of the file:\n" +#~ "\n" +#~ "%2\n" +#~ msgstr "" +#~ "Non se atopou o contedor XMLGUI \"%1\".\n" +#~ "\n" +#~ "É probábel que o ficheiro local ui.rc conteña erros. Recoméndase eliminar " +#~ "este ficheiro porque faltarán algúns elementos da interface de usuario. " +#~ "Esta é a ruta completa do ficheiro:\n" +#~ "\n" +#~ "%2\n" + +#~ msgid "Please select some text first." +#~ msgstr "Seleccione primeiro algo de texto." + +#~ msgid "Line: %1 Col: %2" +#~ msgstr "Liña: %1 Columna: %2" + +#~ msgid "BLOCK" +#~ msgstr "BLOQUE" + +#~ msgid "Block selection mode" +#~ msgstr "Modo de selección de bloques" + +#~ msgid "LINE" +#~ msgstr "LIÑA" + +#~ msgid "Right-click for tab options" +#~ msgstr "Clic dereito para opcións dos separadores" + +#~ msgid "Please install %1" +#~ msgstr "Instale %1" + +#~ msgid "Press the button to configure the keyboard shortcut for:" +#~ msgstr "Prema no botón para configurar o atallo de teclado para:" + +#~ msgid "Session" +#~ msgstr "Sesión" + +#~ msgid "Properties of this session" +#~ msgstr "Propiedades desta sesión" + +#~ msgid "Please do not use the ampersand (&) character in a session name." +#~ msgstr "Non empregue o carácter ampersand (&) no nome dunha sesión." + +#~ msgid "Open %1 in external viewer" +#~ msgstr "Abrir %1 nun visor externo" + +#~ msgid "(No up-to-date MIDI or PDF files available.)" +#~ msgstr "(Non está disponíbel ningún ficheiro MIDI nin PDF.)" + +#~ msgid "" +#~ "There are no up-to-date MIDI or PDF files available. Please run LilyPond " +#~ "to create one or more output files." +#~ msgstr "" +#~ "Non está disponíbel ningún ficheiro MIDI nin PDF. Execute LilyPond para " +#~ "crear un ou máis ficheiros de saída." + +#~ msgid "No files to send" +#~ msgstr "Non hai ningún ficheiro que enviar" + +#~ msgid "" +#~ "There are no PDF documents to print.\n" +#~ "\n" +#~ "You probably need to run LilyPond to create or update a PDF document. If " +#~ "you are creating MIDI files, be sure you also put a \\layout { } section " +#~ "in your score, otherwise LilyPond will not create a PDF." +#~ msgstr "" +#~ "Non hai ningún documento PDF para imprimir.\n" +#~ "\n" +#~ "Probabelmente necesite executar Lilyond para crear ou actualizar un " +#~ "documento PDF. Se está creando ficheiros MIDI, asegúrese de introducir " +#~ "tamén unha sección \\layout { } na partitura, posto que en caso " +#~ "contrario, LilyPond non creará un PDF." + +#~ msgid "No files to print" +#~ msgstr "Non hai ningún ficheiro para imprimir" + +#~ msgid "Email documents" +#~ msgstr "Documentos por correo electrónico" + +#~ msgid "Please select the files you want to send:" +#~ msgstr "Seleccione os ficheiros que quere enviar:" + +#~ msgid "" +#~ "These are the files that are up-to-date (i.e. newer than the LilyPond " +#~ "source document). Also LilyPond files included by the source document are " +#~ "shown." +#~ msgstr "" +#~ "Estes son os ficheiros que están actualizados (é dicir, que son máis " +#~ "recentes que o documento fonte de LilyPond). Tamén se amosan os ficheiros " +#~ "de LilyPond incluídos polo documento fonte." + +#~ msgid "" +#~ "Note: this PDF file has been created with embedded point-and-click URLs " +#~ "(preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the file in publish mode, because then the PDF file " +#~ "is much smaller." +#~ msgid_plural "" +#~ "Note: these PDF files have been created with embedded point-and-click " +#~ "URLs (preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the files in publish mode, because then the PDF files " +#~ "are much smaller." +#~ msgstr[0] "" +#~ "Nota: este ficheiro PDF foi creado con enderezos URL inscrustados de " +#~ "apuntar e premer (modo vista previa), que aumenta moito o tamaño do " +#~ "ficheiro. Considere a posibilidade de volver construír o ficheiro no modo " +#~ "publicación, porque o ficheiro PDF é moito máis pequeno." +#~ msgstr[1] "" +#~ "Nota: estes ficheiros PDF foron creados con enderezos URL inscrustados de " +#~ "apuntar e premer (modo vista previa), que aumenta moito o tamaño do " +#~ "ficheiro. Considere a posibilidade de volver construír os ficheiros no " +#~ "modo publicación, porque os ficheiros PDF son moito máis pequenos." + +#~ msgid "" +#~ "Note: If there are no PDF and no MIDI files, you probably need to run " +#~ "LilyPond to update those files, before sending the e-mail." +#~ msgstr "" +#~ "Nota: se non hai ningún ficheiro PDF nin MIDI, necesitará executar " +#~ "LilyPond para actualizar eses ficheiros, antes de enviar a mensaxe de " +#~ "correo-e." + +#~ msgid "" +#~ "These are the PDF documents that are up-to-date (i.e. newer than the " +#~ "LilyPond source document). Check the documents you want to send to the " +#~ "printer." +#~ msgstr "" +#~ "Estes son os documentos PDF que están actualizados (é dicir, que son máis " +#~ "recentes que o documento fonte de LilyPond). Comprobe que os documentos " +#~ "que quere enviar á impresora." + +#~ msgid "Print %1" +#~ msgstr "Imprimir %1" + +#~ msgid "" +#~ "A print command (like 'lpr' or 'lp') could not be found on your system." +#~ msgstr "" +#~ "Non se atopou ningunha orde de impresión (como 'lpr' ou 'lp') no sistema." + +#~ msgid "The command '%1' could not be found on your system." +#~ msgstr "Non se atopou a orde '%1' no sistema." + +#~ msgid "" +#~ "The command below has been run, but exited with a return code %1.\n" +#~ "\n" +#~ "%2" +#~ msgstr "" +#~ "Executouse a seguinte orde, pero fallou e devolveu un código de retorno %" +#~ "1.\n" +#~ "\n" +#~ "%2" + +#~ msgid "Create blank staff paper" +#~ msgstr "Crear papel de música en branco" + +#~ msgid "Choose what kind of empty staves you want to create." +#~ msgstr "Seleccione o número de pautas baleiras que quere crear." + +#~ msgid "Choose which action happens when clicking \"Ok\"." +#~ msgstr "Seleccione a acción que vai suceder ao premer en \"Aceptar\"." + +#~ msgid "Preview the empty staff paper." +#~ msgstr "Vista previa do papel de música baleiro." + +#~ msgid "Click to see more settings." +#~ msgstr "Prema para ver máis opcións." + +#~ msgid "Print Bar Lines" +#~ msgstr "Imprimir liñas divisorias" + +#~ msgid "Bars per line:" +#~ msgstr "Compases por liña:" + +#~ msgid "Blank staff paper preview" +#~ msgstr "Vista previa do papel pautado" + +#~ msgid "No PDF was created." +#~ msgstr "Non se creou ningún PDF." + +#~ msgid "Open in PDF viewer" +#~ msgstr "Abrir no visor de PDF" + +#~ msgid "Print staff paper" +#~ msgstr "Imprimir papel pautado" + +#~ msgid "Copy LilyPond code to editor" +#~ msgstr "Copiar o código de LilyPond ao editor" + +#~ msgid "Clef:" +#~ msgstr "Clave:" + +#~ msgid "Single Staff" +#~ msgstr "Pentagrama sinxelo" + +#~ msgid "Systems per page:" +#~ msgstr "Sistemas por páxina:" + +#~ msgid "Clefs" +#~ msgstr "Claves" + +#~ msgid "Piano Staff" +#~ msgstr "Sistema para piano" + +#~ msgid "Organ Staff" +#~ msgstr "Sistema para órgano" + +#~ msgid "Staves per system:" +#~ msgstr "Pentagramas por sistema:" + +#~ msgid "Clefs:" +#~ msgstr "Claves:" + +#~ msgid "" +#~ "To configure clefs, first set the number of staves per system. Then enter " +#~ "as many letters (S, A, T or B) as there are staves.\n" +#~ "\n" +#~ "S or A: treble clef,\n" +#~ "T: treble clef with an \"8\" below,\n" +#~ "B: bass clef\n" +#~ "\n" +#~ "So when you want to create music paper for a four-part mixed choir score, " +#~ "first set the number of staves per system to 4. Then enter \"SATB" +#~ "\" (without the quotes) here." +#~ msgstr "" +#~ "Para configurar as claves, en primeiro lugar estableza o número de " +#~ "pentagramas por sistema. Despois, escriba tantas letras (S, A, T ou B) " +#~ "como pentagramas.\n" +#~ "\n" +#~ "S ou A: clave de sol,\n" +#~ "T: clave de sol en oitava baixa,\n" +#~ "B: clave de fa\n" +#~ "\n" +#~ "Deste xeito, cando queira crear papel pautado para un coro mixto a catro " +#~ "voces, estableza primeiro o número de pentagramas por sistema a 4 e logo " +#~ "escriba \"SATB\" (sen as comiñas)." + +#~ msgid "Choir Staff" +#~ msgstr "Sistema para coro" + +#~ msgid "Custom Staff" +#~ msgstr "Pentagrama personalizado" + +#~ msgid "Space below:" +#~ msgstr "Espazo por debaixo:" + +#~ msgid "Please select a music expression, enclosed in << ... >> or { ... }." +#~ msgstr "" +#~ "Seleccione unha expresión musical, pechada entre << ... >> ou { ... }." + +#~ msgid "Please enter a start pitch and a destination pitch:" +#~ msgstr "Introduza unha nota de orixe e unha nota de destino:" + +#~ msgid "Transpose from:" +#~ msgstr "Transportar desde:" + +#~ msgid "to:" +#~ msgstr "a:" + +#~ msgid "Install" +#~ msgstr "Instalar" + +#~ msgid "Download LilyPond" +#~ msgstr "Descargar LilyPond" + +#~ msgid "" +#~ "With this tool you can download packaged binary releases of LilyPond for " +#~ "your operating system." +#~ msgstr "" +#~ "Con esta ferramenta pode descargar as versións binarias empaquetadas de " +#~ "LilyPond para o seu sistema operativo." + +#~ msgid "Select the LilyPond version you want to download." +#~ msgstr "Seleccione a versión de LilyPond que quere descargar." + +#~ msgid "" +#~ "Select a writable directory you want to install LilyPond to.\n" +#~ "(A version-numbered directory will be created in this directory.)" +#~ msgstr "" +#~ "Seleccione una cartafol escribíbel onde queira instalar LilyPond.\n" +#~ "(Crearase un cartafol coa numeración da versión dentro do mesmo.)" + +#~ msgid "Install into:" +#~ msgstr "Instalar en:" + +#~ msgid "Details" +#~ msgstr "Detalles" + +#~ msgid "The website where LilyPond binaries can be downloaded." +#~ msgstr "A páxina web de onde se poden descargar os binarios de LilyPond." + +#~ msgid "Download from:" +#~ msgstr "Descargar de:" + +#~ msgid "Machine type:" +#~ msgstr "Tipo de máquina:" + +#~ msgid "" +#~ "This is the URL to the package that will be downloaded and installed.\n" +#~ "You can also browse to other places to select a LilyPond package." +#~ msgstr "" +#~ "Este é o URL do paquete se vai descargar e instalar.\n" +#~ "Tamén pode navegar a outras páxinas para seleccionar un paquete de " +#~ "LilyPond." + +#~ msgid "Package Url:" +#~ msgstr "URL do paquete:" + +#~ msgid "Downloading directory listing..." +#~ msgstr "Descargando o contido do directorio..." + +#~ msgid "No packages found. You can browse to a package manually." +#~ msgstr "" +#~ "Non se atopou ningún paquete. Pode buscar un paquete de xeito manual." + +#~ msgid "Latest Development Version (%1)" +#~ msgstr "Última versión de desenvolvemento (%1)" + +#~ msgid "Latest Stable Version (%1)" +#~ msgstr "Última versión estábel (%1)" + +#~ msgid "Downloading %1..." +#~ msgstr "Descargando %1..." + +#~ msgid "Download cancelled." +#~ msgstr "Descarga cancelada." + +#~ msgid "Download failed: %1" +#~ msgstr "Fallou a descarga: %1" + +#~ msgid "" +#~ "LilyPond %1 seems already to be installed in %2.\n" +#~ "\n" +#~ "Do you want to use it or to remove and re-install?" +#~ msgstr "" +#~ "LilyPond %1 semella xa instalado en %2.\n" +#~ "\n" +#~ "Quere empregalo ou quere eliminalo e volvelo instalar?" + +#~ msgid "Use existing LilyPond" +#~ msgstr "Empregar LilyPond existente" + +#~ msgid "Remove and re-install" +#~ msgstr "Eliminar e volver instalar" + +#~ msgid "Unpacking %1..." +#~ msgstr "Desempaquetando %1..." + +#~ msgid "Unpacking finished." +#~ msgstr "Desempaquetado rematado." + +#~ msgid "Unpacking failed." +#~ msgstr "Fallou o desempaquetado." + +#~ msgid "" +#~ "An error occurred:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Ocorreu un erro: \n" +#~ "\n" +#~ "%1" + +#~ msgid "" +#~ "This is the list of defined expansions.\n" +#~ "\n" +#~ "Click on a row to see or change the associated text. Doubleclick a " +#~ "shortcut or its description to change it. You can also press F2 to edit " +#~ "the current shortcut.\n" +#~ "\n" +#~ "Use the buttons below to add or remove expansions.\n" +#~ "\n" +#~ "There are two ways to use the expansion: either type the shortcut in the " +#~ "text and then call the Expand function, or just call the Expand function " +#~ "(default shortcut: Ctrl+.), choose the expansion from the list and press " +#~ "Enter or click Ok." +#~ msgstr "" +#~ "Lista de expansións definidas.\n" +#~ "\n" +#~ "Prema sobre una fila para ver ou cambiar o texto asociado. Faga dobre " +#~ "clic sobre unha abreviatura ou a súa descrición para modificala. Tamén " +#~ "pode premer F2 para editar a abreviatura actual.\n" +#~ "\n" +#~ "Use os bostóns de abaixo para engadir ou eliminar expansións.\n" +#~ "\n" +#~ "Existen dous xeitos de utilizar a expansión: teclee a abreviatura no " +#~ "texto e chame á función Expandir ou chame á función Expandir (o atallo " +#~ "predeterminado é Ctrl+.), seleccione a expansión da lista e prema Enter " +#~ "ou prema Aceptar." + +#~ msgid "" +#~ "This is the text associated with the selected shortcut. Some characters " +#~ "have special meaning:" +#~ msgstr "" +#~ "Este é o texto asociado á abreviatura seleccionada. Algúns caracteres " +#~ "teñen un significado especial:" + +#~ msgid "Translate the following pitch." +#~ msgstr "Traducir a seguinte nota." + +#~ msgid "New Item" +#~ msgstr "Elemento novo" + +#~ msgid "" +#~ "Another expansion already uses this name.\n" +#~ "\n" +#~ "Please use a different name." +#~ msgstr "" +#~ "O nome está a ser empregado por outra expansión.\n" +#~ "\n" +#~ "Empregue un nome distinto." + +#~ msgid "" +#~ "Please only use letters, numbers and the underscore character in the " +#~ "expansion name." +#~ msgstr "Empregue só letras, números e o guión baixo no nome da expansión." + +#~ msgid "Please don't leave the description empty." +#~ msgstr "Non deixe baleira a descrición." + +#~ msgid "" +#~ "Could not find any hyphenation dictionaries.\n" +#~ "\n" +#~ "Please install a package containing some and/or or configure the search " +#~ "path to find them in the Frescobaldi settings under \"Paths.\"" +#~ msgstr "" +#~ "Non se atoparon dicionarios de guionización.\n" +#~ "\n" +#~ "Instale un paquete que os conteña e/ou configure a ruta de busca para " +#~ "atopalo dentro da configuración de Frescobaldi en \"Rutas\"." + +#~ msgid "Larger text" +#~ msgstr "Texto máis grande" + +#~ msgid "Smaller text" +#~ msgstr "Texto máis pequeno" + +#~ msgid "Up one level" +#~ msgstr "Subir un nivel" + +#~ msgid "Index" +#~ msgstr "Índice" + +#~ msgid "Copy &Link" +#~ msgstr "Copiar &ligazón" + +#~ msgid "Open Link in &New Window" +#~ msgstr "Abrir a ligazón nunha &nova fiestra" + +#~ msgid "Open Document in &New Window" +#~ msgstr "Abrir o documento nunha &nova fiestra" + +#~ msgid "Loading..." +#~ msgstr "A cargar..." + +#~ msgid "LilyPond Command Index" +#~ msgstr "Índice de ordes de LilyPond" + +#~ msgid "Learning Manual" +#~ msgstr "Manual de aprendizaxe" + +#~ msgid "Learning Manual Index" +#~ msgstr "Índice do manual de aprendizaxe" + +#~ msgid "Internals Reference" +#~ msgstr "Referencia de funcionamento interno" + +#~ msgid "The %1 context" +#~ msgstr "O contexto %1" + +#~ msgid "" +#~ "Where to add articulations et cetera: above or below the staff or in the " +#~ "default position." +#~ msgstr "" +#~ "Onde engadir as articulacións e outros: enriba ou debaixo do pentagrama " +#~ "ou na posición predeterminada." + +#~ msgid "Click an articulation sign to add it to your document." +#~ msgstr "Prema sobre unha articulación para inserila no documento." + +#~ msgid "" +#~ "If you select some music first, the articulation will be added to all " +#~ "notes in the selection." +#~ msgstr "" +#~ "Se selecciona un bloque de música primeiro, engádese a articulación a " +#~ "todas as notas da selección." + +#~ msgid "Click a dynamic sign to add it to your document." +#~ msgstr "Prema sobre unha indicación de matiz para inserila no documento." + +#~ msgid "" +#~ "If you select some music first, dynamic spanners will be added the " +#~ "selected fragment." +#~ msgstr "" +#~ "Se selecciona un bloque de música primeiro, engádense as extensións de " +#~ "matiz ao fragmento seleccionado." + +#~ msgid "" +#~ "If you have selected some music and you click a sign after a spanner, the " +#~ "sign will terminate the spanner." +#~ msgstr "" +#~ "Se seleccionou música e preme un signo despois dun obxecto de extensión, " +#~ "o signo remata o obxecto de extensión." + +#~ msgid "These spanners need a music fragment to be selected." +#~ msgstr "" +#~ "Estes obxectos de extensión requiren a selección dun fragmento de música." + +#~ msgid "Arpeggios are used with chords with multiple notes." +#~ msgstr "Os arpexos empréganse con acordes de varias notas." + +#~ msgid "" +#~ "Glissandos are attached to a note and automatically extend to the next " +#~ "note." +#~ msgstr "" +#~ "Os glissandos únense a unha nota e esténdense automaticamente ata a nota " +#~ "seguinte." + +#~ msgid "Run LilyPond (preview)" +#~ msgstr "Executar LilyPond (vista previa)" + +#~ msgid "Run LilyPond (publish)" +#~ msgstr "Executar LilyPond (publicar)" + +#~ msgid "Run LilyPond (custom)..." +#~ msgstr "Executar LilyPond (personalizado)..." + +#~ msgid "Interrupt LilyPond Job" +#~ msgstr "Interromper a tarefa de LilyPond" + +#~ msgid "Email Documents..." +#~ msgstr "Documentos por correo electrónico..." + +#~ msgid "Cut selection and assign it to a LilyPond variable." +#~ msgstr "Cortar a selección e asignala a unha variable de LilyPond." + +#~ msgid "Repeat the last music expression (note or chord)." +#~ msgstr "Repetir a última expresión musical (nota ou acorde)." + +#~ msgid "Insert or Manage Expansions..." +#~ msgstr "Inserir ou xestionar expansións..." + +#~ msgid "Expand last word or open the expansions dialog." +#~ msgstr "Expandir a última palabra ou abrir o diálogo de expansións." + +#~ msgid "Insert special characters." +#~ msgstr "Inserir caracteres especiais." + +#~ msgid "Add to Expansions" +#~ msgstr "Engadir a expansións" + +#~ msgid "Go to the next blank line." +#~ msgstr "Ir á seguinte liña en branco." + +#~ msgid "Previous blank line" +#~ msgstr "Liña en branco anterior" + +#~ msgid "Go to the previous blank line." +#~ msgstr "Ir á anterior liña en branco." + +#~ msgid "Select to next blank line" +#~ msgstr "Seleccionar até a seguinte liña en branco" + +#~ msgid "" +#~ "Selects text from the current position down to and including the next " +#~ "blank line." +#~ msgstr "" +#~ "Selecciona texto desde a posición actual ata a seguinte liña en branco " +#~ "incluída." + +#~ msgid "Select to previous blank line" +#~ msgstr "Seleccionar até a liña en branco anterior" + +#~ msgid "" +#~ "Selects text from the current position up to right after the previous " +#~ "blank line." +#~ msgstr "" +#~ "Selecciona texto desde a posición actual ata xusto antes da liña en " +#~ "branco anterior." + +#~ msgid "Move selection to next blank line" +#~ msgstr "Mover á selección até a seguinte liña en branco" + +#~ msgid "Moves selected block to next blank line." +#~ msgstr "Mover o bloque seleccionado ata a seguinte liña en branco." + +#~ msgid "Move selection to previous blank line" +#~ msgstr "Mover a selección á liña anterior en branco" + +#~ msgid "Moves selected block to previous blank line." +#~ msgstr "Mover o bloque seleccionado á liña anterior en branco." + +#~ msgid "Single Quote" +#~ msgstr "Comiña simple" + +#~ msgid "Double Quote" +#~ msgstr "Comiña dobre" + +#~ msgid "Align" +#~ msgstr "Aliñar" + +#~ msgid "Insert pair of braces" +#~ msgstr "Inserir par de chaves" + +#~ msgid "" +#~ "Your document has been modified and needs to be saved before LilyPond can " +#~ "be started.\n" +#~ "\n" +#~ "Save the document now?" +#~ msgstr "" +#~ "O documento foi modificado e debe gardarse antes de que LilyPond poida\n" +#~ "iniciarse.\n" +#~ "\n" +#~ "Quere gardar o documento agora?" + +#~ msgid "There is already a LilyPond job running for this document." +#~ msgstr "Xa está en execución unha tarefa de LilyPond para este documento." + +#~ msgid "Can't process document" +#~ msgstr "Non se pode procesar o documento" + +#~ msgid "Continue anyway?" +#~ msgstr "Continuar de todos os xeitos?" + +#~ msgid "" +#~ "You want to run LilyPond in preview mode (with point and click enabled), " +#~ "but your document contains a command to turn point and click off." +#~ msgstr "" +#~ "Quere executar LilyPond en modo vista previa (coa opción apuntar e premer " +#~ "activada), pero o documento contén unha orde para desactivar a opción " +#~ "apuntar e premer." + +#~ msgid "" +#~ "You want to run LilyPond in publish mode (with point and click disabled), " +#~ "but your document contains a command to turn point and click on." +#~ msgstr "" +#~ "Quere executar LilyPond en modo publicación (coa opción apuntar e premer " +#~ "desactivada), pero o documento contén unha orde para activar a opción " +#~ "apuntar e premer." + +#~ msgid "Abort the running LilyPond process" +#~ msgstr "Abortar o proceso de LilyPond en execución" + +#~ msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" +#~ msgstr "" +#~ "Executar LilyPond en modo vista previa (Maiús+clic para activar o diálogo " +#~ "de opcións personalizadas)" + +#~ msgid "LilyPond has successfully compiled %1." +#~ msgstr "LilyPond compliou %1 correctamente." + +#~ msgid "LilyPond exited with an error compiling %1." +#~ msgstr "LilyPond rematou cun erro ao compilar %1." + +#~ msgid "" +#~ "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" +#~ msgstr "" +#~ "Introducir un ritmo empregando valores de duración separados por espazos " +#~ "(ex. 8. 16 8 4 8)" + +#~ msgid "Terminal" +#~ msgstr "Terminal" + +#~ msgid "" +#~ "Could not load the KMid part.\n" +#~ "Please install KMid 2.4.0 or higher." +#~ msgstr "" +#~ "Non se puido cargar a parte KMid.\n" +#~ "Instale KMid 2.4.0 ou superior." + +#~ msgid "Show PDF Navigation Panel" +#~ msgstr "Amosar o panel de navegación do PDF" + +#~ msgid "Show PDF minipager" +#~ msgstr "Amosar o mini-paxinador de PDF" + +#~ msgid "Configure Okular..." +#~ msgstr "Configurar Okular..." + +#~ msgid "S&ynchronize Preview with Current Document" +#~ msgstr "&Sincronizar a vista previa co documento actual" + +#~ msgid "Reload" +#~ msgstr "Cargar de novo" + +#~ msgid "no log" +#~ msgstr "sen rexistro" + +#~ msgid "Only show on errors" +#~ msgstr "Amosar só se hai erros" + +#~ msgid "Rumor" +#~ msgstr "Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter " +#~ "from the LilyPond document." +#~ msgstr "" +#~ "Compás a empregar. Déixeo en 'Automático' para que Frescobladi determine " +#~ "o compás a partires do documento de LilyPond." + +#~ msgid "Quantize:" +#~ msgstr "Cuantizar:" + +#~ msgid "The shortest note duration to use." +#~ msgstr "Duración da nota máis curta que se vai usar." + +#~ msgid "Record LilyPond input note by note, without durations." +#~ msgstr "Gravar a entrada de LilyPond nota a nota, sen as duracións." + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Record monophonic input, without chords." +#~ msgstr "Gravar unha entrada monofónica, sen acordes." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let Frescobaldi determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Número de alteracións. Un número negativo significa bemois. Déixeo en " +#~ "'Automático' para que Frescobaldi determine armadura a partires do " +#~ "documento de LilyPond." + +#~ msgid "Meter:" +#~ msgstr "Compás:" + +#~ msgid "Key:" +#~ msgstr "Armadura:" + +#~ msgid "Configure..." +#~ msgstr "Configurar..." + +#~ msgid "Adjust more settings, like MIDI input and output." +#~ msgstr "Configurar máis axustes, como a entrada e saída MIDI." + +#~ msgid "Set these settings as default." +#~ msgstr "Establecer estes axustes como predeterminados." + +#~ msgid "Found rumor version %1." +#~ msgstr "Atopouse a versión %1 de Rumor." + +#~ msgid "Could not find Rumor: %1" +#~ msgstr "Non se atopou Rumor: %1" + +#~ msgid "Settings have been saved." +#~ msgstr "Gardáronse os axustes." + +#~ msgid "Record" +#~ msgstr "Gravar" + +#~ msgid "Start or stop Rumor MIDI-recording." +#~ msgstr "Iniciar ou deter a gravación MIDI de Rumor." + +#~ msgid "Rumor is recording, press ESC to stop." +#~ msgstr "Rumor está a gravar, prema ESC para deter." + +#~ msgid "Rumor stopped." +#~ msgstr "Rumor detido." + +#~ msgid "TiMidity" +#~ msgstr "TiMidity" + +#~ msgid "Start or stop the TiMidity ALSA MIDI client." +#~ msgstr "Iniciar ou deter o cliente MIDI de ALSA TiMidity." + +#~ msgid "Rumor Settings" +#~ msgstr "Configuración de Rumor" + +#~ msgid "OSS device %1" +#~ msgstr "Dispositivo OSS %1" + +#~ msgid "" +#~ "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard " +#~ "of your computer." +#~ msgstr "" +#~ "A entrada MIDI que vai empregar. Escolla 'Teclado' se quere tocar no " +#~ "teclado do seu computador." + +#~ msgid "MIDI output:" +#~ msgstr "Saída de MIDI:" + +#~ msgid "MIDI output to use." +#~ msgstr "Saída MIDI para empregar." + +#~ msgid "The LilyPond language you want Rumor to output the pitches in." +#~ msgstr "O idioma de LilyPond no que quere que Rumor grave as notas." + +#~ msgid "Explicit durations" +#~ msgstr "Duracións explícitas" + +#~ msgid "" +#~ "Add a duration after every note, even if it is the same as the preceding " +#~ "note." +#~ msgstr "" +#~ "Engadir a duración despois de cada nota, aínda que sexa a mesma que a da " +#~ "nota anterior." + +#~ msgid "Absolute pitch" +#~ msgstr "Altura absoluta" + +#~ msgid "Use absolute pitches instead of relative." +#~ msgstr "Empregar alturas absolutas en vez de relativas." + +#~ msgid "No barlines" +#~ msgstr "Sen liñas divisorias" + +#~ msgid "Filter the barlines out of Rumor's output." +#~ msgstr "Filtrar as barras de compás da saída de Rumor." + +#~ msgid "No dots" +#~ msgstr "Sen puntos" + +#~ msgid "Do not use dotted notes, but ties instead." +#~ msgstr "" +#~ "Non empregar notas con punto, no seu lugar, empregar ligaduras de unión." + +#~ msgid "Legato" +#~ msgstr "Legato" + +#~ msgid "Do not use rests, but give all notes the maximum length." +#~ msgstr "Non usar silencios, todas as notas teñen a máxima lonxitude." + +#~ msgid "Strip leading and trialing rests from output." +#~ msgstr "Quitar os silencios inicial e final da saída." + +#~ msgid "Guile scripts to load:" +#~ msgstr "Cargar scripts de Guile:" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. Check " +#~ "\"What's this\" for more information." +#~ msgstr "" +#~ "Aquí pode elexir os scripts de Guile que quere que Rumor cargue. Comprobe " +#~ "a saída de \"Que é isto\" para obter máis información." + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %1. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Aquí pode elexir os scripts de Guile que quere que Rumor cargue. Pode " +#~ "engadir os seus propios scripts situándoos en %1. Se a primeira liña do " +#~ "script comeza por punto e coma (;), esa liña amosarase coma unha " +#~ "descrición." + +#~ msgid "publish mode" +#~ msgstr "Modo publicación" + +#~ msgid "LilyPond %1 [%2] starting (%3)..." +#~ msgstr "LilyPond %1 [%2] iniciando (%3)..." + +#~ msgid "LilyPond [%1] starting (%2)..." +#~ msgstr "LilyPond [%1] iniciando (%2)..." + +#~ msgid "LilyPond [%1] finished (%2)." +#~ msgstr "LilyPond [%1] rematou (%2)." + +#~ msgid "Select which LilyPond version you want to run:" +#~ msgstr "Seleccione os ficheiros que quere executar:" + +#~ msgid "LilyPond %1" +#~ msgstr "LilyPond %1" + +#~ msgid "Automatic LilyPond Version (determined from document)." +#~ msgstr "Versión automática de LilyPond (determinada desde o documento)." + +#~ msgid "Path: %1" +#~ msgstr "Ruta: %1" + +#~ msgid "LilyPond (version unknown)" +#~ msgstr "LilyPond (versión descoñecida)" + +#~ msgid "" +#~ "Use LilyPond (version unknown)\n" +#~ "Path: %1" +#~ msgstr "" +#~ "Empregar LilyPond (versión descoñecida)\n" +#~ "Ruta: %1" + +#~ msgid "Save LilyPond Log as" +#~ msgstr "Gardar rexistro de LilyPond como" + +#~ msgid "" +#~ "Could not save LilyPond log:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Non se puido gardar o rexistro de LilyPond:\n" +#~ "\n" +#~ "%1" + +#~ msgid "LilyPond-related settings" +#~ msgstr "Configuración de LilyPond" + +#~ msgid "LilyPond version to use:" +#~ msgstr "Versión de LilyPond para empregar:" + +#~ msgid "" +#~ "Here you can set a fixed LilyPond version to run on documents in this " +#~ "session.\n" +#~ "\n" +#~ "The LilyPond version selected here is run by default on your documents, " +#~ "and it's also used by the \"Insert Version\" command." +#~ msgstr "" +#~ "Aquí pode establecer unha versión fixa de LilyPond para executala nos " +#~ "documentos dentro desta sesión.\n" +#~ "\n" +#~ "A versión de LilyPond que está seleccionada execútase de xeito " +#~ "predeterminado nos documentos e emprégase tamén pola orde \"Inserir " +#~ "versión\"." + +#~ msgid "Configure" +#~ msgstr "Configurar" + +#~ msgid "General Frescobaldi Preferences" +#~ msgstr "Preferencias xerais de Frescobaldi" + +#~ msgid "Paths to programs or data used by Frescobaldi" +#~ msgstr "Rutas a programas ou a datos usados por Frescobaldi" + +#~ msgid "Rumor MIDI input" +#~ msgstr "Entrada MIDI de Rumor" + +#~ msgid "Rumor MIDI input plugin settings" +#~ msgstr "Axustes da extensión de entrada MIDI Rumor" + +#~ msgid "Editor Component" +#~ msgstr "Compoñente do editor" + +#~ msgid "Editor Component Options" +#~ msgstr "Opcións do compoñente do editor" + +#~ msgid "LilyPond version number to use for new documents" +#~ msgstr "A versión de LilyPond que se vai empregar para os documentos novos" + +#~ msgid "Use version number of installed LilyPond" +#~ msgstr "Usar o número da versión de LilyPond instalada" + +#~ msgid "Use version number of last convert-ly rule" +#~ msgstr "Usar o número da versión da última regra de convert-ly" + +#~ msgid "Enter a valid LilyPond version number, e.g. 2.12.0" +#~ msgstr "Escriba o número de versión de LilyPond válido, ex. 2.12.0" + +#~ msgid "Warnings and Notifications" +#~ msgstr "Avisos e notificacións" + +#~ msgid "Warn when a document contains a conflicting point and click setting" +#~ msgstr "" +#~ "Avisar se o documento contén un punto conflitivo para a opción apuntar e " +#~ "premer." + +#~ msgid "Warn when a document needs to be saved before LilyPond is run" +#~ msgstr "Avisar se o documento precisa gardarse antes de executar LilyPond" + +#~ msgid "Warn when saving a session would overwrite another" +#~ msgstr "Avisar se ao gardar a sesión sobrescríbese outra." + +#~ msgid "Point and Click" +#~ msgstr "Apuntar e premer" + +#~ msgid "Enable Point and Click" +#~ msgstr "Activar apuntar e premer" + +#~ msgid "" +#~ "Click this button if Point and Click does not work. See Shift+F1 (What's " +#~ "This) for more information." +#~ msgstr "" +#~ "Prema no botón se a opción apuntar e premer non funciona. Vexa Maiús+F1 " +#~ "(Que é isto) para obter máis información." + +#~ msgid "" +#~ "On its first run, Frescobaldi tries to auto-configure Okular (which " +#~ "provides the PDF preview) to call Frescobaldi when a clickable object is " +#~ "clicked.\n" +#~ "\n" +#~ "But this setting can get lost when you move Frescobaldi to a different " +#~ "location or when other applications reconfigure Okular.\n" +#~ "\n" +#~ "Click this button to configure Frescobaldi as 'custom editor' inside " +#~ "Okular. This works best when all instances of Okular are closed and the " +#~ "PDF preview has not yet been opened." +#~ msgstr "" +#~ "Na primeira execución, Frescobaldi trata de configurar automaticamente " +#~ "Okular (que aporta a vista previa do PDF) para que chame a Frescobaldi " +#~ "cando se premesobre un obxecto que contén unha ligazón.\n" +#~ "\n" +#~ "Este axuste pódese perder se move Frescobaldi a un lugar distinto ou " +#~ "cando outros aplicativos reconfiguren Okular.\n" +#~ "\n" +#~ "Prema neste botón para configurar Frescobaldi como 'editor personalizado' " +#~ "dentro de Okular. Isto funciona mellor se todas as instancias de Okular " +#~ "están pechadas e aínda non se abriu a vista previa do PDF." + +#~ msgid "" +#~ "The Okular PDF preview has been reconfigured.\n" +#~ "\n" +#~ "If you already opened the PDF preview, restart Frescobaldi for the new " +#~ "settings to take effect." +#~ msgstr "" +#~ "Volveuse configurar a vista previa de PDF de Okular.\n" +#~ "\n" +#~ "Se xa ten aberta a vista previa de PDF, reinicie Frescobaldi para que a " +#~ "nova configuración teña efecto." + +#~ msgid "PDF Viewer:" +#~ msgstr "Visor de PDF:" + +#~ msgid "PDF Viewer" +#~ msgstr "Visor de PDF" + +#~ msgid "(leave empty for operating system default)" +#~ msgstr "(deixar baleiro para a opción predeterminada do sistema operativo)" + +#~ msgid "MIDI Player:" +#~ msgstr "Reprodutor MIDI:" + +#~ msgid "Url:" +#~ msgstr "Url:" + +#~ msgid "Url or path to the LilyPond documentation." +#~ msgstr "Url ou ruta da documentación de Lilypond" + +#~ msgid "Lyrics Hyphenation" +#~ msgstr "Guionización da letra" + +#~ msgid "" +#~ "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " +#~ "KOffice, etc, one per line. If you leave out the starting slash, the " +#~ "prefixes from the KDEDIRS environment variable are prepended." +#~ msgstr "" +#~ "Rutas de busca para os dicionarios de guionización de OpenOffice.org, " +#~ "Scribus, KOffice, etc, un por cada liña. Se deixa a barra inicial, " +#~ "poñeranse diante os prefixos collidos da variable de contorno KDEDIRS." + +#~ msgid "Commands used by the Rumor MIDI input module" +#~ msgstr "Ordes empregadas polo módulo de entrada MIDI Rumor" + +#~ msgid "Name or full path of the Rumor program." +#~ msgstr "Nome ou ruta completa do aplicativo Rumor." + +#~ msgid "" +#~ "Name or full path of the aconnect program (part of ALSA, for MIDI input " +#~ "and playback using Rumor)." +#~ msgstr "" +#~ "Nome e ruta do programa aconnect (parte de ALSA, para a entrada e " +#~ "reprodución MIDI utilizando Rumor)." + +#~ msgid "" +#~ "Full command to start Timidity (or any other program) as an ALSA MIDI " +#~ "client." +#~ msgstr "" +#~ "Orde completa para iniciar Timidity (ou calquera outro programa) coma un " +#~ "cliente de MIDI ALSA." + +#~ msgid "Close Button" +#~ msgstr "Botón de peche" + +#~ msgid "Large Tabs" +#~ msgstr "Lapelas grandes" + +#~ msgid "Tabs can be moved" +#~ msgstr "As lapelas pódense mover" + +#~ msgid "Download..." +#~ msgstr "Descargar..." + +#~ msgid "Download new binary LilyPond releases." +#~ msgstr "Descargar versións novas do binario de LilyPond." + +#~ msgid "LilyPond Command" +#~ msgstr "Orde de LilyPond" + +#~ msgid "Choose a session." +#~ msgstr "Escolla unha sesión." + +#~ msgid "Choose..." +#~ msgstr "Escoller..." + +#~ msgid "Your document has already a LilyPond version statement." +#~ msgstr "O documento xa ten unha declaración da versión de LilyPond." + +#~ msgid "Version already set" +#~ msgstr "Versión xa definida" + +#~ msgid "" +#~ "Can't determine the version of LilyPond. Please check your LilyPond " +#~ "installation." +#~ msgstr "" +#~ "Non se pode determinar a versión de LilyPond. Revise a instalación de " +#~ "LilyPond." + +#~ msgid "" +#~ "Can't determine the LilyPond version of the current document. Please add " +#~ "a \\version statement with the correct version." +#~ msgstr "" +#~ "Non é posible determinar a versión de LilyPond do documento actual. " +#~ "Escriba unha declaración \\version coa versión correcta." + +#~ msgid "This LilyPond document is already up-to-date." +#~ msgstr "Este documento de LilyPond xa está actualizado." + +#~ msgid "" +#~ "The document has been processed with convert-ly. You'll find the messages " +#~ "of convert-ly in a comment block at the end. You still may have to edit " +#~ "some parts manually." +#~ msgstr "" +#~ "O documento foi procesado con convert-ly. Poderá atopar as mensaxes de " +#~ "convert-ly nun bloque de comentario ao final. Igual ten que editar " +#~ "algunhas partes de xeito manual." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %1" +#~ msgstr "" +#~ "O documento foi procesado con convert-ly, pero permaneceu sen " +#~ "modificacións. Esta é a mensaxe que deu convert-ly: %1" + +#~ msgid "The tempo in beats per minute." +#~ msgstr "O tempo en pulsos por minuto." + +#~ msgid "Treble" +#~ msgstr "Tiple" + +#~ msgid "Treble 8" +#~ msgstr "Tiple 8" + +#~ msgid "Tab clef" +#~ msgstr "Clave de tabulatura" + +#~ msgid "No Clef" +#~ msgstr "Sen clave" + +#~ msgid "Add selected part to your score." +#~ msgstr "Engadir a parte seleccionada á partitura." + +#~ msgid "A tempo indication, e.g. \"Allegro.\"" +#~ msgstr "Unha indicación de tempo, ex. \"Allegro\"." + +#~ msgid "Wrap score in \\book block" +#~ msgstr "Axustar a partitura dentro dun bloque \\book" + +#~ msgid "If checked, wraps the \\score block inside a \\book block." +#~ msgstr "Se está activado, axusta o bloque \\score a un bloque \\book." + +#~ msgid "How many voices to put in this staff." +#~ msgstr "Cantas voces se poñen neste pentagrama." + +#~ msgid "Basso continuo" +#~ msgstr "Baixo continuo" + +#~ msgid "Guitar" +#~ msgstr "Guitarra" + +#~ msgid "Oboe d'Amore" +#~ msgstr "Óboe d'amore" + +#~ msgid "English Horn" +#~ msgstr "Corno inglés" + +#~ msgid "Mezzo soprano" +#~ msgstr "Mezzosoprano" + +#~ msgid "Open PDF" +#~ msgstr "Abrir PDF" + +#~ msgid "Email..." +#~ msgstr "Correo-e..." + +#~ msgid "Disable the built-in PDF preview" +#~ msgstr "Desactivar a vista previa de PDF incorporada" + +#~ msgid "The direction to use for the articulations." +#~ msgstr "Dirección para usar nas articulacións." + +#~ msgid "Your document has been modified, please save first." +#~ msgstr "O documento foi modificado, gárdeo primeiro" + +#~ msgid "" +#~ "Printing failed: %1\n" +#~ "\n" +#~ "The print command %2 does probably not exist. Please check your settings." +#~ msgstr "" +#~ "Fallou a impresión: %1\n" +#~ "\n" +#~ "A orde de impresión %2 é posible que non exista. Comprobe a configuración." + +#~ msgid "The print command contains errors. Please check your settings." +#~ msgstr "A orde de imprimir ten erros. Comprobe a configuración." + +#~ msgid "Directly print on default printer" +#~ msgstr "Imprimir directamente na impresora predeterminada" + +#, fuzzy +#~ msgid "Notify when a document has been sent to the printer" +#~ msgstr "Enviouse o documento á impresora." + +#~ msgid "" +#~ "Command to print a PDF file, for example lpr or kprinter. You may add " +#~ "some arguments, e.g. lpr -P myprinter." +#~ msgstr "" +#~ "Orde para imprimir un ficheiro PDF, por exemplo, lpr ou kprinter. Pode " +#~ "engadirlle argumentos, ex. lpr -P a_miña_impresora." + +#~ msgid "Space above:" +#~ msgstr "Espazo por enriba:" + +#~ msgid "Overwrite File?" +#~ msgstr "Sobrescribir ficheiro?" + +#~ msgid "Name or full path of the convert-ly program." +#~ msgstr "O nome ou a ruta completa do aplicativo convert-ly." diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/__init__.py frescobaldi-2.0.0/frescobaldi_app/po/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/po/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,74 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Internationalisation. +""" + +import __builtin__ +import os + +from . import mofile + +podir = __path__[0] + +def available(): + """Returns a list of language shortnames for which a MO file is available.""" + return [name[:-3] for name in os.listdir(podir) if name.endswith(".mo")] + +def find(language): + """Returns a .mo file for the given language. + + Returns None if no suitable MO file can be found. + + """ + filename = os.path.join(podir, language + ".mo") + if os.path.exists(filename): + return filename + elif '_' in language: + return find(language.split('_')[0]) + +def translator(mo): + """Returns a function that can translate messages using the specified MoFile object. + + The returned function can be called with one to four arguments: + + - message + - context, message + - message, plural_message, count + - context, message, plural_message, count + + In all cases a single string (the translation) is returned. + + If mo is None, returns a dummy translator that returns strings untranslated. + + """ + if not mo: + mo = mofile.NullMoFile() + funcs = (None, mo.gettext, mo.pgettext, mo.ngettext, mo.npgettext) + return lambda *args: funcs[len(args)](*args) + +def install(filename): + """Installs the translations from the given .mo file. + + If filename is None, installs a dummy translator. + + """ + __builtin__._ = translator(mofile.MoFile(filename) if filename else None) + Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/it.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/it.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/it.po frescobaldi-2.0.0/frescobaldi_app/po/it.po --- frescobaldi-1.2.0/frescobaldi_app/po/it.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/it.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7686 @@ +# translation of it.po to Italiano +# translation of it.po to +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Gianluca D'Orazio , 2008, 2009, 2010, 2011. +# .billyBoh , 2011. +msgid "" +msgstr "" +"Project-Id-Version: it\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: 2011-12-01 17:39+0100\n" +"Last-Translator: .billyBoh \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"#-#-#-#-# it.po (it) #-#-#-#-#\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.2\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "{appname} è scritto in {python} e usa le librerie {qt}." + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +msgid "Python" +msgstr "Python" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "Qt4" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" +"L'anteprima dello spartito è basata sulla libreria {poppler} realizzata da " +"{authors} e altri." + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +msgid "Poppler" +msgstr "Poppler" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "" +"La maggior parte delle icone comprese nel programma sono create dal {tango}." + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "Progetto Desktop Tango" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "{appname} è tradotto in queste lingue:" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "A proposito di {appname}" + +#: frescobaldi_app/about.py:87 +msgid "About" +msgstr "A proposito" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "Riconoscimenti" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "Versione" + +#: frescobaldi_app/about.py:144 +msgid "Operating System" +msgstr "Sistema operativo" + +#: frescobaldi_app/about.py:151 +msgid "Version {version}" +msgstr "Versione {version}" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +msgid "A LilyPond Music Editor" +msgstr "Editor musicale per LilyPond" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "Copyright (c) {year} di {author}" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "Invia un messaggio agli sviluppatori." + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "Tradotto da Gianluca D'Orazio." + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "Rilasciato con licenza {gpl}." + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "Questa scorciatoia è in conflitto con il seguente comando:" +msgstr[1] "Questa scorciatoia è in conflitto con i seguenti comandi:" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +msgid "Shortcut Conflict" +msgstr "Conflitto fra scorciatoie" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "Modifica di nuovo" + +#: frescobaldi_app/app.py:128 +msgid "LilyPond Files" +msgstr "File LilyPond" + +#: frescobaldi_app/app.py:129 +msgid "LaTeX Files" +msgstr "File LaTeX" + +#: frescobaldi_app/app.py:130 +msgid "DocBook Files" +msgstr "File DocBook" + +#: frescobaldi_app/app.py:131 +msgid "HTML Files" +msgstr "File HTML" + +#: frescobaldi_app/app.py:132 +msgid "Texinfo Files" +msgstr "File Texinfo" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "File Scheme" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Tutti i file" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "&Contrassegna la riga attuale" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "Cancella i &contrassegni d'errore" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "Cancella &tutti i contrassegni" + +#: frescobaldi_app/bookmarkmanager.py:115 +msgid "Next Mark" +msgstr "Contrassegno successivo" + +#: frescobaldi_app/bookmarkmanager.py:116 +msgid "Previous Mark" +msgstr "Contrassegno precedente" + +#: frescobaldi_app/convert_ly.py:118 +msgid "From version:" +msgstr "Dalla versione:" + +#: frescobaldi_app/convert_ly.py:119 +msgid "To version:" +msgstr "Alla versione:" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "Salva i messaggi di convert-ly nel documento" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" +"Se selezionato, i messaggi di convert-ly saranno aggiunti come commenti alla " +"fine del documento." + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "&Messaggi" + +#: frescobaldi_app/convert_ly.py:125 +msgid "&Changes" +msgstr "&Modifiche" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "Esegui di nuovo" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +msgid "" +msgstr "" + +#: frescobaldi_app/convert_ly.py:138 +msgid "Convert-ly from LilyPond {version}" +msgstr "Usa convert-ly da LilyPond {version}" + +#: frescobaldi_app/convert_ly.py:162 +msgid "(set in document)" +msgstr "(impostato nel documento)" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "" +"Devono essere impostate sia la versione di partenza che quella di arrivo." + +#: frescobaldi_app/convert_ly.py:190 +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "" +"Impossibile avviare {convert_ly}:\n" +"\n" +"{message}\n" + +#: frescobaldi_app/convert_ly.py:196 +msgid "The document has not been changed." +msgstr "Il documento non è stato modificato." + +#: frescobaldi_app/convert_ly.py:202 +msgid "Current Document" +msgstr "Documento attuale" + +#: frescobaldi_app/convert_ly.py:202 +msgid "Converted Document" +msgstr "Documento convertito" + +#: frescobaldi_app/convert_ly.py:208 +msgid "Colors:" +msgstr "Colori:" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "Aggiunti" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "Modificati" + +#: frescobaldi_app/convert_ly.py:211 +msgid "Deleted" +msgstr "Eliminati" + +#: frescobaldi_app/convert_ly.py:212 +msgid "Links:" +msgstr "Collegamenti:" + +#: frescobaldi_app/convert_ly.py:213 +msgid "First Change" +msgstr "Prima modifica" + +#: frescobaldi_app/convert_ly.py:214 +msgid "Next Change" +msgstr "Modifica successiva" + +#: frescobaldi_app/convert_ly.py:215 +msgid "Top" +msgstr "Inizio" + +#: frescobaldi_app/cut_assign.py:39 +msgid "Cut and Assign" +msgstr "Taglia e assegna" + +#: frescobaldi_app/cut_assign.py:40 +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "Inserire il nome della variabile a cui assegnare il testo selezionato:" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +msgid "Untitled" +msgstr "Senza nome" + +#: frescobaldi_app/document.py:145 +msgid "Untitled ({num})" +msgstr "Senza nome ({num})" + +#: frescobaldi_app/documentactions.py:125 +msgid "Cut and Assign..." +msgstr "Taglia e assegna..." + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "&Evidenzia sintassi" + +#: frescobaldi_app/documentactions.py:127 +msgid "&Automatic Indent" +msgstr "&Indentazione automatica" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "&Ripeti indentazione" + +#: frescobaldi_app/documentactions.py:129 +msgid "&Format" +msgstr "&Ordina indentazione" + +#: frescobaldi_app/documentactions.py:130 +msgid "&Update with convert-ly..." +msgstr "&Aggiorna con convert-ly" + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +msgid "&Save" +msgstr "&Salva" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +msgid "Save &As..." +msgstr "&Salva come..." + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "&Chiudi" + +#: frescobaldi_app/documentmenu.py:42 +msgctxt "menu title" +msgid "&Document" +msgstr "&Documento" + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "[sempre compilato]" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Si è verificato un errore interno:" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "Errore interno" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Spedisci una segnalazione di bug..." + +#: frescobaldi_app/exception.py:79 +msgid "Optionally describe below what you were doing:" +msgstr "È possibile descrivere sotto quel che si stava facendo:" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:76 +#, fuzzy +msgid "Roman Font:" +msgstr "Carattere:" + +#: frescobaldi_app/globalfontdialog.py:77 +#, fuzzy +msgid "Sans Font:" +msgstr "Carattere:" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:79 +#, fuzzy +msgid "Staff Size:" +msgstr "Dimensione del rigo" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Dividi in sillabe le parole" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Scegliere la lingua:" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +msgid "Lyrics" +msgstr "Parole" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +msgctxt "menu title" +msgid "Tools" +msgstr "Strumenti" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "Modifica" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +msgid "Preferences" +msgstr "Preferenze" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi può inserire automaticamente i trattini '{hyphen}' fra le " +"sillabe\n" +"di un testo per renderlo utilizzabile come parole di una melodia.\n" +"Può usare i dizionari per la sillabazione di OpenOffice.org, Scribus e " +"simili.\n" +"

\n" +"\n" +"

\n" +"Per usare questa funzione, selezionare il testo da dividere in sillabe. " +"Quindi\n" +"premere {key_hyphen} o scegliere {menu_hyphen}.\n" +"Nella finestra che apparirà, scegliere la lingua.\n" +"Fare clic su OK o premere Invio per dividere in sillabe. \n" +"

\n" +"\n" +"

\n" +"Un piccolo inconveniente dei dizionari per la sillabazione dei programmi di " +"videoscrittura è che spesso\n" +"non vogliono dividere una parola subito dopo la prima lettera (ad es. " +"'{example}'), perché questo\n" +"non dà un bel risultato in una pagina scritta. Potrebbe perciò essere " +"necessario\n" +"dividere manualmente la prima sillaba di alcune parole. \n" +"

\n" +"\n" +"

\n" +"È disponibile anche un comando per rimuovere la sillabazione. Questo può " +"essere utile se si ha una strofa\n" +"che si vuole mostrare come blocco di testo sotto alla musica.\n" +"In {menu_settings} si può inserire un elenco di cartelle contenenti\n" +"i files con i vocabolari per la sillabazione.\n" +"

\n" + +#: frescobaldi_app/inputdialog.py:101 +msgid "Select Color" +msgstr "Scelta del colore" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "{job} in avvio..." + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "{job} in arresto..." + +#: frescobaldi_app/job.py:206 +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "Impossibile avviare {program}. Controllare il percorso e i permessi." + +#: frescobaldi_app/job.py:209 +msgid "Could not read from the process." +msgstr "Impossibile avere informazioni dall'esecuzione di LilyPond." + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Si è verificato un errore sconosciuto." + +#: frescobaldi_app/job.py:216 +msgid "Exited with return code {code}." +msgstr "Uscito con codice {code}." + +#: frescobaldi_app/job.py:218 +msgid "Exited with exit status {status}." +msgstr "Uscito con lo stato {status}." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "Completato con successo in {time}." + +#: frescobaldi_app/lyrics.py:132 +msgid "&Hyphenate Lyrics Text..." +msgstr "&Dividi in sillabe le parole" + +#: frescobaldi_app/lyrics.py:133 +msgid "&Remove hyphenation" +msgstr "&Rimuovi la sillabazione" + +#: frescobaldi_app/lyrics.py:134 +msgid "&Copy Lyrics with hyphenation removed" +msgstr "&Copia le parole senza la divisione in sillabe" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "{appname} [opzioni] file..." + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "ENC" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Codifica da usare" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "NUM" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Numero di riga a cui andare, partendo da 1" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Colonna a cui andare, partendo da 0" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "NOME" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "Sessione da avviare ('{none}' per una sessione vuota)" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +msgid "[modified]" +msgstr "[modificato]" + +#: frescobaldi_app/mainwindow.py:268 +msgctxt "dialog title" +msgid "Close Document" +msgstr "Chiudi il documento" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" +"Il documento \"{name}\" è stato modificato.\n" +"Salvare le modifiche o scartarle?" + +#: frescobaldi_app/mainwindow.py:281 +#, fuzzy +msgid "Tab Bar" +msgstr "Intavolatura" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +msgid "Warning" +msgstr "Attenzione" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" +"Impossibile caricare il documento remoto:\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:354 +msgctxt "dialog title" +msgid "Open File" +msgstr "Apri file" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "Errore" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" +"Impossibile scrivere sulla destinazione:\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:399 +msgctxt "dialog title" +msgid "Save File" +msgstr "Salva documento" + +#: frescobaldi_app/mainwindow.py:439 +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Salva copia" + +#: frescobaldi_app/mainwindow.py:445 +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Salva selezione" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"Impossibile scrivere sulla destinazione:\n" +"\n" +"{url}\n" +"\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "Inserisci dal file" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"Impossibile leggere dall'indirizzo: \n" +"{url}\n" +"\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:541 +msgctxt "dialog title" +msgid "Print Source" +msgstr "Stampa documento sorgente..." + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "Esporta come HTML" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" +"Descrivi il problema o la funzione richiesta\n" +"nel modo più dettagliato possibile.\n" +"\n" +"\n" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "Barra degli strumenti principale" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "Barra dell'anteprima spartito" + +#: frescobaldi_app/mainwindow.py:923 +msgctxt "action: new document" +msgid "&New" +msgstr "&Nuovo" + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "&Apri..." + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "Apri &recenti" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "Inserisci dal &file..." + +#: frescobaldi_app/mainwindow.py:927 +msgid "Open Current Directory" +msgstr "Apri la cartella attuale" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "Salva copia o selezione come..." + +#: frescobaldi_app/mainwindow.py:931 +msgid "Save All" +msgstr "Salva tutto" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "Stampa documento sorgente..." + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "Chiudi gli altri documenti" + +#: frescobaldi_app/mainwindow.py:935 +msgid "Close All Documents" +msgstr "Chiudi tutti i documenti" + +#: frescobaldi_app/mainwindow.py:936 +msgid "Closes all documents and leaves the current session." +msgstr "Chiude tutti i documenti ed esce dalla sessione corrente." + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "&Esci" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "Esporta il documento sorgente come &HTML colorato..." + +#: frescobaldi_app/mainwindow.py:941 +msgid "&Undo" +msgstr "&Annulla" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "Ri&peti" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "Ta&glia" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Copia" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "Copia come &HTML colorato" + +#: frescobaldi_app/mainwindow.py:946 +msgid "&Paste" +msgstr "&Incolla" + +#: frescobaldi_app/mainwindow.py:947 +msgid "Select &All" +msgstr "Seleziona &tutto" + +#: frescobaldi_app/mainwindow.py:948 +msgid "Select &Block" +msgstr "Seleziona &blocco" + +#: frescobaldi_app/mainwindow.py:949 +msgid "Select &None" +msgstr "Annulla &ogni selezione" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "Seleziona tutte le righe precedenti" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "Seleziona tutte le righe seguenti" + +#: frescobaldi_app/mainwindow.py:952 +msgid "&Find..." +msgstr "&Trova..." + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "Trova &successivo" + +#: frescobaldi_app/mainwindow.py:954 +msgid "Find Pre&vious" +msgstr "Trova pre&cedente" + +#: frescobaldi_app/mainwindow.py:955 +msgid "&Replace..." +msgstr "&Sostituisci..." + +#: frescobaldi_app/mainwindow.py:956 +msgid "Pr&eferences..." +msgstr "Pr&eferenze..." + +#: frescobaldi_app/mainwindow.py:958 +msgid "&Next Document" +msgstr "Documento &successivo" + +#: frescobaldi_app/mainwindow.py:959 +msgid "&Previous Document" +msgstr "Documento &precedente" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "Scorri in alto" + +#: frescobaldi_app/mainwindow.py:961 +msgid "Scroll Down" +msgstr "Scorri in basso" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "Nuova &finestra" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "&Schermo intero" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "&Guida" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "&Che cos'è?" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "Segnala un &bug..." + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "&A proposito di {appname}" + +#: frescobaldi_app/menu.py:81 +msgctxt "menu title" +msgid "&File" +msgstr "&File" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "&Esporta" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "&Modifica" + +#: frescobaldi_app/menu.py:147 +msgctxt "menu title" +msgid "&View" +msgstr "&Visualizza" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "Anteprima &spartito" + +#: frescobaldi_app/menu.py:189 +msgctxt "menu title" +msgid "&LilyPond" +msgstr "&LilyPond" + +#: frescobaldi_app/menu.py:208 +msgctxt "menu title" +msgid "&Tools" +msgstr "&Strumenti" + +#: frescobaldi_app/menu.py:233 +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "&Parole" + +#: frescobaldi_app/menu.py:245 +msgctxt "submenu title" +msgid "&Pitch" +msgstr "&Note" + +#: frescobaldi_app/menu.py:259 +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "&Ritmo" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "&Finestra" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "&Aiuto" + +#: frescobaldi_app/musicpreview.py:113 +msgid "Document:" +msgstr "Documento:" + +#: frescobaldi_app/musicpreview.py:195 +msgid "&Print" +msgstr "&Stampa" + +#: frescobaldi_app/musicpreview.py:196 +msgid "Music Preview" +msgstr "Anteprima della musica" + +#: frescobaldi_app/popplerdummy.py:42 +msgid "Could not load the {name} module." +msgstr "Impossibile caricare il modulo {name}." + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" +"Non è stato trovato nessun comando per stampare un file PostScript.\n" +"\n" +"Il documento verrà stampato usando la modalità raster a {resolution} DPI. Si " +"consiglia di stamparlo usando un apposito visualizzatore PDF.\n" +"\n" +"Continuare?" + +#: frescobaldi_app/popplerprint.py:61 +msgid "PDF Document" +msgstr "&Documento PDF" + +#: frescobaldi_app/popplerprint.py:69 +msgid "Print {filename}" +msgstr "Stampa {filename}" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +msgid "Printing Error" +msgstr "Errore di stampa" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +msgid "Could not send the document to the printer." +msgstr "Impossibile inviare il documento alla stampante." + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "Stampa in corso di pagina {page} ({num} di {total})..." + +#: frescobaldi_app/search.py:99 +msgid "Search:" +msgstr "Cerca..." + +#: frescobaldi_app/search.py:100 +msgid "&Case" +msgstr "&Distingui" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "Distingui le maiuscole dalle minuscole" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "&Regex" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "Espressione regolare" + +#: frescobaldi_app/search.py:104 +msgid "The total number of matches" +msgstr "Numero totale di corrispondenze" + +#: frescobaldi_app/search.py:105 +msgid "Close" +msgstr "Chiudi" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "Sostituisci:" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "So&stituisci" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "Sostituisce la prossima corrispondenza dell'espressione cercata." + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "&Tutto" + +#: frescobaldi_app/search.py:110 +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "" +"Sostituisce tutte le corrispondenze dell'espressione cercata nel documento o " +"nella selezione." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "Riga: {line}, Col: {column}" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "Dividi &orizzontalmente" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "Dividi &verticalmente" + +#: frescobaldi_app/viewmanager.py:91 +msgid "&Close View" +msgstr "&Chiudi riquadro" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "&Chiudi il riquadro attuale" + +#: frescobaldi_app/viewmanager.py:444 +msgid "Close &Other Views" +msgstr "Chiudi gli &altri riquadri" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "&Riquadro successivo" + +#: frescobaldi_app/viewmanager.py:446 +msgid "&Previous View" +msgstr "&Riquadro precedente" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "Completamento &automatico" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "Mostra la finestra dei c&ompletamenti" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +#, fuzzy +msgid "Special Characters" +msgstr "Caratteri speciali..." + +#: frescobaldi_app/charmap/__init__.py:41 +#, fuzzy +msgid "Special Charac&ters" +msgstr "Caratteri speciali..." + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +msgid "Documentation Browser" +msgstr "Navigatore documentazione" + +#: frescobaldi_app/docbrowser/__init__.py:47 +msgid "&Documentation Browser" +msgstr "Navigatore per la &documentazione" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +msgid "Back" +msgstr "Indietro" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "Avanti" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "Home" + +#: frescobaldi_app/docbrowser/__init__.py:84 +msgid "&LilyPond Documentation" +msgstr "Documentazione &LilyPond" + +#: frescobaldi_app/docbrowser/__init__.py:85 +msgid "&Contextual LilyPond Help" +msgstr "Aiuto &contestuale su LilyPond" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Cerca..." + +#: frescobaldi_app/docbrowser/browser.py:136 +msgid "(local)" +msgstr "(locale)" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "({hostname})" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +msgid "LilyPond Source" +msgstr "Documento LilyPond sorgente" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +#, fuzzy +msgid "Documents" +msgstr "Documento:" + +#: frescobaldi_app/doclist/__init__.py:40 +#, fuzzy +msgid "Docum&ents" +msgstr "Documento:" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "Compila &sempre [{docname}]" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "&Compila sempre questo documento" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "Compila" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "Compila (&anteprima)" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "Compila (&pubblicazione)" + +#: frescobaldi_app/engrave/__init__.py:203 +#, fuzzy +msgid "Engrave (&custom)..." +msgstr "Compila (&personalizzata)" + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "&Interrompi compilazione" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +#, fuzzy +msgid "Engrave custom" +msgstr "Compila (&personalizzata)" + +#: frescobaldi_app/engrave/custom.py:119 +#, fuzzy +msgid "LilyPond Version:" +msgstr "Versione di LilyPond" + +#: frescobaldi_app/engrave/custom.py:120 +#, fuzzy +msgid "Output Format:" +msgstr "Nome dei file generati:" + +#: frescobaldi_app/engrave/custom.py:121 +#, fuzzy +msgid "Resolution:" +msgstr "Versione:" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "Esegui LilyPond in modalità anteprima (con Point and Click)" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "Esegui LilyPond con output molto dettagliato" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +msgid "Delete intermediate output files" +msgstr "Lascia che LilyPond cancelli i file di output intermedi" + +#: frescobaldi_app/engrave/custom.py:126 +#, fuzzy +msgid "Command line:" +msgstr "Comando" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "Esegui LilyPond" + +#: frescobaldi_app/engrave/custom.py:149 +#, fuzzy +msgid "LilyPond {version}" +msgstr "Versione di LilyPond" + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:215 +#, fuzzy +msgid "The following replacements will be made:" +msgstr "Sono riconosciute le seguenti variabili:" + +#: frescobaldi_app/engrave/custom.py:218 +#, fuzzy +msgid "The LilyPond executable" +msgstr "Impostazioni di LilyPond" + +#: frescobaldi_app/engrave/custom.py:219 +#, fuzzy +msgid "All the include paths" +msgstr "Percorso dei file aggiuntivi per LilyPond:" + +#: frescobaldi_app/engrave/custom.py:220 +#, fuzzy +msgid "The filename of the document" +msgstr "Il nome del documento attuale." + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/result_menu.py:45 +#, fuzzy +msgid "Generated &Files" +msgstr "&File generati" + +#: frescobaldi_app/engrave/result_menu.py:66 +#, fuzzy +msgid "No files available" +msgstr "Non disponibile" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "Barra degli strumenti" + +#: frescobaldi_app/help/browser.py:78 +msgid "Start" +msgstr "Inizio" + +#: frescobaldi_app/help/browser.py:79 +msgid "Contents" +msgstr "Indice" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "Aiuto" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "Nessun aiuto" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "Non è stato trovato nessun aiuto su questo argomento." + +#: frescobaldi_app/help/contents.py:46 +msgid "Frescobaldi Manual" +msgstr "Manuale di Frescobaldi" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi è un editor leggero e versatile per documenti\n" +"musicali da compilare con LilyPond.\n" +"Questo manuale è stato scritto da {author} e si riferisce a {appname} " +"versione {version}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" +"

Come ottenere aiuto in Frescobaldi

\n" +"\n" +"

\n" +"In molte finestre è possibile usare il pulsante Aiuto o premere il tasto " +"{key_help}.\n" +"Molti elementi dell'interfaccia possiedono informazioni del tipo \"Che cos'è" +"\"\n" +"che possono essere visualizzate\n" +"premendo {key_whatsthis} o scegliendo {menu_whatsthis}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "Che cos'è" + +#: frescobaldi_app/help/contents.py:88 +msgid "Introduction" +msgstr "Introduzione" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" +"

\n" +"LilyPond\n" +"è programma open-source di tipografia musicale, progettato per produrre " +"spartiti\n" +"di alta qualità a partire da file di testo piuttosto semplici.\n" +"Questi file di testo possono essere scritti con un qualsiasi editor e quindi " +"compilati\n" +"con LilyPond per ottenere eleganti stampe digitali in formato PDF.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi è un'applicazione progettata per rendere la creazione e la " +"modifica dei file LilyPond\n" +"più facile e veloce. È comunque necessario imparare il linguaggio dei file " +"LilyPond.\n" +"Leggendo la sezione {getting_started} di questa guida, è possibile " +"apprendere\n" +"le prime basi dell'uso di LilyPond.\n" +"

\n" +"\n" +"

\n" +"In seguito sarà possibile approfondire l'apprendimento usando \n" +"l'eccellente documentazione online " +"sul sito di LilyPond.\n" +"

" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "Primi passi" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "Compila (pubblicazione)" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "Impostazioni di LilyPond" + +#: frescobaldi_app/help/contents.py:142 +msgctxt "menu title" +msgid "View" +msgstr "Mostra" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "Pulisci i contrassegni di errore" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "Copia come immagine..." + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" +"

\n" +"La schermata predefinita di Frescobaldi mostra a sinistra un documento di " +"testo\n" +"e a destra un'anteprima vuota dello spartito.\n" +"

\n" +"\n" +"

\n" +"Nel riquadro del documento di testo, inserire ora qualche riga di codice " +"LilyPond, ad esempio:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Quindi fare clic sull'icona di LilyPond nella barra degli strumenti o " +"premere {key_engrave}.\n" +"Se tutto è a posto, verrà eseguito LilyPond che compilerà il vostro file.\n" +"Nella parte inferiore dello schermo si possono seguire i vari passi " +"dell'esecuzione di LilyPond.\n" +"Se LilyPond non trova errori nel codice, produrrà un file PDF\n" +"che verrà mostrato nel riquadro dell'anteprima:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"L'Anteprima dello spartito ha diverse funzioni:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Tenendo il puntatore del mouse sulle note o altri elementi li evidenzierà " +"nel testo;\n" +"facendo clic, il cursore del testo verrà spostato alla posizione " +"corrispondente.\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl con la rotella del mouse cambia lo zoom, centrandolo sulla posizione " +"del puntatore.\n" +"
  • \n" +"\n" +"
  • \n" +"Fare clic tenendo premuto Ctrl in una zona vuota farà apparire una lente " +"d'ingrandimento.\n" +"
  • \n" +"\n" +"
  • \n" +"Spostando il cursore del testo o selezionando del codice si evidenziano le " +"note corrispondenti nell'anteprima;\n" +"premere {key_jump} per centrare ed evidenziare esplicitamente un oggetto\n" +"nell'anteprima.\n" +"
  • \n" +"\n" +"
  • \n" +"Selezionare (con shift e tasto sinistro) una regione dell'anteprima e " +"premere {key_copy_image} o {menu_copy_image}\n" +"per copiare la musica selezionata come immagine raster negli appunti,\n" +"in un file o in un altro programma.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"Una volta terminato di inserire il codice, si raccomanda di eseguire " +"LilyPond ancora una volta\n" +"disattivando l'opzione per il punta-e-clicca: menu {menu_engrave}.\n" +"In questo modo si otterranno PDF molto più piccoli.\n" +"

\n" +"\n" +"

\n" +"Se LilyPond non potesse essere eseguito, controllare\n" +"che sia installato correttamente e che l'eseguibile si trovi nella variabile " +"d'ambiente PATH.\n" +"Se necessario, si può indicare il percorso completo dell'eseguibile LilyPond " +"in\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"Se LilyPond trova errori nel codice, questi saranno mostrati nei messaggi di " +"esecuzione\n" +"e Frescobaldi contrassegnerà le righe in cui sono stati trovati.\n" +"Facendo clic sull'errore nei messaggi o premendo {key_error} il cursore\n" +"sarà immediatamente portato al punto da correggere. Premendo {key_error} di " +"nuovo\n" +"ci si sposterà all'errore successivo e così via. Eseguendo LilyPond di " +"nuovo\n" +"i contrassegni di errore saranno rimossi dalle righe.\n" +"I contrassegni di errore possono anche essere rimossi manualmente con\n" +"{menu_clear_error_marks}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:228 +msgid "Other Tools" +msgstr "Altri strumenti" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "

Altri strumenti importanti sono elencati qui.

\n" + +#: frescobaldi_app/help/contents.py:252 +msgid "About Frescobaldi" +msgstr "A proposito di Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" +"

\n" +"Il nome \"Frescobaldi\" deriva da\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), un organista e compositore italiano.\n" +"

\n" +"\n" +"

\n" +"Il sito di Frescobaldi si trova qui:\n" +"www.frescobaldi.org\n" +"ed è disponibile una mailing list all'indirizzo:\n" +"frescobaldi@googlegroups." +"com\n" +"(ulteriori " +"informazioni).\n" +"

\n" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "L'autore principale di Frescobaldi è {author}." + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "Come contribuire" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi è un progetto Free\n" +"Software per creare un editor di facile uso per il programma di " +"tipografia musicale LilyPond.\n" +"L'obbiettivo è di rendere disponibile Frescobaldi su tutte le principali " +"piattaforme.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi è sviluppato in un repository pubblico GitHub presso {url}.\n" +"A questo indirizzo è possibile esaminare il codice sorgente, segnalare bug e " +"fare richieste.\n" +"

\n" +"\n" +"

\n" +"È possibile contribuire al progetto semplicemente usando Frescobaldi e " +"riportando bug o consigli.\n" +"Anche le traduzioni sono benvenute. Come creare nuove traduzioni è " +"descritto\n" +"nel file README-translations tra i file sorgente di Frescobaldi.\n" +"Se si desidera aggiungere nuove funzionalità, si possono trovare indicazioni " +"sulla struttura del codice sorgente\n" +"nel file README-development.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:321 +msgid "History of Frescobaldi" +msgstr "Storia di Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi ha le sue radici in LilyKDE, un plugin per l'editor Kate di " +"KDE3.\n" +"LilyKDE era scritto in Python e fu pubblicato a Natale del 2007.\n" +"

\n" +"\n" +"

\n" +"Quando fu sviluppata KDE versione 4, non fu immediatamente possibile\n" +"usare in Kate i plugin scritti in Python. LilyKDE divenne così " +"un'applicazione\n" +"indipendente, chiamata Frescobaldi, che comprendeva il componente texteditor " +"di Kate e il componente KDE Okular\n" +"per mostrare i documenti PDF.\n" +"Frescobaldi 0.7 fu il primo rilascio pubblico, a Natale del 2008.\n" +"A Natale 2009 fu rilasciata la versione 1.0.0 e a Natale 2010 la versione " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"A quel punto fu deciso di non servirsi più delle librerie KDE4 ma soltanto\n" +"di Python e delle librerie Qt4 entrambi facilmente disponibili per tutte le " +"maggiori piattaforme.\n" +"Frescobaldi 2.0 è una completa riscrittura da zero. La sua data di rliascio\n" +"è prevista per Natale 2011.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "L'editor" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" +"

\n" +"In questa sezione, sono trattate le funzioni dell'editor;\n" +"ad esempio, come controllare l'indentazione automatica,\n" +"come usare il cerca e sostituisci, e altro.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "Cerca e sostituisci" + +#: frescobaldi_app/help/contents.py:377 +msgid "Edit" +msgstr "Modifica" + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" +"

\n" +"Nel menu {edit_menu} si trovano i comandi Cerca ({key_search})\n" +"e Sostituisci ({key_replace}), che aprono una piccola finestra nella parte " +"bassa\n" +"del riquadro dell'editor.\n" +"È possibile cercare sia testo semplice sia espressioni regolari.\n" +"

\n" +"\n" +"

\n" +"Le espressioni regolari sono testi di ricerca sofisticata che contengono " +"caratteri che possono\n" +"corrispondere a più caratteri nel documento.\n" +"Quando si sostituisce del testo, è anche possibile far riferimento a parti " +"fra parentesi\n" +"nel testo di ricerca.\n" +"

\n" +"\n" +"

\n" +"Nella modalità di ricerca con espressioni regolari, alcuni caratteri hanno " +"un significato particolare:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
trova zero o più copie del carattere o dell'espressione che lo " +"precedono
\n" +"
+
\n" +"
trova una o più copie del carattere o dell'espressione che lo precedono\n" +"
?
\n" +"
trova zero o una copia del carattere o dell'espressione che lo " +"precedono
\n" +"
[ ]
\n" +"
trova uno qualsiasi dei caratteri contenuti
\n" +"
( )
\n" +"
raggruppa i caratteri. Questo salva anche il testo trovato nel gruppo.\n" +"Per la sostituzione, si possono usare caratteri come \\1, " +"\\2\n" +"eccetera, per inserire il testo da sostituire per ciascun gruppo.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
trovano, rispettivamente, una barra inversa, un carattere di newline, " +"una tabulazione,\n" +"tutti gli spazi bianchi, un numero, un carattere generico che si può trovare " +"in una parola.
\n" +"
\n" +"\n" +"

\n" +"Una trattazione completa sulle espressioni regolari si può leggere nella\n" +"documentazione\n" +"di Python.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:427 +msgid "Document variables" +msgstr "Variabili di documento" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" +"Le variabili di documento sono variabili che influenzano il comportamento di " +"Frescobaldi.\n" +"Possono essere scritte nelle prime o nelle ultime cinque righe del " +"documento.\n" +"Se una riga contiene '-*-', Frescobaldi cercherà nelle " +"altre righe\n" +"definizioni di variabili del tipo nome: valore;.\n" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "Sono riconosciute le seguenti variabili:" + +#: frescobaldi_app/help/contents.py:444 +msgid "mode" +msgstr "mode" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" +"Imposta la modalità dell'editor per lilypond, html, texinfo, latex, docbook " +"o scheme. Predefinito: riconoscimento automatico della modalità." + +#: frescobaldi_app/help/contents.py:448 +msgid "filename" +msgstr "filename" + +#: frescobaldi_app/help/contents.py:449 +msgid "Compiles another LilyPond document instead of the current." +msgstr "Compila un documento LilyPond diverso da quello attuale." + +#: frescobaldi_app/help/contents.py:450 +msgid "encoding" +msgstr "encoding" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "Imposta una codifica diversa da quella predefinita, che è UTF-8." + +#: frescobaldi_app/help/contents.py:452 +msgid "version" +msgstr "version" + +#: frescobaldi_app/help/contents.py:453 +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "" +"Imposta la versione di LilyPond da usare, si può usare anche in documenti " +"non-LilyPond." + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +msgid "number" +msgstr "number" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "" +"La larghezza di un carattere di tabulazione, il valore predefinito è 8." + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "" +"Se usare o meno le tabulazioni per indentare, l'impostazione predefinita è " +"{no}." + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" +"Se usare o meno le tabulazioni nel resto del documento, valore predefinito: " +"{yes}." + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" +"Numero di spazi per ogni livello di indentazione, il valore predefinito è 2." + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "È possibile inserire le variabili di documento nei commenti." + +#: frescobaldi_app/help/contents.py:479 +msgid "Table of Contents" +msgstr "Indice" + +#: frescobaldi_app/help/helpimpl.py:115 +msgid "Up:" +msgstr "Liv. sup.:" + +#: frescobaldi_app/help/helpimpl.py:130 +msgid "Next:" +msgstr "Avanti:" + +#: frescobaldi_app/help/helpimpl.py:133 +msgid "See also:" +msgstr "Vedi anche:" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "(nessun tasto definito)" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "LilyPond log" + +#: frescobaldi_app/logtool/__init__.py:51 +msgid "LilyPond &Log" +msgstr "Messaggi &LilyPond" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "Messaggio d'errore succ." + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "Messaggio d'errore prec." + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Fare clic per modificare questo file" + +#: frescobaldi_app/miditool/__init__.py:51 +msgid "MIDI" +msgstr "MIDI" + +#: frescobaldi_app/miditool/__init__.py:52 +msgid "MIDI &Player" +msgstr "&Lettore MIDI" + +#: frescobaldi_app/miditool/__init__.py:97 +msgctxt "midi player" +msgid "Pause" +msgstr "Pausa" + +#: frescobaldi_app/miditool/__init__.py:98 +msgctxt "midi player" +msgid "Play" +msgstr "Riproduci" + +#: frescobaldi_app/miditool/__init__.py:99 +msgctxt "midi player" +msgid "Stop" +msgstr "Ferma" + +#: frescobaldi_app/miditool/__init__.py:100 +msgctxt "midi player" +msgid "Restart" +msgstr "Riavvolgi" + +#: frescobaldi_app/miditool/widget.py:102 +msgid "Tempo" +msgstr "Tempo" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "Nessun output trovato!" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "CARICATO" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "TOTALE" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "DURATA" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "RITMO" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "TEMPO" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "Anteprima spartito" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "Anteprima &spartito" + +#: frescobaldi_app/musicview/__init__.py:191 +msgid "Select Music View Document" +msgstr "Scegliere un documento per l'Anteprima spartito" + +#: frescobaldi_app/musicview/__init__.py:192 +msgid "&Print Music..." +msgstr "&Stampa la musica..." + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "&Aumenta zoom" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "&Diminuisci zoom" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "Fai zoom sullo spartito" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "Adatta alla &larghezza" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "Adatta all'&altezza" + +#: frescobaldi_app/musicview/__init__.py:198 +msgid "Fit &Page" +msgstr "Adatta alla &pagina" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "&Salta alla posizione del cursore" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "Copia come &immagine..." + +#: frescobaldi_app/musicview/__init__.py:339 +msgid "Choose the PDF document to display." +msgstr "Scegli il documento PDF da mostrare." + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" +"Scegli il documento PDF da mostrare o trascina il file ad un'altra " +"applicazione o posizione." + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "Adatta alla larghezza" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "Adatta all'altezza" + +#: frescobaldi_app/musicview/__init__.py:401 +msgid "Fit Page" +msgstr "Adatta alla pagina" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "DPI:" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "Colore della carta" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "Ritaglio automatico" + +#: frescobaldi_app/musicview/image.py:129 +msgid "Antialias" +msgstr "Antialias" + +#: frescobaldi_app/musicview/image.py:130 +#, fuzzy +msgid "Drag" +msgstr "Dorico" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "Trascinare l'immagine come un file PNG." + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "&Copia negli appunti" + +#: frescobaldi_app/musicview/image.py:133 +msgid "&Save As..." +msgstr "&Salva come..." + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" +"

\n" +"Fare click per alternare tra la vista al 100% o ridotta alle dimensioni " +"della finestra. Trascinare l'immagine per copiarla in un'altra applicazione. " +"Trascinare con Ctrl (o {command}) per scorrere un'immagine molto grande.\n" +"

\n" +"

\n" +"È anche possibile trascinare l'icona dell'immagine in piccolo che si trova " +"nell'angolo in fondo a destra e trascinare il corrispondente file sul disco, " +"ad esempio per allegarlo ad una email.\n" +"

" + +#: frescobaldi_app/musicview/image.py:167 +msgid "Image from {filename}" +msgstr "Immagine da {filename}" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "Salva immagine come" + +#: frescobaldi_app/musicview/image.py:214 +msgid "Could not save the image." +msgstr "Impossibile salvare l'immagine." + +#: frescobaldi_app/pitch/__init__.py:99 +msgid "Pitch Name &Language" +msgstr "&Lingua per i nomi delle note" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" +"Cambia la lingua usata da LilyPond per i nomi delle note nel documento o " +"nella selezione." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "Converti Relative in &Absolute" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" +"Converte le note nel documento o nella selezione dalla notazione " +"relativadelle altezze a quella assoluta." + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "Converti Absolute in &Relative" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "" +"Converte le note nel documento o nella selezione dalla notazione assoluta " +"delle altezze a quella relativa." + +#: frescobaldi_app/pitch/__init__.py:111 +msgid "&Transpose..." +msgstr "&Trasponi..." + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "Traspone tutte le note nel documento o nella selezione." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Lingua per i nomi delle note" + +#: frescobaldi_app/pitch/pitch.py:82 +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"Impossibile eseguire la traduzione richiesta.\n" +"\n" +"La musica contiene alterazioni da un quarto di tono che non sono disponibili " +"nella lingua selezionata: \"{name}\"." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"I nomi delle note nel testo selezionato sono stati aggiornati, ma è " +"necessario aggiungere a mano nel documento il seguente comando:" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "(per le versioni LilyPond precedenti a 2.14), o" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "(per LilyPond 2.14 e versioni seguenti.)" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "Trasporre" + +#: frescobaldi_app/pitch/pitch.py:399 +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" +"Inserire due note (in modalità Absolute) separate da uno spazio e usando per " +"i nomi la lingua \"{language}\"." + +#: frescobaldi_app/pitch/pitch.py:581 +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"Impossibile eseguire la trasposizione richiesta.\n" +"\n" +"La musica trasposta conterrebbe alterazioni da un quarto di tono che non " +"sono disponibili nella lingua \"{language}\" delle note." + +#: frescobaldi_app/pitch/pitch.py:712 +msgid "Pitch manipulation" +msgstr "Modificare le altezze delle note" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" +"

\n" +"Frescobaldi offre le seguenti funzioni per modificare le altezze delle " +"note;\n" +"si trovano tutte nel menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Lingua per i nomi delle note
\n" +"
\n" +"Con questa si possono tradurre i nomi di tutte le note in un documento o in " +"una selezione.\n" +"
\n" +"\n" +"
Converti Relative in Absolute
\n" +"
\n" +"Con questa è possibile convertire le note dalla modalità \\relative alle altezze assolute.\n" +"Dopo essere stati verificati, i controlli di ottava vengono rimossi.\n" +"
\n" +"\n" +"
Convertl Absolute in Relative
\n" +"
\n" +"Controlla tutte le parti che contengono musica, convertendole in\n" +"modalità \\relative se sono presenti delle note.\n" +"Per convertire sottosezioni, mantenendole separate, può essere necessario\n" +"selezionare la musica dalla prima espressione, escludendo le graffe\n" +"di apertura del livello superiore.\n" +"
\n" +"\n" +"
\n" + +#: frescobaldi_app/pitch/pitch.py:744 +msgctxt "submenu title" +msgid "Pitch" +msgstr "Note" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" +"

\n" +"Per trasporre della musica, si devono inserire due note, indicando le loro\n" +"altezze assolute, per fissare l'intervallo della trasposizione. Le altezze\n" +"possono avere segni d'ottava e devono essere inserite nella lingua usata nel " +"documento.\n" +"

\n" +"\n" +"

\n" +"La musica sarà quindi trasposta per l'intervallo indicato, come farebbe\n" +"il comando LilyPond \\transpose.\n" +"

\n" +"\n" +"

\n" +"Ad esempio, per salire di una terza minore, si può usare:
\n" +"do mib\n" +"

\n" +"\n" +"

\n" +"Per scendere di una seconda maggiore, si può usare:
\n" +"do sib,\n" +"

\n" +"\n" +"

\n" +"oppure:
\n" +"re do\n" +"

\n" +"\n" +"

\n" +"È possibile usare questa funzione per trasporre della musica da do diesis\n" +"a re bemolle o anche per intervalli di quarti di tono, se questi\n" +"sono disponibili nella lingua che si sta usando.\n" +"

\n" +"\n" +"

\n" +"La funzione per trasporre si può usare con musica inserita sia in modalità\n" +"relativa che assoluta e gestisce correttamente cambi di tonalità, accordi e " +"controlli di ottava.\n" +"

\n" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "Uso" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "Uso: %s\n" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "mostra questo messaggio d'aiuto ed esce" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "mostra il numero di versione del programma ed esce" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "Opzioni" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "Chiudi scheda" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "Che cos'è?" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "Applica" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "OK" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "Annulla" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "Scarta" + +#: frescobaldi_app/po/messages.py:44 +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Salva" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "Aiuto" + +#: frescobaldi_app/po/messages.py:46 +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Chiudi" + +#: frescobaldi_app/po/messages.py:47 +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Apri" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "Ripristina" + +#: frescobaldi_app/po/messages.py:50 +msgctxt "QFileDialog" +msgid "File" +msgstr "File" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "Cartella" + +#: frescobaldi_app/po/messages.py:52 +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Cerca cartella" + +#: frescobaldi_app/po/messages.py:53 +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Tutti i file (*)" + +#: frescobaldi_app/po/messages.py:55 +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "Scorri qui" + +#: frescobaldi_app/po/messages.py:56 +msgctxt "QScrollBar" +msgid "Top" +msgstr "Inizio" + +#: frescobaldi_app/po/messages.py:57 +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Fine" + +#: frescobaldi_app/po/messages.py:58 +msgctxt "QScrollBar" +msgid "Page up" +msgstr "Pagina su" + +#: frescobaldi_app/po/messages.py:59 +msgctxt "QScrollBar" +msgid "Page down" +msgstr "Pagina giù" + +#: frescobaldi_app/po/messages.py:60 +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "Scorri in alto" + +#: frescobaldi_app/po/messages.py:61 +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "Scorri in basso" + +#: frescobaldi_app/po/messages.py:62 +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Margine sinistro" + +#: frescobaldi_app/po/messages.py:63 +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Margine destro" + +#: frescobaldi_app/po/messages.py:64 +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Pagina sinistra" + +#: frescobaldi_app/po/messages.py:65 +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Pagina destra" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "Scorri a sinistra" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "Scorri a destra" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Opzioni generali" + +#: frescobaldi_app/preferences/__init__.py:182 +msgid "MIDI Settings" +msgstr "Impostazioni MIDI" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +#, fuzzy +msgid "Helper Applications" +msgstr "Applicazioni ausiliarie" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Percorsi" + +#: frescobaldi_app/preferences/__init__.py:212 +msgid "LilyPond Documentation" +msgstr "Documentazione LilyPond" + +#: frescobaldi_app/preferences/__init__.py:222 +msgid "Keyboard Shortcuts" +msgstr "Scorciatoie" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "Caratteri e colori" + +#: frescobaldi_app/preferences/__init__.py:242 +msgid "Tools" +msgstr "Strumenti" + +#: frescobaldi_app/preferences/documentation.py:64 +msgid "Paths to LilyPond Documentation" +msgstr "Percorsi alla documentazione LilyPond:" + +#: frescobaldi_app/preferences/documentation.py:66 +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "" +"Aggiungere percorsi locali o URL. Consultare il \"Che cos'è\" per ulteriori " +"informazioni." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" +"

Qui si possono aggiungere percorsi locali o URL per la documentazione " +"LilyPond. Un percorso locale di solito rimanda ad una cartella dove si trova " +"la cartella \"{documentation}\" o tutto il percorso \"share/doc/lilypond/" +"html/offline-root\".

\n" +"

Se non si verificherà nessuno di questi due casi, la documentazione sarà " +"cercata in tutte le sottocartelle del livello immediatamente inferiore a " +"quello del percorso dato. Questo permette di avere diverse versioni della " +"documentazione LilyPond in differenti cartelle che Frescobaldi troverà " +"automaticamente.

" + +#: frescobaldi_app/preferences/documentation.py:111 +msgid "Preferred Language:" +msgstr "Lingua preferita:" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "Predefinita" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "Inglese (non tradotto)" + +#: frescobaldi_app/preferences/documentation.py:135 +msgid "Please enter a local path or a URL:" +msgstr "Inserire un percorso locale o un URL:" + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "Usa questo schema per la stampa" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "Carattere:" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "Colori di base" + +#: frescobaldi_app/preferences/fontscolors.py:124 +msgid "Default Styles" +msgstr "Stili predefeniti" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "(Acquisito da: {name})" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +msgid "Text" +msgstr "Testo" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "Sfondo" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "Grassetto" + +#: frescobaldi_app/preferences/fontscolors.py:363 +msgid "Italic" +msgstr "Corsivo" + +#: frescobaldi_app/preferences/fontscolors.py:364 +msgid "Underline" +msgstr "Sottolineato" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +msgid "Selected Text" +msgstr "Selezione (testo)" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "Selezione (sfondo)" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "Riga attuale" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +msgid "Marked Line" +msgstr "Riga contrassegnata" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +msgid "Error Line" +msgstr "Riga con errore" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "Risultato ricerca" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +msgid "Matching Character" +msgstr "Carattere corrispondente" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +msgid "Preview Background" +msgstr "Sfondo anteprima" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "Selezione anteprima" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +msgid "Keyword" +msgstr "Parola chiave" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +msgid "Function" +msgstr "Funzione" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "Variabile" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +msgid "Value" +msgstr "Valore" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +msgid "String" +msgstr "Stringa" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +msgid "Escape" +msgstr "Escape" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +msgid "Comment" +msgstr "Commento" + +#: frescobaldi_app/preferences/fontscolors.py:483 +msgid "Pitch" +msgstr "Nota" + +#: frescobaldi_app/preferences/fontscolors.py:484 +msgid "Octave" +msgstr "Ottava" + +#: frescobaldi_app/preferences/fontscolors.py:485 +msgid "Duration" +msgstr "Durata" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "Controllo d'ottava" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "Ditteggiatura" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +msgid "String Number" +msgstr "Numero di corda" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "Legatura" + +#: frescobaldi_app/preferences/fontscolors.py:491 +msgid "Dynamic" +msgstr "Dinamica" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Fraseggio" + +#: frescobaldi_app/preferences/fontscolors.py:493 +msgid "Chord" +msgstr "Accordo" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "Raggruppamento" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "Controllo" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +msgid "Repeat" +msgstr "Ritornello" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "Comando" + +#: frescobaldi_app/preferences/fontscolors.py:499 +msgid "Specifier" +msgstr "Specificatore" + +#: frescobaldi_app/preferences/fontscolors.py:500 +msgid "User Command" +msgstr "Comando dell'utente" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +msgid "Markup" +msgstr "Blocco di testo (markup)" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "Modalità parole" + +#: frescobaldi_app/preferences/fontscolors.py:503 +msgid "Lyric Text" +msgstr "Parole" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "Delimitatore" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "Contesto" + +#: frescobaldi_app/preferences/fontscolors.py:506 +msgid "Layout Object" +msgstr "Oggetto di layout" + +#: frescobaldi_app/preferences/fontscolors.py:507 +msgid "Property" +msgstr "Proprietà" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "Variabile dell'utente" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +msgid "Escaped Character" +msgstr "Carattere d'escape" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "HTML" + +#: frescobaldi_app/preferences/fontscolors.py:517 +msgid "Tag" +msgstr "Tag" + +#: frescobaldi_app/preferences/fontscolors.py:518 +msgid "LilyPond Tag" +msgstr "Etichetta LilyPond" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "Attributo" + +#: frescobaldi_app/preferences/fontscolors.py:521 +msgid "Entity Reference" +msgstr "Entità di carattere" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "Scheme" + +#: frescobaldi_app/preferences/fontscolors.py:527 +msgid "Number" +msgstr "Numero" + +#: frescobaldi_app/preferences/fontscolors.py:528 +msgid "LilyPond Environment" +msgstr "Ambiente LilyPond" + +#: frescobaldi_app/preferences/fontscolors.py:532 +msgid "Texinfo" +msgstr "Texinfo" + +#: frescobaldi_app/preferences/fontscolors.py:534 +msgid "Block" +msgstr "Blocco" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "Verbatim" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Lingua:" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "Nessuna traduzione" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "Lingua predefinita del sistema (se disponibile)" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Tipo:" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "Usa le icone del sistema" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" +"Se spuntato, saranno usate le icone del sistema invece di quelle proprie del " +"programma.\n" +"Questa impostazione avrà effetto dopo il riavvio di {appname}." + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "Sessione da caricare se Frescobaldi è avviato senza argomenti" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "Avvia senza sessione" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "Avvia con l'ultima sessione utilizzata" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "Avvia con la sessione:" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "Al salvataggio dei documenti" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "Mantieni la copia di sicurezza" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" +"Frescobaldi fa sempre una copia di sicurezza di un file prima di " +"sovrascriverlo con una nuova versione.\n" +"Se questo è selezionato, le copie di sicurezza vengono conservate." + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "Ricorda la posizione del cursore, i segnalibri, ecc." + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Cartella predefinita:" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "La cartella predefinita dei documenti LilyPond (facoltativo)." + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:71 +#, fuzzy +msgid "MIDI:" +msgstr "MIDI" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:76 +#, fuzzy +msgid "File Manager:" +msgstr "Nome dei file" + +#: frescobaldi_app/preferences/helpers.py:77 +#, fuzzy +msgid "Shell:" +msgstr "Schema:" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:81 +msgid "LilyPond versions to use" +msgstr "Versioni di LilyPond da usare" + +#: frescobaldi_app/preferences/lilypond.py:82 +msgid "Automatically choose LilyPond version from document" +msgstr "Scegli automaticamente la versione di Lilypond dal documento" + +#: frescobaldi_app/preferences/lilypond.py:84 +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" +"Se selezionato, la versione del documento determina quale versione di " +"LilyPond sarà usata.\n" +"Consultare \"Che cos'è\" per maggiori informazioni." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" +"

Se questa impostazione è attivata, verrà cercato nel documento il comando " +"LilyPond \\version o una variabile version.

\n" +"

Il comando LilyPond per indicare la versione ha questa forma:

\n" +"
\\version \"2.14.10\"
\n" +"

La variabile invece ha questa forma:

-*-version: 2.14.10;

e deve trovarsi in una sezione di commento fra le prime o le ultime 5 " +"righe del documento.\n" +"In questo modo si può specificare la versione di LilyPond da usare anche in " +"documenti non-LilyPond, come HTML, LaTeX, ecc.

\n" +"

Se il documento specifica una versione di LilyPond, viene scelta la più " +"vecchia. Altrimenti si sceglie quella predefinita.

\n" + +#: frescobaldi_app/preferences/lilypond.py:101 +msgid "See also {link}." +msgstr "Vedere anche {link}." + +#: frescobaldi_app/preferences/lilypond.py:149 +msgid "Set as &Default" +msgstr "Imposta come predefinita" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "predefinita" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "Comando LilyPond:" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "Nome o percorso completo dell'eseguibile di LilyPond." + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "Convert-ly:" + +#: frescobaldi_app/preferences/lilypond.py:241 +msgid "LilyPond-book:" +msgstr "LilyPond-book:" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "Abilita per la selezione automatica della versione" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "LilyPond in esecuzione" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "Salva il documento se possibile" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" +"Se segnato, prima di eseguire LilyPond su un documento locale con modifiche " +"quest'ultimo viene salvato;\n" +"altrimenti, LilyPond viene eseguito usando una copia temporanea del file." + +#: frescobaldi_app/preferences/lilypond.py:286 +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "" +"Se attivato, LilyPond cancellerà i file di output intermedi (ad es. " +"PostScript)." + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "Percorso dei file aggiuntivi per LilyPond:" + +#: frescobaldi_app/preferences/midi.py:77 +msgid "MIDI Ports" +msgstr "Porte MIDI" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" +"Attenzione: non ci sono porte MIDI in uscita disponibili nel sistema. Per " +"usare il MIDI, controllare che PortMIDI sia installato e che sia disponibile " +"e collegato un sintetizzatore MIDI." + +#: frescobaldi_app/preferences/midi.py:82 +msgid "Player output:" +msgstr "Uscita del lettore:" + +#: frescobaldi_app/preferences/midi.py:84 +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" +"La porta MIDI a cui indirizzare la musica. Consultare il \"Che cos'è\" per " +"ulteriori informazioni." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" +"

Questo menu a tendina mostra le porte MIDI disponibili nel sistema. È " +"possibile selezionarne una o semplicemente digitare parte di un nome. In " +"questo caso, sarà usata la prima porta il cui nome inizia con i caratteri " +"inseriti.

\n" +"

Fare click sul pulsante per aggiornare la lista, ad esempio quando si " +"collega un dispositivo MIDI o si avvia un sintetizzatore software.

" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "Ricarica le porte MIDI" + +#: frescobaldi_app/preferences/midi.py:135 +msgid "Close unused MIDI output" +msgstr "Chiudi le uscite MIDI inutilizzate" + +#: frescobaldi_app/preferences/midi.py:137 +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" +"Chiude le porte MIDI rimaste inutilizzate per più di un minuto. Consultare " +"il \"Che cos'è\" per ulteriori informazioni." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" +"

Se selezionato, Frescobaldi chiuderà le porte MIDI di uscita che restino " +"inutilizzate per più di un minuto.

\n" +"

Questo potrebbe liberare alcune delle risorse del sistema altrimenti " +"impegnate dal sintetizzatore MIDI e risparmiare così la batteria.

\n" +"

Potrebbe però succedere che, mettendo in pausa un file MIDI a lungo, gli " +"strumenti siano resettati al pianoforte predefinito (strumento 0). In quel " +"caso, riprodurre il file dall'inizio per reimpostare gli strumenti.

\n" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "Cartelle con i dizionari per la sillabazione" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Scorciatoia" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "Menu {name}:" + +#: frescobaldi_app/preferences/shortcuts.py:125 +msgid "Other commands:" +msgstr "Altri comandi:" + +#: frescobaldi_app/preferences/shortcuts.py:173 +msgid "&Edit Shortcut for \"{name}\"" +msgstr "&Modifica la scorciatoia per \"{name}\"" + +#: frescobaldi_app/preferences/shortcuts.py:178 +msgid "(no shortcut)" +msgstr "(nessuna scorciatoia)" + +#: frescobaldi_app/preferences/shortcuts.py:206 +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "Cancellare la scorciatoia da questo comando?" +msgstr[1] "Cancellare le scorciatoie da questi comandi?" + +#: frescobaldi_app/preferences/shortcuts.py:304 +msgid "(default)" +msgstr "(predefinita)" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "Mostra i messaggi di esecuzione quando si avvia un processo" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "Mostra i messaggi di LilyPond come sono" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" +"Se spuntato, Frescobaldi non abbrevierà i nomi dei file\n" +"nei messaggi di esecuzione di LilyPond." + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "Anteprima spartito" + +#: frescobaldi_app/preferences/tools.py:142 +msgid "Magnifier Size:" +msgstr "Lente d'ingrandimento:" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "" +"Dimensioni della lente d'ingrandimento. (Ctrl+Click nell'Anteprima spartito)." + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr " pixel" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "Fattore d'ingrandimento:" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "Quante volte ingrandisce la lente." + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "%" + +#: frescobaldi_app/preferences/tools.py:220 +#, fuzzy +msgid "Group documents by directory" +msgstr "Apri la cartella attuale" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Inserimento veloce" + +#: frescobaldi_app/quickinsert/__init__.py:48 +msgid "Quick &Insert" +msgstr "&Inserimento veloce" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Permetti abbreviazioni" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "Usa la forma breve per alcuni segni come lo staccato." + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Segni" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Vari tipi di indicazione per il fraseggio e altro." + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Accento" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Marcato" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Staccatissimo" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Staccato" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Portato" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Tenuto" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Abbellimenti" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Trillo" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Mordente superiore" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Mordente inferiore" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Gruppetto" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "Doppio mordente" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "Doppio mordente" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "Mordente dal basso" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "Mordente dall'acuto" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "Mordente inf. dal basso" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "Mordente inf. dall'acuto" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "Mordente con risoluzione" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "Mordente con risoluzione" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "Mordente con appoggiatura" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Gruppetto rovesciato" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "Segni" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Corona" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Corona breve" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Corona lunga" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Corona lunghissima" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Segno" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Var. Coda" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "Signum congruentiae" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Altro" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Arcata in su" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Arcata in giù" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "Snappizzicato" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "Aperto (come per gli ottoni, ad. es.)" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "Chiuso (come per gli ottoni, ad. es.)" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Flageolet" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Pollice" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Tacco sinistro" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Tacco destro" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "Punta sinistra" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Punta destra" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "Mezzo aperto (hi-hat, ad es.)" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "Stanghette" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "Stanghette, respiri e altro." + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Doppia stanghetta" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "Stanghetta finale" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "Stanghetta punteggiata" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "Stanghetta tratteggiata" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Stanghetta invisibile" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "Inizio ritornello" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "Doppio ritornello" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "Fine ritornello" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "Doppio ritornello (antico)" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "Doppio ritornello (classico)" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "Stanghetta corta" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "Stanghetta semplice" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "Stanghetta sottile-grossa-sottile" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "Stanghetta grossa-sottile" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "Doppia stanghetta grossa" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "Stanghetta con l'indicazione \"segno\"" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "Respiri" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "Respiro normale" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "Respiro dritto" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "Cesura curva" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "Cesura dritta" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "{name} ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +msgid "Configure Keyboard Shortcut ({key})" +msgstr "Configura la scorciatoia ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Niente" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "Dinamiche" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "Segni di dinamica." + +#: frescobaldi_app/quickinsert/dynamics.py:128 +msgid "Dynamic sign {name}" +msgstr "Segno di dinamica {name}" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "Indicazioni estese" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "Forcella 'crescendo'" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "Forcella 'diminuendo'" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "Decrescendo" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "Legature, indicazioni estese e altro." + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "Arpeggi" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "Arpeggio con freccia in su" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "Arpeggio con freccia in giù" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "Arpeggio a parentesi quadra" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "Arpeggio a parentesi tonda" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "Glissando tratteggiato" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "Glissando punteggiato" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "Glissando a zig-zag" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "Glissando con la linea del trillo" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "Legatura di frase" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" +"

Con il Panello di Inserimento veloce è possibile aggiungere vari elementi " +"musicali alla nota attuale o a un passaggio selezionato

\n" +"

Consultare {link} per maggiori informazioni.

" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Posizione:" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Sopra" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Indifferente" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Sotto" + +#: frescobaldi_app/quickinsert/widget.py:127 +msgid "The Quick Insert Panel" +msgstr "Pannello di Inserimento veloce" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" +"

\n" +"Con gli strumenti del Pannello di Inserimento veloce è possibile aggiungere\n" +"vari elementi musicali ad una nota o ad un passaggio selezionato.\n" +"

\n" +"\n" +"

\n" +"La casella Posizione permette di scegliere se articolazioni, " +"dinamiche o legature\n" +"saranno collocate automaticamente (cioè a seconda della direzione del " +"gambo)\n" +"oppure sempre sopra o sotto il rigo aggiungendo i caratteri\n" +" -, ^ o _.\n" +"

\n" +"\n" +"

\n" +"Fare click su una linguetta per scegliere uno strumento. È anche possibile\n" +"scorrere i vari strumenti con Ctrl (o {command}) e la rotellina del mouse.\n" +"Tutti i pulsanti del Pannello di Inserimento veloce hanno una scorciatoia\n" +"configurabile premendo il tasto destro del mouse.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" +"

Segni

\n" +"\n" +"

\n" +"Questi simboli musicali possono essere aggiunti ad una nota sola o a tutte\n" +"le note in un passaggio selezionato.\n" +"In quest'ultimo caso, non verranno aggiunti alle pause.\n" +"Se non è selezionato nessun testo, il cursore si sposterà automaticamente " +"alla nota,\n" +"pausa, accordo o skip successivi.\n" +"

\n" +"\n" +"

\n" +"Se Permetti abbreviazioni è abilitato, Frescobaldi userà i comandi\n" +"abbreviati dei segni, se esistono\n" +"(ad es., -. al posto di -\\staccato).\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" +"

Dinamiche

\n" +"\n" +"

\n" +"Le indicazioni dinamiche possono essere aggiunte ad una nota o ad una " +"pausa.\n" +"Selezionando un passaggio, è possibile aggiungere indicazioni estese che " +"finiranno\n" +"automaticamente all'ultima nota, pausa o accordo della selezione.\n" +"Se a quel punto poi si fa click su una dinamica, quest'ultima verrà usata " +"come simbolo di chiusura dell'indicazione estesa.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" +"

Indicazioni estese

\n" +"\n" +"

\n" +"Questo strumento permette di aggiungere segni di arpeggio, glissando\n" +"ed altre indicazioni estese come legature, legature di frase, trilli o " +"raggruppamenti manuali.\n" +"

\n" +"\n" +"

\n" +"I segni di arpeggio e glissando si applicano alla nota su cui si trova il " +"cursore;\n" +"non serve selezionare un passaggio.\n" +"Le legature, i trilli e i raggruppamenti si applicano alla nota corrente e " +"alla successiva,\n" +"se non è selezionato nulla,\n" +"oppure si applicano dalla prima all'ultima nota (o accordo) di una " +"selezione.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" +"

Stanghette

\n" +"\n" +"

\n" +"Da qui si possono inserire stanghette e diversi segni di respiro.\n" +"

\n" + +#: frescobaldi_app/rhythm/__init__.py:146 +msgid "&Double durations" +msgstr "&Raddoppia le durate" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Raddoppia tutte le durate nella selezione." + +#: frescobaldi_app/rhythm/__init__.py:149 +msgid "&Halve durations" +msgstr "&Dimezza le durate" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Dimezza tutte le durate nella selezione." + +#: frescobaldi_app/rhythm/__init__.py:152 +msgid "Do&t durations" +msgstr "&Punto di valore" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Aggiunge un punto di valore a tutte le durate nella selezione." + +#: frescobaldi_app/rhythm/__init__.py:155 +msgid "&Undot durations" +msgstr "Togli un punto di &val." + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Toglie un punto di valore da tutte le durate nella selezione." + +#: frescobaldi_app/rhythm/__init__.py:158 +msgid "Remove &scaling" +msgstr "&Togli i gruppi irregolari" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "Toglie tutti i gruppi irregolari (*n/m) dalle durate nella selezione." + +#: frescobaldi_app/rhythm/__init__.py:161 +msgid "&Remove durations" +msgstr "To&gli le durate" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "Toglie tutte le indicazioni di durata dalla selezione." + +#: frescobaldi_app/rhythm/__init__.py:164 +msgid "Make &implicit" +msgstr "&Nascondi le durate" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "Toglie la durata dopo una nota se è la stessa della nota precedente." + +#: frescobaldi_app/rhythm/__init__.py:167 +msgid "Make implicit (per &line)" +msgstr "N&ascondi le durate (ogni riga per sé)" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" +"Toglie la durata dopo una nota se è la stessa della nota precedente, tranne " +"che per la prima durata in ogni riga." + +#: frescobaldi_app/rhythm/__init__.py:171 +msgid "Make &explicit" +msgstr "Most&ra le durate" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" +"Aggiunge la durata dopo ogni nota anche se è la stessa della nota precedente." + +#: frescobaldi_app/rhythm/__init__.py:175 +msgid "&Apply rhythm..." +msgstr "Applica uno sc&hema ritmico..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Applica lo schema ritmico inserito alla musica selezionata." + +#: frescobaldi_app/rhythm/__init__.py:178 +msgid "&Copy rhythm" +msgstr "&Copia lo schema ritmico" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Copia lo schema ritmico della musica selezionata." + +#: frescobaldi_app/rhythm/__init__.py:181 +msgid "&Paste rhythm" +msgstr "Incol&la lo schema ritmico" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Incolla lo schema ritmico alla musica selezionata." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Applica uno schema ritmico" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Inserire uno schema ritmico:" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "Modificare gli schemi ritmici" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" +"

\n" +"Le funzioni di Frescobaldi per il ritmo modificano le durate scritte dopo le " +"note,\n" +"gli accordi, le pause, eccetera. Usando queste funzioni, tutte nel menu " +"{menu},\n" +"è possibile duplicare o dimezzare la lunghezza delle note, aggiungere o " +"togliere\n" +"punti di valore e gruppi irregolari.\n" +"

\n" +"\n" +"

\n" +"Inoltre, è possibile cambiare il modo in cui il ritmo è espresso: per ogni " +"nota\n" +"(esplicitamente) o solo ai cambi di durata (implicitamente). Alcuni utenti " +"potrebbero preferire\n" +"l'opzione \"implicitamente per riga\", con la quale viene indicata sempre la " +"durata della prima\n" +"nota, pausa o accordo della riga.\n" +"

\n" +"\n" +"

\n" +"Gli ultimi tre comandi del menu permettono di copiare, incollare o applicare " +"uno schema ritmico\n" +"inserito in una finestra di dialogo.\n" +"

\n" +"\n" +"

\n" +"Nella finestra \"Applica uno schema ritmico\" si può inserire una serie di " +"durate, ad es.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"che saranno poi applicate ciclicamente alle note selezionate.\n" +"

\n" + +#: frescobaldi_app/rhythm/rhythm.py:279 +msgctxt "submenu title" +msgid "Rhythm" +msgstr "Ritmo" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Crea un nuovo spartito..." + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "Qui segue la musica." + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Elimina la tagline predefinita di LilyPond" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Configurazione assistita di un nuovo spartito" + +#: frescobaldi_app/scorewiz/dialog.py:80 +msgid "Clear" +msgstr "Svuota" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "Svuota la pagina attuale della Configurazione assistita." + +#: frescobaldi_app/scorewiz/dialog.py:83 +msgid "Preview" +msgstr "Anteprima" + +#: frescobaldi_app/scorewiz/dialog.py:130 +msgid "Score Preview" +msgstr "Anteprima spartito" + +#: frescobaldi_app/scorewiz/dialog.py:164 +msgid "&Titles and Headers" +msgstr "&Titoli e Intestazioni" + +#: frescobaldi_app/scorewiz/dialog.py:173 +msgid "&Parts" +msgstr "&Parti" + +#: frescobaldi_app/scorewiz/dialog.py:182 +msgid "&Score settings" +msgstr "&Impostazioni spartito" + +#: frescobaldi_app/scorewiz/dialog.py:191 +msgid "The Score Wizard" +msgstr "Configurazione assistita di un nuovo spartito" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" +"

\n" +"La Configurazione assistita di un nuovo spartito ({key}) in {menu}\n" +"è progettata per preparare rapidamente un documento LilyPond.\n" +"

\n" +"\n" +"

\n" +"Nella prima scheda, Titoli e intestazioni, è possibile\n" +"inserire le informazioni sul brano, l'autore e così via.\n" +"

\n" +"\n" +"

\n" +"Nella seconda scheda, Parti, è possibile costruire lo spartito\n" +"usando i vari tipi di strumenti disponibili in elenco.\n" +"Fare doppio click su una parte per aggiungerla allo spartito (o usare il " +"pulsante Aggiungi).\n" +"Selezionare la parte nell'elenco dello spartito per cambiarne le " +"impostazioni,\n" +"se lo si desidera.\n" +"Molte parti, in special modo il Coro, hanno opzioni molto versatili per " +"configurare\n" +"lo spartito nel modo desiderato.\n" +"

\n" +"\n" +"

\n" +"Nella terza scheda, Impostazioni spartito, è possibile inserire\n" +"le caratteristiche generali dello spartito.\n" +"

\n" +"\n" +"

\n" +"Usare il pulsante Anteprima per vedere un piccolo spartito d'esempio\n" +"con le impostazioni scelte.\n" +"Fare click su OK per generare il documento sorgente di LilyPond.\n" +"

\n" +"\n" +"

\n" +"Una caratteristica molto speciale e potente della scheda Parti\n" +"è nascosta nella categoria \"Raggruppamenti\" dell'elenco parti.\n" +"

\n" +"\n" +"

\n" +"Questa categoria contiene gli elementi Spartito, Libro e Sezione, con i " +"quali\n" +"è possibile creare un documento LilyPond contenente vari spartiti o perfino " +"libri.\n" +"Si possono aggiungere elementi Spartito, Sezione e Libro a piacere;\n" +"inoltre, gli elementi Spartito possono essere contenuti in un elemento " +"Libro\n" +"o Sezione\n" +"ma non viceversa.\n" +"

\n" +"\n" +"

\n" +"Successivamente è possibile aggiungere i vari strumenti.\n" +"Se si vogliono creare diversi spartiti con lo stesso organico,\n" +"è sufficiente\n" +"aggiungere le parti in cima alla lista e sotto di esse i vari\n" +"elementi Spartito senza aggiungere\n" +"parti direttamente negli spartiti:\n" +"in questo modo, useranno tutti automaticamente le parti indicate sopra di " +"essi.\n" +"

\n" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Fare clic per inserire un valore." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "in fondo alla prima pagina" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "in fondo all'ultima pagina" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "Dedica" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Titolo" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Sottotitolo" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "Sotto-sottotitolo" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Strumento" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Compositore" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Arrangiatore" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Paroliere" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Metro" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Brano" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Opera" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Copyright" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Tagline" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Parti disponibili:" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Spartito:" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "&Aggiungi" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +msgid "&Remove" +msgstr "&Togli" + +#: frescobaldi_app/scorewiz/score.py:104 +msgid "Move up" +msgstr "Sposta in alto" + +#: frescobaldi_app/scorewiz/score.py:105 +msgid "Move down" +msgstr "Sposta in basso" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Tonalità:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Indicazione di tempo:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Battuta in levare:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Indicazione per il metronomo:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Indicazione di movimento:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Maggiore" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Minore" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "Ionico" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Dorico" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Frigio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Lidio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Misolidio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Eolio" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Ipofrigio" + +#: frescobaldi_app/scorewiz/settings.py:73 +msgid "Score properties" +msgstr "Impostazioni spartito" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Preferenze generali" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Usa virgolette tipografiche" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "" +"Sostituisce le virgolette normali con quelle tipografiche, di più bel " +"aspetto." + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Togli la tagline predefinita" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Elimina la tagline predefinita di LilyPond." + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Togli i numeri di battuta" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "" +"Elimina la visualizzazione dei numeri di battuta all'inizio di ogni sistema." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "Genera MIDI" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "Genera anche un file MIDI oltre al PDF." + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Mostra l'indicazione per il metronomo" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"Se selezionato, mostra l'indicazione per il metronomo all'inizio dello " +"spartito. Anche l'output MIDI userà la stessa indicazione." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Dimensione del foglio:" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Orizzontale" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Per esteso" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Abbreviato" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Nomi degli strumenti" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "Primo sistema:" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Gli altri sistemi:" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "" +"Usa il nome dello strumento abbreviato o per esteso davanti al primo sistema." + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "" +"Usa il nome per esteso, abbreviato o non usa i nomi degli strumenti davanti " +"agli altri sistemi." + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "La lingua da usare per i nomi degli strumenti." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Lingua per il nome delle note:" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "La lingua da usare per le altezze delle note nel sorgente LilyPond." + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Versione:" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "La versione di LilyPond che sarà usata per questo documento." + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "Nessuna configurazione disponibile." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Imposta il numero di voci indipendenti per ciascun rigo." + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "" +"Questo è utile soprattutto nella scrittura di musica polifonica, come una " +"fuga." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Mano destra:" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Mano sinistra:" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Notazione degli accordi:" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Grafici degli accordi per chitarra" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Mosta i grafici predefiniti degli accordi per chitarra sotto il nome degli " +"accordi (LilyPond 2.12 e superiori)." + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "Qui seguono gli accordi." + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "Tedesca" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "Semi-tedesca" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "Italiana" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "Francese" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Corno in Fa" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "Cor, in fa" + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Tromba in do" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Tr. in do" + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Tromba in sib" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Tr. in sib" + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Trombone" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Trb." + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "T.ba" + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Basso tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "T.ba b." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Ottoni" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +msgid "Staff Group" +msgstr "Accollatura" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "Graffa" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "Quadra" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +msgid "Square" +msgstr "Quadrata" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "Tipo:" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +msgid "Connect Barlines" +msgstr "Unisci le stanghette" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "Se segnato, le stanghette saranno unite tra i vari righi." + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +msgid "Score" +msgstr "Spartito" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +msgid "Piece:" +msgstr "Brano:" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +msgid "Opus:" +msgstr "Opera:" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "Impostazioni" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "Sezione" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "Libro" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" +"

Qui è possibile specificare un nome o un suffisso (senza estensione) per " +"impostare i nomi dei file generati per questo libro.

\n" +"

Se si sceglie \"Suffisso\", questo verrà aggiunto alla fine del nome del " +"documento; se si sceglie \"Nome dei file\", verrà semplicemente usato " +"quest'ultimo.

" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "Nome dei file generati:" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "Nome dei file" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "Suffisso" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +msgid "Containers" +msgstr "Raggruppamenti" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Pianoforte" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "Pf." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Cembalo" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Cemb." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Clavicordo" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Clvd." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Organo" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Org." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Pedale:" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Impostare a 0 per togliere il rigo del pedale." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Cel." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Strumenti a tastiera" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Timpani" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Timp." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Xilofono" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Xil." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Marimba" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "Rigo superiore:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "Rigo inferiore:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "Impostare a 0 il numero delle voci per togliere il secondo rigo." + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Vibrafono" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Vibr." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Campane tubolari" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Camp." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Glockenspiel" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Glock." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +msgid "Carillon" +msgstr "Carillon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Car." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +msgid "Manual staff:" +msgstr "Rigo del manuale:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +msgid "Pedal staff:" +msgstr "Rigo della pedaliera:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Batteria" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Batt." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Voci:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Togli i gambi" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Toglie i gambi dalle note della batteria." + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "Qui segue la batteria." + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "distanziare un poco." + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Batteria (5 linee, predefinito)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Tipo timbales (2 linee)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Tipo conga (2 linee)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Tipo bongo (2 linee)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Tipo percussione (1 linea)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Percussioni" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Tipo di rigo:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Accordatura:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Rigo normale" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Intavolatura" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Entrambi" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Mandolino" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mand." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Accordatura per mandolino" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Banjo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Banj." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "Accordatura Open G (sol-RE-SOL-SI-RE)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "Accordatura in do (sol-DO-SOL-SI-RE)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "Accordatura modale (sol-RE-SOL-DO-RE)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "Accordatura Open D (la-RE-FA#-LA-RE)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "Accordatura Open Dm (la-RE-FA-LA-RE)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Quattro corde (al posto di cinque)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Chitarra classica" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "Chit." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Accordatura per chitarra" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "Accordatura Open G" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Chitarra jazz" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "Chit. j." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Basso" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "Accordatura per basso" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Basso elettrico" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "B. el." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Arpa" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Arp." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Strumenti a pizzico" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Sigle accordi" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Basso cifrato" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "Usa le linee di estensione" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "Qui segue la cifratura." + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "Rigo" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Altri" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Violino" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Vl." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Viola" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "V.la" + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Violoncello" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Vlc." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "Contrabbasso" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Cb." + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +msgid "Basso Continuo" +msgstr "Basso continuo" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "Bc." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Archi" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Strofe:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Numero delle strofe." + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Ambitus" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "Mostra l'estensione della voce all'inizio del rigo." + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "Qui seguono le parole." + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Soprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +msgid "Mezzo-soprano" +msgstr "Mezzosoprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "Mzs." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Contralto" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Tenore" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Spartito semplificato" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"Uno spartito semplificato (\"lead sheet\" in inglese) è composto da un rigo " +"musicale per la melodia, con sopra le sigle degli accordi e sotto le parole. " +"Si può aggiungere anche un secondo rigo." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Aggiungi rigo di accompagnamento" + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" +"Aggiunge un rigo di accompagnamento e, nel rigo superiore, una voce di " +"accompagnamento." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Coro" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Scegliere le voci del coro. Usare le lettere S, A, T o B. Un trattino indica " +"un nuovo rigo." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "Consiglio: Per un doppio coro, usare due cori." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Voci:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "Parole:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "Riduzione per pianoforte" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "Aggiunge una riduzione per pianoforte generata automaticamente." + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "MIDI file di controllo" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" +"Crea un MIDI file di controllo per ogni voce, anche se non è generato nessun " +"MIDI output per lo spartito principale." + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "Coro" + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "MIDI file di controllo:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Stesse parole per tutte le voci" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "Un blocco delle stesse parole sarà stampato fra tutti i righi." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Stesse parole per ogni voce" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "" +"Ogni voce avrà il suo blocco di parole, con le stesse parole per ogni voce." + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Parole diverse per ciascuna voce" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Ogni voce avrà un proprio blocco di parole." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "Distribuisci le strofe" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "Distribuisce strofe diverse fra i vari righi." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "Voci" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Flauto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Ottavino" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Ott." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Flauto basso" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Fl. b." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Oboe" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Ob." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +msgid "Oboe d'amore" +msgstr "Oboe d'amore" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Ob. am." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +msgid "English horn" +msgstr "Corno inglese" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "Cor. ing." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Fagotto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Fag." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Controfagotto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "Cfag." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Clarinetto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Sassofono sopranino" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "Sax. s.no" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Sassofono soprano" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "Sax. s." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Sassofono contralto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "Sax. a." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Sassofono tenore" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "Sax. t." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Sassofono baritono" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "Sax. br." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "Sassofono basso" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "Sax. b." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Flauto dolce soprano" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "Rec. s." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Flauto dolce contralto" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "Rec. a." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Flauto dolce tenore" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "Rec. t." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Flauto dolce basso" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "Rec. b." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Fiati" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "Gestione sessioni" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "Nome:" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "Salva sempre la lista dei documenti in questa sessione" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "Directory base:" + +#: frescobaldi_app/sessions/dialog.py:133 +msgid "Edit session: {name}" +msgstr "Modifica la sessione: {name}" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "Modifica una nuova sessione" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "Inserire un nome per la sessione." + +#: frescobaldi_app/sessions/dialog.py:174 +msgid "Please do not use the name '{name}'." +msgstr "Il nome '{name}' non si può usare." + +#: frescobaldi_app/sessions/dialog.py:180 +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" +"Esiste già una sessione con questo nome: {name}.\n" +"\n" +"Sovrascriverla?" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "Sovrascrivi" + +#: frescobaldi_app/sessions/manager.py:127 +msgctxt "New Session" +msgid "&New..." +msgstr "&Nuova..." + +#: frescobaldi_app/sessions/manager.py:129 +msgid "&Manage..." +msgstr "&Gestisci sessioni..." + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "Nessuna sessione" + +#: frescobaldi_app/sessions/menu.py:55 +msgctxt "menu title" +msgid "&Session" +msgstr "&Sessione" + +#: frescobaldi_app/snippet/builtin.py:38 +msgid "Blank Line" +msgstr "Linea vuota" + +#: frescobaldi_app/snippet/builtin.py:44 +msgid "Single Typographical Quotes" +msgstr "Virgolette tipografiche singole" + +#: frescobaldi_app/snippet/builtin.py:49 +msgid "Double Typographical Quotes" +msgstr "Virgolette tipografiche doppie" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "Terzine" + +#: frescobaldi_app/snippet/builtin.py:125 +msgid "Modern 2/2 Time Signature" +msgstr "2/2, indicazione di tempo moderna" + +#: frescobaldi_app/snippet/builtin.py:131 +msgid "Modern 4/4 Time Signature" +msgstr "4/4, indicazione di tempo moderna" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "Indicazione figurata di tempo (numero con nota)" + +#: frescobaldi_app/snippet/builtin.py:148 +msgid "LilyPond Version" +msgstr "Versione di LilyPond" + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "Musica (mod. Relative)" + +#: frescobaldi_app/snippet/builtin.py:166 +msgid "Upper case selection" +msgstr "Tutto in maiuscolo" + +#: frescobaldi_app/snippet/builtin.py:172 +msgid "Lower case selection" +msgstr "Tutto in minuscolo" + +#: frescobaldi_app/snippet/builtin.py:178 +msgid "Title case selection" +msgstr "Maiuscola la prima lettera di ogni parola" + +#: frescobaldi_app/snippet/builtin.py:189 +msgid "Markup lines" +msgstr "Allinea il testo" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "Incolonna il testo" + +#: frescobaldi_app/snippet/builtin.py:202 +msgid "Tagline with date and LilyPond version" +msgstr "Tagline con la data e la versione di LilyPond" + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "Modello per il titolo" + +#: frescobaldi_app/snippet/builtin.py:227 +msgid "No Tagline" +msgstr "Nessuna tagline" + +#: frescobaldi_app/snippet/builtin.py:235 +msgid "No Barnumbers" +msgstr "Togli i numeri di battuta" + +#: frescobaldi_app/snippet/builtin.py:245 +#, fuzzy +msgid "Midi Tempo" +msgstr "Tempo" + +#: frescobaldi_app/snippet/builtin.py:255 +msgid "Staff Size" +msgstr "Dimensione del rigo" + +#: frescobaldi_app/snippet/builtin.py:310 +msgid "A5 Paper" +msgstr "Formato A5" + +#: frescobaldi_app/snippet/builtin.py:318 +#, fuzzy +msgid "Document Fonts..." +msgstr "Spedisci documenti..." + +#: frescobaldi_app/snippet/builtin.py:346 +msgid "Last note or chord" +msgstr "Ultima nota o accordo" + +#: frescobaldi_app/snippet/builtin.py:427 +msgid "Color" +msgstr "Colore" + +#: frescobaldi_app/snippet/builtin.py:464 +msgid "Basic Leadsheet" +msgstr "Spartito semplificato" + +#: frescobaldi_app/snippet/builtin.py:508 +msgid "Choir Hymn" +msgstr "Corale" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "Modifica frammento" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "Nuovo frammento" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "Testo del frammento:" + +#: frescobaldi_app/snippet/edit.py:119 +msgid "Title:" +msgstr "Titolo:" + +#: frescobaldi_app/snippet/edit.py:120 +msgid "Shortcut:" +msgstr "Scorciatoia:" + +#: frescobaldi_app/snippet/edit.py:131 +msgid "Click to change the keyboard shortcut." +msgstr "Fare click per configurare la scorciatoia." + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "Frammento vuoto" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "Un frammento non può essere vuoto." + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "Editor dei frammenti" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" +"

Qui si può modificare il testo del frammento.

Iniziando la prima " +"linea con '-*- ' (si noti lo spazio dopo il trattino), nel " +"resto della linea si possono definire variabili secondo lo schema " +"nome: valore; o semplicemente nome; che " +"influenzeranno il comportamento del frammento. Si possono usare le seguenti " +"variabili:

" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" +"Aggiunge il frammento al menu di inserimento, raggruppato secondo il valore " +"(opzionale)." + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" +"Aggiunge il frammento al menu {file_new_from_template}, raggruppato secondo " +"il valore (opzionale). Quando attivato tramite il menu, il frammento sarà " +"inserito nel documento." + +#: frescobaldi_app/snippet/edit.py:218 +msgctxt "menu title" +msgid "File" +msgstr "File" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "Nuovo da Modello" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "La scorciatoia da digitare per scegliere il frammento." + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "Non indentare automaticamente il frammento dopo averlo inserito." + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "Icona da mostrare nel menu e nell'elenco dei frammenti." + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" +"Il simbolo da mostrare nel menu e nell'elenco dei frammenti. I simboli sono " +"icone che usano il colore predefinito del testo e si possono trovare in " +"{directory}." + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "Esegui il frammento come un script Python. Consultare {link}." + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "Una o più delle seguenti parole (separate da spazi o virgole):" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "È necessario che ci sia del testo selezionato." + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "Regola la selezione escludendo spazi bianchi all'inizio e alla fine." + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "Seleziona tutto il testo inserito." + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" +"

Le altre righe del frammento definiscono il testo da inserire " +"nell'editor. Qui si possono immettere variabili precedute da un $. Un doppio " +"$ sarà sostituito con uno singolo. Sono riconosciute le seguenti variabili:" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "Frammenti Python" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" +"

I frammenti in Python possono leggere e dovrebbero impostare la variabile " +"{text}. La variabile {text} contiene il testo attualmente selezionato (che " +"può anche essere una stringa vuota).

\n" +"

Si può impostare {text} come stringa o lista di stringhe.

\n" +"

Altre variabili che si possono usare:

" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "" +"Una lista di stringhe che descrivono il tipo di testo su cui si trova il " +"cursore." + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" +"Il QTextCursor corrente, con cui si ha accesso al documento. Tuttavia, non " +"permette di modificare il testo." + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" +"Quando {text} è impostato come lista invece che come stringa, si può usare " +"questo valore per specificare il luogo in cui sarà posto il cursore dopo " +"l'inserimento del frammento." + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" +"Quando {text} è impostato come lista invece che come stringa, questo valore " +"può essere usato con {cursor} per selezionare il testo quando vengono " +"inserite stringhe che fanno parte della lista." + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "La data attuale in formato AAAA-MM-GG." + +#: frescobaldi_app/snippet/expand.py:80 +msgid "The version of the default LilyPond program." +msgstr "La versione dell'eseguibile LilyPond predefinito." + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "La versione di Frescobaldi." + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "URL del documento attuale." + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "Il nome locale completo del documento attuale." + +#: frescobaldi_app/snippet/expand.py:96 +msgid "The name of the current document." +msgstr "Il nome del documento attuale." + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "Sposta il cursore qui dopo aver inserito il frammento." + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" +"Seleziona il testo da questo punto fino alla posizione definita con con la " +"variabile $CURSOR" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" +"Il testo selezionato, se disponibile. Altrimenti, il cursore sarà spostato " +"in questo punto." + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "Nessun frammento trovato." + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Importa frammenti" + +#: frescobaldi_app/snippet/import_export.py:119 +msgid "New Snippets" +msgstr "Nuovi frammenti" + +#: frescobaldi_app/snippet/import_export.py:120 +msgid "Updated Snippets" +msgstr "Aggiorna i frammenti" + +#: frescobaldi_app/snippet/import_export.py:121 +msgid "Unchanged Snippets" +msgstr "Frammenti non modificati" + +#: frescobaldi_app/snippet/import_export.py:183 +msgid "Import Keyboard Shortcuts" +msgstr "Importa scorciatoie" + +#: frescobaldi_app/snippet/import_export.py:188 +msgid "Choose which snippets you want to import:" +msgstr "Scegliere i frammenti da importare:" + +#: frescobaldi_app/snippet/import_export.py:190 +msgid "There are no new or updated snippets in the file." +msgstr "Non ci sono frammenti nuovi o modificati nel file." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" +"

Qui vengono mostrati i frammenti dal file {filename}.

\n" +"

Se sono presenti frammenti nuovi o modificati, è possibile selezionarli " +"uno per uno o tutti insieme, usando le caselle del gruppo. Premere quindi OK " +"per importare tutti i frammenti selezionati.

\n" +"

Non si possono importare frammenti già esistenti e non modificati.

\n" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "Errore del frammento" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Inserimento" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "Nuovo da &modello" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "Nome" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Descrizione" + +#: frescobaldi_app/snippet/template.py:33 +msgid "Save as Template" +msgstr "Salva come modello" + +#: frescobaldi_app/snippet/template.py:34 +msgid "Please enter a template name:" +msgstr "Inserire un nome per il modello:" + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +msgid "Snippets" +msgstr "Frammenti" + +#: frescobaldi_app/snippet/tool.py:54 +msgid "&Snippets" +msgstr "&Frammenti" + +#: frescobaldi_app/snippet/tool.py:79 +msgid "Save as Template..." +msgstr "Salva come modello..." + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "&Frammenti..." + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "&Menu" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "&Aggiungi..." + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "Aggiunge un nuovo frammento. ({key})" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +msgid "&Edit..." +msgstr "&Modifica..." + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "Modifica il frammento attuale. ({key})" + +#: frescobaldi_app/snippet/widget.py:179 +msgid "Remove the selected snippets." +msgstr "Rimuove i frammenti selezionati." + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "A&pplica" + +#: frescobaldi_app/snippet/widget.py:181 +msgid "Apply the current snippet." +msgstr "Applica il frammento attuale." + +#: frescobaldi_app/snippet/widget.py:182 +msgid "&Import..." +msgstr "&Importa..." + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "Importa frammenti da un file." + +#: frescobaldi_app/snippet/widget.py:184 +msgid "E&xport..." +msgstr "E&sporta..." + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "Esporta frammenti in un file." + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "&Aiuto" + +#: frescobaldi_app/snippet/widget.py:188 +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" +"Inserire il testo da cercare nella lista dei frammenti.\n" +"Vedere \"Che cos'è?\" per ulteriori informazioni." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" +"Inserire il testo da cercare nella lista dei frammenti e premere Invio per " +"usare il frammento selezionato." + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" +"Se il testo della ricerca coincide completamente con il valore della " +"variabile '{name}' del frammento, questo viene selezionato." + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" +"Se il testo della ricerca inizia con i due punti ':', il resto del testo " +"filtra i frammenti che definiscono la variabile data. Dopo uno spazio è " +"possibile inserire anche un valore: i frammenti mostrati saranno quelli in " +"cui il valore della variabile data contiene il testo che segue lo spazio." + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" +"Ad es. inserendo {menu} saranno mostrati tutti i frammenti che sono presenti " +"nel menu di inserimento." + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +msgid "XML Files" +msgstr "File XML" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "Esporta {num} frammento" +msgstr[1] "Esporta {num} frammenti" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" +"

\n" +"Con il gestore dei frammenti è possibile salvare le parti di codice usate\n" +"più spesso, i \"frammenti\", ed incollarli facilmente nel documento.\n" +"

\n" +"\n" +"

\n" +"Il gestore dei frammenti può essere attivato tramite il menu {menu_snippets} " +"o\n" +"premendo {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"I frammenti possono essere ritrovati scorrendo la lista o inserendo qualche " +"carattere\n" +"nel riquadro per la ricerca.\n" +"Ai frammenti può essere associata una combinazione di tasti per richiamarli " +"direttamente.\n" +"Alcuni frammenti hanno un nome abbreviato da inserire nel riquadro di " +"ricerca\n" +"per selezionare il frammento: premendo quindi il tasto Invio si incollerà\n" +"il frammento nel editor di testo e il gestore dei frammenti verrà chiuso.\n" +"

\n" +"\n" +"

\n" +"Si possono aggiungere nuovi frammenti con {key_add} oppure modificarli con " +"{key_edit}.\n" +"Per rimuovere un frammento usare {key_delete}. Attenzione: non è possibile " +"annullare questa operazione!\n" +"

\n" +"\n" +"

\n" +"I frammenti possono essere aggiunti al menu (vedere {link}).\n" +"Infine, ci sono frammenti che contengono o modificano del testo.\n" +"Per farlo, alcuni frammenti usano variabili speciali mentre altri sono\n" +"piccoli script in Python.\n" +"

\n" + +#: frescobaldi_app/snippet/widget.py:400 +msgctxt "menu title" +msgid "Insert" +msgstr "Inserimento" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "Frammenti..." + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "Inizia a registrare una sequenza di tasti." + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "Pulisci la sequenza di tasti." + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +msgid "Input" +msgstr "Input" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +msgid "Scheme:" +msgstr "Schema:" + +#: frescobaldi_app/widgets/schemeselector.py:63 +msgctxt "New Scheme" +msgid "&New..." +msgstr "&Nuovo..." + +#: frescobaldi_app/widgets/schemeselector.py:93 +msgid "Please enter a name for the new scheme:" +msgstr "Inserire un nome per il nuovo schema:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Modifica scorciatoia" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +msgid "&No shortcut" +msgstr "&Nessuna scorciatoia" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +msgid "Use a &custom shortcut:" +msgstr "Usa una scorciatoia &personalizzata:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "Alternativa #{num}:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "Scorciatoia principale:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "Qui si possono modificare le scorciatoie per {name}" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "nessuna" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "Usa la scorciatoia &predefinita ({name})" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Fare clic a tempo su questo pulsante per impostare la velocità." + +#: frescobaldi_app/widgets/urlrequester.py:75 +msgid "Open file dialog" +msgstr "Finestra di apertura dei file" + +#: frescobaldi_app/widgets/urlrequester.py:119 +msgid "Select a directory" +msgstr "Scegliere una cartella" + +#: frescobaldi_app/widgets/urlrequester.py:121 +msgid "Select a file" +msgstr "Scegliere un file" + +#, fuzzy +#~ msgid "Edit..." +#~ msgstr "Stampa..." + +#, fuzzy +#~ msgid "Remove" +#~ msgstr "Togli i gambi" + +#~ msgid "Copyright (c) 2008-2010, Wilbert Berendsen" +#~ msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your name" +#~ msgstr "Gianluca D'Orazio" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "i18n@frescobaldi.org" +#~ msgstr "gianluca.dorazio@gmail.com" + +#~ msgid "Session to start" +#~ msgstr "Sessione da avviare" + +#~ msgid "Start a new instance" +#~ msgstr "Avvia una nuova istanza" + +#~ msgid "Try to use smart line and column numbers" +#~ msgstr "Prova ad usare la numerazione intelligente per righe e colonne" + +#~ msgid "LilyPond files to open, may also be textedit URLs" +#~ msgstr "Documenti LilyPond da aprire, possono essere anche URL textedit" + +#~ msgid "Left Sidebar" +#~ msgstr "Barra sinistra" + +#~ msgid "Right Sidebar" +#~ msgstr "Barra destra" + +#~ msgid "Top Sidebar" +#~ msgstr "Barra superiore" + +#~ msgid "Bottom Sidebar" +#~ msgstr "Barra inferiore" + +#~ msgid "Show Path" +#~ msgstr "Mostra percorso" + +#~ msgid "Show Document Tabs" +#~ msgstr "Mostra le linguette dei documenti" + +#~ msgid "" +#~ "Could not find the XMLGUI container \"%1\".\n" +#~ "\n" +#~ "Probably the local ui.rc file contains errors. It is recommended to " +#~ "delete this file because elements in the user interface will be missing. " +#~ "This is the full path of the file:\n" +#~ "\n" +#~ "%2\n" +#~ msgstr "" +#~ "Impossibile trovare il contenitore XMLGUI \"%1\".\n" +#~ "\n" +#~ "Probabilmente il file ui.rc locale contiene errori. Si consiglia di " +#~ "cancellare questo file perché altrimenti mancheranno parti " +#~ "dell'intefaccia. Questo è il percorso completo al file:\n" +#~ "\n" +#~ "%2\n" + +#~ msgid "Please select some text first." +#~ msgstr "Selezionare il testo prima." + +#~ msgid "Line: %1 Col: %2" +#~ msgstr "Riga: %1 Col: %2" + +#~ msgid "BLOCK" +#~ msgstr "BLOCCO" + +#~ msgid "Block selection mode" +#~ msgstr "Modalità di selezione a blocchi" + +#~ msgid "LINE" +#~ msgstr "RIGA" + +#~ msgid "Right-click for tab options" +#~ msgstr "Click destro per le opzioni delle linguette" + +#~ msgid "Please install %1" +#~ msgstr "Installare %1" + +#~ msgid "Press the button to configure the keyboard shortcut for:" +#~ msgstr "Premere il tasto per configurare la scorciatoia per:" + +#~ msgid "Session" +#~ msgstr "Sessione" + +#~ msgid "Properties of this session" +#~ msgstr "Proprietà di questa sessione" + +#~ msgid "Please do not use the ampersand (&) character in a session name." +#~ msgstr "" +#~ "Il carattere 'e commerciale' (&) non si può usare nel nome di una " +#~ "sessione." + +#~ msgid "Open %1 in external viewer" +#~ msgstr "Apri %1 in un visualizzatore esterno" + +#~ msgid "(No up-to-date MIDI or PDF files available.)" +#~ msgstr "(Nessun file MIDI o PDF aggiornato disponibile.)" + +#~ msgid "" +#~ "There are no up-to-date MIDI or PDF files available. Please run LilyPond " +#~ "to create one or more output files." +#~ msgstr "" +#~ "Non ci sono file MIDI o PDF aggiornati disponibili. Eseguire LilyPond per " +#~ "generare uno o più file di output." + +#~ msgid "No files to send" +#~ msgstr "Nessun documento da spedire" + +#~ msgid "" +#~ "There are no PDF documents to print.\n" +#~ "\n" +#~ "You probably need to run LilyPond to create or update a PDF document. If " +#~ "you are creating MIDI files, be sure you also put a \\layout { } section " +#~ "in your score, otherwise LilyPond will not create a PDF." +#~ msgstr "" +#~ "Non ci sono documenti PDF da stampare.\n" +#~ "\n" +#~ "Probabilmente è necessario eseguire LilyPond per generare o aggiornare un " +#~ "documento PDF. Se si sta generando un file MIDI, assicurarsi di aver " +#~ "inserito una sezione \\layout { } nello spartito, altrimenti LilyPond non " +#~ "genererà il PDF. " + +#~ msgid "No files to print" +#~ msgstr "Nessun documento da stampare" + +#~ msgid "Email documents" +#~ msgstr "Spedisci documenti" + +#~ msgid "Please select the files you want to send:" +#~ msgstr "Scegliere i documenti da spedire:" + +#~ msgid "" +#~ "These are the files that are up-to-date (i.e. newer than the LilyPond " +#~ "source document). Also LilyPond files included by the source document are " +#~ "shown." +#~ msgstr "" +#~ "Questi sono i file aggiornati (cioè più recenti del documento Lilypond " +#~ "sorgente). Inoltre sono visualizzati anche i file inclusi tramite il " +#~ "documento sorgente." + +#~ msgid "" +#~ "Note: this PDF file has been created with embedded point-and-click URLs " +#~ "(preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the file in publish mode, because then the PDF file " +#~ "is much smaller." +#~ msgid_plural "" +#~ "Note: these PDF files have been created with embedded point-and-click " +#~ "URLs (preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the files in publish mode, because then the PDF files " +#~ "are much smaller." +#~ msgstr[0] "" +#~ "Questo PDF è stato creato inserendo link per il point-and-click (modalità " +#~ "anteprima) questo aumenta di molto la dimensione del file. È meglio " +#~ "spedire documenti senza link per il point-and-click (modalità " +#~ "pubblicazione) perché sono molto piú piccoli. Continuare comunque?" +#~ msgstr[1] "" +#~ "Questi PDF sono stati creati inserendo link per il point-and-click " +#~ "(modalità anteprima): questo aumenta di molto la dimensione dei file. È " +#~ "meglio spedire documenti senza link per il point-and-click (modalità " +#~ "pubblicazione) perché sono molto piú piccoli. Continuare comunque?" + +#~ msgid "" +#~ "Note: If there are no PDF and no MIDI files, you probably need to run " +#~ "LilyPond to update those files, before sending the e-mail." +#~ msgstr "" +#~ "Attenzione: se non ci sono file PDF o MIDI, probabilmente è necessario " +#~ "eseguire LilyPond per aggiornare i file di output prima di spedire l'e-" +#~ "mail." + +#~ msgid "" +#~ "These are the PDF documents that are up-to-date (i.e. newer than the " +#~ "LilyPond source document). Check the documents you want to send to the " +#~ "printer." +#~ msgstr "" +#~ "Questi sono i PDF aggiornati (cioè più recenti del documento Lilypond " +#~ "sorgente). Selezionare i documenti da inviare alla stampante." + +#~ msgid "Print %1" +#~ msgstr "Stampa %1" + +#~ msgid "" +#~ "A print command (like 'lpr' or 'lp') could not be found on your system." +#~ msgstr "" +#~ "Impossibile trovare un comando di stampa (come 'lpr' o 'lp') nel sistema." + +#~ msgid "The command '%1' could not be found on your system." +#~ msgstr "Impossibile trovare il comando '%1' nel sistema." + +#~ msgid "" +#~ "The command below has been run, but exited with a return code %1.\n" +#~ "\n" +#~ "%2" +#~ msgstr "" +#~ "Il comando sottostante è stato eseguito ma è uscito con il codice %1.\n" +#~ "\n" +#~ "%2" + +#~ msgid "Create blank staff paper" +#~ msgstr "Crea foglio di carta da musica" + +#~ msgid "Choose what kind of empty staves you want to create." +#~ msgstr "Scegliere il tipo di righi da creare." + +#~ msgid "Choose which action happens when clicking \"Ok\"." +#~ msgstr "Scegliere come proseguire dopo aver fatto click su \"Ok\"." + +#~ msgid "Preview the empty staff paper." +#~ msgstr "Anteprima della carta da musica." + +#~ msgid "Click to see more settings." +#~ msgstr "Fare click per vedere ulteriori impostazioni." + +#~ msgid "Print Bar Lines" +#~ msgstr "Stampa le stanghette" + +#~ msgid "Bars per line:" +#~ msgstr "Battute per rigo:" + +#~ msgid "Blank staff paper preview" +#~ msgstr "Anteprima della carta da musica:" + +#~ msgid "No PDF was created." +#~ msgstr "Non è stato generato nessun PDF." + +#~ msgid "Open in PDF viewer" +#~ msgstr "Apri il PDF con il visualizzatore" + +#~ msgid "Print staff paper" +#~ msgstr "Stampa la carta da musica" + +#~ msgid "Copy LilyPond code to editor" +#~ msgstr "Copia il codice LilyPond nell'editor" + +#~ msgid "Clef:" +#~ msgstr "Chiave:" + +#~ msgid "Single Staff" +#~ msgstr "Rigo singolo" + +#~ msgid "Systems per page:" +#~ msgstr "Sistemi per pagina:" + +#~ msgid "Clefs" +#~ msgstr "Chiavi" + +#~ msgid "Piano Staff" +#~ msgstr "Rigo per pianoforte" + +#~ msgid "Organ Staff" +#~ msgstr "Rigo per organo" + +#~ msgid "Staves per system:" +#~ msgstr "Righi per sistema:" + +#~ msgid "Clefs:" +#~ msgstr "Chiavi:" + +#~ msgid "" +#~ "To configure clefs, first set the number of staves per system. Then enter " +#~ "as many letters (S, A, T or B) as there are staves.\n" +#~ "\n" +#~ "S or A: treble clef,\n" +#~ "T: treble clef with an \"8\" below,\n" +#~ "B: bass clef\n" +#~ "\n" +#~ "So when you want to create music paper for a four-part mixed choir score, " +#~ "first set the number of staves per system to 4. Then enter \"SATB" +#~ "\" (without the quotes) here." +#~ msgstr "" +#~ "Per configurare le chiavi, fissare prima il numero di righi per sistema, " +#~ "poiinserire una lettera (S, A, T o B) per ogni rigo.\n" +#~ "\n" +#~ "S o A: chiave di violino,\n" +#~ "T: chiave di violino con \"8\" in basso,\n" +#~ "B: chiave di basso\n" +#~ "\n" +#~ "Ad esempio, per creare carta da musica per la partitura di un coro a " +#~ "quattro voci miste, fissare prima a 4 il numero di righi per sistema,poi " +#~ "digitare \"SATB\" (senza virgole) qui." + +#~ msgid "Choir Staff" +#~ msgstr "Rigo per coro" + +#~ msgid "Custom Staff" +#~ msgstr "Rigo personalizzato" + +#~ msgid "Space below:" +#~ msgstr "Spazio sotto:" + +#~ msgid "Please select a music expression, enclosed in << ... >> or { ... }." +#~ msgstr "" +#~ "Selezionare un'espressione musicale racchiusa tra << ... >> o { ... }." + +#~ msgid "Please enter a start pitch and a destination pitch:" +#~ msgstr "Inserire la nota di partenza e la nota di arrivo:" + +#~ msgid "Transpose from:" +#~ msgstr "Trasporre da:" + +#~ msgid "to:" +#~ msgstr "a:" + +#~ msgid "Install" +#~ msgstr "Installare" + +#~ msgid "Download LilyPond" +#~ msgstr "Scaricare LilyPond" + +#~ msgid "" +#~ "With this tool you can download packaged binary releases of LilyPond for " +#~ "your operating system." +#~ msgstr "" +#~ "Con questo strumento è possibile scaricare i pacchetti eseguibili di " +#~ "LilyPond per il vostro sistema operativo." + +#~ msgid "Select the LilyPond version you want to download." +#~ msgstr "Scegliere quale versione di LilyPond scaricare." + +#~ msgid "" +#~ "Select a writable directory you want to install LilyPond to.\n" +#~ "(A version-numbered directory will be created in this directory.)" +#~ msgstr "" +#~ "Scegliere una directory scrivibile in cui installare LilyPond.\n" +#~ "(In questa directory verrà creata una sottodirectory con il numero di " +#~ "versione nel nome.)" + +#~ msgid "Install into:" +#~ msgstr "Installare in:" + +#~ msgid "Details" +#~ msgstr "Dettagli" + +#~ msgid "The website where LilyPond binaries can be downloaded." +#~ msgstr "Il sito web da cui scaricare gli eseguibili di LilyPond." + +#~ msgid "Download from:" +#~ msgstr "Scaricare da:" + +#~ msgid "Machine type:" +#~ msgstr "Tipo di processore:" + +#~ msgid "" +#~ "This is the URL to the package that will be downloaded and installed.\n" +#~ "You can also browse to other places to select a LilyPond package." +#~ msgstr "" +#~ "Questo è l'URL al pacchetto che sarà scaricato ed installato.\n" +#~ "È possibile navigare in altri indirizzi per scegliere un pacchetto " +#~ "LilyPond." + +#~ msgid "Package Url:" +#~ msgstr "URL del pacchetto:" + +#~ msgid "Downloading directory listing..." +#~ msgstr "Scaricamento in corso dell'elenco delle directory..." + +#~ msgid "No packages found. You can browse to a package manually." +#~ msgstr "" +#~ "Nessun pacchetto trovato. È possibile cercare un pacchetto manualmente." + +#~ msgid "Latest Development Version (%1)" +#~ msgstr "Versione di sviluppo più recente (%1)" + +#~ msgid "Latest Stable Version (%1)" +#~ msgstr "Versione stabile più recente (%1)" + +#~ msgid "Downloading %1..." +#~ msgstr "Scaricamento in corso %1..." + +#~ msgid "Download cancelled." +#~ msgstr "Scaricamento annullato." + +#~ msgid "Download failed: %1" +#~ msgstr "Scaricamento non riuscito: %1" + +#~ msgid "" +#~ "LilyPond %1 seems already to be installed in %2.\n" +#~ "\n" +#~ "Do you want to use it or to remove and re-install?" +#~ msgstr "" +#~ "LilyPond sembra già installato in %2.\n" +#~ "\n" +#~ "Usare quello o rimuoverlo e reinstallarlo?" + +#~ msgid "Use existing LilyPond" +#~ msgstr "Usare LilyPond già presente" + +#~ msgid "Remove and re-install" +#~ msgstr "Rimuovi e reinstalla" + +#~ msgid "Unpacking %1..." +#~ msgstr "Estrazione file in corso %1..." + +#~ msgid "Unpacking finished." +#~ msgstr "Estrazione file finita." + +#~ msgid "Unpacking failed." +#~ msgstr "Estrazione file fallita." + +#~ msgid "" +#~ "An error occurred:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Si è verificato un errore:\n" +#~ "\n" +#~ "%1" + +#~ msgid "Expansion Manager" +#~ msgstr "Gestore delle scorciatoie" + +#~ msgid "" +#~ "This is the list of defined expansions.\n" +#~ "\n" +#~ "Click on a row to see or change the associated text. Doubleclick a " +#~ "shortcut or its description to change it. You can also press F2 to edit " +#~ "the current shortcut.\n" +#~ "\n" +#~ "Use the buttons below to add or remove expansions.\n" +#~ "\n" +#~ "There are two ways to use the expansion: either type the shortcut in the " +#~ "text and then call the Expand function, or just call the Expand function " +#~ "(default shortcut: Ctrl+.), choose the expansion from the list and press " +#~ "Enter or click Ok." +#~ msgstr "" +#~ "Questo è l'elenco delle scorciatie.\n" +#~ "\n" +#~ "Fare clic su una riga per vedere o modificare il testo associato, fare " +#~ "doppio clic sull'abbreviazione o sulla descrizione per modificarla oppure " +#~ "premere F2 per modificare l'abbreviazione selezionata.\n" +#~ "\n" +#~ "Usare i pulsanti in basso per aggiungere o rimuovere scorciatoie.\n" +#~ "\n" +#~ "Ci sono due modi per usare le scorciatoie: scrivere l'abbreviazione " +#~ "direttamente nel testo e richiamare la funzione di espansione " +#~ "(combinazione di tasti predefinita: Ctrl+.), oppure richiamare il Gestore " +#~ "delle scorciatoie (sempre con Ctrl+.), scegliere la scorciatoia " +#~ "dall'elenco e premere Invio o fare clic su Ok." + +#~ msgid "" +#~ "This is the text associated with the selected shortcut. Some characters " +#~ "have special meaning:" +#~ msgstr "" +#~ "Questo è il testo associato all'abbreviazione selezionata. Alcuni " +#~ "caratteri hanno un significato particolare:" + +#~ msgid "Translate the following pitch." +#~ msgstr "Traduce il nome della nota che segue." + +#~ msgid "New Item" +#~ msgstr "Nuovo elemento" + +#~ msgid "" +#~ "Another expansion already uses this name.\n" +#~ "\n" +#~ "Please use a different name." +#~ msgstr "" +#~ "Un'altra scorciatoia usa già quest'abbreviazione.\n" +#~ "\n" +#~ "Sceglierne una diversa." + +#~ msgid "" +#~ "Please only use letters, numbers and the underscore character in the " +#~ "expansion name." +#~ msgstr "" +#~ "Nell'abbreviazione della scorciatoia si possono usare solo lettere, " +#~ "numeri e il trattino basso (underscore)." + +#~ msgid "Please don't leave the description empty." +#~ msgstr "Non lasciare vuota la descrizione." + +#~ msgid "" +#~ "Could not find any hyphenation dictionaries.\n" +#~ "\n" +#~ "Please install a package containing some and/or or configure the search " +#~ "path to find them in the Frescobaldi settings under \"Paths.\"" +#~ msgstr "" +#~ "Impossibile trovare un dizionario per la divisione in sillabe.\n" +#~ "\n" +#~ "Installare un pacchetto che ne contenga uno e/o configurare il percorso " +#~ "di ricerca per i dizionari nelle impostazioni di Frescobaldi alla voce " +#~ "\"Percorsi.\"" + +#~ msgid "Larger text" +#~ msgstr "Ingrandisci caratteri" + +#~ msgid "Smaller text" +#~ msgstr "Riduci caratteri" + +#~ msgid "Up one level" +#~ msgstr "Su di un livello" + +#~ msgid "Index" +#~ msgstr "Indice analitico" + +#~ msgid "Copy &Link" +#~ msgstr "Copia il &collegamento" + +#~ msgid "Open Link in &New Window" +#~ msgstr "Apri il collegamento in una &nuova finestra" + +#~ msgid "Open Document in &New Window" +#~ msgstr "Apri il documento in una &nuova finestra" + +#~ msgid "Loading..." +#~ msgstr "Caricamento..." + +#~ msgid "LilyPond Command Index" +#~ msgstr "Indice dei comandi LilyPond" + +#~ msgid "Learning Manual" +#~ msgstr "Guida di base" + +#~ msgid "Learning Manual Index" +#~ msgstr "Indice della Guida di base" + +#~ msgid "Internals Reference" +#~ msgstr "Specifiche Interne" + +#~ msgid "The %1 context" +#~ msgstr "Il contesto %1" + +#~ msgid "" +#~ "Where to add articulations et cetera: above or below the staff or in the " +#~ "default position." +#~ msgstr "" +#~ "Dove aggiungere le articolazioni e altro: sopra, sotto il rigo o nella " +#~ "posizione predefinita." + +#~ msgid "Click an articulation sign to add it to your document." +#~ msgstr "Fare click su un segno per aggiungerlo al documento." + +#~ msgid "" +#~ "If you select some music first, the articulation will be added to all " +#~ "notes in the selection." +#~ msgstr "" +#~ "Se si seleziona prima un passaggio, il segno sarà aggiunto a tutte le " +#~ "note selezionate." + +#~ msgid "Click a dynamic sign to add it to your document." +#~ msgstr "Fare click su un segno di dinamica per aggiungerlo al documento." + +#~ msgid "" +#~ "If you select some music first, dynamic spanners will be added the " +#~ "selected fragment." +#~ msgstr "" +#~ "Se si seleziona prima un passaggio, l'indicazione dinamica estesa sarà " +#~ "aggiunta per la lunghezza della selezione." + +#~ msgid "" +#~ "If you have selected some music and you click a sign after a spanner, the " +#~ "sign will terminate the spanner." +#~ msgstr "" +#~ "Se è stato selezionato un passaggio e si fa click su un segno dopo " +#~ "un'indicazione estesa, quest'ultima terminerà col segno scelto." + +#~ msgid "These spanners need a music fragment to be selected." +#~ msgstr "Per usare queste indicazioni è necessario selezionare un passaggio." + +#~ msgid "Arpeggios are used with chords with multiple notes." +#~ msgstr "Gli arpeggi devono essere usati sugli accordi." + +#~ msgid "" +#~ "Glissandos are attached to a note and automatically extend to the next " +#~ "note." +#~ msgstr "" +#~ "I glissando sono assegnati ad una nota e si estendono automaticamente " +#~ "alla nota successiva." + +#~ msgid "Run LilyPond (preview)" +#~ msgstr "Esegui LilyPond (anteprima)" + +#~ msgid "Run LilyPond (publish)" +#~ msgstr "Esegui LilyPond (pubblicazione)" + +#~ msgid "Run LilyPond (custom)..." +#~ msgstr "Esegui LilyPond (a scelta)..." + +#~ msgid "Interrupt LilyPond Job" +#~ msgstr "Interrompi l'esecuzione di LilyPond" + +#~ msgid "Cut selection and assign it to a LilyPond variable." +#~ msgstr "Taglia la selezione e la assegna ad una variabile LilyPond." + +#~ msgid "Repeat the last music expression (note or chord)." +#~ msgstr "Ripete l'ultima espressione musicale (nota o accordo)." + +#~ msgid "Insert or Manage Expansions..." +#~ msgstr "Aggiungi o modifica le scorciatoie..." + +#~ msgid "Expand last word or open the expansions dialog." +#~ msgstr "Espande l'ultima parola o apre il Gestore delle scorciatoie." + +#~ msgid "Insert special characters." +#~ msgstr "Inserisci caratteri speciali." + +#~ msgid "Add to Expansions" +#~ msgstr "Aggiungi alle scorciatoie" + +#~ msgid "Go to the next blank line." +#~ msgstr "Va alla prima linea vuota che segue." + +#~ msgid "Previous blank line" +#~ msgstr "Linea vuota precedente" + +#~ msgid "Go to the previous blank line." +#~ msgstr "Va alla prima linea vuota all'indietro." + +#~ msgid "Select to next blank line" +#~ msgstr "Seleziona fino alla riga vuota successiva" + +#~ msgid "" +#~ "Selects text from the current position down to and including the next " +#~ "blank line." +#~ msgstr "" +#~ "Seleziona il testo dalla posizione attuale fino alla successiva linea " +#~ "vuota inclusa." + +#~ msgid "Select to previous blank line" +#~ msgstr "Seleziona fino alla alla riga vuota precedent" + +#~ msgid "" +#~ "Selects text from the current position up to right after the previous " +#~ "blank line." +#~ msgstr "" +#~ "Seleziona il testo dalla posizione attuale fino alla precedenta riga " +#~ "vuota inclusa." + +#~ msgid "Move selection to next blank line" +#~ msgstr "Sposta la selezione alla riga vuota successiva" + +#~ msgid "Moves selected block to next blank line." +#~ msgstr "Sposta il blocco selezionato alla riga vuota successiva." + +#~ msgid "Move selection to previous blank line" +#~ msgstr "Sposta la selezione alla riga vuota precedente" + +#~ msgid "Moves selected block to previous blank line." +#~ msgstr "Sposta il blocco selezionato alla riga vuota precedente." + +#~ msgid "Single Quote" +#~ msgstr "Virgoletta singola" + +#~ msgid "Double Quote" +#~ msgstr "Virgolette doppie" + +#~ msgid "Align" +#~ msgstr "Allinea" + +#~ msgid "Insert pair of braces" +#~ msgstr "Inserisci coppia di graffe" + +#~ msgid "" +#~ "Your document has been modified and needs to be saved before LilyPond can " +#~ "be started.\n" +#~ "\n" +#~ "Save the document now?" +#~ msgstr "" +#~ "Il documento è stato modificato e dev'essere salvato prima di avviare " +#~ "LilyPond.\n" +#~ "\n" +#~ "Salvare il documento ora?" + +#~ msgid "There is already a LilyPond job running for this document." +#~ msgstr "È già in esecuzione un processo LilyPond per questo documento." + +#~ msgid "Can't process document" +#~ msgstr "Impossibile elaborare il documento" + +#~ msgid "Continue anyway?" +#~ msgstr "Continuare comunque?" + +#~ msgid "" +#~ "You want to run LilyPond in preview mode (with point and click enabled), " +#~ "but your document contains a command to turn point and click off." +#~ msgstr "" +#~ "Si sta per eseguire LilyPond in modalità anteprima (con il point-and-" +#~ "click abilitato) ma il documento contiene un comando per disabilitare il " +#~ "point-and-click." + +#~ msgid "" +#~ "You want to run LilyPond in publish mode (with point and click disabled), " +#~ "but your document contains a command to turn point and click on." +#~ msgstr "" +#~ "Si sta per eseguire LilyPond in modalità pubblicazione (con il point-and-" +#~ "click disabilitato) ma il documento contiene un comando per abilitare il " +#~ "point-and-click." + +#~ msgid "Abort the running LilyPond process" +#~ msgstr "Ferma il processo LilyPond in esecuzione" + +#~ msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" +#~ msgstr "" +#~ "Esegui LilyPond in modalità anteprima (Shift-click per la finestra di " +#~ "configurazione)" + +#~ msgid "LilyPond has successfully compiled %1." +#~ msgstr "LilyPond ha terminato la compilazione %1 con successo." + +#~ msgid "LilyPond exited with an error compiling %1." +#~ msgstr "LilyPond è uscito con un errore durante la compilazione di %1." + +#~ msgid "" +#~ "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" +#~ msgstr "" +#~ "Inserire uno schema ritmico usando i valori delle durate separati da uno " +#~ "spazio (ad es. 8. 16 8 4 8)" + +#~ msgid "Terminal" +#~ msgstr "Terminale" + +#~ msgid "" +#~ "Could not load the KMid part.\n" +#~ "Please install KMid 2.4.0 or higher." +#~ msgstr "" +#~ "Impossibile caricare il modulo KMid.\n" +#~ "Installare KMid versione 2.4.0 o successiva." + +#~ msgid "Show PDF Navigation Panel" +#~ msgstr "Mostra il pannello di navigazione del PDF" + +#~ msgid "Show PDF minipager" +#~ msgstr "Mostra le miniature del PDF" + +#~ msgid "Configure Okular..." +#~ msgstr "Configura Okular..." + +#~ msgid "S&ynchronize Preview with Current Document" +#~ msgstr "S&incronizza l'anteprima con il documento attuale" + +#~ msgid "Reload" +#~ msgstr "Ricarica" + +#~ msgid "no log" +#~ msgstr "nessun log presente" + +#~ msgid "Only show on errors" +#~ msgstr "Mostra solo in caso di errori" + +#~ msgid "Rumor" +#~ msgstr "Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter " +#~ "from the LilyPond document." +#~ msgstr "" +#~ "Il metro da usare. Lasciare \"Auto\" per far dedurre a Frescobaldi il " +#~ "metro dal documento LilyPond." + +#~ msgid "Quantize:" +#~ msgstr "Approssimazione:" + +#~ msgid "The shortest note duration to use." +#~ msgstr "La durata più breve da usare per le note." + +#~ msgid "Record LilyPond input note by note, without durations." +#~ msgstr "Registra l'input LilyPond nota per nota, senza durate." + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Record monophonic input, without chords." +#~ msgstr "Registra in monofonia, senza accordi." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let Frescobaldi determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Il numero di accidenti. I numeri negativi indicano i bemolli. Lasciare " +#~ "\"Auto\" perché Frescobaldi deduca la tonalità dal documento LilyPond." + +#~ msgid "Meter:" +#~ msgstr "Metro:" + +#~ msgid "Key:" +#~ msgstr "Tonalità:" + +#~ msgid "Configure..." +#~ msgstr "Configura..." + +#~ msgid "Adjust more settings, like MIDI input and output." +#~ msgstr "Configura altre opzioni, come l'ingresso e l'uscita MIDI." + +#~ msgid "Set these settings as default." +#~ msgstr "Usa queste impostazioni come predefinite." + +#~ msgid "Found rumor version %1." +#~ msgstr "Trovata la versione %1 di Rumor." + +#~ msgid "Could not find Rumor: %1" +#~ msgstr "Impossibile trovare Rumor: %1" + +#~ msgid "Settings have been saved." +#~ msgstr "Le impostazioni sono state salvate." + +#~ msgid "Record" +#~ msgstr "Registra" + +#~ msgid "Start or stop Rumor MIDI-recording." +#~ msgstr "Avvia o ferma la registrazione MIDI di Rumor." + +#~ msgid "Rumor is recording, press ESC to stop." +#~ msgstr "Rumor sta registrando, premere ESC per fermarlo." + +#~ msgid "Rumor stopped." +#~ msgstr "Rumor fermato." + +#~ msgid "TiMidity" +#~ msgstr "TiMidity" + +#~ msgid "Start or stop the TiMidity ALSA MIDI client." +#~ msgstr "Avvia o ferma TiMidity, il client MIDI per ALSA." + +#~ msgid "Rumor Settings" +#~ msgstr "Configurazione di Rumor" + +#~ msgid "OSS device %1" +#~ msgstr "Dispositivo OSS %1" + +#~ msgid "" +#~ "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard " +#~ "of your computer." +#~ msgstr "" +#~ "L'ingresso MIDI da usare. Scegliere \"Tastiera\" se si vuole suonare " +#~ "sulla tastiera del computer." + +#~ msgid "MIDI output:" +#~ msgstr "Uscita MIDI:" + +#~ msgid "MIDI output to use." +#~ msgstr "L'uscita MIDI da usare." + +#~ msgid "The LilyPond language you want Rumor to output the pitches in." +#~ msgstr "La lingua in cui Rumor scriverà le note nel sorgente LilyPond." + +#~ msgid "Explicit durations" +#~ msgstr "Aggiungi tutte le durate" + +#~ msgid "" +#~ "Add a duration after every note, even if it is the same as the preceding " +#~ "note." +#~ msgstr "" +#~ "Aggiunge la durata dopo ogni nota, anche se è la stessa della nota " +#~ "precedente." + +#~ msgid "Absolute pitch" +#~ msgstr "Altezza assoluta" + +#~ msgid "Use absolute pitches instead of relative." +#~ msgstr "Usa altezze assolute al posto delle relative." + +#~ msgid "No barlines" +#~ msgstr "Niente stanghette" + +#~ msgid "Filter the barlines out of Rumor's output." +#~ msgstr "Toglie le stanghette di battuta dall'output di Rumor." + +#~ msgid "No dots" +#~ msgstr "Niente punti di valore" + +#~ msgid "Do not use dotted notes, but ties instead." +#~ msgstr "Usa le legature al posto dei punti di valore." + +#~ msgid "Legato" +#~ msgstr "Legato" + +#~ msgid "Do not use rests, but give all notes the maximum length." +#~ msgstr "Non usa pause ma dà a tutte le note la massima durata." + +#~ msgid "Strip leading and trialing rests from output." +#~ msgstr "Toglie le pause iniziali e finali dall'output." + +#~ msgid "Guile scripts to load:" +#~ msgstr "Script Guile da caricare:" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. Check " +#~ "\"What's this\" for more information." +#~ msgstr "" +#~ "Qui si possono scegliere gli script Guile da far caricare a Rumor. " +#~ "Consultare \"Cos'è questo\" per ulteriori ragguagli." + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %1. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Qui si possono scegliere gli script Guile da far caricare a Rumor. È " +#~ "possibile aggiungere i propri script copiandoli in %1. Se la prima linea " +#~ "dello script inizia con un punto e virgola (;) quella linea sarà mostrata " +#~ "come descrizione." + +#~ msgid "publish mode" +#~ msgstr "modalità pubblicazione" + +#~ msgid "LilyPond %1 [%2] starting (%3)..." +#~ msgstr "LilyPond %1 [%2] in esecuzione (%3)..." + +#~ msgid "LilyPond [%1] starting (%2)..." +#~ msgstr "LilyPond [%1] in esecuzione (%2)..." + +#~ msgid "LilyPond [%1] finished (%2)." +#~ msgstr "LilyPond [%1] terminato (%2)." + +#~ msgid "Select which LilyPond version you want to run:" +#~ msgstr "Scegliere quale versione di LilyPond eseguire:" + +#~ msgid "LilyPond %1" +#~ msgstr "LilyPond %1" + +#~ msgid "Automatic LilyPond Version (determined from document)." +#~ msgstr "Versione di LilyPond automatica (determinata dal documento)." + +#~ msgid "Path: %1" +#~ msgstr "Percorso: %1" + +#~ msgid "LilyPond (version unknown)" +#~ msgstr "LilyPond (versione sconosciuta)" + +#~ msgid "" +#~ "Use LilyPond (version unknown)\n" +#~ "Path: %1" +#~ msgstr "" +#~ "Usa LilyPond (versione sconosciuta)\n" +#~ "Percorso: %1" + +#~ msgid "Save LilyPond Log as" +#~ msgstr "Salva il log di LilyPond come" + +#~ msgid "" +#~ "Could not save LilyPond log:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Impossibile salvare il log di Lilypond:\n" +#~ "\n" +#~ "%1" + +#~ msgid "LilyPond-related settings" +#~ msgstr "Impostazioni rigurdanti LilyPond" + +#~ msgid "LilyPond version to use:" +#~ msgstr "Versione di LilyPond da usare:" + +#~ msgid "" +#~ "Here you can set a fixed LilyPond version to run on documents in this " +#~ "session.\n" +#~ "\n" +#~ "The LilyPond version selected here is run by default on your documents, " +#~ "and it's also used by the \"Insert Version\" command." +#~ msgstr "" +#~ "Qui è possibile impostare una versione LilyPond con cui compilare i " +#~ "documenti in questa sessione.\n" +#~ "La versione LilyPond selezionata qui sarà la predefinita per compilare i " +#~ "documenti e per il comando \"Inserisci la versione\"." + +#~ msgid "Configure" +#~ msgstr "Configura" + +#~ msgid "General Frescobaldi Preferences" +#~ msgstr "Opzioni generali di Frescobaldi" + +#~ msgid "Paths to programs or data used by Frescobaldi" +#~ msgstr "Percorsi ai programmi o ai dati usati da Frescobaldi" + +#~ msgid "Rumor MIDI input" +#~ msgstr "Ingresso MIDI di Rumor" + +#~ msgid "Rumor MIDI input plugin settings" +#~ msgstr "Impostazioni dei plugin di ingresso MIDI di Rumor" + +#~ msgid "Editor Component" +#~ msgstr "Componente editor" + +#~ msgid "Editor Component Options" +#~ msgstr "Opzioni del componente editor" + +#~ msgid "LilyPond version number to use for new documents" +#~ msgstr "Versione di LilyPond da usare per i nuovi documenti" + +#~ msgid "Use version number of installed LilyPond" +#~ msgstr "Usa il numero di versione dell'eseguibile LilyPond installato" + +#~ msgid "Use version number of last convert-ly rule" +#~ msgstr "Usa il numero di versione dell'ultima regola di convert-ly" + +#~ msgid "Enter a valid LilyPond version number, e.g. 2.12.0" +#~ msgstr "Inserire un numero di versione LilyPond corretto, ad esempio 2.12.0" + +#~ msgid "Warnings and Notifications" +#~ msgstr "Avvertimenti e segnalazioni" + +#~ msgid "Warn when a document contains a conflicting point and click setting" +#~ msgstr "" +#~ "Avvisa quando un documento contiene comandi per il point-and-click\n" +#~ "in conflitto con le impostazioni di esecuzione di LilyPond" + +#~ msgid "Warn when a document needs to be saved before LilyPond is run" +#~ msgstr "" +#~ "Avvisa quando il documento dev'essere salvato prima di eseguire LilyPond" + +#~ msgid "Warn when saving a session would overwrite another" +#~ msgstr "Avvisa quando una sessione potrebbe sovrascriverne un'altra" + +#~ msgid "Point and Click" +#~ msgstr "Point-and-click" + +#~ msgid "Enable Point and Click" +#~ msgstr "Abilita il Point-and-click" + +#~ msgid "" +#~ "Click this button if Point and Click does not work. See Shift+F1 (What's " +#~ "This) for more information." +#~ msgstr "" +#~ "Fare click qui se il point-and-click non funzionasse. Vedere Shift+F1 " +#~ "(Aiuto) per ulteriori informazioni." + +#~ msgid "" +#~ "On its first run, Frescobaldi tries to auto-configure Okular (which " +#~ "provides the PDF preview) to call Frescobaldi when a clickable object is " +#~ "clicked.\n" +#~ "\n" +#~ "But this setting can get lost when you move Frescobaldi to a different " +#~ "location or when other applications reconfigure Okular.\n" +#~ "\n" +#~ "Click this button to configure Frescobaldi as 'custom editor' inside " +#~ "Okular. This works best when all instances of Okular are closed and the " +#~ "PDF preview has not yet been opened." +#~ msgstr "" +#~ "Al primo avvio, Frescobaldi tenta di autoconfigurare Okular (il programma " +#~ "con cui si visualizza l'anteprima del PDF) per eseguire Frescobaldi " +#~ "quando si fa click su un link.\n" +#~ "\n" +#~ "Quest'impostazione però può essere persa se si sposta Frescobaldi o se " +#~ "un'altra applicazione riconfigura Okular.\n" +#~ "\n" +#~ "Fare click su questo pulsante per configurare Frescobaldi come 'editor " +#~ "personalizzato' all'interno di Okular. Questo procedimento funziona " +#~ "meglio se Okular è chiuso e l'anteprima PDF in Frescobaldi non è ancora " +#~ "stata visualizzata." + +#~ msgid "" +#~ "The Okular PDF preview has been reconfigured.\n" +#~ "\n" +#~ "If you already opened the PDF preview, restart Frescobaldi for the new " +#~ "settings to take effect." +#~ msgstr "" +#~ "L'anteprima PDF di Okular è stata riconfigurata.\n" +#~ "\n" +#~ "Se l'anteprima era già stata visualizzata, riavviare Frescobaldi perché " +#~ "le nuove impostazioni abbiano effetto." + +#~ msgid "PDF Viewer:" +#~ msgstr "Visualizzatore PDF:" + +#~ msgid "PDF Viewer" +#~ msgstr "Visualizzatore PDF" + +#~ msgid "(leave empty for operating system default)" +#~ msgstr "(lasciare vuoto per usare quello predefinito dal sistema operativo)" + +#~ msgid "MIDI Player:" +#~ msgstr "Lettore MIDI:" + +#~ msgid "Url:" +#~ msgstr "Url:" + +#~ msgid "Url or path to the LilyPond documentation." +#~ msgstr "Url o percorso completo alla documentazione LilyPond." + +#~ msgid "Lyrics Hyphenation" +#~ msgstr "Divisione in sillabe" + +#~ msgid "" +#~ "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " +#~ "KOffice, etc, one per line. If you leave out the starting slash, the " +#~ "prefixes from the KDEDIRS environment variable are prepended." +#~ msgstr "" +#~ "Percorsi di ricerca per i dizionari di sillabazione di OpenOffice.org, " +#~ "Scribus, KOffice, ecc., uno per riga. Senza la barra a inizio riga " +#~ "vengono aggiunti automaticamente i prefissi contenuti nella variabile " +#~ "d'ambiente KDEDIRS." + +#~ msgid "Commands used by the Rumor MIDI input module" +#~ msgstr "Comandi per il modulo di input MIDI di Rumor" + +#~ msgid "Name or full path of the Rumor program." +#~ msgstr "Nome o percorso completo dell'eseguibile di Rumor." + +#~ msgid "" +#~ "Name or full path of the aconnect program (part of ALSA, for MIDI input " +#~ "and playback using Rumor)." +#~ msgstr "" +#~ "Nome o percorso completo di aconnect (componente ALSA per l'inserimento e " +#~ "l'esecuzione MIDI tramite Rumor)." + +#~ msgid "" +#~ "Full command to start Timidity (or any other program) as an ALSA MIDI " +#~ "client." +#~ msgstr "" +#~ "Comando completo per avviare TiMidity (o un altro programma) come client " +#~ "MIDI per ALSA." + +#~ msgid "Close Button" +#~ msgstr "Pulsante per chiudere" + +#~ msgid "Large Tabs" +#~ msgstr "Linguette larghe" + +#~ msgid "Tabs can be moved" +#~ msgstr "Le linguette possono essere spostate" + +#~ msgid "Download..." +#~ msgstr "Scaricamento..." + +#~ msgid "Download new binary LilyPond releases." +#~ msgstr "Scarica le nuove versioni di LilyPond." + +#~ msgid "LilyPond Command" +#~ msgstr "Comando LilyPond" + +#~ msgid "Choose a session." +#~ msgstr "Scegli una sessione." + +#~ msgid "Choose..." +#~ msgstr "Scegli..." + +#~ msgid "Your document has already a LilyPond version statement." +#~ msgstr "" +#~ "Il documento contiene già la dichiarazione del numero di versione di " +#~ "LilyPond." + +#~ msgid "Version already set" +#~ msgstr "La versione è già stata aggiunta" + +#~ msgid "" +#~ "Can't determine the version of LilyPond. Please check your LilyPond " +#~ "installation." +#~ msgstr "" +#~ "Impossibile determinare la versione di LilyPond: controllare che " +#~ "l'installazione di Lilypond sia corretta." + +#~ msgid "" +#~ "Can't determine the LilyPond version of the current document. Please add " +#~ "a \\version statement with the correct version." +#~ msgstr "" +#~ "Impossibile determinare il numero di versione di LilyPond per il " +#~ "documento in uso. Aggiungere la dichiarazione con il numero di versione " +#~ "corretto." + +#~ msgid "This LilyPond document is already up-to-date." +#~ msgstr "Questo documento LilyPond è già aggiornato all'ultima versione." + +#~ msgid "" +#~ "The document has been processed with convert-ly. You'll find the messages " +#~ "of convert-ly in a comment block at the end. You still may have to edit " +#~ "some parts manually." +#~ msgstr "" +#~ "Il documento è stato elaborato con convert-ly. I messaggi di convert-ly " +#~ "si trovano in un blocco di commento alla fine del file; potrebbe essere " +#~ "necessario modificare a mano alcune parti." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %1" +#~ msgstr "" +#~ "Il documento è stato elaborato con convert-ly ma non è stato modificato." +#~ "Questo è il messaggio di uscita di convert-ly: %1" + +#~ msgid "The tempo in beats per minute." +#~ msgstr "Il tempo in battiti al minuto." + +#~ msgid "Treble" +#~ msgstr "Violino" + +#~ msgid "Treble 8" +#~ msgstr "Violino con \"8\" sotto" + +#~ msgid "Tab clef" +#~ msgstr "Chiave per intavolatura" + +#~ msgid "No Clef" +#~ msgstr "Nessuna chiave" + +#~ msgid "Add selected part to your score." +#~ msgstr "Aggiungi la parte selezionata allo spartito." + +#~ msgid "A tempo indication, e.g. \"Allegro.\"" +#~ msgstr "Un'indicazione di movimento, ad es. \"Allegro.\"" + +#~ msgid "Wrap score in \\book block" +#~ msgstr "Racchiudi la sezione \\score in un blocco \\book" + +#~ msgid "If checked, wraps the \\score block inside a \\book block." +#~ msgstr "Se selezionato, racchiude la sezione \\score in un blocco \\book." + +#~ msgid "How many voices to put in this staff." +#~ msgstr "Numero di voci da mettere in questo rigo." + +#~ msgid "Basso continuo" +#~ msgstr "Basso continuo" + +#~ msgid "Guitar" +#~ msgstr "Chitarra" + +#~ msgid "Oboe d'Amore" +#~ msgstr "Oboe d'amore" + +#~ msgid "English Horn" +#~ msgstr "Corno inglese" + +#~ msgid "Mezzo soprano" +#~ msgstr "Mezzosoprano" + +#~ msgid "Open PDF" +#~ msgstr "Apri PDF" + +#~ msgid "Email..." +#~ msgstr "Spedisci..." + +#~ msgid "Disable the built-in PDF preview" +#~ msgstr "Disabilita l'anteprima integrata del PDF" + +#~ msgid "The direction to use for the articulations." +#~ msgstr "La posizione dei segni rispetto al rigo." + +#~ msgid "Your document has been modified, please save first." +#~ msgstr "Il documento è stato modificato, salvare prima." + +#~ msgid "" +#~ "Printing failed: %1\n" +#~ "\n" +#~ "The print command %2 does probably not exist. Please check your settings." +#~ msgstr "" +#~ "Stampa non riuscita: %1\n" +#~ "\n" +#~ "Il comando di stampa %2 probabilmente non è installato. Controllare le " +#~ "impostazioni." + +#~ msgid "The print command contains errors. Please check your settings." +#~ msgstr "Ci sono errori nel comando di stampa. Controllare le impostazioni." + +#~ msgid "Directly print on default printer" +#~ msgstr "Stampa direttamente con la stampante predefinita" + +#~ msgid "Notify when a document has been sent to the printer" +#~ msgstr "Segnala quando un documento è stato inviato alla stampante" + +#~ msgid "" +#~ "Command to print a PDF file, for example lpr or kprinter. You may add " +#~ "some arguments, e.g. lpr -P myprinter." +#~ msgstr "" +#~ "Comando per stampare un PDF, per esempio lpr o kprinter. Si possono far " +#~ "seguire opzioni, ad es.: lpr -P myprinter." + +#~ msgid "Space above:" +#~ msgstr "Spazio sopra:" + +#~ msgid "Name or full path of the convert-ly program." +#~ msgstr "Nome o percorso completo di convert-ly." + +#~ msgid "Expand" +#~ msgstr "Espandi" + +#~ msgid "Show" +#~ msgstr "Mostra" + +#, fuzzy +#~ msgid "Paper Size A4" +#~ msgstr "Dimensione del foglio:" + +#, fuzzy +#~ msgid "Paper Size A5" +#~ msgstr "Dimensione del foglio:" + +#, fuzzy +#~ msgid "Paper Size Letter" +#~ msgstr "Dimensione del foglio:" + +#, fuzzy +#~ msgid "Stem Up" +#~ msgstr "Nota per nota" + +#, fuzzy +#~ msgid "Stem Down" +#~ msgstr "Sotto" + +#, fuzzy +#~ msgid "Lyric Stanza" +#~ msgstr "Strofe:" + +#, fuzzy +#~ msgid "Midi section" +#~ msgstr "Dedica" + +#, fuzzy +#~ msgid "With: instrumentName" +#~ msgstr "Nomi degli strumenti" + +#, fuzzy +#~ msgid "With: shortInstrumentName" +#~ msgstr "Nomi degli strumenti" + +#, fuzzy +#~ msgid "New Lyrics" +#~ msgstr "Parole" diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/Makefile frescobaldi-2.0.0/frescobaldi_app/po/Makefile --- frescobaldi-1.2.0/frescobaldi_app/po/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/Makefile 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,20 @@ +# Makefile that builds the MO files + +# The python interpreter +PYTHON = python + +potfile = ../../frescobaldi.pot + +pofiles = $(wildcard *.po) +mofiles = $(patsubst %.po,%.mo,$(pofiles)) + + +all: $(mofiles) + + +$(pofiles): $(potfile) + msgmerge -U $@ $< + +$(mofiles): %.mo: %.po + msgfmt -o $@ $< + $(PYTHON) molint.py $@ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/messages.py frescobaldi-2.0.0/frescobaldi_app/po/messages.py --- frescobaldi-1.2.0/frescobaldi_app/po/messages.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/messages.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,68 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Dummy file containing messages that are part of some Python modules or Qt and used in our application. +""" + +from __future__ import unicode_literals + +# Python, optparse: +_("Usage") +_("Usage: %s\n") +_("show this help message and exit") +_("show program's version number and exit") +# L10N: Command line options +_("Options") + + +# Qt +_("CloseButton", "Close Tab") + +_("QDialog", "What's This?") + +_("QDialogButtonBox", "Apply") +_("QDialogButtonBox", "OK") +_("QDialogButtonBox", "Cancel") +_("QDialogButtonBox", "Discard") +_("QDialogButtonBox", "Save") +_("QDialogButtonBox", "Help") +_("QDialogButtonBox", "Close") +_("QDialogButtonBox", "Open") +_("QDialogButtonBox", "Reset") + +_("QFileDialog", "File") +_("QFileDialog", "Folder") +_("QFileDialog", "Find Directory") +_("QFileDialog", "All Files (*)") + +_("QScrollBar", "Scroll here") +_("QScrollBar", "Top") +_("QScrollBar", "Bottom") +_("QScrollBar", "Page up") +_("QScrollBar", "Page down") +_("QScrollBar", "Scroll up") +_("QScrollBar", "Scroll down") +_("QScrollBar", "Left edge") +_("QScrollBar", "Right edge") +_("QScrollBar", "Page left") +_("QScrollBar", "Page right") +_("QScrollBar", "Scroll left") +_("QScrollBar", "Scroll right") + diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/mofile.py frescobaldi-2.0.0/frescobaldi_app/po/mofile.py --- frescobaldi-1.2.0/frescobaldi_app/po/mofile.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/mofile.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,330 @@ +""" +This module contains a loader for MO files, written in 2011 by Wilbert Berendsen. + +The module is heavily inspired by the Python gettext library, but allows for reading +all contents of a MO file, also the msgid2's, which are not needed for translating +but are useful e.g. when checking messages and translations for wrong Python +variable fields. Also the msgctxt is supported (the *pgettext methods). + +The module provides a MoFile class, representing a MO file. + +MoFile(filename) reads the messages from the given filename, +MoFile.fromData(buffer) reads the messages from the given bytes-string, +MoFile.fromStream(stream) reads the messages from the given stream. + +The four methods 'gettext', 'pgettext', 'ngettext', 'npgettext' are like the +ones in the GNU Gettext library. If a message can't be found the fallback (settable +with the set_fallback() method is consulted. By default a NullMoFile() is used +that returns the messages untranslated. All messages are returned as unicode +strings. + +The *lgettext methods are not provided but a wrapper class could easily be +created to return encoded messages. + +Besides the MoFile and NullMoFile classes, the module provides some functions +that iterate over the contents of a MO file in different ways. + +There are no functions to locate MO files, or to install a MoFile object +as a global translator. You can do this easily yourself e.g.: + +import __builtin__ +__builtin__._ = lambda *args: translation[len(args)](*args) + +mo_instance = MoFile('/path/to/file.mo') + +translation = [ + None, + mo_instance.gettext, + mo_instance.pgettext, + mo_instance.ngettext, + mo_instance.npgettext, +] + +This way, the _( ... ) function can be called with one to four arguments, and +calls the correct method to return a translated message. + +""" + +__all__ = [ + 'NullMoFile', 'MoFile', + 'parse_mo', 'parse_mo_split', 'parse_mo_decode', + 'parse_header', 'parse_plural_expr', +] + +import re +from struct import unpack + +LE_MAGIC = 0x950412deL +BE_MAGIC = 0xde120495L + + +class NullMoFile(object): + """Empty "mo file", returning messages untranslated.""" + def gettext(self, message): + return message + + def ngettext(self, message, message_plural, n): + return message if n == 1 else message_plural + + def pgettext(self, context, message): + return message + + def npgettext(self, context, message, message_plural, n): + return message if n == 1 else message_plural + + def fallback(self): + return None + + +class MoFile(NullMoFile): + """Represents a MO translation file and provides methods to translate messages.""" + @classmethod + def fromData(cls, buf): + """Constructs the MoFile object, reading the messages from a bytes buffer.""" + obj = cls.__new__(cls) + obj._load(buf) + return obj + + @classmethod + def fromStream(cls, stream): + """Constructs the MoFile object, reading the messages from an open stream.""" + return cls.fromData(stream.read()) + + def __init__(self, filename): + """The default constructor reads the messages from the given filename.""" + with open(filename, 'rb') as f: + self._load(f.read()) + + def _load(self, buf): + catalog = {} + context_catalog = {} + charset = 'UTF-8' + self._plural = lambda n: int(n != 1) + self._info = {} + for context, msgs, tmsgs in parse_mo_split(buf): + if msgs[0] == '': + # header + info = parse_header(tmsgs[0]) + try: + charset = info.get('content-type', '').split('charset=')[1] + except IndexError: + pass + try: + plural = info.get('plural-forms', '').split(';')[1].split('plural=')[1] + except IndexError: + pass + else: + f = parse_plural_expr(plural) + if f: + self._plural = f + # store as well + self._info = dict((k, v.decode(charset)) for k, v in info.items()) + else: + # decode + d = context_catalog.setdefault(context.decode(charset), {}) if context else catalog + msgid1 = msgs[0].decode(charset) + if len(msgs) > 1: + # plural + for i, t in enumerate(tmsgs): + d[(msgid1, i)] = t.decode(charset) + else: + # singular + d[msgid1] = tmsgs[0].decode(charset) + self._catalog = catalog + self._context_catalog = context_catalog + self._fallback = NullMoFile() + + def set_fallback(self, fallback): + """Sets a fallback class to return translations for messages not in this MO file. + + If fallback is None, AttributeError is raised when translations are not found. + By default, fallback is set to a NullMoFile instance that returns the message + untranslated. + + """ + self._fallback = fallback + + def fallback(self): + """Returns the fallback MoFile or NullMoFile object or None. + + The fallback is called when a message is not found in our own catalog. + By default, fallback is set to a NullMoFile instance that returns the message + untranslated. + + """ + return self._fallback + + def info(self): + """Returns the header (catalog description) from the MO-file as a dictionary. + + The keys are the header names in lower case, the values unicode strings. + + """ + return self._info + + def gettext(self, message): + """Returns the translation of the message.""" + try: + return self._catalog[message] + except KeyError: + return self._fallback.gettext(message) + + def ngettext(self, message, message_plural, n): + """Returns the correct translation (singular or plural) depending on n.""" + try: + return self._catalog[(message, self._plural(n))] + except KeyError: + return self._fallback.ngettext(message, message_plural, n) + + def pgettext(self, context, message): + """Returns the translation of the message in the given context.""" + try: + return self._context_catalog[context][message] + except KeyError: + return self._fallback.pgettext(context, message) + + def npgettext(self, context, message, message_plural, n): + """Returns the correct translation (singular or plural) depending on n, in the given context.""" + try: + return self._context_catalog[context][(message, self._plural(n))] + except KeyError: + return self._fallback.npgettext(context, message, message_plural, n) + + +def parse_mo(buf): + """Parses the given buffer (a bytes instance) as a MO file. + + Yields raw message/translation pairs, not decoded or handled in any other way. + + """ + # are we LE or BE? + magic = unpack('4I', buf[4:20]) + ii = '>II' + else: + raise IOError(0, 'Invalid MO data') + + buflen = len(buf) + + # read the MO buffer and store all data + for i in range(msgcount): + mlen, moff = unpack(ii, buf[masteridx:masteridx+8]) + mend = moff + mlen + tlen, toff = unpack(ii, buf[transidx:transidx+8]) + tend = toff + tlen + if mend < buflen and tend < buflen: + msg = buf[moff:mend] + tmsg = buf[toff:tend] + else: + raise IOError(0, 'Corrupt MO data') + + yield msg, tmsg + + masteridx += 8 + transidx += 8 + + +def parse_header(data): + """Parses the "header" (the msgstr of the first, empty, msgid) and returns it as a dict. + + The names are made lower-case. + + """ + info = {} + lastkey = key = None + for line in data.splitlines(): + line = line.strip() + if line: + if ':' in line: + key, val = line.split(':', 1) + key = key.strip().lower() + val = val.strip() + info[key] = val + lastkey = key + elif lastkey: + info[lastkey] += b'\n' + line + return info + + +def parse_mo_split(buf): + """Parses the mo file and splits up all messages/translation pairs. + + Yields a three-tuple everytime: (context, messages, translations) + + where context is None or bytes, and messages and translations are both lists + of undecoded bytes objects. + + """ + for msg, tmsg in parse_mo(buf): + try: + context, msg = msg.split('\x04') + except ValueError: + context = None + yield context, msg.split('\x00'), tmsg.split('\x00') + + +def parse_mo_decode(buf, default_charset="UTF-8"): + """Parses and splits, returns three-tuples like parse_mo_split but decoded to unicode.""" + charset = default_charset + for context, msgs, tmsgs in parse_mo_split(buf): + if msgs[0] == '': + info = parse_header(tmsgs[0]) + try: + charset = info.get('content-type', '').split('charset=')[1] + except IndexError: + pass + yield (context.decode(charset) if context else None, + [msg.decode(charset) for msg in msgs], + [tmsg.decode(charset) for tmsg in tmsgs]) + + + +expr_re = re.compile(r"\d+|>>|<<|[<>!=]=|&&|\|\||[-+*/%^&<>?:|!()n]") + + +def parse_plural_expr(text): + """Parses an expression such as the 'plural=' found in PO/MO files. + + Returns a lambda function taking the 'n' argument and returning the plural number. + Returns None if the expression could not be parsed. + + """ + source = iter(expr_re.findall(text)) + + def _expr(): + result = [] + for token in source: + if token == '?': + result.insert(0, 'if') + result[0:0] = _expr() + result.append('else') + result.extend(_expr()) + elif token == ':': + return result + elif token == '&&': + result.append('and') + elif token == '||': + result.append('or') + elif token == '!': + result.append('not') + else: + result.append(token) + if token == '(': + result.extend(_expr()) + elif token == ')': + return result + return result + + py_expression = ' '.join(_expr()) + if py_expression: + code = "lambda n: int({0})".format(py_expression) + try: + compiled_code = compile(code, '', 'eval') + except Exception: + return + return eval(compiled_code, {}, {}) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/molint.py frescobaldi-2.0.0/frescobaldi_app/po/molint.py --- frescobaldi-1.2.0/frescobaldi_app/po/molint.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/molint.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,99 @@ +#! python + +""" +This script reads a MO file and checks that translated messages do not use named +string formatting fields that do not appear in the original messages. + +This would cause keyword errors when the format method is called on a translated +string. +""" + +from __future__ import unicode_literals + +import string +import sys + +import mofile + +_parse = string.Formatter().parse + +def fields(text): + """Returns the format field names in text as a set(). + + If the text contains erroneous formatting delimiters, ValueError is raised. + + """ + return set(i[1] for i in _parse(text) if i[1]) + + +def molint(filename): + """Checks filename for superfluous fields in the translated messages. + + Returns True if there are no errors, otherwise prints messages to stderr + and returns False. + + """ + correct = True + for context, messages, translations in mofile.parse_mo_decode(open(filename, 'rb').read()): + + # collect fields in messages + s = set() + for m in messages: + try: + s |= fields(m) + except ValueError: + pass + + if not s: + continue + + # collect superfluous fields in translations + errors = [] + for t in translations: + try: + superfluous = fields(t) - s + except ValueError: + errors.append((t, "Erroneous format string")) + else: + if superfluous: + errors.append((t, "Field{0} {1} not in message".format( + 's' if len(superfluous) > 1 else '', + ', '.join('{{{0}}}'.format(name) for name in superfluous)))) + + # write out errors if any + if errors: + correct = False + sys.stderr.write( + "\n{0}: Translation contains errors!\n" + " Message{1}:\n".format(filename, '' if len(messages) == 1 else "s")) + for m in messages: + sys.stderr.write(" {0}\n".format(m)) + + sys.stderr.write(" Offending translation{0}:\n".format('' if len(errors) == 1 else "s")) + + for t, errmsg in errors: + sys.stderr.write(" {0}:\n {1}\n".format(errmsg, t)) + + return correct + + +if __name__ == '__main__': + filenames = sys.argv[1:] + if not filenames: + sys.stderr.write( + "usage: python molint.py ...\n" + "\n" + "checks the given MO files if the translations contain erroneous\n" + "embedded variable names.\n" + ) + sys.exit(2) + + errorfiles = [] + for filename in filenames: + if not molint(filename): + errorfiles.append(filename) + + if errorfiles: + sys.stderr.write("\nFiles containing errors: {0}\n".format(", ".join(errorfiles))) + + sys.exit(1 if errorfiles else 0) Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/nl.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/nl.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/nl.po frescobaldi-2.0.0/frescobaldi_app/po/nl.po --- frescobaldi-1.2.0/frescobaldi_app/po/nl.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/nl.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,8402 @@ +# translation of nl.po to Nederlands +# +# Wilbert Berendsen , 2008. +# Wilbert Berendsen , 2008, 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: frescobaldi 1.9.0\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: 2011-12-23 09:24+0100\n" +"Last-Translator: Wilbert Berendsen \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.1\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "{appname} is geschreven in {python} en gebruikt de {qt} toolkit." + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +msgid "Python" +msgstr "Python" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "Qt4" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" +"De muziekweergave is gebaseerd op de {poppler}-bibliotheek van {authors} en " +"anderen." + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +msgid "Poppler" +msgstr "Poppler" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "De meeste bijgeleverde pictogrammen zijn gemaakt door {tango}." + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "Het Tango Desktop-project" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "{appname} is vertaald in de volgende talen:" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "Over {appname}" + +#: frescobaldi_app/about.py:87 +msgid "About" +msgstr "Over" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "Dank aan" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "Versie" + +#: frescobaldi_app/about.py:144 +msgid "Operating System" +msgstr "Besturingssysteem" + +#: frescobaldi_app/about.py:151 +msgid "Version {version}" +msgstr "Versie {version}" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +msgid "A LilyPond Music Editor" +msgstr "Een muziek-editor voor LilyPond" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "Copyright (c) {year} door {author}" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "Een e-mailbericht sturen naar de auteurs." + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "Vertaald door Wilbert Berendsen." + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "Beschikbaar onder de {gpl}." + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "Deze sneltoets conflicteert met het onderstaande commando:" +msgstr[1] "Deze sneltoets conflicteert met onderstaande commando's:" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +msgid "Shortcut Conflict" +msgstr "Sneltoetsconflict" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "Opnieuw bewerken" + +#: frescobaldi_app/app.py:128 +msgid "LilyPond Files" +msgstr "LilyPond-bestanden" + +#: frescobaldi_app/app.py:129 +msgid "LaTeX Files" +msgstr "LaTeX-bestanden" + +#: frescobaldi_app/app.py:130 +msgid "DocBook Files" +msgstr "DocBook-bestanden" + +#: frescobaldi_app/app.py:131 +msgid "HTML Files" +msgstr "HTML-bestanden" + +#: frescobaldi_app/app.py:132 +msgid "Texinfo Files" +msgstr "Texinfo-bestanden" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "Scheme-bestanden" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Alle bestanden" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "Huidige regel &markeren" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "Fout-mark&eringen verwijderen" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "&Alle markeringen verwijderen" + +#: frescobaldi_app/bookmarkmanager.py:115 +msgid "Next Mark" +msgstr "Volgende markering" + +#: frescobaldi_app/bookmarkmanager.py:116 +msgid "Previous Mark" +msgstr "Vorige markering" + +#: frescobaldi_app/convert_ly.py:118 +msgid "From version:" +msgstr "Van versie:" + +#: frescobaldi_app/convert_ly.py:119 +msgid "To version:" +msgstr "Naar versie:" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "Convert-ly berichten in document bewaren" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" +"Indien ingeschakeld, worden berichten van convert-ly aan het eind van het " +"document als commentaar toegevoegd." + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "&Berichten" + +#: frescobaldi_app/convert_ly.py:125 +msgid "&Changes" +msgstr "&Wijzigingen" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "Opnieuw uitvoeren" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +msgid "" +msgstr "" + +#: frescobaldi_app/convert_ly.py:138 +msgid "Convert-ly from LilyPond {version}" +msgstr "Convert-ly van LilyPond {version}" + +#: frescobaldi_app/convert_ly.py:162 +msgid "(set in document)" +msgstr "(in document ingesteld)" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "Zowel de 'van'- als 'naar' versie dient ingesteld te zijn." + +#: frescobaldi_app/convert_ly.py:190 +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "" +"Kan {convert_ly} niet starten:\n" +"\n" +"{message}\n" + +#: frescobaldi_app/convert_ly.py:196 +msgid "The document has not been changed." +msgstr "Het document is niet gewijzigd." + +#: frescobaldi_app/convert_ly.py:202 +msgid "Current Document" +msgstr "Huidig document" + +#: frescobaldi_app/convert_ly.py:202 +msgid "Converted Document" +msgstr "Bijgewerkt document" + +#: frescobaldi_app/convert_ly.py:208 +msgid "Colors:" +msgstr "Kleuren:" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "Toegevoegd" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "Gewijzigd" + +#: frescobaldi_app/convert_ly.py:211 +msgid "Deleted" +msgstr "Verwijderd" + +#: frescobaldi_app/convert_ly.py:212 +msgid "Links:" +msgstr "Koppelingen:" + +#: frescobaldi_app/convert_ly.py:213 +msgid "First Change" +msgstr "Eerste wijziging" + +#: frescobaldi_app/convert_ly.py:214 +msgid "Next Change" +msgstr "Volgende wijziging" + +#: frescobaldi_app/convert_ly.py:215 +msgid "Top" +msgstr "Top" + +#: frescobaldi_app/cut_assign.py:39 +msgid "Cut and Assign" +msgstr "Knippen en toewijzen" + +#: frescobaldi_app/cut_assign.py:40 +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "" +"Geef de naam van de variable om de geselecteerde tekst aan toe te wijzen:" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +msgid "Untitled" +msgstr "Naamloos" + +#: frescobaldi_app/document.py:145 +msgid "Untitled ({num})" +msgstr "Naamloos ({num})" + +#: frescobaldi_app/documentactions.py:125 +msgid "Cut and Assign..." +msgstr "Knippen en toewijzen..." + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "&Syntaxis accentuering" + +#: frescobaldi_app/documentactions.py:127 +msgid "&Automatic Indent" +msgstr "&Automatisch inspringen" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "Opnieuw &inspringen" + +#: frescobaldi_app/documentactions.py:129 +msgid "&Format" +msgstr "&Formatteren" + +#: frescobaldi_app/documentactions.py:130 +msgid "&Update with convert-ly..." +msgstr "&Bijwerken met convert-ly..." + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +msgid "&Save" +msgstr "Op&slaan" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +msgid "Save &As..." +msgstr "Opslaan &als..." + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "&Sluiten" + +#: frescobaldi_app/documentmenu.py:42 +msgctxt "menu title" +msgid "&Document" +msgstr "&Document" + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "[altijd gegraveerd]" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Er is een interne fout opgetreden:" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "Interne fout" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Bugrapport emailen..." + +#: frescobaldi_app/exception.py:79 +msgid "Optionally describe below what you were doing:" +msgstr "Geef hier eventueel aan wat u aan het doen was:" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "Algemene lettertypen" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" +"Selecteer de drie algemene lettertypen om te gebruiken voor respectievelijk " +"\\roman, \\sans, en \\typewriter. U " +"dient ook de balkgrootte in te stellen op de globale balkgrootte die u in " +"het document gebruikt (standaard 20)." + +#: frescobaldi_app/globalfontdialog.py:76 +msgid "Roman Font:" +msgstr "Schreef-lettertype:" + +#: frescobaldi_app/globalfontdialog.py:77 +msgid "Sans Font:" +msgstr "Schreefloos lettertype:" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "Schrijfmachine-lettertype:" + +#: frescobaldi_app/globalfontdialog.py:79 +msgid "Staff Size:" +msgstr "Balkgrootte:" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Liedteksten afbreken" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Selecteer een taal:" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +msgid "Lyrics" +msgstr "Liedteksten" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +msgctxt "menu title" +msgid "Tools" +msgstr "Gereedschap" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "Bewerken" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +msgid "Preferences" +msgstr "Voorkeuren" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi kan automatisch afbreektekens '{hyphen}' in teksten plaatsen\n" +"om deze als liedteksten bruikbaar te maken.\n" +"Hierbij worden afbreekbestanden gebruikt van OpenOffice, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"Om deze functie te gebruiken selecteert u eerst de tekst die u in syllabes\n" +"wilt verdelen.\n" +"Druk daarna op {key_hyphen} of kies {menu_hyphen}.\n" +"In die dialoog die daarop verschijnt kiest u de taal.\n" +"Klik OK of druk op Enter om het afbreken te laten plaatsvinden.\n" +"

\n" +"\n" +"

\n" +"Een kleine beperking is dat afbreekbestanden van tekstverwerkers vaak niet\n" +"willen afbreken direct na de eerste letter (bijvoorbeeld: '{example}'),\n" +"omdat dat er in gewone teksten niet fraai uitziet.\n" +"Het kan dus zijn dat u bij sommige woorden nog handmatig de afbreektekens " +"moet toevoegen.\n" +"

\n" +"\n" +"

\n" +"Er is ook een commando om afbreektekens te verwijderen.\n" +"Dit kan handig zijn als u een couplet liedteksten heeft dat u als gewone " +"markup\n" +"onder de muziek wilt weergeven.\n" +"Onder {menu_settings} kunt u een lijst van directories opgeven waar " +"Frescobaldi zal zoeken naar afbreekbestanden.\n" +"

\n" + +#: frescobaldi_app/inputdialog.py:101 +msgid "Select Color" +msgstr "Kleur selecteren" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "Starten {job}..." + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "Afbreken {job}..." + +#: frescobaldi_app/job.py:206 +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "" +"Kan {program} niet starten.\n" +"Controleer het pad en permissies." + +#: frescobaldi_app/job.py:209 +msgid "Could not read from the process." +msgstr "Kan de uitvoer van het proces niet lezen." + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Er is een onbekende fout opgetreden." + +#: frescobaldi_app/job.py:216 +msgid "Exited with return code {code}." +msgstr "Afgesloten met returncode {code}." + +#: frescobaldi_app/job.py:218 +msgid "Exited with exit status {status}." +msgstr "Afgesloten met status {status}." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "Succesvol beëindigd in {time}." + +#: frescobaldi_app/lyrics.py:132 +msgid "&Hyphenate Lyrics Text..." +msgstr "&Liedteksten afbreken..." + +#: frescobaldi_app/lyrics.py:133 +msgid "&Remove hyphenation" +msgstr "Liedtekst-afbreking ver&wijderen" + +#: frescobaldi_app/lyrics.py:134 +msgid "&Copy Lyrics with hyphenation removed" +msgstr "Liedteksten &kopiëren met afbreking verwijderd" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "{appname} [opties] bestand ..." + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "ENC" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Te gebruiken tekenset" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "NUM" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Ga naar regel (start met 1)" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Ga naar kolom (start met 0)" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "NAAM" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "Te starten sessie ('{none}' voor lege sessie)" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +msgid "[modified]" +msgstr "[gewijzigd]" + +#: frescobaldi_app/mainwindow.py:268 +msgctxt "dialog title" +msgid "Close Document" +msgstr "Document sluiten" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" +"Het document \"{name}\" is gewijzigd.\n" +"Wilt u uw wijzigingen bewaren of weggooien?" + +#: frescobaldi_app/mainwindow.py:281 +msgid "Tab Bar" +msgstr "Tabbalk" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +msgid "Warning" +msgstr "Waarschuwing" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" +"Kan niet-lokaal document niet laden:\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:354 +msgctxt "dialog title" +msgid "Open File" +msgstr "Bestand openen" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "Fout" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" +"Kan niet schrijven naar bestemming:\n" +"\n" +"{url}" + +#: frescobaldi_app/mainwindow.py:399 +msgctxt "dialog title" +msgid "Save File" +msgstr "Bestand opslaan" + +#: frescobaldi_app/mainwindow.py:439 +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Kopie opslaan" + +#: frescobaldi_app/mainwindow.py:445 +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Selectie opslaan" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"Kan niet schrijven naar bestemming:\n" +"\n" +"{url}\n" +"\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "Invoegen uit bestand" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" +"Kan bron niet lezen:\n" +"\n" +"{url}\n" +"\n" +"{error}" + +#: frescobaldi_app/mainwindow.py:541 +msgctxt "dialog title" +msgid "Print Source" +msgstr "Brontekst afdrukken" + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "Exporteren als HTML" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" +"Beschrijf het probleem of de gewenste functionaliteit.\n" +"Geef zoveel mogelijk informatie.\n" +"\n" +"\n" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "Hoofdwerkbalk" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "Muziekweergave-werkbalk" + +#: frescobaldi_app/mainwindow.py:923 +msgctxt "action: new document" +msgid "&New" +msgstr "&Nieuw" + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "&Openen..." + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "&Recent geopend" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "&Invoegen uit bestand..." + +#: frescobaldi_app/mainwindow.py:927 +msgid "Open Current Directory" +msgstr "Huidige map openen" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "Kopie of selectie opslaan als..." + +#: frescobaldi_app/mainwindow.py:931 +msgid "Save All" +msgstr "Alles opslaan" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "Brontekst afdrukken..." + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "Andere documenten sluiten" + +#: frescobaldi_app/mainwindow.py:935 +msgid "Close All Documents" +msgstr "Alle documenten sluiten" + +#: frescobaldi_app/mainwindow.py:936 +msgid "Closes all documents and leaves the current session." +msgstr "Sluit alle documenten en verlaat de huidige sessie." + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "Afslui&ten" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "Bron als gekleurde &HTML exporteren..." + +#: frescobaldi_app/mainwindow.py:941 +msgid "&Undo" +msgstr "&Ongedaan maken" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "Opnie&uw" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "&Knippen" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Kopiëren" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "Als gekleurde HTML kopiëren" + +#: frescobaldi_app/mainwindow.py:946 +msgid "&Paste" +msgstr "&Plakken" + +#: frescobaldi_app/mainwindow.py:947 +msgid "Select &All" +msgstr "&Alles selecteren" + +#: frescobaldi_app/mainwindow.py:948 +msgid "Select &Block" +msgstr "&Blok selecteren" + +#: frescobaldi_app/mainwindow.py:949 +msgid "Select &None" +msgstr "&Niets selecteren" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "Volledige regels omhoog selecteren" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "Volledige regels omlaag selecteren" + +#: frescobaldi_app/mainwindow.py:952 +msgid "&Find..." +msgstr "&Zoeken..." + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "&Volgende zoeken" + +#: frescobaldi_app/mainwindow.py:954 +msgid "Find Pre&vious" +msgstr "V&orige zoeken" + +#: frescobaldi_app/mainwindow.py:955 +msgid "&Replace..." +msgstr "Ve&rvangen" + +#: frescobaldi_app/mainwindow.py:956 +msgid "Pr&eferences..." +msgstr "Voork&euren..." + +#: frescobaldi_app/mainwindow.py:958 +msgid "&Next Document" +msgstr "&Volgende document" + +#: frescobaldi_app/mainwindow.py:959 +msgid "&Previous Document" +msgstr "V&orige document" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "Omhoog schuiven" + +#: frescobaldi_app/mainwindow.py:961 +msgid "Scroll Down" +msgstr "Omlaag schuiven" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "Nieuw &venster" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "Volledig &scherm" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "&Handleiding" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "&Wat is dit?" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "&Bug rapporteren..." + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "&Over {appname}..." + +#: frescobaldi_app/menu.py:81 +msgctxt "menu title" +msgid "&File" +msgstr "&Bestand" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "&Exporteren" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "Be&werken" + +#: frescobaldi_app/menu.py:147 +msgctxt "menu title" +msgid "&View" +msgstr "B&eeld" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "&Muziekweergave" + +#: frescobaldi_app/menu.py:189 +msgctxt "menu title" +msgid "&LilyPond" +msgstr "&LilyPond" + +#: frescobaldi_app/menu.py:208 +msgctxt "menu title" +msgid "&Tools" +msgstr "&Gereedschap" + +#: frescobaldi_app/menu.py:233 +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "&Liedteksten" + +#: frescobaldi_app/menu.py:245 +msgctxt "submenu title" +msgid "&Pitch" +msgstr "&Toonhoogte" + +#: frescobaldi_app/menu.py:259 +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "&Ritme" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "&Venster" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "&Help" + +#: frescobaldi_app/musicpreview.py:113 +msgid "Document:" +msgstr "Document:" + +#: frescobaldi_app/musicpreview.py:195 +msgid "&Print" +msgstr "&Afdrukken" + +#: frescobaldi_app/musicpreview.py:196 +msgid "Music Preview" +msgstr "Muziek vooruitblik" + +#: frescobaldi_app/popplerdummy.py:42 +msgid "Could not load the {name} module." +msgstr "Kan de module {name} niet laden." + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" +"Kan geen printcommando vinden om een PostScript-bestand af te drukken.\n" +"\n" +"Daarom zal het document worden afgedrukt als een rasterafbeelding met " +"{resolution} DPI. Het is aanbevolen een apart PDF-weergaveprogramma te " +"gebruiken.\n" +"\n" +"Wilt u toch verdergaan?" + +#: frescobaldi_app/popplerprint.py:61 +msgid "PDF Document" +msgstr "PDF-document" + +#: frescobaldi_app/popplerprint.py:69 +msgid "Print {filename}" +msgstr "{filename} afdrukken" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +msgid "Printing Error" +msgstr "Printfout" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +msgid "Could not send the document to the printer." +msgstr "Kan het document niet naar de printer verzenden." + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "Afdrukken pagina {page} ({num} van {total})..." + +#: frescobaldi_app/search.py:99 +msgid "Search:" +msgstr "Zoeken:" + +#: frescobaldi_app/search.py:100 +msgid "&Case" +msgstr "&Hoofdl." + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "Maak onderscheid tussen hoofd- en kleine letters" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "&Regex" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "Reguliere expressie" + +#: frescobaldi_app/search.py:104 +msgid "The total number of matches" +msgstr "Het totale aantal overeenkomsten" + +#: frescobaldi_app/search.py:105 +msgid "Close" +msgstr "Sluiten" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "Vervangen:" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "&Vervangen" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "Vervangt de volgende overeenkomst van de zoekterm." + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "&Alles" + +#: frescobaldi_app/search.py:110 +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "" +"Vervangt alle overeenkomsten met de zoekterm in het document of de selectie." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "Regel: {line}, Kol: {column}" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "&Horizontaal splitsen" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "&Verticaal splitsen" + +#: frescobaldi_app/viewmanager.py:91 +msgid "&Close View" +msgstr "Weergave &sluiten" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "&Huidige weergave sluiten" + +#: frescobaldi_app/viewmanager.py:444 +msgid "Close &Other Views" +msgstr "&Andere weergaven sluiten" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "&Volgende weergave" + +#: frescobaldi_app/viewmanager.py:446 +msgid "&Previous View" +msgstr "V&orige weergave" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "Automatisch &aanvullen" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "Aanvullingen &weergeven" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +msgid "Special Characters" +msgstr "Speciale tekens" + +#: frescobaldi_app/charmap/__init__.py:41 +msgid "Special Charac&ters" +msgstr "Speciale &tekens" + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +msgid "Documentation Browser" +msgstr "Documentatie-browser" + +#: frescobaldi_app/docbrowser/__init__.py:47 +msgid "&Documentation Browser" +msgstr "&Documentatie-browser" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +msgid "Back" +msgstr "Terug" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "Verder" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "Begin" + +#: frescobaldi_app/docbrowser/__init__.py:84 +msgid "&LilyPond Documentation" +msgstr "&LilyPond-documentatie" + +#: frescobaldi_app/docbrowser/__init__.py:85 +msgid "&Contextual LilyPond Help" +msgstr "LilyPond-&contexthulp" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Zoeken..." + +#: frescobaldi_app/docbrowser/browser.py:136 +msgid "(local)" +msgstr "(lokaal)" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "({hostname})" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +msgid "LilyPond Source" +msgstr "LilyPond-bron" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +msgid "Documents" +msgstr "Documenten" + +#: frescobaldi_app/doclist/__init__.py:40 +msgid "Docum&ents" +msgstr "Docum&enten" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "&Altijd graveren [{docname}]" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "Dit document &altijd graveren" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "Graveren" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "&Graveren (vooruitblik)" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "Graveren (&publicatie)" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "Gra&veren (aangepast)..." + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "Graveertaak af&breken" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "Aangepast graveren" + +#: frescobaldi_app/engrave/custom.py:119 +msgid "LilyPond Version:" +msgstr "LilyPond-versie:" + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "Uitvoerformaat:" + +#: frescobaldi_app/engrave/custom.py:121 +msgid "Resolution:" +msgstr "Resolutie:" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "LilyPond starten met Point and Click (vooruitblik)" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "LilyPond starten met uitgebreide uitvoerberichten" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +msgid "Delete intermediate output files" +msgstr "Tussentijdse uitvoerbestanden verwijderen" + +#: frescobaldi_app/engrave/custom.py:126 +msgid "Command line:" +msgstr "Commandoregel:" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "LilyPond starten" + +#: frescobaldi_app/engrave/custom.py:149 +msgid "LilyPond {version}" +msgstr "LilyPond {version}" + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" +"In deze dialoog kunt u enkele parameters instellen voor het te starten " +"LilyPond-commando om uw document te graveren.\n" +"Het is zelfs mogelijk de commandoregel zelf aan te passen.\n" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "De volgende variabelen worden vervangen:" + +#: frescobaldi_app/engrave/custom.py:218 +msgid "The LilyPond executable" +msgstr "Het LilyPond-programma" + +#: frescobaldi_app/engrave/custom.py:219 +msgid "All the include paths" +msgstr "Alle include-paden" + +#: frescobaldi_app/engrave/custom.py:220 +msgid "The filename of the document" +msgstr "De naam van het document" + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "PDF" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "PostScript" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "PNG" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "SVG" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "PDF (EPS-backend)" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "Encapsulated PostScript (EPS-backend)" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "PNG (EPS-backend)" + +#: frescobaldi_app/engrave/result_menu.py:45 +msgid "Generated &Files" +msgstr "Aange&maakte bestanden" + +#: frescobaldi_app/engrave/result_menu.py:66 +msgid "No files available" +msgstr "Geen bestanden beschikbaar" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "Werkbalk" + +#: frescobaldi_app/help/browser.py:78 +msgid "Start" +msgstr "Start" + +#: frescobaldi_app/help/browser.py:79 +msgid "Contents" +msgstr "Inhoud" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "Help" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "Geen hulp" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "Geen hulp gevonden over dit onderwerp." + +#: frescobaldi_app/help/contents.py:46 +msgid "Frescobaldi Manual" +msgstr "Frescobaldi handleiding" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi is een eenvoudige maar krachtige editor voor LilyPond\n" +"bladmuziek documenten.\n" +"Deze handleiding is geschreven door {author} en documenteert {appname} " +"versie {version}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" +"

Hulp verkrijgen in Frescobaldi

\n" +"\n" +"

\n" +"In veel dialogen kunt u de Help-knop ({key_help}) gebruiken.\n" +"Veel items in de interface hebben ook \"Wat is dit\"-informatie die\n" +"wordt weergegeven door op {key_whatsthis} te drukken of\n" +"{menu_whatsthis} te kiezen.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "Wat is dit" + +#: frescobaldi_app/help/contents.py:88 +msgid "Introduction" +msgstr "Inleiding" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" +"

\n" +"LilyPond\n" +"is een open-source muziekgravure-programma, dat bladmuziek van hoge " +"kwaliteit produceert uit relatief eenvoudige tekstinvoerbestanden.\n" +"Deze tekstbestanden kunnen met elke teksteditor worden aangemaakt, waarna " +"LilyPond de bestanden leest en een fraaie gravure creëert, normaal gesproken " +"in PDF-formaat.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is een toepassing ontworpen om het bewerken van LilyPond " +"muziekbestanden sneller en gemakkelijker te maken.\n" +"Het blijft echter noodzakelijk de LilyPond invoertaal te leren doorgronden.\n" +"Als u het gedeelte {getting_started} leest in deze handleiding, zult u ook " +"al wat LilyPond basiskennis opdoen.\n" +"

\n" +"\n" +"

\n" +"Daarna kunt u verder gaan met de Learning Manual van\n" +"LilyPond's uitstekende online " +"documentatie.\n" +"

" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "Aan de slag" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "Graveren (publicatie)" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "LilyPond-voorkeuren" + +#: frescobaldi_app/help/contents.py:142 +msgctxt "menu title" +msgid "View" +msgstr "Beeld" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "Foutmarkeringen verwijderen" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "Naar afbeelding kopiëren..." + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" +"

\n" +"Het standaardscherm van Frescobaldi toont een tekstdocument aan de " +"linkerzijde en de muziekweergave aan de rechterzijde.\n" +"

\n" +"\n" +"

\n" +"Voer in de tekstweergave wat LilyPond-code in, zoals dit:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Klik dan op de lelie-knop in de werkbalk of druk op {key_engrave}.\n" +"Als alles goed is start LilyPond nu en verwerkt uw bestand.\n" +"Onderaan het scherm kunt u de voortgang van LilyPond volgen.\n" +"Als u geen fouten gemaakt hebt zal er een PDF-bestand worden aangemaakt\n" +"dat wordt weergegeven in de Muziekweergave:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"De muziekweergave heeft veel mogelijkheden:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Als u de muis over noten en andere objecten beweegt, lichten deze\n" +"op in de tekst; klik op objecten om de tekstcursor ernaartoe te brengen\n" +"
  • \n" +"\n" +"
  • \n" +"U kunt in- en uitzoomen met het muiswiel terwijl u de control-toets " +"vasthoudt. De muispijl bepaalt waarop ingezoomd wordt.\n" +"
  • \n" +"\n" +"
  • \n" +"Control-klik op een lege plek om een vergrootglas te tonen\n" +"
  • \n" +"\n" +"
  • \n" +"Als u de tekstcursor verplaatst of tekst selecteert lichten de noten in de " +"muziekweergave op;\n" +"druk op {key_jump} om naar een noot of ander object in de muziekweergave toe " +"te springen.\n" +"
  • \n" +"\n" +"
  • \n" +"U kunt met shift een selectie-rechthoek tekenen en dan drukken op " +"{key_copy_image} of {menu_copy_image}\n" +"om de geselecteerde muziek als een rasterafbeelding naar het klembord, een " +"bestand of een andere toepassing te kopiëren.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"Als uw partituur voltooid is, wordt het aanbevolen om LilyPond nog een keer " +"te starten\n" +"met aanklikbare noten uitgeschakeld: menu {menu_engrave}.\n" +"Dit resulteert in veel kleinere PDF-bestanden.

\n" +"\n" +"

\n" +"Als LilyPond niet start, kijk of LilyPond correct geïnstalleerd is en dat " +"het commando in de PATH omgevingsvariable van uw besturingssysteem is " +"ingesteld.\n" +"Indien nodig kunt u het volledige pad naar LilyPond instellen onder\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"Als LilyPond fouten in uw document tekenkomt worden deze in de log " +"weergegeven\n" +"en Frescobaldi markeert de regels waar de fouten werden gevonden.\n" +"Klik op de foutmeldingen of druk op {key_error} om meteen naar de fout te " +"gaan.\n" +"Als u nog eens op {key_error} drukt gaat u naar de volgende fout.\n" +"Als u LilyPond opnieuw start worden de foutmarkeringen weer verwijderd.\n" +"U kunt ook handmatig de foutmarkeringen verwijderen met de optie\n" +"{menu_clear_error_marks}.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:228 +msgid "Other Tools" +msgstr "Ander gereedschap" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "

Enkele andere belangrijke hulpmiddelen volgen hieronder.

\n" + +#: frescobaldi_app/help/contents.py:252 +msgid "About Frescobaldi" +msgstr "Over Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi is genoemd naar\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), een Italiaanse organist en componist.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is te vinden op\n" +"www.frescobaldi.org\n" +"en er is een mailing-list op\n" +"frescobaldi@googlegroups." +"com\n" +"(meer info).\n" +"

\n" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "Frescobaldi's hoofdauteur is {author}." + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "Meedoen" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi is a Vrije Software project om een gebruikersvriendelijke editor te maken " +"voor LilyPond-bladmuziek.\n" +"Het doel is Frescobaldi beschikbaar te maken op alle belangrijke platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi wordt ontwikkeld in een publiek GitHub depot op {url}.\n" +"Daar kunt u de broncode bekijken of verkrijgen en fouten en wensen " +"doorgeven.\n" +"

\n" +"\n" +"

\n" +"U kunt meewerken aan Frescobaldi door het gewoon te gebruiken en fouten en " +"suggesties door te geven.\n" +"Vertalingen zijn ook welkom. Hoe u nieuwe vertalingen maakt is beschreven in " +"het bestand README-translations in de brondistributie van Frescobaldi.\n" +"Als u functionaliteit wilt toevoegen vindt u informatie in het bestand " +"README-development.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:321 +msgid "History of Frescobaldi" +msgstr "Geschiedenis van Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" +"

\n" +"Frescobaldi stamt af van LilyKDE, dat een plugin was voor KDE3's editor " +"Kate.\n" +"LilyKDE was geschreven in Python en kwam uit met Kerst in 2007.\n" +"

\n" +"\n" +"

\n" +"Toen KDE versie 4 werd ontwikkeld was het niet meteen alweer mogelijk om " +"Kate-plugins\n" +"in Python te schrijven. Dus werd LilyKDE een zelfstandig programma dat de " +"Kate-teksteditor module van KDE gebruikte,\n" +"en kreeg daarbij de naam Frescobaldi. Nog steeds werd de Okular-part " +"gebruikt om PDF-documenten weer te geven.\n" +"Frescobaldi 0.7 was de eerste publieke release, met Kerst 2008.\n" +"Met Kerst 2009 werd versie 1.0.0 vrijgegeven en met Kerst 2010 versie " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"Op dat moment werd besloten om niet meer gebruik te maken van de KDE4-" +"bibliotheken en enkel Python en Qt4 te gebruiken, die eenvoudig beschikbaar " +"waren op alle belangrijke besturingssystemen.\n" +"Frescobaldi 2.0 is compleet van scratch herschreven. De releasedatum is " +"gesteld op Kerst 2011.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "De editor" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" +"

\n" +"Hier passeren de functies van de editor de revue,\n" +"hoe bijvoorbeeld het automatisch inspringen in te stellen, zoeken en " +"vervangen te gebruiken, etcetera.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "Zoeken en vervangen" + +#: frescobaldi_app/help/contents.py:377 +msgid "Edit" +msgstr "Bewerken" + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" +"

\n" +"In het menu {edit_menu} kunt u de commando's Zoeken ({key_search})\n" +"en Vervangen ({key_replace}) vinden; deze openen een klein venster onderaan " +"de tekstweergave.\n" +"Er kan gezocht worden naar platte tekst of met behulp van reguliere " +"expressies.\n" +"

\n" +"\n" +"

\n" +"Reguliere expressies zijn geavanceerde zoekteksten die tekens bevatten die " +"met verschillende\n" +"tekens in het document kunnen overeenkomen.\n" +"Het is ook mogelijk om bij het vervangen van tekst stukken van de zoektekst " +"opnieuw te gebruiken.\n" +"

\n" +"\n" +"

\n" +"In de reguliere expressies zoekmodus hebben sommige tekens een speciale " +"betekenis:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
voorafgaande groep of teken mag nul or meer keer achter elkaar " +"voorkomen
\n" +"
+
\n" +"
voorafgaande groep of teken mag 1 of meer keer achter elkaar voorkomen\n" +"
?
\n" +"
voorafgaande groep of teken mag 0 of 1 keer achter elkaar voorkomen\n" +"
[ ]
\n" +"
komt overeen met 1 van de gegeven tekens
\n" +"
( )
\n" +"
groepeert tekens. De tekens worden ook bewaard en kunnen teruggeplaatst " +"worden\n" +"in de vervangtekst door tekens als \\1, \\2\n" +"etcetera, te gebruiken.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
komt repectievelijk overeen met een backslash, een newline, een tab, een " +"witruimte-teken,\n" +"een cijfer, een alfanumeriek teken.
\n" +"
\n" +"\n" +"

\n" +"Een uitvoerige behandeling van reguliere uitdrukkingen kan worden gevonden " +"in de\n" +"Python documentatie.\n" +"

\n" + +#: frescobaldi_app/help/contents.py:427 +msgid "Document variables" +msgstr "Document-variabelen" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" +"Document variabeles zijn variabelen die het gedrag van Frescobaldi " +"beïnvloeden.\n" +"Ze kunnen worden gezet in de eerste of laatste vijf regels van een " +"document.\n" +"Als een regel '-*-' bevat, probeert Frescobaldi in\n" +"de rest van de regels variabele-definities te vinden in de vorm van " +"naam: waarde;.\n" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "De volgende variabelen worden herkend:" + +#: frescobaldi_app/help/contents.py:444 +msgid "mode" +msgstr "modus" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" +"Forceert de modus, één van lilypond, html, texinfo, latex, docbook of " +"scheme. Standaard automatische modus-herkenning." + +#: frescobaldi_app/help/contents.py:448 +msgid "filename" +msgstr "Bestandsnaam" + +#: frescobaldi_app/help/contents.py:449 +msgid "Compiles another LilyPond document instead of the current." +msgstr "Compileert een ander LilyPond document in plaats van het huidige." + +#: frescobaldi_app/help/contents.py:450 +msgid "encoding" +msgstr "tekenset" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "Een andere tekenset gebruiken dan standaard UTF-8." + +#: frescobaldi_app/help/contents.py:452 +msgid "version" +msgstr "versie" + +#: frescobaldi_app/help/contents.py:453 +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "" +"De LilyPond-versie die u wilt gebruiken, kan worden gebruikt voor niet-" +"LilyPond documenten." + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +msgid "number" +msgstr "nummer" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "De breedte van een tab-teken, standaard 8." + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "Wel of geen tabs in het inspringen gebruiken, standaard {no}." + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "Wel of geen tabs elders in het document gebruiken, standaard {yes}." + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "Het aantal spaties voor elk inspring-niveau, standaard 2." + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "U kunt document-variabelen in commentaar plaatsen." + +#: frescobaldi_app/help/contents.py:479 +msgid "Table of Contents" +msgstr "Inhoudsopgave" + +#: frescobaldi_app/help/helpimpl.py:115 +msgid "Up:" +msgstr "Omhoog:" + +#: frescobaldi_app/help/helpimpl.py:130 +msgid "Next:" +msgstr "Hierna:" + +#: frescobaldi_app/help/helpimpl.py:133 +msgid "See also:" +msgstr "Zie ook:" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "(geen toets ingesteld)" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "LilyPond-uitvoer" + +#: frescobaldi_app/logtool/__init__.py:51 +msgid "LilyPond &Log" +msgstr "&LilyPond-uitvoer" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "Volgende foutmelding" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "Vorige foutmelding" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Klik om dit bestand te bewerken" + +#: frescobaldi_app/miditool/__init__.py:51 +msgid "MIDI" +msgstr "MIDI" + +#: frescobaldi_app/miditool/__init__.py:52 +msgid "MIDI &Player" +msgstr "MIDI-s&peler" + +#: frescobaldi_app/miditool/__init__.py:97 +msgctxt "midi player" +msgid "Pause" +msgstr "Pauze" + +#: frescobaldi_app/miditool/__init__.py:98 +msgctxt "midi player" +msgid "Play" +msgstr "Afspelen" + +#: frescobaldi_app/miditool/__init__.py:99 +msgctxt "midi player" +msgid "Stop" +msgstr "Stop" + +#: frescobaldi_app/miditool/__init__.py:100 +msgctxt "midi player" +msgid "Restart" +msgstr "Herstarten" + +#: frescobaldi_app/miditool/widget.py:102 +msgid "Tempo" +msgstr "Tempo" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "Geen uitgang gevonden!" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "GELADEN" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "TOTAAL" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "TIJD" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "TEMPO" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "MAAT" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "Muziekweergave" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "&Muziekweergave" + +#: frescobaldi_app/musicview/__init__.py:191 +msgid "Select Music View Document" +msgstr "Weer te geven document selecteren" + +#: frescobaldi_app/musicview/__init__.py:192 +msgid "&Print Music..." +msgstr "&Muziek afdrukken..." + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "&Inzoomen" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "&Uitzoomen" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "Muziek zoomen" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "Passend in &breedte" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "Passend in &hoogte" + +#: frescobaldi_app/musicview/__init__.py:198 +msgid "Fit &Page" +msgstr "Hele &pagina" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "Naar cursor &springen" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "Naar afbeeld&ing kopiëren..." + +#: frescobaldi_app/musicview/__init__.py:339 +msgid "Choose the PDF document to display." +msgstr "Kies het weer te geven PDF-document." + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" +"Kies het weer te geven PDF-document of sleep het bestand naar een andere " +"locatie of toepassing." + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "Passend in breedte" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "Passend in hoogte" + +#: frescobaldi_app/musicview/__init__.py:401 +msgid "Fit Page" +msgstr "Hele pagina" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "DPI:" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "Papierkleur" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "Bijknippen" + +#: frescobaldi_app/musicview/image.py:129 +msgid "Antialias" +msgstr "Vloeiend" + +#: frescobaldi_app/musicview/image.py:130 +msgid "Drag" +msgstr "Slepen" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "De afbeelding als PNG-bestand slepen." + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "Naar klembord &kopiëren" + +#: frescobaldi_app/musicview/image.py:133 +msgid "&Save As..." +msgstr "Opslaan &als..." + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" +"

\n" +"Klik om de weergave te wisselen tussen 100%-grootte en venstergrootte. Sleep " +"om de afbeelding naar een andere toepassing te kopiëren.\n" +"Sleep met Control (of {command}) om een grotere afbeelding te schuiven.\n" +"

\n" +"

\n" +"U kunt ook het kleine afbeeldingsicoon rechtsonder slepen, waarmee u het " +"werkelijke bestand op schijf sleept, bijvoorbeeld naar een e-mailbericht.\n" +"

" + +#: frescobaldi_app/musicview/image.py:167 +msgid "Image from {filename}" +msgstr "Afbeelding uit {filename}" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "Afbeelding opslaan als" + +#: frescobaldi_app/musicview/image.py:214 +msgid "Could not save the image." +msgstr "Kan de afbeelding niet opslaan." + +#: frescobaldi_app/pitch/__init__.py:99 +msgid "Pitch Name &Language" +msgstr "Taal voor &nootnamen" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" +"De LilyPond-taal voor de nootnamen aanpassen in het document of het " +"geselecteerde gedeelte." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "Relatief naar &absoluut omzetten" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" +"Zet de noten in het document of de selectie om van relatieve naar absolute " +"toonhoogte." + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "Absoluut naar &relatief omzetten" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "" +"Zet de noten in het document of de selectie om van absolute naar relatieve " +"toonhoogte." + +#: frescobaldi_app/pitch/__init__.py:111 +msgid "&Transpose..." +msgstr "&Transponeren..." + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "Transponeert alle noten in de selectie of het document." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Taal voor nootnamen" + +#: frescobaldi_app/pitch/pitch.py:82 +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"De gevraagde vertaling kan niet worden gemaakt.\n" +"\n" +"De muziek bevat kwarttonen, maar deze zijn niet beschikbaar in de taal " +"\"{name}\"." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"De taal van de nootnamen in de geselecteerde tekst is aangepast, maar u " +"dient handmatig het volgende commando aan uw document toe te voegen:" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "(voor LilyPond lager dan 2.14), of" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "(voor LilyPond 2.14 en hoger.)" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "Transponeren" + +#: frescobaldi_app/pitch/pitch.py:399 +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" +"Voer twee absolute nootnamen in met een spatie ertussen, gebruikmakend van " +"nootnamen in de taal \"{language}\"." + +#: frescobaldi_app/pitch/pitch.py:581 +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"De gevraagde transpositie kan niet worden gemaakt.\n" +"\n" +"De getransponeerde muziek zou kwarttonen bevatten die niet beschikbaar zijn " +"in de taal \"{language}\"." + +#: frescobaldi_app/pitch/pitch.py:712 +msgid "Pitch manipulation" +msgstr "Toonhoogte bewerken" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" +"

\n" +"Frescobaldi biedt de volgende functies om toonhoogtes aan te passen,\n" +"alle in het menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Taal voor nootnamen
\n" +"
\n" +"Verandert de taal voor nootnamen voor het hele document of een selectie.\n" +"
\n" +"\n" +"
Relatieve muziek omzetten naar absoluut
\n" +"
\n" +"Zet alle \\relative muziek om naar absolute toonhoogten.\n" +"Houdt rekening met octave-checks maar verwijdert deze uiteraard ook.\n" +"
\n" +"\n" +"
Absolute muziek omzetten naar relatief
\n" +"
\n" +"Verandert alle bovenste muziekexpressies naar \\relative zodra " +"er een noot in gevonden wordt.\n" +"Als u aparte sub-expressies relatief wilt maken kan het nodig zijn om muziek " +"te selecteren vanaf de eerste sub-expressie zodat bovenliggende accollades-" +"openen niet worden gezien.\n" +"
\n" +"\n" +"
\n" + +#: frescobaldi_app/pitch/pitch.py:744 +msgctxt "submenu title" +msgid "Pitch" +msgstr "Toonhoogte" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" +"

\n" +"Voor het transponeren van muziek dient u twee absolute toonhoogten op te " +"geven\n" +"om het interval te bepalen waarover de muziek moet worden getransponeerd.\n" +"De toonhoogtes mogen ook octaaftekens bevatten, en moeten worden ingevoerd " +"in dezelfde\n" +"taal als het document gebruikt.\n" +"

\n" +"\n" +"

\n" +"De muziek wordt dan getransponeerd van de eerste toonhoogte naar de tweede,\n" +"precies als het \\transpose LilyPond commando het zou doen.\n" +"

\n" +"\n" +"

\n" +"Waneer u bijvoorbeeld een kleine terts naar boven wilt transponeren voert u " +"in:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"Om een grote secunde naar beneden te transponeren kunt u invoeren:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"of:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"Het is ook mogelijk de transponeerfunctie te gebruiken om een stuk muziek " +"bijvoorbeeld van cis naar des om te zetten of om kwarttonen te gebruiken als " +"deze in de gebruikte taal voor nootnamen voorhanden zijn.\n" +"

\n" +"\n" +"

\n" +"De transponeerfunctie kan zowel relatieve als absolute muziek transponeren " +"en handelt toonsoortaanduidingen, chordmode en octave-checks daarbij ook " +"correct af.\n" +"

\n" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "Gebruik" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "Gebruik: %s\n" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "toon deze hulp-informatie en sluit af" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "toon het versienummer en sluit af" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "Opties" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "Tab sluiten" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "Wat is dit?" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "Toepassen" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "OK" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "Annuleren" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "Weggooien" + +#: frescobaldi_app/po/messages.py:44 +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Opslaan" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "Help" + +#: frescobaldi_app/po/messages.py:46 +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Sluiten" + +#: frescobaldi_app/po/messages.py:47 +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Openen" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "Terugzetten" + +#: frescobaldi_app/po/messages.py:50 +msgctxt "QFileDialog" +msgid "File" +msgstr "Bestand" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "Map" + +#: frescobaldi_app/po/messages.py:52 +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Map zoeken" + +#: frescobaldi_app/po/messages.py:53 +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Alle bestanden (*)" + +#: frescobaldi_app/po/messages.py:55 +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "Hierheen schuiven" + +#: frescobaldi_app/po/messages.py:56 +msgctxt "QScrollBar" +msgid "Top" +msgstr "Top" + +#: frescobaldi_app/po/messages.py:57 +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Onder" + +#: frescobaldi_app/po/messages.py:58 +msgctxt "QScrollBar" +msgid "Page up" +msgstr "Pagina omhoog" + +#: frescobaldi_app/po/messages.py:59 +msgctxt "QScrollBar" +msgid "Page down" +msgstr "Pagina omlaag" + +#: frescobaldi_app/po/messages.py:60 +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "Omhoog schuiven" + +#: frescobaldi_app/po/messages.py:61 +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "Omlaag schuiven" + +#: frescobaldi_app/po/messages.py:62 +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Linkerkant" + +#: frescobaldi_app/po/messages.py:63 +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Rechterkant" + +#: frescobaldi_app/po/messages.py:64 +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Pagina naar links" + +#: frescobaldi_app/po/messages.py:65 +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Pagina naar rechts" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "Naar links schuiven" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "Naar rechts schuiven" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Algemene voorkeuren" + +#: frescobaldi_app/preferences/__init__.py:182 +msgid "MIDI Settings" +msgstr "MIDI-instellingen" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +msgid "Helper Applications" +msgstr "Hulpprogramma's" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Paden" + +#: frescobaldi_app/preferences/__init__.py:212 +msgid "LilyPond Documentation" +msgstr "LilyPond-documentatie" + +#: frescobaldi_app/preferences/__init__.py:222 +msgid "Keyboard Shortcuts" +msgstr "Sneltoetsen" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "Tekst & kleur" + +#: frescobaldi_app/preferences/__init__.py:242 +msgid "Tools" +msgstr "Gereedschap" + +#: frescobaldi_app/preferences/documentation.py:64 +msgid "Paths to LilyPond Documentation" +msgstr "Paden naar LilyPond-documentatie" + +#: frescobaldi_app/preferences/documentation.py:66 +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "Voeg paden of URLs toe. Zie \"Wat is dit\" voor meer informatie." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" +"

Hier kunt u lokale bestandspaden of URLs voor LilyPond-documentatie " +"toevoegen. Een lokaal pad moet naar een directorie wijzen waar de " +"{documentation} map is, of het hele \"share/doc/lilypond/html/offline-root\" " +"pad.

\n" +"

Als deze niet gevonden worden, wordt een niveau diep gezocht in " +"submappen. Zodoende is het mogelijk om verschillende versies van de LilyPond-" +"documentatie in verschillende submappen te plaatsen, en dat Frescobaldi ze " +"automatisch vindt.

" + +#: frescobaldi_app/preferences/documentation.py:111 +msgid "Preferred Language:" +msgstr "Voorkeurstaal:" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "Standaard" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "Engels (onvertaald)" + +#: frescobaldi_app/preferences/documentation.py:135 +msgid "Please enter a local path or a URL:" +msgstr "Voer een lokaal pad in of een URL:" + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "Dit schema gebruiken voor afdrukken" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "Lettertype:" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "Basiskleuren" + +#: frescobaldi_app/preferences/fontscolors.py:124 +msgid "Default Styles" +msgstr "Standaardstijlen" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "(gebaseerd op: {name})" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +msgid "Text" +msgstr "Tekst" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "Achtergrond" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "Vet" + +#: frescobaldi_app/preferences/fontscolors.py:363 +msgid "Italic" +msgstr "Cursief" + +#: frescobaldi_app/preferences/fontscolors.py:364 +msgid "Underline" +msgstr "Onderstrepen" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +msgid "Selected Text" +msgstr "Geselecteerde tekst" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "Achtergrond van selectie" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "Huidige regel" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +msgid "Marked Line" +msgstr "Gemarkeerde regel" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +msgid "Error Line" +msgstr "Foutmarkering" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "Zoekresultaat" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +msgid "Matching Character" +msgstr "Bijbehorend teken" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +msgid "Preview Background" +msgstr "Vooruitblik achtergrond" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "Vooruitblik markering" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +msgid "Keyword" +msgstr "Sleutelwoord" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +msgid "Function" +msgstr "Functie" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "Variabele" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +msgid "Value" +msgstr "Waarde" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +msgid "String" +msgstr "Tekenreeks" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +msgid "Escape" +msgstr "Escape" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +msgid "Comment" +msgstr "Commentaar" + +#: frescobaldi_app/preferences/fontscolors.py:483 +msgid "Pitch" +msgstr "Toon" + +#: frescobaldi_app/preferences/fontscolors.py:484 +msgid "Octave" +msgstr "Octaaf" + +#: frescobaldi_app/preferences/fontscolors.py:485 +msgid "Duration" +msgstr "Duur" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "Octaaf-check" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "Vingerzetting" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +msgid "String Number" +msgstr "Snaar" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "Boogje" + +#: frescobaldi_app/preferences/fontscolors.py:491 +msgid "Dynamic" +msgstr "Dynamiek" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Articulatie" + +#: frescobaldi_app/preferences/fontscolors.py:493 +msgid "Chord" +msgstr "Akkoord" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "Waardestreep" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "Test" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +msgid "Repeat" +msgstr "Herhaling (\\repeat)" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "Commando" + +#: frescobaldi_app/preferences/fontscolors.py:499 +msgid "Specifier" +msgstr "Specifier" + +#: frescobaldi_app/preferences/fontscolors.py:500 +msgid "User Command" +msgstr "Gebruikerscommando" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +msgid "Markup" +msgstr "Markup" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "Lyric mode" + +#: frescobaldi_app/preferences/fontscolors.py:503 +msgid "Lyric Text" +msgstr "Liedtekst" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "Scheidingsteken" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "Context" + +#: frescobaldi_app/preferences/fontscolors.py:506 +msgid "Layout Object" +msgstr "Layout-object" + +#: frescobaldi_app/preferences/fontscolors.py:507 +msgid "Property" +msgstr "Property" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "Gebruikersvariable" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +msgid "Escaped Character" +msgstr "Escape-karakter" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "HTML" + +#: frescobaldi_app/preferences/fontscolors.py:517 +msgid "Tag" +msgstr "Tag" + +#: frescobaldi_app/preferences/fontscolors.py:518 +msgid "LilyPond Tag" +msgstr "LilyPond-tag" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "Attribuut" + +#: frescobaldi_app/preferences/fontscolors.py:521 +msgid "Entity Reference" +msgstr "Entiteit" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "Scheme" + +#: frescobaldi_app/preferences/fontscolors.py:527 +msgid "Number" +msgstr "Getal" + +#: frescobaldi_app/preferences/fontscolors.py:528 +msgid "LilyPond Environment" +msgstr "LilyPond-omgeving" + +#: frescobaldi_app/preferences/fontscolors.py:532 +msgid "Texinfo" +msgstr "Texinfo" + +#: frescobaldi_app/preferences/fontscolors.py:534 +msgid "Block" +msgstr "Blok" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "Verbatim" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Taal:" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "Geen vertaling" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "Systeemstandaard (indien beschikbaar)" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Stijl:" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "Systeempictogrammen gebruiken" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" +"Indien ingeschakeld, zullen pictogrammen van de werkomgeving worden gebruikt " +"in plaats van de meegeleverde pictogrammen.\n" +"Deze instelling wordt pas van kracht na herstarten van {appname}." + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "Als Frescobaldi zonder argumenten wordt gestart," + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "Lege sessie starten" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "Laatstgebruikte sessie starten" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "Met deze sessie starten:" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "Bij het opslaan van documenten" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "Veiligheidskopie bewaren" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" +"Frescobaldi maakt altijd een kopie van een document alvorens het te " +"overschrijven.\n" +"Indien ingeschakeld, worden deze bestanden bewaard." + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "Cursorpositie, bladwijzers, etc. onthouden" + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Standaardmap:" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "De standaardmap voor uw LilyPond documenten (optioneel)." + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "PDF:" + +#: frescobaldi_app/preferences/helpers.py:71 +msgid "MIDI:" +msgstr "MIDI:" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "SVG:" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "Afbeelding:" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "Browser:" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "E-mail:" + +#: frescobaldi_app/preferences/helpers.py:76 +msgid "File Manager:" +msgstr "Bestandsbeheer:" + +#: frescobaldi_app/preferences/helpers.py:77 +msgid "Shell:" +msgstr "Shell:" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" +"Hieronder kunt u commando's invoeren om verschillende typen bestanden te " +"openen. $f wordt vervangen door de bestandsnaam, $u door de URL. Laat een veld leeg om de standaardinstelling van het " +"besturingssysteem te gebruiken." + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "Commando dat een mailto: URL accepteert." + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "Commando dat een terminal of commandovenster opent." + +#: frescobaldi_app/preferences/lilypond.py:81 +msgid "LilyPond versions to use" +msgstr "De te gebruiken LilyPond-versies" + +#: frescobaldi_app/preferences/lilypond.py:82 +msgid "Automatically choose LilyPond version from document" +msgstr "Kies LilyPond-versie op basis van document" + +#: frescobaldi_app/preferences/lilypond.py:84 +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" +"Indien ingeschakeld, bepaalt het versienummer in het document welke LilyPond-" +"versie wordt gekozen.\n" +"Zie \"Wat is dit\" voor meer informatie." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" +"

Als deze optie is ingeschakeld, wordt gezocht naar een LilyPond " +"\\version commando of een version document variabele.\n" +"

Het LilyPond versie-commando ziet er aldus uit:

\n" +"
\\version \"2.14.0\"
\n" +"

De document variabele ziet er zo uit:

\n" +"
-*- version: 2.14.0;
\n" +"

ergens (in een commentaarsectie) in de eerste of laatste 5 regels van het " +"document.\n" +"Op deze wijze kan de LilyPond-versie ook worden aangegeven in niet-LilyPond " +"documenten zoals HTML, LaTeX, etc.

\n" +"

Als het document een versie aangeeft, wordt de oudst bruikbare LilyPond-" +"versie gekozen.\n" +"Zo niet, wordt de als standaard ingestelde versie gekozen.

\n" + +#: frescobaldi_app/preferences/lilypond.py:101 +msgid "See also {link}." +msgstr "Zie ook {link}:" + +#: frescobaldi_app/preferences/lilypond.py:149 +msgid "Set as &Default" +msgstr "Als standaar&d instellen" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "standaard" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "LilyPond-commando:" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "Naam of pad van het LilyPond programma." + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "Convert-ly:" + +#: frescobaldi_app/preferences/lilypond.py:241 +msgid "LilyPond-book:" +msgstr "Lilypond-book:" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "Meenemen in automatische versie-selectie" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "Bij het starten van LilyPond" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "Document opslaan indien mogelijk" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" +"Indien ingeschakeld, wordt het document eerst opgeslagen als het lokaal is " +"en gewijzigd.\n" +"Indien het document niet wordt opgeslagen, wordt een tijdelijk bestand " +"gebruikt om LilyPond te starten." + +#: frescobaldi_app/preferences/lilypond.py:286 +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "" +"Indien ingeschakeld, zal LilyPond tussentijdse PostScript-uitvoerbestanden " +"verwijderen." + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "LilyPond include-pad:" + +#: frescobaldi_app/preferences/midi.py:77 +msgid "MIDI Ports" +msgstr "MIDI-poorten" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" +"Let op: er zijn geen MIDI-uitgangen beschikbaar op uw systeem. Om MIDI te " +"gebruiken, controleer of PortMIDI is geïnstalleerd en dat er een MIDI-" +"synthesizer beschikbaar of aangesloten is." + +#: frescobaldi_app/preferences/midi.py:82 +msgid "Player output:" +msgstr "Speler uitgang:" + +#: frescobaldi_app/preferences/midi.py:84 +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" +"De MIDI-poort om music naar af te spelen. Zie \"Wat is dit\" voor meer " +"informatie." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" +"

Dit uitklapmenu toont de beschikbare MIDI-poorten. U kunt er eentje " +"selecteren, of een deel van de naam in typen. In dat geval wordt de eerste " +"beschikbare poort waarvan de naam met de opgegeven tekens begint, gekozen.\n" +"

Klik op de knop om de lijst te vernieuwen, bijvoorbeeld wanneer u een " +"MIDI-apparaat hebt aangekoppeld of een software-synthesizer hebt gestart.

" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "MIDI-poorten verversen" + +#: frescobaldi_app/preferences/midi.py:135 +msgid "Close unused MIDI output" +msgstr "Ongebruikte MIDI-uitvoer sluiten" + +#: frescobaldi_app/preferences/midi.py:137 +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" +"Sluit ongebruikte MIDI-poorten na een minuut. Zie \"Wat is dit\" voor meer " +"informatie." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" +"

Indien ingeschakeld, zal Frescobaldi ongebruikte MIDI-uitgangen na een " +"minuut sluiten.

\n" +"

Dit kan helpen om systeembronnen vrij te maken die anders gebruikt zouden " +"worden door een software MIDI-synthesizer, en zodoende batterij-vermogen te " +"sparen.

\n" +"

Een neveneffect is dat als u een MIDI-bestand langdurig pauzeert en dan " +"verder afspeelt, de instrumenten teruggezet zijn naar de standaard piano " +"(instrument 0). In dat geval kunt u het bestand vanaf het begin afspelen om " +"de instrumenten weer correct te horen.

\n" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "Mappen met afbreekbestanden" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Sneltoets" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "Menu {name}:" + +#: frescobaldi_app/preferences/shortcuts.py:125 +msgid "Other commands:" +msgstr "Andere commando's:" + +#: frescobaldi_app/preferences/shortcuts.py:173 +msgid "&Edit Shortcut for \"{name}\"" +msgstr "Sn&eltoets instellen voor \"{name}\"" + +#: frescobaldi_app/preferences/shortcuts.py:178 +msgid "(no shortcut)" +msgstr "(geen sneltoets)" + +#: frescobaldi_app/preferences/shortcuts.py:206 +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "Sneltoets voor dat commando verwijderen?" +msgstr[1] "Sneltoets van deze commando's verwijderen?" + +#: frescobaldi_app/preferences/shortcuts.py:304 +msgid "(default)" +msgstr "(standaard)" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "Log weergeven als een taak wordt gestart" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "Ruwe loguitvoer weergeven" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" +"Indien ingeschakeld, zal Frescobaldi lange bestandsnamen in de loguitvoer " +"niet inkorten." + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "Muziekweergave" + +#: frescobaldi_app/preferences/tools.py:142 +msgid "Magnifier Size:" +msgstr "Grootte van vergrootglas:" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "Grootte van het vergrootglas (Control+klik in muziekweergave)." + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr " pixels" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "Schaal van vergrootglas:" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "Vergroting van het vergrootglas." + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "%" + +#: frescobaldi_app/preferences/tools.py:220 +msgid "Group documents by directory" +msgstr "Documenten per map groeperen" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Quick Insert" + +#: frescobaldi_app/quickinsert/__init__.py:48 +msgid "Quick &Insert" +msgstr "Quick &Insert" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Korte notatie" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "Korte notatie toestaan voor sommige articulaties zoals staccato." + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Articulaties" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Verschillende soorten articulatie en andere tekens." + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Accent" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Marcato" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Staccatissimo" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Staccato" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Portato" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Tenuto" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Versieringen" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Triller" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Praller" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Mordent" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Dubbelslag" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "Lange praller" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "Praller met mordent" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "Praller naar boven" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "Praller naar beneden" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "Mordent naar boven" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "Mordent naar beneden" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "Praller naar boven" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "Praller naar onder" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "Praller met lijn" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Omgekeerde dubbelslag" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "Tekens" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Fermate" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Korte fermate" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Lange fermate" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Zeer lange fermate" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Teken" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Varcoda" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "Signumcongruentiae" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Overig" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Opstreek" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Afstreek" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "Bartók pizzicato" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "Open (koper)" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "Gestopt (koper)" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Flageolet" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Duim" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Linker hak" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Rechter hak" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "Linker teen" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Rechter teen" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "Halfopen (bijv. hi-hat)" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "Maatstrepen" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "Maatstrepen, ademhalingstekens, etc." + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Dubbele maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "Eindmaatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "Gestippelde maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "Gestreepte maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Onzichtbare maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "Start herhaling" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "Herhaal beide" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "Eind herhaling" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "Herhaal beide (oud)" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "Herhaal beide (klassiek)" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "Hoge maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "Enkele maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "Dun-dik-dunne maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "Dik-dunne maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "Dubbele dikke maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "Segno maatstreep" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "Ademhalingstekens" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "Standaard ademhalingsteken" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "Recht ademhalingsteken" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "Gebogen cesuur" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "Rechte cesuur" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "{name} ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +msgid "Configure Keyboard Shortcut ({key})" +msgstr "Sneltoets instellen ({key})" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Geen" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "Dynamiek" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "Dynamische tekens." + +#: frescobaldi_app/quickinsert/dynamics.py:128 +msgid "Dynamic sign {name}" +msgstr "Dynamisch teken {name}" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "Spanners" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "Crescendo (lijnen)" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "Diminuendo (lijnen)" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "Decrescendo" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "Bogen, spanners, etc." + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "Arpeggio's" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "Arpeggio met pijl omhoog" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "Arpeggio met pijl naar beneden" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "Vierkante haak-arpeggio" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "Ronde haak-arpeggio" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "Glissando's" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "Gestreept glissando" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "Gestippeld glissando" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "Zig-zag glissando" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "Triller-glissando" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "Fraseringsboog" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" +"

Met het Quick Insert-paneel kunt u allerlei muzieksymbolen aan de huidige " +"noot of geselecteerde muziek toevoegen.

\n" +"

Zie {link} voor meer informatie.

" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Richting:" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Boven" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Neutraal" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Onder" + +#: frescobaldi_app/quickinsert/widget.py:127 +msgid "The Quick Insert Panel" +msgstr "Het Quick Insert-paneel" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" +"

\n" +"Met de gereedschappen in het Quick Insert-paneel kunt u allerlei " +"muzieksymbolen aan de huidige noot of de geselecteerde muziek toevoegen.\n" +"

\n" +"\n" +"

\n" +"De Richting selectieknop bepaalt of articulaties, dynamische tekens " +"of boogjes in een neutrale positie worden geplaatst (bijv. bepaald door " +"stokrichting) of boven of onder de balk door een -, ^ of\n" +"_ teken ervoor te plaatsen.\n" +"

\n" +"\n" +"

\n" +"Klik op een tab om een categorie te selecteren. U kunt bladeren door alle " +"tabs met Control (of {command}) en het muiswiel.\n" +"Alle knoppen in het Quick Insert-paneel hebben instelbare sneltoetsen; u " +"kunt deze aanpassen door rechts te klikken op een knop.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" +"

Articulaties

\n" +"\n" +"

\n" +"Deze muzieksymbolen kunnen aan een noot, rust of een geselecteerd bereik " +"worden toegevoegd.\n" +"Als u ze aan een selectie toevoegt worden rusten overgeslagen.\n" +"Als er geen tekst geselecteerd is springt de cursor vanzelf naar de volgende " +"noot, rust of het volgende akkoord.\n" +"

\n" +"\n" +"

\n" +"Als Korte notatie is ingeschakeld zal Frescobaldi korte tekens " +"gebruiken indien beschikbaar (bijvoorbeeld -. in plaats van " +"-\\staccato).\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" +"

Dynamische tekens

\n" +"\n" +"

\n" +"Dynamische tekens kunnen ook aan noten of rusten worden toegevoegd.\n" +"Als u een muziekbereik selecteert kunt in spanners toevoegen die automatisch " +"afsluiten op de laatste noot, rust of het laatste akkoord.\n" +"Als u daarna een teken aanklikt, vervangt dat de afsluiter.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" +"

Spanners

\n" +"\n" +"

\n" +"Hiermee kunt u arpeggio's, glissando's en andere spanners zoals bogen, " +"fraseringsbogen, handmatige waardestrepen of trillers toevoegen.\n" +"

\n" +"\n" +"

\n" +"Arpeggio's en glissando's gelden alleen voor de huidige noot;\n" +"er hoeft geen muziek te zijn geselecteerd.\n" +"De bogen, waardestreep of de triller gelden voor de huidige noot en de " +"volgende als er geen muziek geselecteerd is,\n" +"of voor de eerste en de laatste noot of akkoord in de selectie.\n" +"

\n" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" +"

Maatstrepen

\n" +"\n" +"

\n" +"Hiermee kunt u verschillende soorten maatstrepen en ademhalingstekens " +"invoegen.\n" +"

\n" + +#: frescobaldi_app/rhythm/__init__.py:146 +msgid "&Double durations" +msgstr "Tijdsduur ver&dubbelen" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Alle nootlengtes in de selectie verdubbelen." + +#: frescobaldi_app/rhythm/__init__.py:149 +msgid "&Halve durations" +msgstr "Tijdsduur &halveren" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Alle nootlengtes in de selectie halveren." + +#: frescobaldi_app/rhythm/__init__.py:152 +msgid "Do&t durations" +msgstr "Pun&t toevoegen" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Een punt toevoegen aan alle noten in de selectie." + +#: frescobaldi_app/rhythm/__init__.py:155 +msgid "&Undot durations" +msgstr "P&unt verwijderen" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Een punt verwijderen van alle noten in de selectie." + +#: frescobaldi_app/rhythm/__init__.py:158 +msgid "Remove &scaling" +msgstr "&Schaling verwijderen" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "Alle schaling (*n/m) verwijderen van de nootlengtes in de selectie." + +#: frescobaldi_app/rhythm/__init__.py:161 +msgid "&Remove durations" +msgstr "Tijdsduu&r verwijderen" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "De volledige tijdsduur-informatie verwijderen uit de selectie." + +#: frescobaldi_app/rhythm/__init__.py:164 +msgid "Make &implicit" +msgstr "&Impliciet maken" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "Tijdsduren impliciet maken (herhaalde lengtes verwijderen)." + +#: frescobaldi_app/rhythm/__init__.py:167 +msgid "Make implicit (per &line)" +msgstr "Imp&liciet maken (per regel)" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" +"Tijdsduren impliciet maken (herhaalde lengtes verwijderen), behalve de " +"eerste tijdsduur in een regel." + +#: frescobaldi_app/rhythm/__init__.py:171 +msgid "Make &explicit" +msgstr "&Expliciet maken" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" +"De toonduur na elke noot weergeven, ook als deze hetzelfde is als de vorige " +"noot." + +#: frescobaldi_app/rhythm/__init__.py:175 +msgid "&Apply rhythm..." +msgstr "Ritme toep&assen..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Een ingevoerd ritme op de geselecteerde muziek toepassen." + +#: frescobaldi_app/rhythm/__init__.py:178 +msgid "&Copy rhythm" +msgstr "Ritme &kopiëren" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Het ritme van de geselecteerde muziek kopiëren." + +#: frescobaldi_app/rhythm/__init__.py:181 +msgid "&Paste rhythm" +msgstr "Ritme &plakken" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Een ritme in de geselecteerde muziek plakken." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Ritme toepassen" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Voer een ritme in:" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "Ritme bewerken" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" +"

\n" +"De ritmefuncties in Frescobaldi passen de duur van noten, akkoorden, rusten, " +"etc. aan. Met deze functies, alle in menu {menu}, is het mogelijk om de " +"lengte van noten te verdubbelen of halveren, stip toe te voegen of " +"verwijderen of de schaling te verwijderen.\n" +"

\n" +"\n" +"

\n" +"Ook is het mogelijk de manier waarop het ritme wordt ingevoerd aan te " +"passen: voor elke noot (expliciet), of alleen wanneer de tijdsduur verandert " +"(impliciet). Sommige gebruikers geven misschien de voorkeur aan de optie " +"\"impliciet per regel\", die altijd de tijdsduur aangeeft voor de eerste " +"noot, rust of het eerste akkoord op een regel.\n" +"

\n" +"\n" +"

\n" +"De laatste drie menucommando's kunnen een ritme kopiëren of plakken, of een " +"ritme toepassen dat in een dialoog wordt opgegeven.\n" +"

\n" +"\n" +"

\n" +"In de dialoog \"Ritme toepassen\" kunt u een aantal tijdsduren aangeven, " +"bijvoorbeeld:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"Deze worden dan, steeds herhaald, toegepast op een geselecteerd bereik.\n" +"

\n" + +#: frescobaldi_app/rhythm/rhythm.py:279 +msgctxt "submenu title" +msgid "Rhythm" +msgstr "Ritme" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Nieuwe partituur maken..." + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "Muziek volgt hier." + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Standaard LilyPond-tagline verwijderen" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Partituur opzetten" + +#: frescobaldi_app/scorewiz/dialog.py:80 +msgid "Clear" +msgstr "Leegmaken" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "Maakt de huidige pagina van de Score Wizard leeg." + +#: frescobaldi_app/scorewiz/dialog.py:83 +msgid "Preview" +msgstr "Vooruitblik" + +#: frescobaldi_app/scorewiz/dialog.py:130 +msgid "Score Preview" +msgstr "Vooruitblik van de partituur" + +#: frescobaldi_app/scorewiz/dialog.py:164 +msgid "&Titles and Headers" +msgstr "&Titels en koppen" + +#: frescobaldi_app/scorewiz/dialog.py:173 +msgid "&Parts" +msgstr "&Partijen" + +#: frescobaldi_app/scorewiz/dialog.py:182 +msgid "&Score settings" +msgstr "Partituur-in&stellingen" + +#: frescobaldi_app/scorewiz/dialog.py:191 +msgid "The Score Wizard" +msgstr "Partituur opzetten" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" +"

\n" +"De Score Wizard ({key}) in {menu} is ontworpen om snel een LilyPond " +"partituur op te zetten.\n" +"

\n" +"\n" +"

\n" +"In het eerste tabblad, Titels en koppen, kunt u informatie zoals " +"titels invoeren.\n" +"

\n" +"\n" +"

\n" +"In het tweede tabblad, Partijen, kunt u uw partituur samenstellen " +"uit vele beschikbare partijen. Dubbelklik een partij om deze aan uw " +"partituur toe te voegen (of klik Toevoegen).\n" +"Selecteer de partij in de partituurlijst om de partij naar wens in te " +"stellen.\n" +"Veel partijen, vooral Koor, hebben zeer krachtige instellingen om de partij " +"op te zetten zoals u het wilt.\n" +"

\n" +"\n" +"

\n" +"In het derde tabblad, Partituur-instellingen, kunt u algemene " +"eigenschappen en voorkeuren aangeven.\n" +"

\n" +"\n" +"

\n" +"Klik de knop Vooruitblik om een weergave te zien met wat voorbeeldmuziek " +"ingevuld.\n" +"Klip de knop OK om de aangemaakte LilyPond-partituur naar de editor te " +"kopiëren.\n" +"

\n" +"\n" +"

Meerdelige werken

\n" +"\n" +"

\n" +"Een speciale en krachtige functie van het Partijen tabblad ligt " +"verstopt in de \"Containers\" categorie in de partijlijst.\n" +"

\n" +"\n" +"

\n" +"Deze categorie bevat de Score, Book en Bookpart typen, waarmee meerdelige " +"stukken kunnen worden samengesteld of zelfs boeken.\n" +"U kunt Score, Bookpart of Book typen aan de partituur toevoegen. Deze kunnen " +"ook genest worden: een Score kan in een Bookpart of Book, maar een Book kan " +"niet in een Bookpart of Score.\n" +"

\n" +"\n" +"

\n" +"Daarna kunt u de muziekpartijen toevoegen.\n" +"ALs u meerdere delen of stukken wilt met precies dezelfde partijen, dan kunt " +"u volstaan met het toevoegen van de partijen bovenaan de partituur, en " +"daarna de Scores, zonder partijen aan de Scores toe te voegen.\n" +"Alle Scores zullen dan de partijen uit de partituur gebruiken.

\n" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Klik om een waarde in te voeren." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "onderaan eerste pagina" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "onderaan laatste pagina" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "Opdracht" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Titel" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Subtitel" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "Subsubtitel" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Instrument" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Componist" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Arrangeur" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Dichter" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Versvoet" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Werk" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Copyright" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Tagline" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Beschikbare partijen:" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Partituur:" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "&Toevoegen" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +msgid "&Remove" +msgstr "&Verwijderen" + +#: frescobaldi_app/scorewiz/score.py:104 +msgid "Move up" +msgstr "Omhoog" + +#: frescobaldi_app/scorewiz/score.py:105 +msgid "Move down" +msgstr "Omlaag" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Toonsoort:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Maatsoort:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Opmaat:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Metronoomgetal:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Tempo-aanduiding:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Majeur" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Mineur" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "Ionisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Dorisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Phrygisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Lydisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Mixolydisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Aeolisch" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Locrisch" + +#: frescobaldi_app/scorewiz/settings.py:73 +msgid "Score properties" +msgstr "Partituur-eigenschappen" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Algemene voorkeuren" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Typografische aanhalingstekens" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "" +"Vervang normale aanhalingstekens in titels met fraaie typografische " +"aanhalingstekens." + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Standaard-tagline verwijderen" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Onderdrukt de weergave van de standaard tagline door LilyPond." + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Maatnummers verwijderen" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "Onderdrukt de weergave van maatnummers aan het begin van elk systeem." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "MIDI uitvoer aanmaken" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "Maak, behalve een PDF, ook een MIDI-bestand aan." + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Metronoomgetal weergeven" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"Indien aangekruist, toont het metronoomgetal aan het begin van de partituur. " +"De MIDI-uitvoer gebruikt deze instelling ook." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Papiergrootte:" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Oblong" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Lang" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Kort" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Instrumentnamen" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "Eerste systeem:" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Volgende systemen:" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "Gebruik lange of korte instrumentnamen voor het eerste systeem." + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "" +"Gebruik korte, lange of geen instrumentnamen voor de volgende systemen." + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "De taal die u wilt gebruiken voor de instrumentnamen." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Taal voor nootnamen:" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "De LilyPond-taal die u wilt gebruiken voor de toonhoogtes." + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Versie:" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "De LilyPond-versie die u wilt gebruiken voor dit document." + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "Geen instellingen beschikbaar." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Hier kunt u instellen hoeveel aparte stemmen u in elke balk wilt." + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "Dit is vooral handig als u polyfone muziek schrijft zoals een fuga." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Rechts:" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Links:" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Akkoordstijl:" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Gitaar-fretdiagrammen" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Voorgedefiniëerde gitaar-fretdiagrammen afbeelden onder de akkoordnamen " +"(LilyPond 2.12 en hoger)." + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "Akkoordnamen volgen." + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "Duits" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "Semi-Duits" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "Italiaans" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "Frans" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Hoorn in F" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "Hn.F." + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Trompet in C" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Tr.C." + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Trompet in Bes" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Tr.Bes." + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Trombone" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Trb." + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Bastuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "Btb." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Koper" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +msgid "Staff Group" +msgstr "Staffgroup" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "Accolade" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "Haak" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +msgid "Square" +msgstr "Recht" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "Type:" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +msgid "Connect Barlines" +msgstr "Maatstrepen verbinden" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "Indien ingeschakeld, worden maatstrepen tussen de balken verbonden." + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +msgid "Score" +msgstr "Score" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +msgid "Piece:" +msgstr "Werk:" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +msgid "Opus:" +msgstr "Opus:" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "Eigenschappen" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "Bookpart" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "Book" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" +"

Hier kunt u een bestandsnaam of achtervoegsel (zonder extensie) opgeven " +"om de naam te bepalen van te genereren uitvoerbestanden voor dit boek.

\n" +"

Als u kiest voor \"achtervoegsel\" wordt de naam toegevoegd aan de " +"bestandsnaam van het document;\n" +"als u kiest voor \"bestandsnaam\" wordt de opgegeven naam alleen gebruikt." + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "Uitvoerbestandsnaam:" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "Bestandsnaam" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "Achtervoegsel" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +msgid "Containers" +msgstr "Containers" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Piano" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "Pno." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Klavecimbel" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Kl." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Clavichord" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Clv." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Orgel" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Org." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Pedaal:" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Stel 0 in om de pedaalbalk te verwijderen." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Cel." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Toetsinstrumenten" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Pauken" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Pkn." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Xylofoon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Xyl." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Marimba" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "Bovenste balk:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "Onderste balk:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "Stel het aantal stemmen in op 0 om de tweede balk niet weer te geven." + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Vibrafoon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Vib." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Buisklokken" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Bkl." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Klokkenspel" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Kls." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +msgid "Carillon" +msgstr "Beiaard" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Bd." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +msgid "Manual staff:" +msgstr "Manuaalbalk:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +msgid "Pedal staff:" +msgstr "Pedaalbalk:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Slagwerk" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Slw." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Stemmen:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Stokken verwijderen" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Verwijder de stokken van de slagwerknoten." + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "Slagwerk volgt." + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "houd enige afstand." + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Drums (5 lijnen, standaard)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Timbales-stijl (2 lijnen)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Conga's-stijl (2 lijnen)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Bongo's-stijl (2 lijnen)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Percussie-stijl (1 lijn)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Percussie" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Type balk:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Stemming:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Normaal" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Tabulatuur" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Beide" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Mandoline" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mdl." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Mandoline-stemming" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Banjo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Bj." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "Open G-stemming (aDGBD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "C-stemming (gCGBD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "Modale stemming (gDGCD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "Open D-stemming (aDF#AD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "Open Dm-stemming (aDFAD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Vier snaren (ipv vijf)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Klassiek gitaar" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "Gt." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Gitaarstemming" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "Open G-stemming" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Jazzgitaar" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "J.gt." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Bas" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "Bs." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "Basstemming" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Electrische bas" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "E.Bs." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Harp" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Hp." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Getokkelde instrumenten" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Akkoordnamen" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Becijferde bas" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "Extender-lijnen gebruiken" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "Bas-becijfering volgt." + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "Notenbalk" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Speciaal" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Viool" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Vl." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Altviool" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "Avl." + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Cello" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "Contrabas" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Cb." + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +msgid "Basso Continuo" +msgstr "Basso continuo" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "B.c." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Snaarinstrumenten" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Coupletten:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Het aantal coupletten." + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Ambitus" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "Toont het bereik van een zangstem aan het begin van de balk." + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "Liedtekst volgt hier." + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Sopraan" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +msgid "Mezzo-soprano" +msgstr "Mezzosopraan" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "Ms." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Alt" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Tenor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Lead-sheet" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"Met een \"Lead-sheet\" krijgt u een balk met akkoordnamen erboven en " +"liedteksten eronder. Een tweede balk is optioneel." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Begeleidingsbalk toevoegen" + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" +"Voegt een begeleidingsbalk toe, en ook een tweede stem aan de bovenste balk." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Koor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Selecteer de stemmen voor het koor. Gebruik de letters S, A, T en/of B. Een " +"koppelteken geeft een nieuwe balk aan." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "Tip: gebruik twee koorpartijen voor een dubbelkoor." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Stemmen:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "Liedteksten:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "Piano-uittreksel" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "Voegt automatisch een piano-uittreksel toe." + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "MIDI-oefenbestanden" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" +"Genereert een MIDI-oefenbestand voor elke stem, ook als MIDI uitvoer voor de " +"hoofdpartituur is uitgeschakeld." + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "K." + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "MIDI-oefenbestanden:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Alle stemmen zelfde liedtekst" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "Een set van dezelfde liedteksten wordt tussen alle balken geplaatst." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Elke stem zelfde liedtekst" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "" +"Elke stem krijgt zijn eigen liedtekst, met dezelfde tekst als de andere " +"stemmen." + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Elke stem andere liedtekst" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Elke stem krijgt zijn eigen liedteksten." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "Coupletten verdelen" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "Een enkele set liedteksten wordt verdeeld over alle balken." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "Vocaal" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Fluit" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Piccolo" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Pic." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Basfluit" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Bfl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Hobo" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Hb." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +msgid "Oboe d'amore" +msgstr "Liefdeshobo" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Lhb." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +msgid "English horn" +msgstr "Althobo" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "Ahb." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Fagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Fag." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Contrafagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "Cfag." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Klarinet" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Klar." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Sopraninosax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "Sisx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Sopraansax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "Sosx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Altsax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "Asx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Tenorsax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "Tsx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Baritonsax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "Bsx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "Bassax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "Bssx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Sopraanblokfluit" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "Sbfl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Altblokfluit" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "Ablf." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Tenorblokfluit" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "Tblf." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Basblokfluit" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "Bblf." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Houtblazers" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "Sessies beheren" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "Naam:" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "De lijst van documenten in deze sessie altijd opslaan" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "Basismap:" + +#: frescobaldi_app/sessions/dialog.py:133 +msgid "Edit session: {name}" +msgstr "Sessie bewerken: {name}" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "Nieuwe sessie bewerken" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "Voer een sessienaam in." + +#: frescobaldi_app/sessions/dialog.py:174 +msgid "Please do not use the name '{name}'." +msgstr "U kunt de naam '{name}' niet gebruiken." + +#: frescobaldi_app/sessions/dialog.py:180 +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" +"Er bestaat reeds een sessie met de naam {name}.\n" +"\n" +"Wilt u deze overschrijven?" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "Overschrijven" + +#: frescobaldi_app/sessions/manager.py:127 +msgctxt "New Session" +msgid "&New..." +msgstr "&Nieuw..." + +#: frescobaldi_app/sessions/manager.py:129 +msgid "&Manage..." +msgstr "&Beheren..." + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "Geen sessie" + +#: frescobaldi_app/sessions/menu.py:55 +msgctxt "menu title" +msgid "&Session" +msgstr "&Sessie" + +#: frescobaldi_app/snippet/builtin.py:38 +msgid "Blank Line" +msgstr "Blanco regel" + +#: frescobaldi_app/snippet/builtin.py:44 +msgid "Single Typographical Quotes" +msgstr "Enkele typografische aanhalingstekens" + +#: frescobaldi_app/snippet/builtin.py:49 +msgid "Double Typographical Quotes" +msgstr "Dubbele typografische aanhalingstekens" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "Triolen" + +#: frescobaldi_app/snippet/builtin.py:125 +msgid "Modern 2/2 Time Signature" +msgstr "Moderne 2/2 maat" + +#: frescobaldi_app/snippet/builtin.py:131 +msgid "Modern 4/4 Time Signature" +msgstr "Moderne 4/4 maat" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "Tactus maataanduiding (nummer met noot)" + +#: frescobaldi_app/snippet/builtin.py:148 +msgid "LilyPond Version" +msgstr "LilyPond-versie" + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "Relatieve muziek" + +#: frescobaldi_app/snippet/builtin.py:166 +msgid "Upper case selection" +msgstr "Hoofdletters" + +#: frescobaldi_app/snippet/builtin.py:172 +msgid "Lower case selection" +msgstr "Kleine letters" + +#: frescobaldi_app/snippet/builtin.py:178 +msgid "Title case selection" +msgstr "Titel-hoofdletters in selectie" + +#: frescobaldi_app/snippet/builtin.py:189 +msgid "Markup lines" +msgstr "Markup regels (line)" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "Markup kolom" + +#: frescobaldi_app/snippet/builtin.py:202 +msgid "Tagline with date and LilyPond version" +msgstr "Voetregel met datum en LilyPond-versie" + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "Kopregel-sjabloon" + +#: frescobaldi_app/snippet/builtin.py:227 +msgid "No Tagline" +msgstr "Geen voetregel" + +#: frescobaldi_app/snippet/builtin.py:235 +msgid "No Barnumbers" +msgstr "Geen maatnummers" + +#: frescobaldi_app/snippet/builtin.py:245 +msgid "Midi Tempo" +msgstr "Midi: tempo instellen" + +#: frescobaldi_app/snippet/builtin.py:255 +msgid "Staff Size" +msgstr "Balkgrootte" + +#: frescobaldi_app/snippet/builtin.py:310 +msgid "A5 Paper" +msgstr "A5-papier" + +#: frescobaldi_app/snippet/builtin.py:318 +msgid "Document Fonts..." +msgstr "Document-lettertypen..." + +#: frescobaldi_app/snippet/builtin.py:346 +msgid "Last note or chord" +msgstr "Laatste noot of akkoord" + +#: frescobaldi_app/snippet/builtin.py:427 +msgid "Color" +msgstr "Kleur" + +#: frescobaldi_app/snippet/builtin.py:464 +msgid "Basic Leadsheet" +msgstr "Eenvoudig Lead-sheet" + +#: frescobaldi_app/snippet/builtin.py:508 +msgid "Choir Hymn" +msgstr "Koorhymne" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "Knipsel bewerken" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "Nieuw knipsel" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "Knipseltekst:" + +#: frescobaldi_app/snippet/edit.py:119 +msgid "Title:" +msgstr "Titel:" + +#: frescobaldi_app/snippet/edit.py:120 +msgid "Shortcut:" +msgstr "Sneltoets:" + +#: frescobaldi_app/snippet/edit.py:131 +msgid "Click to change the keyboard shortcut." +msgstr "Klik om de sneltoets in te stellen." + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "Leeg knipsel" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "Een knipsel kan niet leeg zijn." + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "Knipsel-editor" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" +"

Hier kunt u de tekst van het knipsel bewerken.

Als u de eerste " +"regel(s) start met '-*- ' (let op de spatie), definieert de " +"rest van deze regels variabelen zoals naam:waarde; of eenvoudig " +"naam;. Deze variabelen veranderen het gedrag van het knipsel. " +"De volgende variabelen kunnen worden gebruikt:

" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" +"Plaats het knipsel in het menu Invoegen, gegroepeerd op de (optionele) " +"waarde." + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" +"Plaats het knipsel in het menu {file_new_from_template}, gegroepeerd op de " +"(optionele) waarde. Wanneer het knipsel wordt toegepast via dat menu, wordt " +"het in een nieuw, leeg document ingevoegd." + +#: frescobaldi_app/snippet/edit.py:218 +msgctxt "menu title" +msgid "File" +msgstr "Bestand" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "Nieuw van sjabloon" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "De mnemonic om het knipsel te selecteren." + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "" +"De tekst niet automatisch inspringen na het knipsel te hebben toegepast." + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "Het pictogram dat in de knipsellijst en het menu wordt afgebeeld." + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" +"Het symbool dat in de knipsellijst of het menu wordt afgebeeld. Symbolen " +"zijn pictogrammen die de standaard tekstkleur gebruiken en te vinden zijn in " +"{directory}." + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "Het knipsel uitvoeren als een Python script. Zie {link}." + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "" +"Een of meer van de volgende woorden (gescheiden door komma's of spaties):" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "Er moet tekst geselecteerd zijn." + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "Verandert de selectie zodat witruimte erbuiten valt." + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "Selecteert alle ingevoegde tekst." + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" +"

De andere regels van het knipsel definiëren de tekst die moet worden " +"ingevoegd. Hier kunt u ook variabelen gebruiken, voorafgegaan door een $. " +"Een dubbele $ wordt vervangen door een enkele. De volgende variabelen worden " +"herkend:

" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "Python knipsels" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" +"

Python knipsels kunnen de variabele {text} uitlezen en veranderen. Deze " +"variabele bevat de op dit moment geselecteerde tekst (kan een lege " +"tekenreeks zijn).

\n" +"

U kunt {text} instellen op een tekenreeks of een lijst van tekenreeksen.\n" +"

Andere variabelen die kunnen worden gebruikt:

" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "Een lijst van namen die het type text omschrijven waar de cursor is." + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" +"De huidige QTextCursor, waarmee u toegang hebt tot het document. Verander " +"het document echter niet via de cursor." + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" +"Als u {text} instelt op een lijst in plaats van een tekenreeks, kunt u deze " +"waarde gebruiken om de plaats aan te geven waar de tekstcursor zal worden " +"neergezet na het invoegen van het knipsel." + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" +"Als u {text} instelt op een lijst in plaats van een tekenreeks, kunt u deze " +"waarde gebruiken, samen met {cursor}, om het te selecteren bereik van tekst " +"aan te geven na het invoegen." + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "De huidige datum in JJJJ-MM-DD formaat." + +#: frescobaldi_app/snippet/expand.py:80 +msgid "The version of the default LilyPond program." +msgstr "De versie van het standaard LilyPond programma." + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "De versie van Frescobaldi." + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "De URL van het huidige document." + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "De volledige lokale bestandsnaam van het huidige document." + +#: frescobaldi_app/snippet/expand.py:96 +msgid "The name of the current document." +msgstr "De naam van het huidige document." + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "Verplaatst de tekstcursor hier na invoegen." + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" +"Selecteert tekst van hier tot aan de positie opgegeven met de $CURSOR variabele." + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" +"De geselecteerde tekst indien beschikbaar. Indien niet, wordt de tekstcursor " +"hier geplaatst." + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "Geen knipsels gevonden." + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Knipsels importeren" + +#: frescobaldi_app/snippet/import_export.py:119 +msgid "New Snippets" +msgstr "Nieuwe knipsels" + +#: frescobaldi_app/snippet/import_export.py:120 +msgid "Updated Snippets" +msgstr "Gewijzigde knipsels" + +#: frescobaldi_app/snippet/import_export.py:121 +msgid "Unchanged Snippets" +msgstr "Ongewijzigde knipsels" + +#: frescobaldi_app/snippet/import_export.py:183 +msgid "Import Keyboard Shortcuts" +msgstr "Sneltoetsen ook importeren" + +#: frescobaldi_app/snippet/import_export.py:188 +msgid "Choose which snippets you want to import:" +msgstr "Selecteer de knipsels die u wilt importeren:" + +#: frescobaldi_app/snippet/import_export.py:190 +msgid "There are no new or updated snippets in the file." +msgstr "Er zijn geen nieuwe of bijgewerkte knipsels in het bestand." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" +"

Hier worden de knipsels uit {filename} weergegeven.

\n" +"

Als er nieuwe of bijgewerkte knipsels zijn, kunt u deze selecteren of de-" +"selecteren: één voor één of per groep, via het vinkje voor de hele groep. " +"Klik dan op OK om de aangevinkte knipsels te importeren.

\n" +"

Bestaande, ongewijzigde knipsels kunnen niet worden geïmporteerd.

\n" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "Knipsel-fout" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Invoegen" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "Nieuw van s&jabloon" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "Naam" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Omschrijving" + +#: frescobaldi_app/snippet/template.py:33 +msgid "Save as Template" +msgstr "Opslaan als sjabloon" + +#: frescobaldi_app/snippet/template.py:34 +msgid "Please enter a template name:" +msgstr "Voer een naam voor de sjabloon in:" + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +msgid "Snippets" +msgstr "Knipsels" + +#: frescobaldi_app/snippet/tool.py:54 +msgid "&Snippets" +msgstr "&Knipsels" + +#: frescobaldi_app/snippet/tool.py:79 +msgid "Save as Template..." +msgstr "Opslaan als sjabloon..." + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "&Knipsels..." + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "&Menu" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "&Toevoegen..." + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "Nieuw knipsel toevoegen. ({key})" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +msgid "&Edit..." +msgstr "B&ewerken..." + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "Huidig knipsel bewerken. ({key})" + +#: frescobaldi_app/snippet/widget.py:179 +msgid "Remove the selected snippets." +msgstr "Geselecteerde knipsels verwijderen." + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "Toe&passen" + +#: frescobaldi_app/snippet/widget.py:181 +msgid "Apply the current snippet." +msgstr "Het huidige knipsel toepassen." + +#: frescobaldi_app/snippet/widget.py:182 +msgid "&Import..." +msgstr "&Importeren..." + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "Knipsels importeren uit een bestand." + +#: frescobaldi_app/snippet/widget.py:184 +msgid "E&xport..." +msgstr "E&xporteren..." + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "Knipsels exporteren naar een bestand." + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "&Help" + +#: frescobaldi_app/snippet/widget.py:188 +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" +"Voer tekst in om in de lijst van knipsels te zoeken.\n" +"Zie \"Wat is dit\" voor meer informatie." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" +"Voer tekst in om in de lijst van knipsels te zoeken, en druk op Enter om het " +"geselecteerde knipsel toe te passen." + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" +"Als de zoektekst volledig overeenkomt met de waarde van de '{name}' variable " +"van een knipsel, wordt dat knipsel geselecteerd." + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" +"Als de zoektekst start met een dubbelepunt ':', dan filtert de rest van de " +"zoektekst knipsels die een variable van die naam definiëren. Na een spatie " +"kan ook een waarde worden ingevoerd, knipsels worden dan alleen getoond als " +"de waarde van de variable de gegeven tekst bevat." + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" +"Bijvoorbeeld het invoeren van {menu} toont alle knipsels die in het menu " +"Invoegen worden weergegeven." + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +msgid "XML Files" +msgstr "XML-bestanden" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "{num} Knipsel exporteren" +msgstr[1] "{num} Knipsels exporteren" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" +"

\n" +"Met de knipselmanager kunt u vaak gebruikte stukjes tekst, \"knipsels\" " +"genaamd, opslaan en eenvoudig in de teksteditor plakken.\n" +"

\n" +"\n" +"

\n" +"De knipselmanager wordt geactiveerd via het menu {menu_snippets} of door op " +"{key_snippets} te drukken.\n" +"

\n" +"\n" +"

\n" +"U kunt zoeken naar knipsels door door de lijst te bladeren of enige tekens " +"in het zoekvak te typen.\n" +"Knipsels kunnen ook een sneltoets hebben die ze direct toepast.\n" +"Sommige knipsels hebben een speciale mnemonic (korte naam) die u kunt typen " +"in het zoekvak om het knipsel te selecteren. Als u daarna op Enter drukt " +"wordt het knipsel direct toegepast en de knipselmanager weer verborgen.\n" +"

\n" +"\n" +"

\n" +"Voeg nieuwe knipsels toe met {key_add}. Bewerk het huidige knipsel met " +"{key_edit}. Verwijder geselecteerde knipsels met {key_delete}. Waarschuwing: " +"deze actie kan niet ongedaan worden gemaakt!\n" +"

\n" +"\n" +"

\n" +"Knipsels kunnen ook worden weergegeven in het menu (zie {link}).\n" +"Tenslotte zijn er ook knipsels die geselecteerde tekst kunnen meenemen of " +"veranderen.\n" +"Sommige knipsels doen dit door speciale variabelen te gebruiken,\n" +"terwijl andere in feite kleine scripts zijn, geschreven in Python.\n" +"

\n" + +#: frescobaldi_app/snippet/widget.py:400 +msgctxt "menu title" +msgid "Insert" +msgstr "Invoegen" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "Knipsels..." + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "Begin een toetscombinatie op te nemen." + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "De toetscombinatie leegmaken." + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +msgid "Input" +msgstr "Invoer" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +msgid "Scheme:" +msgstr "Schema:" + +#: frescobaldi_app/widgets/schemeselector.py:63 +msgctxt "New Scheme" +msgid "&New..." +msgstr "&Nieuw..." + +#: frescobaldi_app/widgets/schemeselector.py:93 +msgid "Please enter a name for the new scheme:" +msgstr "Geef een naam voor het nieuwe schema:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Sneltoets instellen" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +msgid "&No shortcut" +msgstr "&Geen sneltoets" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +msgid "Use a &custom shortcut:" +msgstr "&Aangepaste sneltoets gebruiken:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "Alternatief {num}:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "Primaire sneltoets:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "Hier kunt u de sneltoetsen instellen voor {name}" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "geen" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "&Standaardsneltoets gebruiken ({name})" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Klik een paar keer op deze knop om het tempo in te stellen." + +#: frescobaldi_app/widgets/urlrequester.py:75 +msgid "Open file dialog" +msgstr "Bestandsdialoog openen" + +#: frescobaldi_app/widgets/urlrequester.py:119 +msgid "Select a directory" +msgstr "Selecteer een map" + +#: frescobaldi_app/widgets/urlrequester.py:121 +msgid "Select a file" +msgstr "Selecteer een bestand" + +#~ msgid "&Help Browser" +#~ msgstr "&Helpbrowser" + +#~ msgid "{appname} version {version}" +#~ msgstr "{appname} versie {version}" + +#~ msgid "Add..." +#~ msgstr "Toevoegen..." + +#~ msgid "Edit..." +#~ msgstr "Bewerken..." + +#~ msgid "Remove" +#~ msgstr "Verwijderen" + +#~ msgid "Frescobaldi" +#~ msgstr "Frescobaldi" + +#~ msgid "LilyPond Music Editor" +#~ msgstr "Muziek-editor voor LilyPond" + +#~ msgid "&Document" +#~ msgstr "&Document" + +#~ msgid "&LilyPond" +#~ msgstr "&LilyPond" + +#~ msgid "&Sessions" +#~ msgstr "&Sessies" + +#~ msgid "&Lyrics" +#~ msgstr "&Liedteksten" + +#~ msgid "Optionally describe what you were doing below:" +#~ msgstr "Geef hier eventueel aan wat u aan het doen was:" + +#~ msgid "Bottom Sidebar" +#~ msgstr "Onderste zijbalk" + +#~ msgid "&Tool Views" +#~ msgstr "&Gereedschapsweergaven" + +#~ msgid "New..." +#~ msgstr "Nieuw..." + +#~ msgid "Manage Sessions..." +#~ msgstr "Sessies beheren..." + +#~ msgid "modified" +#~ msgstr "gewijzigd" + +#~ msgid "Open File" +#~ msgstr "Bestand openen" + +#~ msgid "Move To" +#~ msgstr "Verplaatsen naar" + +#~ msgid "Undock" +#~ msgstr "Losmaken" + +#~ msgid "Configure Keyboard Shortcut" +#~ msgstr "Sneltoets instellen" + +#~ msgid "Press the button to configure the keyboard shortcut for:" +#~ msgstr "Klik op de knop om de sneltoets in te stellen voor:" + +#~ msgid "Edit session: %1" +#~ msgstr "Sessie bewerken: %1" + +#~ msgid "Please do not use the name '%1'." +#~ msgstr "U kunt de naam '%1' niet gebruiken." + +#~ msgid "" +#~ "Another session with the name %1 exists already.\n" +#~ "\n" +#~ "Do you want to overwrite it?" +#~ msgstr "" +#~ "Er bestaat reeds een sessie met de naam %1.\n" +#~ "\n" +#~ "Wilt u deze overschrijven?" + +#~ msgid "Print 1 file" +#~ msgid_plural "Print %1 files" +#~ msgstr[0] "1 bestand afdrukken" +#~ msgstr[1] "%1 bestanden afdrukken" + +#~ msgid "Action:" +#~ msgstr "Actie:" + +#~ msgid "Save PDF As..." +#~ msgstr "PDF opslaan als..." + +#~ msgid "PDF Files" +#~ msgstr "PDF-bestanden" + +#~ msgid "Print..." +#~ msgstr "Afdrukken..." + +#~ msgid "" +#~ "Enter as many letters (S, A, T or B) as there are staves.\n" +#~ "See \"What's This\" for more information." +#~ msgstr "" +#~ "Voer zoveel letters (S, A, T of B) in als er balken zijn.\n" +#~ "Zie \"Wat is dit\" voor meer informatie." + +#~ msgid "Connect bar lines" +#~ msgstr "Maatstrepen verbinden" + +#~ msgid "Open %1" +#~ msgstr "%1 openen" + +#~ msgid "Place the cursor on this spot." +#~ msgstr "Zet de cursor op deze plaats." + +#~ msgid "Previous" +#~ msgstr "Vorige" + +#~ msgid "Next" +#~ msgstr "Volgende" + +#~ msgid "Notation Reference" +#~ msgstr "Notation Reference" + +#~ msgid "Configure Keyboard Shortcut (%1)" +#~ msgstr "Sneltoets instellen (%1)" + +#~ msgid "Dynamic sign %1" +#~ msgstr "Dynamisch teken %1" + +#~ msgid "LilyPond files" +#~ msgstr "LilyPond-bestanden" + +#~ msgid "Print Music..." +#~ msgstr "Muziek afdrukken..." + +#~ msgid "Remove hyphenation" +#~ msgstr "Liedtekst-afbreking verwijderen" + +#~ msgid "Copy Lyrics with hyphenation removed" +#~ msgstr "Liedteksten kopiëren met afbreking verwijderd" + +#~ msgid "Open Current Folder" +#~ msgstr "Huidige map openen" + +#~ msgid "S&ynchronize Terminal with Current Document" +#~ msgstr "Terminal met huidig document s&ynchroniseren" + +#~ msgid "PDF Preview" +#~ msgstr "PDF vooruitblik" + +#~ msgid "MIDI input:" +#~ msgstr "MIDI invoer:" + +#~ msgid "Strip rests" +#~ msgstr "Rusten verwijderen" + +#~ msgid "preview mode" +#~ msgstr "vooruitblik" + +#~ msgid "LilyPond [%1] exited with return code %2." +#~ msgstr "LilyPond [%1] stopte met foutcode %2." + +#~ msgid "LilyPond [%1] exited with exit status %2." +#~ msgstr "LilyPond [%1] stopte met status %2." + +#~ msgid "Could not start LilyPond. Please check path and permissions." +#~ msgstr "Kon LilyPond niet starten. Controleer uw installatie." + +#~ msgid "Could not read from the LilyPond process." +#~ msgstr "Kan de uitvoer van het LilyPond-proces niet lezen." + +#~ msgid "Default LilyPond Version." +#~ msgstr "Standaard LilyPond-versie." + +#~ msgid "automatic" +#~ msgstr "automatisch" + +#~ msgid "" +#~ "Here you can set a fixed LilyPond version to run on documents in this " +#~ "session.\n" +#~ "See What's This (Shift+F1) for more information." +#~ msgstr "" +#~ "Hier kunt een vaste LilyPond-versie kiezen om te gebruiken op documenten " +#~ "in deze sessie.\n" +#~ "Raadpleeg \"Wat is dit\" (Shift+F1) voor meer informatie." + +#~ msgid "Let LilyPond delete intermediate output files" +#~ msgstr "Laat LilyPond tussentijdse uitvoerbestanden verwijderen" + +#~ msgid "LilyPond versions to use:" +#~ msgstr "De te gebruiken LilyPond-versies:" + +#~ msgid "" +#~ "Enable automatic version selection (choose LilyPond version from document)" +#~ msgstr "" +#~ "Automatische versie-selectie inschakelen (kiest LilyPond-versie op basis " +#~ "van document)" + +#~ msgid "Lilypond-book:" +#~ msgstr "Lilypond-book:" + +#~ msgid "Path" +#~ msgstr "Pad" + +#~ msgid "Can't determine LilyPond version." +#~ msgstr "Kan LilyPond-versie niet bepalen." + +#~ msgid "Set as default" +#~ msgstr "Als standaard instellen" + +#~ msgid "Tap" +#~ msgstr "Tik" + +#~ msgid "Treble" +#~ msgstr "Vioolsleutel" + +#~ msgid "Titles and Headers" +#~ msgstr "Titels en koppen" + +#~ msgid "Parts" +#~ msgstr "Partijen" + +#~ msgid "Score settings" +#~ msgstr "Partituur-instellingen" + +#~ msgid "Basso continuo" +#~ msgstr "Basso continuo" + +#~ msgid "Guitar" +#~ msgstr "Gitaar" + +#~ msgctxt "abbreviation for Guitar" +#~ msgid "Gt." +#~ msgstr "Gt." + +#~ msgid "Oboe d'Amore" +#~ msgstr "Liefdeshobo" + +#~ msgid "English Horn" +#~ msgstr "Althobo (Engelse hoorn)" + +#~ msgctxt "abbreviation for Trumpet in C" +#~ msgid "Tr.C" +#~ msgstr "Tr.C" + +#~ msgctxt "abbreviation for Trumpet in Bb" +#~ msgid "Tr.Bb" +#~ msgstr "Tr.Bes" + +#~ msgid "Mezzo soprano" +#~ msgstr "Mezzosopraan" + +#~ msgid "LilyPond version number to use for new documents" +#~ msgstr "Het te gebruiken LilyPond-versienummer voor nieuwe documenten" + +#~ msgid "Use version number of installed LilyPond" +#~ msgstr "Versienummer van geïnstalleerde LilyPond gebruiken" + +#~ msgid "Use custom version number:" +#~ msgstr "Aangepast versienummer gebruiken:" + +#~ msgid "Copyright (c) 2008-2010, Wilbert Berendsen" +#~ msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your name" +#~ msgstr "Wilbert Berendsen" + +#~ msgid "Session to start" +#~ msgstr "Te starten sessie" + +#~ msgid "Start a new instance" +#~ msgstr "Een nieuw proces starten" + +#~ msgid "Try to use smart line and column numbers" +#~ msgstr "Probeer slimme regel- en kolomnummers te gebruiken" + +#~ msgid "LilyPond files to open, may also be textedit URLs" +#~ msgstr "Te openen LilyPond-bestanden, mogen ook textedit URLs zijn" + +#~ msgid "Left Sidebar" +#~ msgstr "Linker zijbalk" + +#~ msgid "Right Sidebar" +#~ msgstr "Rechter zijbalk" + +#~ msgid "Top Sidebar" +#~ msgstr "Bovenste zijbalk" + +#~ msgid "Show Path" +#~ msgstr "Pad tonen" + +#~ msgid "Show Document Tabs" +#~ msgstr "Document-tabs tonen" + +#~ msgid "" +#~ "Could not find the XMLGUI container \"%1\".\n" +#~ "\n" +#~ "Probably the local ui.rc file contains errors. It is recommended to " +#~ "delete this file because elements in the user interface will be missing. " +#~ "This is the full path of the file:\n" +#~ "\n" +#~ "%2\n" +#~ msgstr "" +#~ "Kan de XMLGUI container \"%1\" niet vinden.\n" +#~ "\n" +#~ "Dit betekent wellicht dat het lokale ui.rc-bestand niet up-to-date is. " +#~ "Het is aanbevolen dit bestand te verwijderen omdat elementen in de " +#~ "gebruikersinterface anders zullen ontbreken. Dit is het volledige bestand " +#~ "van het bestand:\n" +#~ "\n" +#~ "%2\n" + +#~ msgid "Please select some text first." +#~ msgstr "Selecteer eerst de tekst waarop u de functie wilt toepassen." + +#~ msgid "Line: %1 Col: %2" +#~ msgstr "Regel: %1 Kol: %2" + +#~ msgid "BLOCK" +#~ msgstr "BLOK" + +#~ msgid "Block selection mode" +#~ msgstr "Blokselectiemodus" + +#~ msgid "LINE" +#~ msgstr "REGEL" + +#~ msgid "Line selection mode" +#~ msgstr "Regelselectiemodus" + +#~ msgid "Right-click for tab options" +#~ msgstr "Klik rechts voor tab-opties" + +#~ msgid "Could not load %1" +#~ msgstr "Kan %1 niet laden" + +#~ msgid "Please install %1" +#~ msgstr "Installeer %1" + +#~ msgid "Session" +#~ msgstr "Sessie" + +#~ msgid "Properties of this session" +#~ msgstr "Eigenschappen van deze sessie" + +#~ msgid "Please do not use the ampersand (&) character in a session name." +#~ msgstr "U kunt het ampersand-teken (&) niet in een sessienaam gebruiken." + +#~ msgid "Open %1 in external viewer" +#~ msgstr "%1 openen in externe viewer" + +#~ msgid "(No up-to-date MIDI or PDF files available.)" +#~ msgstr "(Geen bijgewerkte MIDI- of PDF-bestanden beschikbaar.)" + +#~ msgid "" +#~ "There are no up-to-date MIDI or PDF files available. Please run LilyPond " +#~ "to create one or more output files." +#~ msgstr "" +#~ "Er zijn geen bijgewerkte MIDI- of PDF-bestanden beschikbaar. Start " +#~ "LilyPond om een of meer uitvoerbestanden te verkrijgen." + +#~ msgid "No files to send" +#~ msgstr "Geen bestanden te verzenden" + +#~ msgid "" +#~ "There are no PDF documents to print.\n" +#~ "\n" +#~ "You probably need to run LilyPond to create or update a PDF document. If " +#~ "you are creating MIDI files, be sure you also put a \\layout { } section " +#~ "in your score, otherwise LilyPond will not create a PDF." +#~ msgstr "" +#~ "Er zijn geen PDF-documenten om af te drukken.\n" +#~ "\n" +#~ "Het is wellicht nodig om LilyPond te starten om een PDF-document aan te " +#~ "maken of bij te werken. Als u MIDI-bestanden aanmaakt, verzeker u ervan " +#~ "dat u ook een \\layout { } sectie in uw partituur heeft, anders zal " +#~ "LilyPond geen PDF-bestand aanmaken." + +#~ msgid "No files to print" +#~ msgstr "Geen bestanden af te drukken" + +#~ msgid "Email documents" +#~ msgstr "Documenten verzenden" + +#~ msgid "Please select the files you want to send:" +#~ msgstr "Selecteer de bestanden die u wilt verzenden:" + +#~ msgid "" +#~ "These are the files that are up-to-date (i.e. newer than the LilyPond " +#~ "source document). Also LilyPond files included by the source document are " +#~ "shown." +#~ msgstr "" +#~ "Dit zijn de bestanden die up-to-date zijn (later gewijzigd dan het " +#~ "LilyPond brondocument). Ook LilyPond-bestanden die door het brondocument " +#~ "ge\"include\"t worden zijn hier weergegeven." + +#~ msgid "" +#~ "Note: this PDF file has been created with embedded point-and-click URLs " +#~ "(preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the file in publish mode, because then the PDF file " +#~ "is much smaller." +#~ msgid_plural "" +#~ "Note: these PDF files have been created with embedded point-and-click " +#~ "URLs (preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the files in publish mode, because then the PDF files " +#~ "are much smaller." +#~ msgstr[0] "" +#~ "Let op: Dit PDF-bestand is aangemaakt met ingebedde \"point-and-click\" " +#~ "URLs (vooruitblik), waardoor het bestand veel groter is dan noodzakelijk. " +#~ "Het is beter om het document opnieuw aan te maken via de optie " +#~ "'publiceren', zodat het PDF-bestand veel kleiner is." +#~ msgstr[1] "" +#~ "Let op: Deze PDF-bestanden zijn aangemaakt met \"point-and-click\" URLs " +#~ "(vooruitblik), waardoor de bestanden veel groter zijn dan noodzakelijk. " +#~ "Het is beter om de documenten opnieuw aan te maken via de optie " +#~ "'publiceren', zodat de PDF-bestanden veel kleiner zijn." + +#~ msgid "" +#~ "Note: If there are no PDF and no MIDI files, you probably need to run " +#~ "LilyPond to update those files, before sending the e-mail." +#~ msgstr "" +#~ "Let op: Als er geen PDF- en MIDI-bestanden zijn dient u wellicht LilyPond " +#~ "te starten om deze bestanden bij te werken, alvorens deze via e-mail te " +#~ "verzenden." + +#~ msgid "" +#~ "These are the PDF documents that are up-to-date (i.e. newer than the " +#~ "LilyPond source document). Check the documents you want to send to the " +#~ "printer." +#~ msgstr "" +#~ "Dit zijn de bestanden die up-to-date zijn (later gewijzigd dan het " +#~ "LilyPond brondocument). Kruis de bestanden aan die u wilt afdrukken." + +#~ msgid "Print %1" +#~ msgstr "%1 afdrukken" + +#~ msgid "" +#~ "A print command (like 'lpr' or 'lp') could not be found on your system." +#~ msgstr "Kan geen printcommando (zoals 'lpr' of 'lp') vinden op uw systeem." + +#~ msgid "The command '%1' could not be found on your system." +#~ msgstr "Kan het commando '%1' niet vinden op uw systeem." + +#~ msgid "" +#~ "The command below has been run, but exited with a return code %1.\n" +#~ "\n" +#~ "%2" +#~ msgstr "" +#~ "Het onderstaande command is gestart, maar werd beëindigd met code %1.\n" +#~ "\n" +#~ "%2" + +#~ msgid "Create blank staff paper" +#~ msgstr "Blanco muziekpapier maken" + +#~ msgid "Choose what kind of empty staves you want to create." +#~ msgstr "Kies welk type muziekbalken u wilt maken." + +#~ msgid "Choose which action happens when clicking \"Ok\"." +#~ msgstr "Kies wat er gebeurt als u op \"Ok\" klikt." + +#~ msgid "Preview the empty staff paper." +#~ msgstr " Klik voor een vooruitblik." + +#~ msgid "Click to see more settings." +#~ msgstr "Klik voor meer instellingen." + +#~ msgid "Print Bar Lines" +#~ msgstr "Maatstrepen afdrukken" + +#~ msgid "Bars per line:" +#~ msgstr "Aantal maten per systeem:" + +#~ msgid "Blank staff paper preview" +#~ msgstr "Vooruitblik blanco muziekpapier" + +#~ msgid "No PDF was created." +#~ msgstr "Er is geen PDF aangemaakt." + +#~ msgid "Open in PDF viewer" +#~ msgstr "Openen in PDF-viewer" + +#~ msgid "Save PDF" +#~ msgstr "PDF opslaan" + +#~ msgid "Print staff paper" +#~ msgstr "Blanco muziekpapier afdrukken" + +#~ msgid "Copy LilyPond code to editor" +#~ msgstr "LilyPond-code naar editor kopiëren" + +#~ msgid "Staves per page:" +#~ msgstr "Aantal balken per pagina:" + +#~ msgid "Clef:" +#~ msgstr "Sleutel:" + +#~ msgid "Single Staff" +#~ msgstr "Enkele balk" + +#~ msgid "Systems per page:" +#~ msgstr "Aantal systemen per pagina:" + +#~ msgid "Clefs" +#~ msgstr "Sleutels" + +#~ msgid "Piano Staff" +#~ msgstr "Pianobalk" + +#~ msgid "Organ Staff" +#~ msgstr "Orgelbalk" + +#~ msgid "Staves per system:" +#~ msgstr "Aantal notenbalken per systeem:" + +#~ msgid "" +#~ "To configure clefs, first set the number of staves per system. Then enter " +#~ "as many letters (S, A, T or B) as there are staves.\n" +#~ "\n" +#~ "S or A: treble clef,\n" +#~ "T: treble clef with an \"8\" below,\n" +#~ "B: bass clef\n" +#~ "\n" +#~ "So when you want to create music paper for a four-part mixed choir score, " +#~ "first set the number of staves per system to 4. Then enter \"SATB" +#~ "\" (without the quotes) here." +#~ msgstr "" +#~ "Om sleutels in te stellen, stel eerst het aantal balken per systeem in. " +#~ "Voer dan zoveel letters (S, A, T of B) in als er balken zijn.\n" +#~ "\n" +#~ "S of A: vioolsleutel,\n" +#~ "T: vioolsleutel met een \"8\" eronder,\n" +#~ "B: bassleutel\n" +#~ "\n" +#~ "Dus als u muziekpapier wilt maken voor vierstemmig gemend koor, zet dan " +#~ "eerst het aantal balken per systeem op 4. Voer dan hier \"SATB\" (zonder " +#~ "de aanhalingstekens) in." + +#~ msgid "Choir Staff" +#~ msgstr "Koorbalk" + +#~ msgid "Custom Staff" +#~ msgstr "Aangepaste balk" + +#~ msgid "Space below:" +#~ msgstr "Ruimte eronder:" + +#~ msgid "Square Bracket" +#~ msgstr "Vierkante haak" + +#~ msgid "Please select a music expression, enclosed in << ... >> or { ... }." +#~ msgstr "Selecteer een muziekexpressie, ingesloten in << ... >> of { ... }." + +#~ msgid "Please enter a start pitch and a destination pitch:" +#~ msgstr "Geef de start- en doeltoonhoogte op:" + +#~ msgid "Transpose from:" +#~ msgstr "Transponeren van:" + +#~ msgid "to:" +#~ msgstr "naar:" + +#~ msgid "Install" +#~ msgstr "Installeren" + +#~ msgid "Download LilyPond" +#~ msgstr "LilyPond downloaden" + +#~ msgid "" +#~ "With this tool you can download packaged binary releases of LilyPond for " +#~ "your operating system." +#~ msgstr "" +#~ "Met dit hulpmiddel kunt u binaire pakketten van LilyPond installeren." + +#~ msgid "Select the LilyPond version you want to download." +#~ msgstr "Selecteer de LilyPond-versie die u wilt downloaden." + +#~ msgid "" +#~ "Select a writable directory you want to install LilyPond to.\n" +#~ "(A version-numbered directory will be created in this directory.)" +#~ msgstr "" +#~ "Selecteer een beschrijfbare directory waar u LilyPond wilt installeren.\n" +#~ "(Een versie-genummerde directory zal worden aangemaakt in deze directory.)" + +#~ msgid "Install into:" +#~ msgstr "Installeren in:" + +#~ msgid "Details" +#~ msgstr "Details" + +#~ msgid "The website where LilyPond binaries can be downloaded." +#~ msgstr "" +#~ "De website waar de LilyPond binaire pakketten kunnen worden gedownload." + +#~ msgid "Download from:" +#~ msgstr "Downloaden van:" + +#~ msgid "Machine type:" +#~ msgstr "Type machine:" + +#~ msgid "" +#~ "This is the URL to the package that will be downloaded and installed.\n" +#~ "You can also browse to other places to select a LilyPond package." +#~ msgstr "" +#~ "Dit is de URL van het pakket dat zal worden gedownload en geïnstalleerd.\n" +#~ "U kunt ook bladeren naar andere plaatsen om handmatig een LilyPond-pakket " +#~ "te selecteren." + +#~ msgid "Package Url:" +#~ msgstr "Pakket Url:" + +#~ msgid "Downloading directory listing..." +#~ msgstr "Lijst wordt gedownload..." + +#~ msgid "No packages found. You can browse to a package manually." +#~ msgstr "Geen pakketten gevonden. U kunt handmatig naar een pakket bladeren." + +#~ msgid "Latest Development Version (%1)" +#~ msgstr "Laatste ontwikkelingsversie (%1)" + +#~ msgid "Latest Stable Version (%1)" +#~ msgstr "Laatste stabiele versie (%1)" + +#~ msgid "Downloading %1..." +#~ msgstr "Downloaden van %1..." + +#~ msgid "Download cancelled." +#~ msgstr "Het downloaden is geannuleerd." + +#~ msgid "Download failed: %1" +#~ msgstr "Het downloaden is mislukt: %1" + +#~ msgid "" +#~ "LilyPond %1 seems already to be installed in %2.\n" +#~ "\n" +#~ "Do you want to use it or to remove and re-install?" +#~ msgstr "" +#~ "LilyPond %1 blijkt al geïnstalleerd te zijn in %2.\n" +#~ "\n" +#~ "Wilt u het gebruiken of verwijderen en her-installeren?" + +#~ msgid "Use existing LilyPond" +#~ msgstr "Bestaande LilyPond gebruiken" + +#~ msgid "Remove and re-install" +#~ msgstr "Verwijderen en her-installeren" + +#~ msgid "Unpacking %1..." +#~ msgstr "Uitpakken van %1..." + +#~ msgid "Unpacking finished." +#~ msgstr "Het uitpakken is voltooid." + +#~ msgid "Unpacking failed." +#~ msgstr "Het uitpakken is mislukt." + +#~ msgid "" +#~ "An error occurred:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Er is een fout opgetreden:\n" +#~ "\n" +#~ "%1" + +#~ msgid "Expansion Manager" +#~ msgstr "Snelteksten beheren" + +#~ msgid "" +#~ "This is the list of defined expansions.\n" +#~ "\n" +#~ "Click on a row to see or change the associated text. Doubleclick a " +#~ "shortcut or its description to change it. You can also press F2 to edit " +#~ "the current shortcut.\n" +#~ "\n" +#~ "Use the buttons below to add or remove expansions.\n" +#~ "\n" +#~ "There are two ways to use the expansion: either type the shortcut in the " +#~ "text and then call the Expand function, or just call the Expand function " +#~ "(default shortcut: Ctrl+.), choose the expansion from the list and press " +#~ "Enter or click Ok." +#~ msgstr "" +#~ "Dit is de lijst met gedefiniëerde snelteksten.\n" +#~ "\n" +#~ "Klik op een regel om de bijbehorende tekst te zien or bewerken. " +#~ "Dubbelklik een sneltekst of beschrijving om deze te veranderen. U kunt " +#~ "ook op F2 drukken om de sneltekst aan te passen.\n" +#~ "\n" +#~ "Gebruik de knoppen hieronder om snelteksten toe te voegen of te " +#~ "verwijderen.\n" +#~ "\n" +#~ "Er zijn twee manieren om de sneltekst-functie te gebruiken: Typ the " +#~ "sneltekst in het document en roep dan de sneltekst-functie aan, of roep " +#~ "de sneltekst-functie meteen aan (standaardtoets: Ctrl+.), kies de " +#~ "sneltekst uit de lijst en druk op Enter of klik Ok." + +#~ msgid "" +#~ "This is the text associated with the selected shortcut. Some characters " +#~ "have special meaning:" +#~ msgstr "" +#~ "Dit is de tekst die hoort bij de geselecteerde sneltekst. Sommige tekens " +#~ "hebben een speciale betekenis:" + +#~ msgid "Translate the following pitch." +#~ msgstr "Vertaal de volgende toonhoogte." + +#~ msgid "New Item" +#~ msgstr "Nieuw item" + +#~ msgid "" +#~ "Another expansion already uses this name.\n" +#~ "\n" +#~ "Please use a different name." +#~ msgstr "" +#~ "Er bestaat al een andere sneltekst onder deze naam.\n" +#~ "\n" +#~ "Gebruik a.u.b. een andere naam." + +#~ msgid "" +#~ "Please only use letters, numbers and the underscore character in the " +#~ "expansion name." +#~ msgstr "" +#~ "Gebruik alleen letters, cijfers en het onderstreepteken voor de sneltekst." + +#~ msgid "Please don't leave the description empty." +#~ msgstr "U dient een omschrijving op te geven." + +#~ msgid "" +#~ "Could not find any hyphenation dictionaries.\n" +#~ "\n" +#~ "Please install a package containing some and/or or configure the search " +#~ "path to find them in the Frescobaldi settings under \"Paths.\"" +#~ msgstr "" +#~ "Geen bestanden met afbreekpatronen gevonden.\n" +#~ "\n" +#~ "Installeer een pakket met deze bestanden en/of stel zoekpaden in om ze te " +#~ "vinden in de Frescobaldi-instellingen onder \"Paden.\" " + +#~ msgid "Volume" +#~ msgstr "Volume" + +#~ msgid "Larger text" +#~ msgstr "Tekst vergroten" + +#~ msgid "Smaller text" +#~ msgstr "Tekst verkleinen" + +#~ msgid "Up one level" +#~ msgstr "Een niveau hoger" + +#~ msgid "Index" +#~ msgstr "Index" + +#~ msgid "Copy &Link" +#~ msgstr "Koppeling &kopiëren" + +#~ msgid "Open Link in &New Window" +#~ msgstr "Koppeling in &nieuw venster openen" + +#~ msgid "Open Document in &New Window" +#~ msgstr "Document in &nieuw venster openen" + +#~ msgid "Loading..." +#~ msgstr "Laden..." + +#~ msgid "LilyPond Command Index" +#~ msgstr "LilyPond Commando-index" + +#~ msgid "Learning Manual" +#~ msgstr "Learning Manual" + +#~ msgid "Learning Manual Index" +#~ msgstr "Learning Manual index" + +#~ msgid "Internals Reference" +#~ msgstr "Internals Reference" + +#~ msgid "The %1 context" +#~ msgstr "De %1 context" + +#~ msgid "The %1 layout object" +#~ msgstr "Het %1 layout-object" + +#~ msgid "" +#~ "Where to add articulations et cetera: above or below the staff or in the " +#~ "default position." +#~ msgstr "" +#~ "De plaats waar articulaties worden geplaatst: boven of onder de balk of " +#~ "in de standaardpositie." + +#~ msgid "Click an articulation sign to add it to your document." +#~ msgstr "Klik op een articulatie-teken om het aan uw document toe te voegen." + +#~ msgid "" +#~ "If you select some music first, the articulation will be added to all " +#~ "notes in the selection." +#~ msgstr "" +#~ "Als u eerst muziek selecteert, wordt het articulatie-teken aan alle noten " +#~ "in de selectie toegevoegd." + +#~ msgid "Click a dynamic sign to add it to your document." +#~ msgstr "Klik op een dynamisch teken om het aan uw document toe te voegen." + +#~ msgid "" +#~ "If you select some music first, dynamic spanners will be added the " +#~ "selected fragment." +#~ msgstr "" +#~ "Als u eerst muziek selecteert, worden dynamische spanners aan alle noten " +#~ "in de selectie toegevoegd." + +#~ msgid "" +#~ "If you have selected some music and you click a sign after a spanner, the " +#~ "sign will terminate the spanner." +#~ msgstr "" +#~ "Als u muziek geselecteerd heeft en u klikt op een spanner en daarna een " +#~ "teken, dan zal het teken de spanner beëindigen." + +#~ msgid "These spanners need a music fragment to be selected." +#~ msgstr "Selecteer een muziekfragment om deze spanners te kunnen gebruiken." + +#~ msgid "Arpeggios are used with chords with multiple notes." +#~ msgstr "Arpeggio's worden gebruikt bij akkoorden met meer dan één noot." + +#~ msgid "" +#~ "Glissandos are attached to a note and automatically extend to the next " +#~ "note." +#~ msgstr "" +#~ "Glissando's worden achter een noot geplaatst en wijzen automatisch naar " +#~ "de volgende noot." + +#~ msgid "Run LilyPond (preview)" +#~ msgstr "LilyPond starten (vooruitblik)" + +#~ msgid "Run LilyPond (publish)" +#~ msgstr "LilyPond starten (publiceren)" + +#~ msgid "Run LilyPond (custom)..." +#~ msgstr "LilyPond starten (aangepast)..." + +#~ msgid "Interrupt LilyPond Job" +#~ msgstr "LilyPond-taak afbreken" + +#~ msgid "Email Documents..." +#~ msgstr "Documenten verzenden..." + +#~ msgid "Cut selection and assign it to a LilyPond variable." +#~ msgstr "" +#~ "De geselecteerde tekst knippen en toewijzen aan een LilyPond variabele." + +#~ msgid "Repeat the last music expression (note or chord)." +#~ msgstr "Herhaalt de laatstgetypte muziekexpressie (noot of akkoord)." + +#~ msgid "Insert or Manage Expansions..." +#~ msgstr "Snelteksten invoegen of beheren..." + +#~ msgid "Expand last word or open the expansions dialog." +#~ msgstr "Laatst getypte woord uitbreiden of de lijst met snelteksten openen." + +#~ msgid "Special Characters..." +#~ msgstr "Speciale tekens..." + +#~ msgid "Insert special characters." +#~ msgstr "Speciale tekens invoegen." + +#~ msgid "Add to Expansions" +#~ msgstr "Aan snelteksten toevoegen" + +#~ msgid "Go to the next blank line." +#~ msgstr "Ga naar de volgende blanco regel." + +#~ msgid "Previous blank line" +#~ msgstr "Vorige blanco regel" + +#~ msgid "Go to the previous blank line." +#~ msgstr "Ga naar de vorige blanco regel." + +#~ msgid "Select to next blank line" +#~ msgstr "Tot volgende blanco regel selecteren" + +#~ msgid "" +#~ "Selects text from the current position down to and including the next " +#~ "blank line." +#~ msgstr "" +#~ "Selecteert tekst vanaf de huidige cursorpositie tot en met de volgende " +#~ "blanco regel." + +#~ msgid "Select to previous blank line" +#~ msgstr "Tot vorige blanco regel selecteren" + +#~ msgid "" +#~ "Selects text from the current position up to right after the previous " +#~ "blank line." +#~ msgstr "" +#~ "Selecteert tekst vanaf de huidige cursorpositie tot net na de vorige " +#~ "blanco regel." + +#~ msgid "Move selection to next blank line" +#~ msgstr "Selectie verplaatsen naar volgende blanco regel" + +#~ msgid "Moves selected block to next blank line." +#~ msgstr "Verplaatst de geselecteerde tekst naar de volgende blanco regel." + +#~ msgid "Move selection to previous blank line" +#~ msgstr "Selectie verplaatsen naar vorige blanco regel" + +#~ msgid "Moves selected block to previous blank line." +#~ msgstr "Verplaatst de geselecteerde tekst naar de vorige blanco regel." + +#~ msgid "Play/View" +#~ msgstr "Weergeven" + +#~ msgid "Single Quote" +#~ msgstr "Enkel aanhalingsteken" + +#~ msgid "Double Quote" +#~ msgstr "Dubbel aanhalingsteken" + +#~ msgid "Align" +#~ msgstr "Uitlijnen" + +#~ msgid "Repeat selected music" +#~ msgstr "Geselecteerde muziek herhalen" + +#~ msgid "Insert pair of braces" +#~ msgstr "Accolades invoegen" + +#~ msgid "" +#~ "Your document has been modified and needs to be saved before LilyPond can " +#~ "be started.\n" +#~ "\n" +#~ "Save the document now?" +#~ msgstr "" +#~ "Uw document is gewijzigd en dient opgeslagen te worden voordat LilyPond " +#~ "kan worden gestart.\n" +#~ "\n" +#~ "Wilt u het document nu opslaan?" + +#~ msgid "There is already a LilyPond job running for this document." +#~ msgstr "Er is reeds een LilyPond-proces actief voor dit document." + +#~ msgid "Can't process document" +#~ msgstr "Can document niet verwerken" + +#~ msgid "Continue anyway?" +#~ msgstr "Toch doorgaan?" + +#~ msgid "" +#~ "You want to run LilyPond in preview mode (with point and click enabled), " +#~ "but your document contains a command to turn point and click off." +#~ msgstr "" +#~ "U wilt LilyPond starten in vooruitblik-modus (met point-and-click), maar " +#~ "uw document bevat een commando dat point-and-click uitschakelt." + +#~ msgid "" +#~ "You want to run LilyPond in publish mode (with point and click disabled), " +#~ "but your document contains a command to turn point and click on." +#~ msgstr "" +#~ "U wilt LilyPond starten in publiceer-modus (zonder point-and-click), maar " +#~ "uw document bevat een commando dat point-and-click inschakelt." + +#~ msgid "Abort the running LilyPond process" +#~ msgstr "Het actieve LilyPond-proces afbreken" + +#~ msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" +#~ msgstr "LilyPond starten (vooruitblik, shift-klik voor dialoog)" + +#~ msgid "LilyPond has successfully compiled %1." +#~ msgstr "LilyPond heeft %1 succesvol gecompileerd." + +#~ msgid "LilyPond exited with an error compiling %1." +#~ msgstr "LilyPond stopte met een fout tijdens het compileren van %1." + +#~ msgid "" +#~ "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" +#~ msgstr "" +#~ "Voer een ritme in met nootlengtes en spaties ertussen (bijv. 8. 16 8 4 8)" + +#~ msgid "Terminal" +#~ msgstr "Terminal" + +#~ msgid "" +#~ "Could not load the KMid part.\n" +#~ "Please install KMid 2.4.0 or higher." +#~ msgstr "" +#~ "Kan de KMid-component niet laden.\n" +#~ "Installeer KMid 2.4.0 of hoger." + +#~ msgid "Show PDF Navigation Panel" +#~ msgstr "PDF-navigatiepaneel tonen" + +#~ msgid "Show PDF minipager" +#~ msgstr "PDF-minipager tonen" + +#~ msgid "Configure Okular..." +#~ msgstr "Okular instellen..." + +#~ msgid "S&ynchronize Preview with Current Document" +#~ msgstr "Vooruitblik met huidig document s&ynchroniseren" + +#~ msgid "Reload" +#~ msgstr "Opnieuw laden" + +#~ msgid "no log" +#~ msgstr "geen log" + +#~ msgid "Only show on errors" +#~ msgstr "Alleen tonen bij fouten" + +#~ msgid "Rumor" +#~ msgstr "Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter " +#~ "from the LilyPond document." +#~ msgstr "" +#~ "De te gebruiken maatsoort. Indien 'Auto', bepaalt Frescobaldi de " +#~ "maatsoort uit het huidige document." + +#~ msgid "Quantize:" +#~ msgstr "Quantiseren:" + +#~ msgid "The shortest note duration to use." +#~ msgstr "De kortste toegestane toonduur." + +#~ msgid "Record LilyPond input note by note, without durations." +#~ msgstr "Neem noot voor noot op, zonder toonduur te registreren." + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Record monophonic input, without chords." +#~ msgstr "Monofoon opnemen, zonder akkoorden." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let Frescobaldi determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Het aantal voortekens. Een negatieve waarde duidt mollen aan. Indien " +#~ "'Auto', bepaalt Frescobaldi de toonsoort uit het huidige document." + +#~ msgid "Meter:" +#~ msgstr "Maatsoort:" + +#~ msgid "Key:" +#~ msgstr "Toonsoort:" + +#~ msgid "Configure..." +#~ msgstr "Instellen..." + +#~ msgid "Adjust more settings, like MIDI input and output." +#~ msgstr "Meer instellingen, zoals MIDI in- en uitvoer." + +#~ msgid "Set these settings as default." +#~ msgstr "Deze instelling opslaan en standaard gebruiken." + +#~ msgid "Found rumor version %1." +#~ msgstr "Rumor versie %1 gevonden." + +#~ msgid "Could not find Rumor: %1" +#~ msgstr "Kon Rumor niet vinden: %1" + +#~ msgid "Settings have been saved." +#~ msgstr "De instellingen zijn opgeslagen." + +#~ msgid "Record" +#~ msgstr "Opnemen" + +#~ msgid "Start or stop Rumor MIDI-recording." +#~ msgstr "Rumor MIDI-opname starten of stoppen." + +#~ msgid "Rumor is recording, press ESC to stop." +#~ msgstr "Rumor neemt op, druk op ESC om te stoppen." + +#~ msgid "Rumor stopped." +#~ msgstr "Rumor is gestopt." + +#~ msgid "TiMidity" +#~ msgstr "TiMidity" + +#~ msgid "Start or stop the TiMidity ALSA MIDI client." +#~ msgstr "De TiMidity ALSA MIDI-client starten of stoppen." + +#~ msgid "Rumor Settings" +#~ msgstr "Rumor instellingen" + +#~ msgid "OSS device %1" +#~ msgstr "OSS apparaat %1" + +#~ msgid "Keyboard" +#~ msgstr "Toetsenbord" + +#~ msgid "" +#~ "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard " +#~ "of your computer." +#~ msgstr "" +#~ "Het te gebruiken MIDI-invoerapparaat. Kies 'Toetsenbord' om op het " +#~ "toetsenbord van uw computer te spelen." + +#~ msgid "MIDI output:" +#~ msgstr "MIDI uitvoer:" + +#~ msgid "MIDI output to use." +#~ msgstr "Het te gebruiken MIDI-uitvoerapparaat." + +#~ msgid "The LilyPond language you want Rumor to output the pitches in." +#~ msgstr "De LilyPond-taal die u wilt gebruiken voor de toonhoogtes." + +#~ msgid "Explicit durations" +#~ msgstr "Expliciete toonduur" + +#~ msgid "" +#~ "Add a duration after every note, even if it is the same as the preceding " +#~ "note." +#~ msgstr "" +#~ "De toonduur na elke noot weergeven, ook als deze hetzelfde is als de " +#~ "vorige noot." + +#~ msgid "Absolute pitch" +#~ msgstr "Absolute toonhoogte" + +#~ msgid "Use absolute pitches instead of relative." +#~ msgstr "Gebruik absolute octaafhoogte in plaats van relatieve." + +#~ msgid "No barlines" +#~ msgstr "Geen maatstrepen" + +#~ msgid "Filter the barlines out of Rumor's output." +#~ msgstr "Verwijder de maatstrepen uit Rumor's uitvoer." + +#~ msgid "No dots" +#~ msgstr "Geen punten" + +#~ msgid "Do not use dotted notes, but ties instead." +#~ msgstr "Plaats geen punt achter de noot, maar een overbindingsboogje." + +#~ msgid "Legato" +#~ msgstr "Legato" + +#~ msgid "Do not use rests, but give all notes the maximum length." +#~ msgstr "Gebruik geen rusten maar geef alle noten de maximale lengte." + +#~ msgid "Strip leading and trialing rests from output." +#~ msgstr "Verwijder rusten aan het begin en het einde." + +#~ msgid "Guile scripts to load:" +#~ msgstr "Guile scripts om te laden:" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. Check " +#~ "\"What's this\" for more information." +#~ msgstr "" +#~ "Hier kunt u selecteren welke Guile scripts u met Rumor wilt gebruiken. " +#~ "Raadpleeg \"Wat is dit\" voor meer informatie." + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %1. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Hier kunt u selecteren welke Guile scripts u met Rumor wilt gebruiken. U " +#~ "kunt uw eigen scripts toevoegen door deze in %1 te plaatsen. Als de " +#~ "eerste regel van uw script met een puntkomma (;) begint wordt deze als " +#~ "omschrijving weergegeven." + +#~ msgid "publish mode" +#~ msgstr "publiceren" + +#~ msgid "LilyPond %1 [%2] starting (%3)..." +#~ msgstr "LilyPond %1 [%2] wordt gestart (%3)..." + +#~ msgid "LilyPond [%1] starting (%2)..." +#~ msgstr "LilyPond [%1] wordt gestart (%2)..." + +#~ msgid "LilyPond [%1] finished (%2)." +#~ msgstr "LilyPond [%1] voltooid (%2)." + +#~ msgid "Select which LilyPond version you want to run:" +#~ msgstr "Selecteer de LilyPond-versie die u wilt starten:" + +#~ msgid "LilyPond %1" +#~ msgstr "LilyPond %1" + +#~ msgid "Use LilyPond version %1" +#~ msgstr "LilyPond-versie %1 gebruiken" + +#~ msgid "Automatic LilyPond Version (determined from document)." +#~ msgstr "Automatische LilyPond-versie (op basis van document)." + +#~ msgid "Path: %1" +#~ msgstr "Pad: %1" + +#~ msgid "LilyPond (version unknown)" +#~ msgstr "LilyPond (versie onbekend)" + +#~ msgid "" +#~ "Use LilyPond (version unknown)\n" +#~ "Path: %1" +#~ msgstr "" +#~ "LilyPond (versie onbekend) gebruiken\n" +#~ "Pad: %1" + +#~ msgid "Save LilyPond Log as" +#~ msgstr "LilyPond-uitvoer opslaan als" + +#~ msgid "" +#~ "Could not save LilyPond log:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Kan LilyPond-uitvoer niet opslaan:\n" +#~ "\n" +#~ "%1" + +#~ msgid "LilyPond-related settings" +#~ msgstr "LilyPond-gerelateerde instellingen" + +#~ msgid "LilyPond version to use:" +#~ msgstr "Te gebruiken LilyPond-versie:" + +#~ msgid "" +#~ "Here you can set a fixed LilyPond version to run on documents in this " +#~ "session.\n" +#~ "\n" +#~ "The LilyPond version selected here is run by default on your documents, " +#~ "and it's also used by the \"Insert Version\" command." +#~ msgstr "" +#~ "Hier kunt een vaste LilyPond-versie kiezen om te gebruiken op documenten " +#~ "in deze sessie.\n" +#~ "\n" +#~ "De versie die u hier selecteert wordt dan standaard gebruikt op uw " +#~ "documenten, en wordt ook ingevoegd door het \"LilyPond-versie invoegen\"-" +#~ "commando." + +#~ msgid "Configure" +#~ msgstr "Instellen" + +#~ msgid "General Frescobaldi Preferences" +#~ msgstr "Algemene voorkeuren voor Frescobaldi" + +#~ msgid "Paths to programs or data used by Frescobaldi" +#~ msgstr "Paden naar programma's of gegevens gebruikt door Frescobaldi" + +#~ msgid "Rumor MIDI input" +#~ msgstr "Rumor MIDI-invoer" + +#~ msgid "Rumor MIDI input plugin settings" +#~ msgstr "Instellingen voor de Rumor MIDI-invoerplugin" + +#~ msgid "Editor Component" +#~ msgstr "Editor-component" + +#~ msgid "Editor Component Options" +#~ msgstr "Instellingen voor de editor" + +#~ msgid "Use version number of last convert-ly rule" +#~ msgstr "Versienummer van laatste convert-ly regel gebruiken" + +#~ msgid "Enter a valid LilyPond version number, e.g. 2.12.0" +#~ msgstr "Voer een geldig LilyPond-versienummer in, bijv. 2.12.0" + +#~ msgid "Warnings and Notifications" +#~ msgstr "Waarschuwingen en notificaties" + +#~ msgid "Warn when a document contains a conflicting point and click setting" +#~ msgstr "" +#~ "Waarschuwing als een document een conflicterende point-and-click-" +#~ "instelling bevat" + +#~ msgid "Warn when a document needs to be saved before LilyPond is run" +#~ msgstr "" +#~ "Waarschuwing als een document moet worden opgeslagen voor LilyPond wordt " +#~ "gestart" + +#~ msgid "Warn when saving a session would overwrite another" +#~ msgstr "" +#~ "Waarschuwing als het opslaan van een sessie een andere zou overschrijven" + +#~ msgid "Point and Click" +#~ msgstr "Point en Click" + +#~ msgid "Enable Point and Click" +#~ msgstr "Point en Click inschakelen" + +#~ msgid "" +#~ "Click this button if Point and Click does not work. See Shift+F1 (What's " +#~ "This) for more information." +#~ msgstr "" +#~ "Klik op deze knop als Point en Click niet werkt. Zie Shift+F1 (Wat is " +#~ "dit) voor meer informatie." + +#~ msgid "" +#~ "On its first run, Frescobaldi tries to auto-configure Okular (which " +#~ "provides the PDF preview) to call Frescobaldi when a clickable object is " +#~ "clicked.\n" +#~ "\n" +#~ "But this setting can get lost when you move Frescobaldi to a different " +#~ "location or when other applications reconfigure Okular.\n" +#~ "\n" +#~ "Click this button to configure Frescobaldi as 'custom editor' inside " +#~ "Okular. This works best when all instances of Okular are closed and the " +#~ "PDF preview has not yet been opened." +#~ msgstr "" +#~ "Bij de eerste start probeert Frescobaldi Okular (dat de PDF-weergave " +#~ "verzorgt) automatisch in te stellen om Frescobaldi te starten als een " +#~ "aanklikbaar object wordt aangeklikt.\n" +#~ "\n" +#~ "Deze instelling kan echter verloren raken als u Frescobaldi verplaatst " +#~ "naar een andere directory of als andere programma's Okular anders " +#~ "instellen.\n" +#~ "\n" +#~ "Klik op deze knop om Frescobaldi als 'aangepaste editor' in te stellen in " +#~ "Okular. Dit werkt het best als u alle vensters van Okular sluit en de " +#~ "PDF-weergave nog niet geopend is." + +#~ msgid "" +#~ "The Okular PDF preview has been reconfigured.\n" +#~ "\n" +#~ "If you already opened the PDF preview, restart Frescobaldi for the new " +#~ "settings to take effect." +#~ msgstr "" +#~ "De Okular PDF-weergave is opnieuw ingesteld.\n" +#~ "\n" +#~ "Als u de PDF-weergave al geopend had, dient u Frescobaldi te herstarten " +#~ "zodat de nieuwe instelling in werking treedt." + +#~ msgid "PDF Viewer:" +#~ msgstr "PDF-viewer:" + +#~ msgid "PDF Viewer" +#~ msgstr "PDF-viewer" + +#~ msgid "(leave empty for operating system default)" +#~ msgstr "(als u niets opgeeft wordt de standaardapplicatie gebruikt)" + +#~ msgid "MIDI Player:" +#~ msgstr "MIDI-speler:" + +#~ msgid "Url:" +#~ msgstr "Url:" + +#~ msgid "Url or path to the LilyPond documentation." +#~ msgstr "Url of pad naar de LilyPond-documentatie." + +#~ msgid "Lyrics Hyphenation" +#~ msgstr "Afbreking van liedteksten" + +#~ msgid "" +#~ "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " +#~ "KOffice, etc, one per line. If you leave out the starting slash, the " +#~ "prefixes from the KDEDIRS environment variable are prepended." +#~ msgstr "" +#~ "Paden om bestanden met afbreekpatronen te vinden van bijv. OpenOffice." +#~ "org, Scribus of KOffice, één per regel. Als u de beginslash weglaat, " +#~ "wordt het pad gekoppeld aan alle paden in de KDEDIRS-omgevingsvariable." + +#~ msgid "Commands used by the Rumor MIDI input module" +#~ msgstr "Commando's gebruikt door de Rumor MIDI-invoermodule" + +#~ msgid "Name or full path of the Rumor program." +#~ msgstr "Naam of pad van het Rumor programma." + +#~ msgid "" +#~ "Name or full path of the aconnect program (part of ALSA, for MIDI input " +#~ "and playback using Rumor)." +#~ msgstr "" +#~ "Naam of pad van het aconnect programma (onderdeel van ALSA, voor MIDI in- " +#~ "en uitvoer via Rumor)." + +#~ msgid "" +#~ "Full command to start Timidity (or any other program) as an ALSA MIDI " +#~ "client." +#~ msgstr "" +#~ "Commandoregel om Timidity (of een ander programma) te starten als ALSA " +#~ "MIDI-client." + +#~ msgid "Close Button" +#~ msgstr "Sluitknop" + +#~ msgid "Large Tabs" +#~ msgstr "Brede tabs" + +#~ msgid "Tabs can be moved" +#~ msgstr "Tabs kunnen worden verplaatst" + +#~ msgid "Download..." +#~ msgstr "Downloaden..." + +#~ msgid "Download new binary LilyPond releases." +#~ msgstr "Nieuwe binaire LilyPond-releases downloaden." + +#~ msgid "LilyPond Command" +#~ msgstr "LilyPond-commando" + +#~ msgid "Choose a session." +#~ msgstr "Kies een sessie." + +#~ msgid "Choose..." +#~ msgstr "Kiezen..." + +#~ msgid "Your document has already a LilyPond version statement." +#~ msgstr "Uw document heeft reeds een LilyPond versie-commando." + +#~ msgid "Version already set" +#~ msgstr "Versie al ingesteld" + +#~ msgid "" +#~ "Can't determine the version of LilyPond. Please check your LilyPond " +#~ "installation." +#~ msgstr "" +#~ "Kan de versie van LilyPond niet bepalen. Controleer uw LilyPond-" +#~ "installatie." + +#~ msgid "" +#~ "Can't determine the LilyPond version of the current document. Please add " +#~ "a \\version statement with the correct version." +#~ msgstr "" +#~ "Kan de LilyPond-versie van het huidige document niet bepalen. Voeg een " +#~ "\\version commando toe met de correcte versie van het document." + +#~ msgid "This LilyPond document is already up-to-date." +#~ msgstr "Dit LilyPond-document is reeds bijgewerkt." + +#~ msgid "" +#~ "The document has been processed with convert-ly. You'll find the messages " +#~ "of convert-ly in a comment block at the end. You still may have to edit " +#~ "some parts manually." +#~ msgstr "" +#~ "Het document is verwerkt door convert-ly. De berichten van convert-ly " +#~ "vindt u aan het eind in een commentaarblok. Het kan zijn dat u bepaalde " +#~ "wijzigingen nog handmatig dient door te voeren." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %1" +#~ msgstr "" +#~ "Het document is verwerkt door convert-ly, maar bleef ongewijzigd. Dit is " +#~ "de melding die convert-ly gaf: %1" + +#~ msgid "Could not start convert-ly: %1" +#~ msgstr "Kan convert-ly niet starten: %1" + +#~ msgid "The tempo in beats per minute." +#~ msgstr "Het tempo in tellen per minuut." + +#~ msgid "Treble 8" +#~ msgstr "Vioolsleutel met 8" + +#~ msgid "Tab clef" +#~ msgstr "Tabulatuur" + +#~ msgid "No Clef" +#~ msgstr "Geen sleutel" + +#~ msgid "Add selected part to your score." +#~ msgstr "Geselecteerde partij aan uw partituur toevoegen." + +#~ msgid "A tempo indication, e.g. \"Allegro.\"" +#~ msgstr "Een tempo-aanduiding, zoals \"Allegro.\"" + +#~ msgid "Wrap score in \\book block" +#~ msgstr "Partituur in \\book-blok plaatsen" + +#~ msgid "If checked, wraps the \\score block inside a \\book block." +#~ msgstr "Indien aangekruist, plaatst het \\score-blok in een \\book-blok." + +#~ msgid "How many voices to put in this staff." +#~ msgstr "Hoeveel stemmen u in deze balk wilt." + +#~ msgid "Violin|Vl." +#~ msgstr "Viool|Vl." + +#~ msgid "Viola|Vla." +#~ msgstr "Altviool|Avl." + +#~ msgid "Cello|Cl." +#~ msgstr "Cello|Cl." + +#~ msgid "Contrabass|Cb." +#~ msgstr "Contrabas|Cb." + +#~ msgid "Basso Continuo|B.c." +#~ msgstr "Basso continuo|B.c." + +#~ msgid "Mandolin|Mdl." +#~ msgstr "Mandoline|Mdl." + +#~ msgid "Banjo|Bj." +#~ msgstr "Banjo|Bj." + +#~ msgid "Guitar|Gt." +#~ msgstr "Gitaar|Gt." + +#~ msgid "Jazz guitar|J.Gt." +#~ msgstr "Jazzgitaar|J.gt." + +#~ msgid "Bass|Bs." +#~ msgstr "Bas|Bs." + +#~ msgid "Electric bass|E.Bs." +#~ msgstr "Electrische bas|E.Bs." + +#~ msgid "Harp|Hp." +#~ msgstr "Harp|Hp." + +#~ msgid "Flute|Fl." +#~ msgstr "Fluit|Fl." + +#~ msgid "Piccolo|Pic." +#~ msgstr "Piccolo|Pic." + +#~ msgid "Bass flute|Bfl." +#~ msgstr "Basfluit|Bfl." + +#~ msgid "Oboe|Ob." +#~ msgstr "Hobo|Hb." + +#~ msgid "Oboe d'amore|Ob.d'am." +#~ msgstr "Liefdeshobo|Lhb." + +#~ msgid "English horn|Eng.h." +#~ msgstr "Althobo|Ahb." + +#~ msgid "Bassoon|Bn." +#~ msgstr "Fagot|Fag." + +#~ msgid "Contrabassoon|C.Bn." +#~ msgstr "Contrafagot|Cfag." + +#~ msgid "Clarinet|Cl." +#~ msgstr "Klarinet|Klar." + +#~ msgid "Sopranino Sax|SiSx." +#~ msgstr "Sopraninosax|Sisx." + +#~ msgid "Soprano Sax|SoSx." +#~ msgstr "Sopraansax|Sosx." + +#~ msgid "Alto Sax|ASx." +#~ msgstr "Altsax|Asx." + +#~ msgid "Tenor Sax|TSx." +#~ msgstr "Tenorsax|Tsx." + +#~ msgid "Baritone Sax|BSx." +#~ msgstr "Baritonsax|Bsx." + +#~ msgid "Bass Sax|BsSx." +#~ msgstr "Bassax|Bssx." + +#~ msgid "Soprano recorder|S.rec." +#~ msgstr "Sopraanblokfluit|Sbfl." + +#~ msgid "Alto recorder|A.rec." +#~ msgstr "Altblokfluit|Ablf." + +#~ msgid "Tenor recorder|T.rec." +#~ msgstr "Tenorblokfluit|Tblf." + +#~ msgid "Bass recorder|B.rec." +#~ msgstr "Basblokfluit|Bblf." + +#~ msgid "Horn in F|Hn.F." +#~ msgstr "Hoorn in F|Hn.F." + +#~ msgid "Trumpet in C|Tr.C" +#~ msgstr "Trompet in C|Tr.C" + +#~ msgid "Trumpet in Bb|Tr.Bb" +#~ msgstr "Trompet in Bes|Tr.Bes" + +#~ msgid "Trombone|Trb." +#~ msgstr "Trombone|Trb." + +#~ msgid "Tuba|Tb." +#~ msgstr "Tuba|Tb." + +#~ msgid "Bass Tuba|B.Tb." +#~ msgstr "Bastuba|Btb." + +#~ msgid "Soprano|S." +#~ msgstr "Sopraan|S." + +#~ msgid "Mezzo-soprano|Ms." +#~ msgstr "Mezzosopraan|Ms." + +#~ msgid "Alto|A." +#~ msgstr "Alt|A." + +#~ msgid "Tenor|T." +#~ msgstr "Tenor|T." + +#~ msgid "Choir|Ch." +#~ msgstr "Koor|K." + +#~ msgid "Piano|Pno." +#~ msgstr "Piano|Pno." + +#~ msgid "Harpsichord|Hs." +#~ msgstr "Klavecimbel|Kl." + +#~ msgid "Organ|Org." +#~ msgstr "Orgel|Org." + +#~ msgid "Celesta|Cel." +#~ msgstr "Celesta|Cel." + +#~ msgid "Timpani|Tmp." +#~ msgstr "Pauken|Pkn." + +#~ msgid "Xylophone|Xyl." +#~ msgstr "Xylofoon|Xyl." + +#~ msgid "Marimba|Mar." +#~ msgstr "Marimba|Mar." + +#~ msgid "Vibraphone|Vib." +#~ msgstr "Vibrafoon|Vib." + +#~ msgid "Tubular bells|Tub." +#~ msgstr "Buisklokken|Bkl." + +#~ msgid "Glockenspiel|Gls." +#~ msgstr "Klokkenspel|Kls." + +#~ msgid "Drums|Dr." +#~ msgstr "Slagwerk|Slw." + +#~ msgid "Open PDF" +#~ msgstr "PDF weergeven" + +#~ msgid "Email..." +#~ msgstr "Verzenden..." + +#~ msgid "Disable the built-in PDF preview" +#~ msgstr "De ingebouwde PDF-vooruitblik uitschakelen" + +#~ msgid "The direction to use for the articulations." +#~ msgstr "Plaatsing van de articulaties: onder of boven de balk of neutraal." + +#~ msgid "Your document has been modified, please save first." +#~ msgstr "Uw document is gewijzigd, gelieve het eerst op te slaan." + +#~ msgid "LilyPond documentation:" +#~ msgstr "LilyPond-documentatie:" + +#~ msgid "" +#~ "Printing failed: %1\n" +#~ "\n" +#~ "The print command %2 does probably not exist. Please check your settings." +#~ msgstr "" +#~ "Het afdrukken is mislukt: %1\n" +#~ "\n" +#~ "Het printcommando %2 bestaat waarschijnlijk niet. Controleer uw " +#~ "instellingen." + +#~ msgid "The print command contains errors. Please check your settings." +#~ msgstr "Het printcommando bevat fouten. Controleer uw instellingen." + +#~ msgid "Directly print on default printer" +#~ msgstr "Direct afdrukken op de standaardprinter" + +#~ msgid "Notify when a document has been sent to the printer" +#~ msgstr "Melding wanneer een document naar de printer is gestuurd" + +#~ msgid "" +#~ "Command to print a PDF file, for example lpr or kprinter. You may add " +#~ "some arguments, e.g. lpr -P myprinter." +#~ msgstr "" +#~ "Commando om een PDF-bestand af te drukken, bijvoorbeeld lpr of kprinter. " +#~ "U kunt opties meegeven, bijv. lpr -P kantoor." + +#~ msgid "Space above:" +#~ msgstr "Ruimte erboven:" + +#~ msgid "Name or full path of the convert-ly program." +#~ msgstr "Naam of pad van het convert-ly programma." + +#~ msgid "Expand" +#~ msgstr "Sneltekst" + +#~ msgid "" +#~ "Converts the notes in the selected music expression from relative to " +#~ "absolute pitch." +#~ msgstr "" +#~ "Zet de noten in de geselecteerde muziekexpressie om naar relatieve " +#~ "toonhoogte." + +#~ msgid "Dock" +#~ msgstr "Vastmaken" + +#~ msgid "Show" +#~ msgstr "Weergeven" + +#~ msgid "Paper: indent = 0" +#~ msgstr "Papier: indent = 0" + +#~ msgid "Paper Size A4" +#~ msgstr "Papierformaat A4" + +#~ msgid "Paper Size A4 Landscape" +#~ msgstr "Papierformaat A4 oblong" + +#~ msgid "Paper Size A5" +#~ msgstr "Papierformaat A5" + +#~ msgid "Paper Size Letter" +#~ msgstr "Papierformaat Letter" + +#~ msgid "Once Override" +#~ msgstr "Once Override" + +#~ msgid "Stem Up" +#~ msgstr "Stokken omhoog" + +#~ msgid "Set Global Staffsize 18" +#~ msgstr "Globale balk-grootte 18" + +#~ msgid "Repeat Alternative" +#~ msgstr "Herhaling alternatief" + +#~ msgid "Header: No Tagline" +#~ msgstr "Kopregels: geen tagline" + +#~ msgid "Lyric Stanza" +#~ msgstr "Couplet liedtekst" + +#~ msgid "Melody with Lyrics" +#~ msgstr "Melodie met liedtekst" + +#~ msgid "Midi section" +#~ msgstr "Midi sectie" + +#~ msgid "With (after \\new Staff, etc.)" +#~ msgstr "With (na \\new Staff, etc.)" + +#~ msgid "With: instrumentName" +#~ msgstr "With: instrumentName" + +#~ msgid "With: shortInstrumentName" +#~ msgstr "With: shortInstrumentName" + +#~ msgid "With: Smaller Staffsize" +#~ msgstr "With: notenbalk verkleinen" + +#~ msgid "Key C major" +#~ msgstr "C-groot" + +#~ msgid "Key D major" +#~ msgstr "D-groot" + +#~ msgid "Key E major" +#~ msgstr "E-groot" + +#~ msgid "Key F major" +#~ msgstr "F-groot" + +#~ msgid "Key G major" +#~ msgstr "G-groot" + +#~ msgid "Key A major" +#~ msgstr "A-groot" + +#~ msgid "Key C minor" +#~ msgstr "C-klein" + +#~ msgid "Key D minor" +#~ msgstr "D-klein" + +#~ msgid "Key E minor" +#~ msgstr "E-klein" + +#~ msgid "Key F minor" +#~ msgstr "F-klein" + +#~ msgid "Key G minor" +#~ msgstr "G-klein" + +#~ msgid "Key A minor" +#~ msgstr "A-klein" + +#~ msgid "Tactus Major (2/half note)" +#~ msgstr "Tactus Major (2/halve noot)" + +#~ msgid "Tactus Minor (1/half note)" +#~ msgstr "Tactus Minor (1/halve noot)" + +#~ msgid "Tactus Proportionatus (1/half dot)" +#~ msgstr "Tactus Proportionatus (1/halve punt)" + +#~ msgid "Tactus Proportionatus (3/quarter note)" +#~ msgstr "Tactus Proportionatus (3/kwartnoot)" + +#~ msgid "Tempo text mark" +#~ msgstr "Tempo tekstaanduiding" + +#~ msgid "Two voices" +#~ msgstr "Twee stemmen" + +#~ msgid "Two voices (long)" +#~ msgstr "Twee stemmen (lang)" + +#~ msgid "New Lyrics" +#~ msgstr "Nieuwe liedtekst (Lyrics)" + +#~ msgid "Your document currently has no filename, please save first." +#~ msgstr "Uw document heeft geen bestandsnaam, gelieve het eerst op te slaan." + +#~ msgid "" +#~ "Sorry, support for remote files is not yet implemented.\n" +#~ "Please save your document to a local file." +#~ msgstr "" +#~ "Helaas, netwerkbestanden worden nog niet ondersteund.\n" +#~ "Gelieve uw document naar een locaal bestand op te slaan." + +#~ msgid "Already Running" +#~ msgstr "Reeds actief" + +#~ msgid "LilyPond crashed." +#~ msgstr "LilyPond is gecrashed." + +#~ msgid "" +#~ "A LilyPond Kate/Pate plugin.\n" +#~ "\n" +#~ "This is LilyKDE, a plugin to make it easy to run the LilyPond music " +#~ "typesetter from within Kate.\n" +#~ "\n" +#~ "Version: $version\n" +#~ "Homepage: $homepage\n" +#~ msgstr "" +#~ "Een Kate/Pate-plugin voor LilyPond.\n" +#~ "\n" +#~ "Dit is LilyKDE, een plugin waarmee het eenvoudig is om het LilyPond " +#~ "muziekgraveer-programma vanuit Kate te gebruiken.\n" +#~ "\n" +#~ "Versie: $version\n" +#~ "Homepage: $homepage\n" + +#~ msgid "LilyPond [$filename] starting ($mode)..." +#~ msgstr "LilyPond [$filename] wordt gestart ($mode)..." + +#~ msgid "Could not start LilyPond." +#~ msgstr "Kan LilyPond niet starten." + +#~ msgid "LilyPond [$filename] was terminated by signal $signal." +#~ msgstr "LilyPond [$filename] werd beëindigd door signaal $signal." + +#~ msgid "LilyPond [$filename] exited with return code $retcode." +#~ msgstr "LilyPond [$filename] stopte met foutcode $retcode." + +#~ msgid "LilyPond [$filename] finished." +#~ msgstr "LilyPond [$filename] voltooid." + +#~ msgid "LilyPond [$filename] exited abnormally." +#~ msgstr "LilyPond [$filename] werd afgebroken." + +#~ msgid "LilyPond did not write a PDF. You probably forgot \\layout?" +#~ msgstr "" +#~ "LilyPond heeft geen PDF-bestand geschreven. Waarschijnlijk bent u " +#~ "\\layout vergeten?" + +#~ msgid "Clear LilyPond Log" +#~ msgstr "LilyPond uitvoer wissen" + +#~ msgid "Record MIDI with Rumor" +#~ msgstr "MIDI opnemen met Rumor" + +#~ msgid "Toggle PDF navigation panel" +#~ msgstr "PDF-navigatiepaneel tonen of verbergen" + +#~ msgid "Dock/Undock PDF preview" +#~ msgstr "PDF-weergave los- of aankoppelen" + +#~ msgid "Dock/Undock Quick Insert Panel" +#~ msgstr "Quick Insert-paneel los- of aankoppelen" + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %s" +#~ msgstr "" +#~ "Het document is verwerkt door convert-ly, maar bleef ongewijzigd. Dit is " +#~ "de melding die convert-ly gaf: %s" + +#~ msgid "Name or full path of the pdftk program (see %s)." +#~ msgstr "Naam of pad van het pdftk programma (zie %s)." + +#~ msgid "" +#~ "Check the actions you want to display (if applicable) after LilyPond has " +#~ "successfully compiled your document." +#~ msgstr "" +#~ "Selecteer de acties die u wilt laten weergeven (indien van toepassing) " +#~ "nadat LilyPond uw document succesvol heeft verwerkt." + +#~ msgid "Keep undocked windows on top of Kate" +#~ msgstr "Ontkoppelde vensters boven Kate houden" + +#~ msgid "Clear log before LilyPond is started" +#~ msgstr "Log wissen als LilyPond wordt gestart" + +#~ msgid "Force reload of PDF preview when LilyPond has run" +#~ msgstr "PDF-weergave herladen nadat LilyPond is gestart" + +#~ msgid "Always embed LilyPond source files in published PDF" +#~ msgstr "LilyPond-bronbestanden altijd in gepubliceerde PDF inbedden" + +#~ msgid "TiMidity successfully started." +#~ msgstr "TiMidity is gestart." + +#~ msgid "TiMidity stopped." +#~ msgstr "TiMidity is gestopt." + +#~ msgid "" +#~ "Could not start TiMidity. Please try the command %s in a terminal to find " +#~ "out what went wrong." +#~ msgstr "" +#~ "Kon TiMidity niet starten. Probeer de commandoregel %s in een terminal om " +#~ "uit te vinden wat er verkeerd ging." + +#~ msgid "Start or stop Rumor" +#~ msgstr "Rumor starten of stoppen" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let LilyKDE determine the meter from " +#~ "the LilyPond document." +#~ msgstr "" +#~ "De te gebruiken maatsoort. Indien 'Auto', bepaalt LilyKDE de maatsoort " +#~ "uit het huidige document." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let LilyKDE determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Het aantal voortekens. Een negatieve waarde duidt mollen aan. Indien " +#~ "'Auto', bepaalt LilyKDE de toonsoort uit het huidige document." + +#~ msgid "Found rumor version $version." +#~ msgstr "Rumor versie $version gevonden." + +#~ msgid "Could not find Rumor: %s" +#~ msgstr "Kon Rumor niet vinden: %s" + +#~ msgid "OSS device %d" +#~ msgstr "OSS apparaat %d" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %s. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Hier kunt u selecteren welke Guile scripts u met Rumor wilt gebruiken. U " +#~ "kunt uw eigen scripts toevoegen door deze in %s te plaatsen. Als de " +#~ "eerste regel van uw script met een puntkomma (;) begint wordt deze als " +#~ "omschrijving weergegeven." + +#~ msgid "Configure %s" +#~ msgstr "%s instellen" + +#~ msgid "Remove selected part from your score." +#~ msgstr "Geselecteerde partij uit uw partituur verwijderen." + +#~ msgid "Move selected part up." +#~ msgstr "Geselecteerde partij omhoog verplaatsen." + +#~ msgid "Move selected part down." +#~ msgstr "Geselecteerde partij omlaag verplaatsen." + +#~ msgid "Use no, short or long instrument names before the next systems." +#~ msgstr "" +#~ "Gebruik geen, korte of lange instrumentnamen voor de volgende systemen." + +#~ msgid "Italian names" +#~ msgstr "Italiaanse namen" + +#~ msgid "" +#~ "Choose standard Italian instrument names, like '%s' instead of 'Organ.'" +#~ msgstr "" +#~ "Kies standaard Italiaanse instrumentnamen, zoals '%s' in plaats van " +#~ "'Orgel.'" + +#~ msgid "Could not start Pdftk: %s" +#~ msgstr "Kan Pdftk niet starten: %s" + +#~ msgid "Embedded file %s in PDF." +#~ msgid_plural "Embedded files %s in PDF." +#~ msgstr[0] "Bestand %s ingebed in PDF." +#~ msgstr[1] "Bestanden %s ingebed in PDF." + +#~ msgid "Embedding files in PDF failed." +#~ msgstr "Het inbedden van de bestanden in de PDF is mislukt." + +#~ msgid "Return code: %i" +#~ msgstr "Foutcode: %i" + +#~ msgid "Open the folder containing the LilyPond and PDF documents." +#~ msgstr "Map met de LilyPond- en PDF-documenten openen." + +#~ msgid "Open the generated PDF file with the default PDF viewer." +#~ msgstr "" +#~ "Het aangemaakte PDF-bestand met het standaard weergaveprogramma bekijken." + +#~ msgid "" +#~ "Print the PDF using the print command set in the Commands settings page." +#~ msgstr "" +#~ "De PDF afdrukken met het printcommando dat onder Commando's is ingesteld." + +#~ msgid "Email PDF" +#~ msgstr "PDF e-mailen" + +#~ msgid "Attach the PDF to an email message." +#~ msgstr "Het PDF-bestand bij een e-mailbericht voegen." + +#~ msgid "" +#~ "Play the generated MIDI files using the default MIDI player (Timidity++ " +#~ "is recommended)." +#~ msgstr "" +#~ "De aangemaakte MIDI-bestanden afspelen met de standaard MIDI-speler " +#~ "(Timidity++ is aanbevolen)." + +#~ msgid "Embed source" +#~ msgstr "Bron inbedden" + +#~ msgid "Embed the LilyPond source files in the published PDF (using pdftk)." +#~ msgstr "" +#~ "De LilyPond bronbestanden in de gepubliceerde PDF inbedden (gebruikmakend " +#~ "van pdftk)." + +#~ msgid "Different tools to edit durations." +#~ msgstr "Hulpmiddelen voor het bewerken van tijdsduren." + +#~ msgid "" +#~ "Press to apply the entered rhythm to the selected music. This will delete " +#~ "previously entered durations." +#~ msgstr "" +#~ "Klik om het ingevoerde ritme aan de geselecteerde muziek toe te voegen. " +#~ "Eerder ingevoerde ritmiek gaat hierdoor verloren." + +#~ msgid "Finished" +#~ msgstr "Beëindigd" + +#~ msgid "LilyKDE servicemenu helper" +#~ msgstr "LilyKDE servicemenu hulpprogramma" + +#~ msgid "LilyPond files to convert" +#~ msgstr "Te converteren LilyPond-bestanden" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Set this to your name" +#~ msgstr "Wilbert Berendsen" + +#~ msgid "&Lyrics" +#~ msgstr "&Liedteksten" + +#~ msgid "" +#~ "Whether you want instrument names to be standard Italian (like 'Organo' " +#~ "for 'Organ'), English or in your own language." +#~ msgstr "" +#~ "Of u instrumentnamen in standaard Italiaans wilt (bijv. 'Organo' voor " +#~ "'Orgel'), in het Engels of in uw eigen taal." + +#~ msgid "Your language" +#~ msgstr "Uw eigen taal" + +#~ msgid "Print" +#~ msgstr "Afdrukken" + +#~ msgid "Printcommand:" +#~ msgstr "Printcommando:" + +#, fuzzy +#~ msgid "Could not understand the entered pitches." +#~ msgstr "Kan de uitvoer van het LilyPond-proces niet lezen." + +#~ msgid "Override" +#~ msgstr "Override" + +#~ msgid "Stem Down" +#~ msgstr "Stokken omlaag" + +#~ msgid "Score section" +#~ msgstr "Score sectie" + +#~ msgid "Layout Section" +#~ msgstr "Layout sectie" + +#~ msgid "Layout: No Barnumbers" +#~ msgstr "Layout: geen maatnummers" + +#~ msgid "&Source Text" +#~ msgstr "&Brontekst" + +#, fuzzy +#~ msgid "Save File" +#~ msgstr "Bestand openen" + +#~ msgid "Quick Insert Panel" +#~ msgstr "Quick Insert-paneel" + +#~ msgid "REC" +#~ msgstr "REC" + +#~ msgid "Durations" +#~ msgstr "Tijdsduren" + +#~ msgid "One document failed." +#~ msgid_plural "$count documents failed." +#~ msgstr[0] "Eén document gefaald." +#~ msgstr[1] "$count documenten gefaald." + +#~ msgid "English" +#~ msgstr "Engels" Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/pl.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/pl.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/pl.po frescobaldi-2.0.0/frescobaldi_app/po/pl.po --- frescobaldi-1.2.0/frescobaldi_app/po/pl.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/pl.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7237 @@ +# Polish translation for Frescobaldi +# Copyright (c) 2008-2009, Wilbert Berendsen +# This file is distributed under the same license as the Frescobaldi package. +# +# Piotr Komorowski, , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: frescobaldi 0.1\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: 2010-12-23 10:52+0100\n" +"Last-Translator: Piotr Komorowski \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"X-Generator: Lokalize 1.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" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "" + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +#, fuzzy +msgid "Python" +msgstr "Ścieżka" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +#, fuzzy +msgid "Poppler" +msgstr "Papier" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "" + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "" + +#: frescobaldi_app/about.py:87 +#, fuzzy +msgid "About" +msgstr "Auto" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "Wersja" + +#: frescobaldi_app/about.py:144 +#, fuzzy +msgid "Operating System" +msgstr "Inne systemy:" + +#: frescobaldi_app/about.py:151 +#, fuzzy +msgid "Version {version}" +msgstr "Wstaw wersję LilyPonda" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +#, fuzzy +msgid "A LilyPond Music Editor" +msgstr "Edytor nutowy LilyPond" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "" + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "" + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "" + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +#, fuzzy +msgid "Shortcut Conflict" +msgstr "Skrót" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "" + +#: frescobaldi_app/app.py:128 +#, fuzzy +msgid "LilyPond Files" +msgstr "Pliki LilyPond" + +#: frescobaldi_app/app.py:129 +#, fuzzy +msgid "LaTeX Files" +msgstr "Wszystkie pliki" + +#: frescobaldi_app/app.py:130 +#, fuzzy +msgid "DocBook Files" +msgstr "Pliki PDF" + +#: frescobaldi_app/app.py:131 +#, fuzzy +msgid "HTML Files" +msgstr "Wszystkie pliki" + +#: frescobaldi_app/app.py:132 +#, fuzzy +msgid "Texinfo Files" +msgstr "Otwórz plik" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Wszystkie pliki" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:115 +#, fuzzy +msgid "Next Mark" +msgstr "Następny" + +#: frescobaldi_app/bookmarkmanager.py:116 +#, fuzzy +msgid "Previous Mark" +msgstr "Poprzedni" + +#: frescobaldi_app/convert_ly.py:118 +#, fuzzy +msgid "From version:" +msgstr "Wstaw wersję LilyPonda" + +#: frescobaldi_app/convert_ly.py:119 +#, fuzzy +msgid "To version:" +msgstr "Wersja:" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "" + +#: frescobaldi_app/convert_ly.py:125 +#, fuzzy +msgid "&Changes" +msgstr "Pauza" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +#, fuzzy +msgid "" +msgstr "nieznany" + +#: frescobaldi_app/convert_ly.py:138 +#, fuzzy +msgid "Convert-ly from LilyPond {version}" +msgstr "Użyj LilyPonda w wersji %1" + +#: frescobaldi_app/convert_ly.py:162 +#, fuzzy +msgid "(set in document)" +msgstr "Wydrukuj dokument " + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "" + +#: frescobaldi_app/convert_ly.py:190 +#, fuzzy +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "Nie można rozpocząć konwersji przy użyciu convert-ly: %1" + +#: frescobaldi_app/convert_ly.py:196 +#, fuzzy +msgid "The document has not been changed." +msgstr "Dokument został wysłany do drukarki" + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Current Document" +msgstr "&Dokument " + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Converted Document" +msgstr "Zamknij inne dokumenty" + +#: frescobaldi_app/convert_ly.py:208 +#, fuzzy +msgid "Colors:" +msgstr "Kompozytor" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "" + +#: frescobaldi_app/convert_ly.py:211 +#, fuzzy +msgid "Deleted" +msgstr "Zaznacz wszystko" + +#: frescobaldi_app/convert_ly.py:212 +#, fuzzy +msgid "Links:" +msgstr "Słowa:" + +#: frescobaldi_app/convert_ly.py:213 +#, fuzzy +msgid "First Change" +msgstr "Pierwsza strona" + +#: frescobaldi_app/convert_ly.py:214 +#, fuzzy +msgid "Next Change" +msgstr "Następna pusta linia" + +#: frescobaldi_app/convert_ly.py:215 +#, fuzzy +msgid "Top" +msgstr "Wystukaj" + +#: frescobaldi_app/cut_assign.py:39 +#, fuzzy +msgid "Cut and Assign" +msgstr "Wytnij i przyporządkuj" + +#: frescobaldi_app/cut_assign.py:40 +#, fuzzy +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "" +"Proszę wybrać nazwę dla zmniennej przyporządkowanej do wybranego tekstu:" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +msgid "Untitled" +msgstr "Bez tytułu" + +#: frescobaldi_app/document.py:145 +#, fuzzy +msgid "Untitled ({num})" +msgstr "Bez tytułu" + +#: frescobaldi_app/documentactions.py:125 +#, fuzzy +msgid "Cut and Assign..." +msgstr "Wytnij i przyporządkuj" + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "" + +#: frescobaldi_app/documentactions.py:127 +#, fuzzy +msgid "&Automatic Indent" +msgstr "automatycznie" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "" + +#: frescobaldi_app/documentactions.py:129 +#, fuzzy +msgid "&Format" +msgstr "Fermata" + +#: frescobaldi_app/documentactions.py:130 +#, fuzzy +msgid "&Update with convert-ly..." +msgstr "Uaktualnij z convert-ly" + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +#, fuzzy +msgid "&Save" +msgstr "Zapisz" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +#, fuzzy +msgid "Save &As..." +msgstr "Zapisz PDF jako..." + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "" + +#: frescobaldi_app/documentmenu.py:42 +#, fuzzy +msgctxt "menu title" +msgid "&Document" +msgstr "&Dokument " + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Pojawił się błąd wewnętrzny:" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "Błąd wewnętrzny " + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Wyślij raport o błędzie..." + +#: frescobaldi_app/exception.py:79 +#, fuzzy +msgid "Optionally describe below what you were doing:" +msgstr "Opisz co zrobiłeś, gdy pojawił się błąd:" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:76 +msgid "Roman Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:77 +msgid "Sans Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:79 +#, fuzzy +msgid "Staff Size:" +msgstr "Rozmiar pięciolinii:" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Rozdziel tekst myślnikami" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Proszę wybrać język:" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +#, fuzzy +msgid "Lyrics" +msgstr "Słowa:" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +#, fuzzy +msgctxt "menu title" +msgid "Tools" +msgstr "&Widok narzędzi" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +#, fuzzy +msgid "Preferences" +msgstr "Ustawienia ogólne" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/inputdialog.py:101 +#, fuzzy +msgid "Select Color" +msgstr "Zaznacz wszystko" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:206 +#, fuzzy +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "Nie można uruchomić LilyPonda. Sprawdź scieżkę oraz pozwolenia." + +#: frescobaldi_app/job.py:209 +#, fuzzy +msgid "Could not read from the process." +msgstr "Nie można odczytać z tego przebiegu LilyPonda." + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Pojawił się nieznany błąd." + +#: frescobaldi_app/job.py:216 +#, fuzzy +msgid "Exited with return code {code}." +msgstr "LilyPond [%1] zakończył z kodem %2." + +#: frescobaldi_app/job.py:218 +#, fuzzy +msgid "Exited with exit status {status}." +msgstr "LilyPond [%1] zakończył ze statusem %2." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "" + +#: frescobaldi_app/lyrics.py:132 +#, fuzzy +msgid "&Hyphenate Lyrics Text..." +msgstr "Rozdziel tekst myślnikami" + +#: frescobaldi_app/lyrics.py:133 +#, fuzzy +msgid "&Remove hyphenation" +msgstr "Usuń rozdzielenie tekstu myślnikami" + +#: frescobaldi_app/lyrics.py:134 +#, fuzzy +msgid "&Copy Lyrics with hyphenation removed" +msgstr "Kopiuj słowa bez podziału wyrazów" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "" + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Używane kodowanie" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Do której linii dojść, zaczynając w 1" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Do której kolumny dojść, zaczynając w 0" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +#, fuzzy +msgid "[modified]" +msgstr "zmieniony" + +#: frescobaldi_app/mainwindow.py:268 +#, fuzzy +msgctxt "dialog title" +msgid "Close Document" +msgstr "Zamknij inne dokumenty" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:281 +#, fuzzy +msgid "Tab Bar" +msgstr "Tabulatura" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +#, fuzzy +msgid "Warning" +msgstr "Strój gitarowy" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:354 +#, fuzzy +msgctxt "dialog title" +msgid "Open File" +msgstr "Otwórz plik" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:399 +#, fuzzy +msgctxt "dialog title" +msgid "Save File" +msgstr "Zapisz PDF" + +#: frescobaldi_app/mainwindow.py:439 +#, fuzzy +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Zapisz" + +#: frescobaldi_app/mainwindow.py:445 +#, fuzzy +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Wybór języka" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:541 +#, fuzzy +msgctxt "dialog title" +msgid "Print Source" +msgstr "Drukuj źródło..." + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:923 +#, fuzzy +msgctxt "action: new document" +msgid "&New" +msgstr "Nowa..." + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:927 +#, fuzzy +msgid "Open Current Directory" +msgstr "Otwórz obecny folder" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:931 +#, fuzzy +msgid "Save All" +msgstr "Zapisz" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "Drukuj źródło..." + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "Zamknij inne dokumenty" + +#: frescobaldi_app/mainwindow.py:935 +#, fuzzy +msgid "Close All Documents" +msgstr "Zamknij inne dokumenty" + +#: frescobaldi_app/mainwindow.py:936 +#, fuzzy +msgid "Closes all documents and leaves the current session." +msgstr "Transponuje wszystkie nuty w danym dokumencie, lub jego fragmencie." + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:941 +#, fuzzy +msgid "&Undo" +msgstr "Wyładuj" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Kopiuj" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:946 +#, fuzzy +msgid "&Paste" +msgstr "Pauza" + +#: frescobaldi_app/mainwindow.py:947 +#, fuzzy +msgid "Select &All" +msgstr "Zaznacz wszystko" + +#: frescobaldi_app/mainwindow.py:948 +#, fuzzy +msgid "Select &Block" +msgstr "Zaznacz wszystko" + +#: frescobaldi_app/mainwindow.py:949 +#, fuzzy +msgid "Select &None" +msgstr "Zaznacz wszystko" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "" + +#: frescobaldi_app/mainwindow.py:952 +#, fuzzy +msgid "&Find..." +msgstr "Drukuj..." + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "" + +#: frescobaldi_app/mainwindow.py:954 +#, fuzzy +msgid "Find Pre&vious" +msgstr "Poprzedni" + +#: frescobaldi_app/mainwindow.py:955 +#, fuzzy +msgid "&Replace..." +msgstr "Szukaj..." + +#: frescobaldi_app/mainwindow.py:956 +#, fuzzy +msgid "Pr&eferences..." +msgstr "Ustawienia ogólne" + +#: frescobaldi_app/mainwindow.py:958 +#, fuzzy +msgid "&Next Document" +msgstr "&Dokument " + +#: frescobaldi_app/mainwindow.py:959 +#, fuzzy +msgid "&Previous Document" +msgstr "&Źródłowy dokument" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:961 +msgid "Scroll Down" +msgstr "" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "" + +#: frescobaldi_app/menu.py:81 +#, fuzzy +msgctxt "menu title" +msgid "&File" +msgstr "Tytuł" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "" + +#: frescobaldi_app/menu.py:147 +#, fuzzy +msgctxt "menu title" +msgid "&View" +msgstr "&Widok narzędzi" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "" + +#: frescobaldi_app/menu.py:189 +#, fuzzy +msgctxt "menu title" +msgid "&LilyPond" +msgstr "&LilyPond" + +#: frescobaldi_app/menu.py:208 +#, fuzzy +msgctxt "menu title" +msgid "&Tools" +msgstr "&Widok narzędzi" + +#: frescobaldi_app/menu.py:233 +#, fuzzy +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "&Tekst" + +#: frescobaldi_app/menu.py:245 +#, fuzzy +msgctxt "submenu title" +msgid "&Pitch" +msgstr "&Dźwięki" + +#: frescobaldi_app/menu.py:259 +#, fuzzy +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "&Rytm" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "" + +#: frescobaldi_app/musicpreview.py:113 +#, fuzzy +msgid "Document:" +msgstr "&Dokument " + +#: frescobaldi_app/musicpreview.py:195 +#, fuzzy +msgid "&Print" +msgstr "Drukuj" + +#: frescobaldi_app/musicpreview.py:196 +#, fuzzy +msgid "Music Preview" +msgstr "Podgląd PDF" + +#: frescobaldi_app/popplerdummy.py:42 +#, fuzzy +msgid "Could not load the {name} module." +msgstr "Nie można wczytać %1" + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" + +#: frescobaldi_app/popplerprint.py:61 +#, fuzzy +msgid "PDF Document" +msgstr "&Dokument " + +#: frescobaldi_app/popplerprint.py:69 +#, fuzzy +msgid "Print {filename}" +msgstr "Drukuj 1 plik " + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +#, fuzzy +msgid "Printing Error" +msgstr "Błąd wewnętrzny " + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +#, fuzzy +msgid "Could not send the document to the printer." +msgstr "Nie można odczytać z tego przebiegu LilyPonda." + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "" + +#: frescobaldi_app/search.py:99 +#, fuzzy +msgid "Search:" +msgstr "Szukaj..." + +#: frescobaldi_app/search.py:100 +#, fuzzy +msgid "&Case" +msgstr "Pauza" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "" + +#: frescobaldi_app/search.py:104 +#, fuzzy +msgid "The total number of matches" +msgstr "Liczba strof." + +#: frescobaldi_app/search.py:105 +#, fuzzy +msgid "Close" +msgstr "Kompozytor" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "" + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "" + +#: frescobaldi_app/search.py:110 +#, fuzzy +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "Transponuje wszystkie nuty w danym dokumencie, lub jego fragmencie." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "" + +#: frescobaldi_app/viewmanager.py:91 +#, fuzzy +msgid "&Close View" +msgstr "&Widok narzędzi" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:444 +#, fuzzy +msgid "Close &Other Views" +msgstr "Zamknij inne dokumenty" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:446 +#, fuzzy +msgid "&Previous View" +msgstr "Poprzedni" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +#, fuzzy +msgid "Special Characters" +msgstr "Znaki specjalne..." + +#: frescobaldi_app/charmap/__init__.py:41 +#, fuzzy +msgid "Special Charac&ters" +msgstr "Znaki specjalne..." + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +#, fuzzy +msgid "Documentation Browser" +msgstr "Dokumentacja LilyPonda" + +#: frescobaldi_app/docbrowser/__init__.py:47 +#, fuzzy +msgid "&Documentation Browser" +msgstr "Dokumentacja LilyPonda" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +#, fuzzy +msgid "Back" +msgstr "Klamra" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "Home" + +#: frescobaldi_app/docbrowser/__init__.py:84 +#, fuzzy +msgid "&LilyPond Documentation" +msgstr "Dokumentacja LilyPonda:" + +#: frescobaldi_app/docbrowser/__init__.py:85 +#, fuzzy +msgid "&Contextual LilyPond Help" +msgstr "&Pomoc LilyPond" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Szukaj..." + +#: frescobaldi_app/docbrowser/browser.py:136 +#, fuzzy +msgid "(local)" +msgstr "Głos" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +#, fuzzy +msgid "LilyPond Source" +msgstr "LilyPond Log" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +#, fuzzy +msgid "Documents" +msgstr "&Dokument " + +#: frescobaldi_app/doclist/__init__.py:40 +#, fuzzy +msgid "Docum&ents" +msgstr "&Dokument " + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:119 +#, fuzzy +msgid "LilyPond Version:" +msgstr "Domyślna wersja LilyPonda." + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:121 +#, fuzzy +msgid "Resolution:" +msgstr "Wersja:" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "Uruchom LilyPonda w trybie podglądu (z funkcją Point and Click)" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "Uruchom LilyPonda z wyświetlaniem szczegółów" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +#, fuzzy +msgid "Delete intermediate output files" +msgstr "Pozwól, by LilyPond usuwał wynikowe pliki pośrednie" + +#: frescobaldi_app/engrave/custom.py:126 +#, fuzzy +msgid "Command line:" +msgstr "Polecenie" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "Uruchom LilyPonda" + +#: frescobaldi_app/engrave/custom.py:149 +#, fuzzy +msgid "LilyPond {version}" +msgstr "Domyślna wersja LilyPonda." + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:218 +#, fuzzy +msgid "The LilyPond executable" +msgstr "Ustawienia LilyPonda " + +#: frescobaldi_app/engrave/custom.py:219 +#, fuzzy +msgid "All the include paths" +msgstr "Ścieżka LilyPonda:" + +#: frescobaldi_app/engrave/custom.py:220 +#, fuzzy +msgid "The filename of the document" +msgstr "S&ynchronizuj Terminal z obecnym dokumentem" + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/result_menu.py:45 +#, fuzzy +msgid "Generated &Files" +msgstr "&Wygenerowane Pliki" + +#: frescobaldi_app/engrave/result_menu.py:66 +#, fuzzy +msgid "No files available" +msgstr "Niedostępne" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "" + +#: frescobaldi_app/help/browser.py:78 +#, fuzzy +msgid "Start" +msgstr "Zacznij od:" + +#: frescobaldi_app/help/browser.py:79 +#, fuzzy +msgid "Contents" +msgstr "Polecenie" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "" + +#: frescobaldi_app/help/contents.py:46 +#, fuzzy +msgid "Frescobaldi Manual" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "" + +#: frescobaldi_app/help/contents.py:88 +#, fuzzy +msgid "Introduction" +msgstr "Wyciąg fortepianowy:" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "Ustawienia LilyPonda " + +#: frescobaldi_app/help/contents.py:142 +#, fuzzy +msgctxt "menu title" +msgid "View" +msgstr "Graj/Oglądaj" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "" + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:228 +#, fuzzy +msgid "Other Tools" +msgstr "&Ekstra narzędzia" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:252 +#, fuzzy +msgid "About Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "" + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:321 +#, fuzzy +msgid "History of Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "" + +#: frescobaldi_app/help/contents.py:377 +#, fuzzy +msgid "Edit" +msgstr "Drukuj..." + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:427 +#, fuzzy +msgid "Document variables" +msgstr "Karty dokumentów" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "" + +#: frescobaldi_app/help/contents.py:444 +#, fuzzy +msgid "mode" +msgstr "Usuń laseczki nut" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" + +#: frescobaldi_app/help/contents.py:448 +#, fuzzy +msgid "filename" +msgstr "Drukuj 1 plik " + +#: frescobaldi_app/help/contents.py:449 +#, fuzzy +msgid "Compiles another LilyPond document instead of the current." +msgstr "Nie można odczytać z tego przebiegu LilyPonda." + +#: frescobaldi_app/help/contents.py:450 +#, fuzzy +msgid "encoding" +msgstr "Używane kodowanie" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "" + +#: frescobaldi_app/help/contents.py:452 +#, fuzzy +msgid "version" +msgstr "Wersja" + +#: frescobaldi_app/help/contents.py:453 +#, fuzzy +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "Wersja LilyPond jakiej użyjesz dla tego dokumentu." + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +#, fuzzy +msgid "number" +msgstr "Nazwa" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "" + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "" + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "" + +#: frescobaldi_app/help/contents.py:479 +#, fuzzy +msgid "Table of Contents" +msgstr "Spis treści" + +#: frescobaldi_app/help/helpimpl.py:115 +#, fuzzy +msgid "Up:" +msgstr "Do góry" + +#: frescobaldi_app/help/helpimpl.py:130 +#, fuzzy +msgid "Next:" +msgstr "Następny" + +#: frescobaldi_app/help/helpimpl.py:133 +#, fuzzy +msgid "See also:" +msgstr "Zaznacz wszystko" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "LilyPond Log" + +#: frescobaldi_app/logtool/__init__.py:51 +#, fuzzy +msgid "LilyPond &Log" +msgstr "LilyPond Log" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Kliknij by rozpocząć edycję pliku" + +#: frescobaldi_app/miditool/__init__.py:51 +#, fuzzy +msgid "MIDI" +msgstr "Graj MIDI" + +#: frescobaldi_app/miditool/__init__.py:52 +#, fuzzy +msgid "MIDI &Player" +msgstr "Odtwarzacz MIDI" + +#: frescobaldi_app/miditool/__init__.py:97 +#, fuzzy +msgctxt "midi player" +msgid "Pause" +msgstr "Pauza" + +#: frescobaldi_app/miditool/__init__.py:98 +#, fuzzy +msgctxt "midi player" +msgid "Play" +msgstr "Graj %1" + +#: frescobaldi_app/miditool/__init__.py:99 +#, fuzzy +msgctxt "midi player" +msgid "Stop" +msgstr "Krok" + +#: frescobaldi_app/miditool/__init__.py:100 +#, fuzzy +msgctxt "midi player" +msgid "Restart" +msgstr "Powtórz początek" + +#: frescobaldi_app/miditool/widget.py:102 +#, fuzzy +msgid "Tempo" +msgstr "Tempo:" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:191 +#, fuzzy +msgid "Select Music View Document" +msgstr "&Źródłowy dokument" + +#: frescobaldi_app/musicview/__init__.py:192 +#, fuzzy +msgid "&Print Music..." +msgstr "Drukuj muzykę...." + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:198 +#, fuzzy +msgid "Fit &Page" +msgstr "Pierwsza strona" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:339 +#, fuzzy +msgid "Choose the PDF document to display." +msgstr "Zamknij inne dokumenty" + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:401 +#, fuzzy +msgid "Fit Page" +msgstr "Pierwsza strona" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "" + +#: frescobaldi_app/musicview/image.py:129 +#, fuzzy +msgid "Antialias" +msgstr "Włoski" + +#: frescobaldi_app/musicview/image.py:130 +#, fuzzy +msgid "Drag" +msgstr "Dorycka" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "" + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "" + +#: frescobaldi_app/musicview/image.py:133 +#, fuzzy +msgid "&Save As..." +msgstr "Zapisz PDF jako..." + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" + +#: frescobaldi_app/musicview/image.py:167 +#, fuzzy +msgid "Image from {filename}" +msgstr "Drukuj 1 plik " + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "" + +#: frescobaldi_app/musicview/image.py:214 +#, fuzzy +msgid "Could not save the image." +msgstr "Nie można wczytać %1" + +#: frescobaldi_app/pitch/__init__.py:99 +#, fuzzy +msgid "Pitch Name &Language" +msgstr "Język nazw dźwięków" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" +"Zmień języku używany przez LilyPonda dla nazw dźwięków dla tego dokumentu, " +"lub w danym zaznaczeniu." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "Konwertuj Relatywne do &Absolutnych" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" +"Konwertuje nuty w danym dokumencie lub fragmencie z wysokości relatywnych do " +"absolutnych." + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "Konwertuj Absolutne do &Relatywnych" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "" +"Zmienia nuty w danym dokumencie, lub fragmencie z zapisu absolutnego na " +"relatywny." + +#: frescobaldi_app/pitch/__init__.py:111 +#, fuzzy +msgid "&Transpose..." +msgstr "Transponuj" + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "Transponuje wszystkie nuty w danym dokumencie, lub jego fragmencie." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Język nazw dźwięków" + +#: frescobaldi_app/pitch/pitch.py:82 +#, fuzzy +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"Przetłumaczenie nie powiodło się.\n" +"\n" +"Muzyka zawiera ćwierćtonowe znaki chromatyczne, które nie są dostępne w tym " +"języku \"%1\"." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"Język nazw dźwięków w zaznaczonym obszarze został zaktualizowany, musisz " +"jednak ręcznie dodać do swojego dokumentu następujące polecenie: " + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "(dla LilyPonda poniżej 2.14) lub" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "(dla Lilyponda 2.14 lub wyższego)." + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "Transponuj" + +#: frescobaldi_app/pitch/pitch.py:399 +#, fuzzy +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" +"Wpisane wysokości dźwięków są niezrozumiałe.\n" +"\n" +"Proszę upewnij się, że używasz nazw dźwięków w języku \"%1\". " + +#: frescobaldi_app/pitch/pitch.py:581 +#, fuzzy +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"Nie można wykonać żądanej transpozycji.\n" +"\n" +"Muzyka może zawierać ćwierćtonowe znaki chromatyczne, które nie są dostępne " +"języku \"%1\"." + +#: frescobaldi_app/pitch/pitch.py:712 +#, fuzzy +msgid "Pitch manipulation" +msgstr "Artykulacja" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:744 +#, fuzzy +msgctxt "submenu title" +msgid "Pitch" +msgstr "&Dźwięki" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "" + +#: frescobaldi_app/po/messages.py:44 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Zapisz" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "" + +#: frescobaldi_app/po/messages.py:46 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Kompozytor" + +#: frescobaldi_app/po/messages.py:47 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Otwórz %1" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "" + +#: frescobaldi_app/po/messages.py:50 +#, fuzzy +msgctxt "QFileDialog" +msgid "File" +msgstr "Tytuł" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "" + +#: frescobaldi_app/po/messages.py:52 +#, fuzzy +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Katalog główny:" + +#: frescobaldi_app/po/messages.py:53 +#, fuzzy +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Wszystkie pliki" + +#: frescobaldi_app/po/messages.py:55 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "Poniżej wpisz nuty dla perkusji." + +#: frescobaldi_app/po/messages.py:56 +#, fuzzy +msgctxt "QScrollBar" +msgid "Top" +msgstr "Wystukaj" + +#: frescobaldi_app/po/messages.py:57 +#, fuzzy +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Portato" + +#: frescobaldi_app/po/messages.py:58 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page up" +msgstr "Numery stron:" + +#: frescobaldi_app/po/messages.py:59 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page down" +msgstr "Numery stron:" + +#: frescobaldi_app/po/messages.py:60 +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "" + +#: frescobaldi_app/po/messages.py:61 +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "" + +#: frescobaldi_app/po/messages.py:62 +#, fuzzy +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Lewa pięta" + +#: frescobaldi_app/po/messages.py:63 +#, fuzzy +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Prawa pięta" + +#: frescobaldi_app/po/messages.py:64 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Flażolet" + +#: frescobaldi_app/po/messages.py:65 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Wklej rytm" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Ustawienia ogólne" + +#: frescobaldi_app/preferences/__init__.py:182 +#, fuzzy +msgid "MIDI Settings" +msgstr "Ustawienia" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +#, fuzzy +msgid "Helper Applications" +msgstr "Pomocne programy" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Ścieżki" + +#: frescobaldi_app/preferences/__init__.py:212 +#, fuzzy +msgid "LilyPond Documentation" +msgstr "Dokumentacja LilyPonda:" + +#: frescobaldi_app/preferences/__init__.py:222 +#, fuzzy +msgid "Keyboard Shortcuts" +msgstr "Konfiguruj skróty klawiszowe" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:242 +#, fuzzy +msgid "Tools" +msgstr "&Widok narzędzi" + +#: frescobaldi_app/preferences/documentation.py:64 +#, fuzzy +msgid "Paths to LilyPond Documentation" +msgstr "Dokumentacja LilyPonda:" + +#: frescobaldi_app/preferences/documentation.py:66 +#, fuzzy +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "" +"Wstaw tyle liter (S, A, T lub B), ile jest pięciolinii.\n" +"Zobacz \"Co to jest\", by uzyskać więcej informacji." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:111 +#, fuzzy +msgid "Preferred Language:" +msgstr "Język:" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "Domyślny" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:135 +#, fuzzy +msgid "Please enter a local path or a URL:" +msgstr "Proszę wpisać nazwę sesji." + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:124 +#, fuzzy +msgid "Default Styles" +msgstr "Domyślny" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +#, fuzzy +msgid "Text" +msgstr "Następny" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:363 +#, fuzzy +msgid "Italic" +msgstr "Włoski" + +#: frescobaldi_app/preferences/fontscolors.py:364 +#, fuzzy +msgid "Underline" +msgstr "Użyj wypełniających linii" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +#, fuzzy +msgid "Selected Text" +msgstr "Zaznacz wszystko" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +#, fuzzy +msgid "Marked Line" +msgstr "Kreski taktowe" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +#, fuzzy +msgid "Error Line" +msgstr "Kreski taktowe" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +#, fuzzy +msgid "Matching Character" +msgstr "Znaki specjalne" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +#, fuzzy +msgid "Preview Background" +msgstr "tryb podglądu" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +#, fuzzy +msgid "Keyword" +msgstr "Klawiatura" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +#, fuzzy +msgid "Function" +msgstr "Akcja:" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +#, fuzzy +msgid "Value" +msgstr "Głośność" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +#, fuzzy +msgid "String" +msgstr "Smyczki" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +#, fuzzy +msgid "Escape" +msgstr "Układ poziomy" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +#, fuzzy +msgid "Comment" +msgstr "Polecenie" + +#: frescobaldi_app/preferences/fontscolors.py:483 +#, fuzzy +msgid "Pitch" +msgstr "&Dźwięki" + +#: frescobaldi_app/preferences/fontscolors.py:484 +#, fuzzy +msgid "Octave" +msgstr "Zapisz" + +#: frescobaldi_app/preferences/fontscolors.py:485 +#, fuzzy +msgid "Duration" +msgstr "Dodaj kropkę" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +#, fuzzy +msgid "String Number" +msgstr "Drukuj numery stron" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "Łuk" + +#: frescobaldi_app/preferences/fontscolors.py:491 +#, fuzzy +msgid "Dynamic" +msgstr "Dynamika" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Artykulacja" + +#: frescobaldi_app/preferences/fontscolors.py:493 +#, fuzzy +msgid "Chord" +msgstr "Chór" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "Belka" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +#, fuzzy +msgid "Repeat" +msgstr "Powtórz koniec" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "Polecenie" + +#: frescobaldi_app/preferences/fontscolors.py:499 +#, fuzzy +msgid "Specifier" +msgstr "Specjalne" + +#: frescobaldi_app/preferences/fontscolors.py:500 +#, fuzzy +msgid "User Command" +msgstr "Polecenie" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +#, fuzzy +msgid "Markup" +msgstr "Harfa" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:503 +#, fuzzy +msgid "Lyric Text" +msgstr "Rozdziel tekst myślnikami" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:506 +msgid "Layout Object" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:507 +#, fuzzy +msgid "Property" +msgstr "Autor tekstu" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +#, fuzzy +msgid "Escaped Character" +msgstr "Znaki specjalne" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:517 +#, fuzzy +msgid "Tag" +msgstr "Wystukaj" + +#: frescobaldi_app/preferences/fontscolors.py:518 +#, fuzzy +msgid "LilyPond Tag" +msgstr "LilyPond Log" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:521 +#, fuzzy +msgid "Entity Reference" +msgstr "Słownik notacji" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:527 +#, fuzzy +msgid "Number" +msgstr "Nazwa" + +#: frescobaldi_app/preferences/fontscolors.py:528 +#, fuzzy +msgid "LilyPond Environment" +msgstr "Dokumentacja LilyPonda" + +#: frescobaldi_app/preferences/fontscolors.py:532 +#, fuzzy +msgid "Texinfo" +msgstr "Tenor" + +#: frescobaldi_app/preferences/fontscolors.py:534 +#, fuzzy +msgid "Block" +msgstr "Załaduj" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Język:" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Styl:" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "" +"Jaką sesję otworzyć, gdy Frescobaldi zostanie uruchomiony bez dodatkowych " +"argumentów" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "Startuj bez żadnej sesji" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "Startuj z ostatnią używaną sesją" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "Startuj z sesją:" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "Podczas zapisywania dokumentów" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "Zapamietaj pozycje kursora, zakładki, itd." + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Domyślna lokalizacja:" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "Domyślny folder dla Twoich dokumentów LilyPonda (do wyboru)." + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:71 +#, fuzzy +msgid "MIDI:" +msgstr "Graj MIDI" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:76 +#, fuzzy +msgid "File Manager:" +msgstr "Menadżer rozszerzeń" + +#: frescobaldi_app/preferences/helpers.py:77 +#, fuzzy +msgid "Shell:" +msgstr "Partytura:" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:81 +#, fuzzy +msgid "LilyPond versions to use" +msgstr "Używana wersja LilyPonda:" + +#: frescobaldi_app/preferences/lilypond.py:82 +#, fuzzy +msgid "Automatically choose LilyPond version from document" +msgstr "" +"Włącz automatyczny wybór wersji LilyPonda (wybór wersji użytej w danym " +"dokumencie)" + +#: frescobaldi_app/preferences/lilypond.py:84 +#, fuzzy +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" +"Tu możesz ustalić stałą wersję LilyPonda, używaną dla dokumentów w tej " +"sesji.\n" +"Zobacz Co to jest (Shift+F1), aby uzyskać więcej informacji." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:101 +#, fuzzy +msgid "See also {link}." +msgstr "Zaznacz wszystko" + +#: frescobaldi_app/preferences/lilypond.py:149 +#, fuzzy +msgid "Set as &Default" +msgstr "Ustaw jako domyślne" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "domyślny" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "Polecenie LilyPonda:" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "Nazwa lub pełna ścieżka do programu LilyPond." + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "Convert-ly" + +#: frescobaldi_app/preferences/lilypond.py:241 +#, fuzzy +msgid "LilyPond-book:" +msgstr "LilyPond-book:" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "Dołącz do automatycznego wyboru wersji" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "Uruchamianie LilyPonda" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:286 +#, fuzzy +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "Pozwól, by LilyPond usuwał wynikowe pliki pośrednie" + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "Ścieżka LilyPonda:" + +#: frescobaldi_app/preferences/midi.py:77 +#, fuzzy +msgid "MIDI Ports" +msgstr "Odtwarzacz MIDI" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" + +#: frescobaldi_app/preferences/midi.py:82 +#, fuzzy +msgid "Player output:" +msgstr "Wyjście MIDI:" + +#: frescobaldi_app/preferences/midi.py:84 +#, fuzzy +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" +"Wstaw tyle liter (S, A, T lub B), ile jest pięciolinii.\n" +"Zobacz \"Co to jest\", by uzyskać więcej informacji." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:135 +#, fuzzy +msgid "Close unused MIDI output" +msgstr "Generuj plik MIDI" + +#: frescobaldi_app/preferences/midi.py:137 +#, fuzzy +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" +"Wstaw tyle liter (S, A, T lub B), ile jest pięciolinii.\n" +"Zobacz \"Co to jest\", by uzyskać więcej informacji." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Skrót" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:125 +#, fuzzy +msgid "Other commands:" +msgstr "Polecenie wydruku:" + +#: frescobaldi_app/preferences/shortcuts.py:173 +#, fuzzy +msgid "&Edit Shortcut for \"{name}\"" +msgstr "Skrót" + +#: frescobaldi_app/preferences/shortcuts.py:178 +#, fuzzy +msgid "(no shortcut)" +msgstr "Skrót" + +#: frescobaldi_app/preferences/shortcuts.py:206 +#, fuzzy +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "Usuń laseczki z nut perkusyjnych" +msgstr[1] "Usuń laseczki z nut perkusyjnych" +msgstr[2] "Usuń laseczki z nut perkusyjnych" + +#: frescobaldi_app/preferences/shortcuts.py:304 +#, fuzzy +msgid "(default)" +msgstr "domyślny" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:142 +#, fuzzy +msgid "Magnifier Size:" +msgstr "Rozmiar papieru:" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "" + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:220 +#, fuzzy +msgid "Group documents by directory" +msgstr "Otwórz obecny folder" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Szybkie wstawianie" + +#: frescobaldi_app/quickinsert/__init__.py:48 +#, fuzzy +msgid "Quick &Insert" +msgstr "Szybkie wstawianie" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Pozwól na stenografowanie" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "Użyj skrótowej notacji dla artykulacji takich jak staccato" + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Artykulacja" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Różne rodzaje artykulacji i inne znaki." + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Akcent" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Marcato" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Staccatissimo" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Staccato" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Portato" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Tenuto" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Ozdobniki" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Tryl" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Mordent" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Mordent przekreślony" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Obiegnik" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Obiegnik odwrócony" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "Symbole" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Fermata" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Krótka fermata" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Długa fermata" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Bardzo długa fermata" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Segno" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Varcoda" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "Signumcongruetiae" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Inne" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Smyczek do góry" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Smyczek na dół" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "Otwarty (np.dęte)" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "Zakryty (np. dęte)" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Flażolet" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Kciuk" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Lewa pięta" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Prawa pięta" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "Lewy nos" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Prawy nos" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "Pół otwarty (np. hi-hat)" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "Kreski taktowe" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "Kreski taktowe, znaki oddechów, etc." + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Podwójna kreska taktowa" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "Końcowa kreska taktowa" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "Kropkowana kreska taktowa" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "Przerywana kreska taktowa" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Niewidzialna kreska taktowa" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "Powtórz początek" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "Powtórz obydwa" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "Powtórz koniec" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "Powtórz obydwa (stary)" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "Powtórz obydwa (klasyczny)" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "Bez kresek taktowych (apostrofy)" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "Pojedyncza kreska taktowa" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "Potrójna kreska taktowa" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "Podwójna kreska taktowa" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "Kreska taktowa o podwójnej szerokości" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "Kreska taktowe Segno" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "Znaki oddechów" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "Dymyślny znak oddechu" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "Znak oddechu - prosty" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "Caesura - łuk" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "Caesura - prosta" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#, fuzzy +msgid "Configure Keyboard Shortcut ({key})" +msgstr "Konfiguracja skrótów klawiszowych (%1)" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Brak" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "Dynamika" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "Symbole dynamiki." + +#: frescobaldi_app/quickinsert/dynamics.py:128 +#, fuzzy +msgid "Dynamic sign {name}" +msgstr "Oznaczenie dynamiki %1" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "Linie" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "Linia crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "Linia diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "Decrescendo" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "Łuki, linie, etc." + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "Arpeggia" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "Arpeggio ze strzałką w górę" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "Arpeggio ze strzałką na dół" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "Arpeggio z klamrą" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "Arpeggio w nawiasie" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "Glissanda" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "Glissando" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "Glissando przerywane" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "Glissando kropkowane" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "Glissando zygzak" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "Glissando tryl" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "Łuk frazowy" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Kierunek:" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Do góry" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Neutralnie" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Na dół" + +#: frescobaldi_app/quickinsert/widget.py:127 +#, fuzzy +msgid "The Quick Insert Panel" +msgstr "Szybkie wstawianie" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:146 +#, fuzzy +msgid "&Double durations" +msgstr "Zdubluj wartości" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Zdubluj wartości w danym fragmencie. " + +#: frescobaldi_app/rhythm/__init__.py:149 +#, fuzzy +msgid "&Halve durations" +msgstr "Zmniejsz wartości o połowę" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Zmniejsz wartości o połowę w danym fragmencie." + +#: frescobaldi_app/rhythm/__init__.py:152 +#, fuzzy +msgid "Do&t durations" +msgstr "Dodaj kropkę" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Dodaj kropkę do wszystkich wartości w danym fragmencie." + +#: frescobaldi_app/rhythm/__init__.py:155 +#, fuzzy +msgid "&Undot durations" +msgstr "Odejmij kropkę" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Usuń po jednej kropce z wszystkich nut w danym fragmencie." + +#: frescobaldi_app/rhythm/__init__.py:158 +#, fuzzy +msgid "Remove &scaling" +msgstr "Usuń skalowanie" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "Usuń skalowanie (*n/m) z wartości rytmicznych w tym fragmencie." + +#: frescobaldi_app/rhythm/__init__.py:161 +#, fuzzy +msgid "&Remove durations" +msgstr "Wyczyść wartości" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "Wyczyść wszystkie wartości w danym fragmencie." + +#: frescobaldi_app/rhythm/__init__.py:164 +#, fuzzy +msgid "Make &implicit" +msgstr "Ukryj wartości rytmiczne" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "Ukryj symbole wartości rytmicznych (ukryj powtarzające się wartości)." + +#: frescobaldi_app/rhythm/__init__.py:167 +#, fuzzy +msgid "Make implicit (per &line)" +msgstr "Ukryj wartości (w linii)" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" +"Ukryj symbole wartości rytmicznych (usuń powtarzające się wartości), z " +"wyjątkiem pierwszej w każdej z linii." + +#: frescobaldi_app/rhythm/__init__.py:171 +#, fuzzy +msgid "Make &explicit" +msgstr "Pokaż wartości rytmiczne" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" +"Pokaż wszystkie wartości rytmiczne (pokazuje wartość rytmiczną przy każdej " +"nuty, nawet jeśli jest taka sama jak poprzednia)." + +#: frescobaldi_app/rhythm/__init__.py:175 +#, fuzzy +msgid "&Apply rhythm..." +msgstr "Dodaj rytm..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Dodaj podany rytm do zaznaczonego fragmentu muzyki." + +#: frescobaldi_app/rhythm/__init__.py:178 +#, fuzzy +msgid "&Copy rhythm" +msgstr "Kopiuj rytm" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Kopiuj rytm z zaznaczonego fragmentu muzyki." + +#: frescobaldi_app/rhythm/__init__.py:181 +#, fuzzy +msgid "&Paste rhythm" +msgstr "Wklej rytm" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Wklej rytm do wybranego fragmentu muzyki." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Dodaj rytm" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Wprowadź rytm:" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:279 +#, fuzzy +msgctxt "submenu title" +msgid "Rhythm" +msgstr "&Rytm" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Stwórz Nową Partyturę..." + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "Poniżej wpisz nuty." + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Usuń domyślną stopkę LilyPonda" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Kreator partytury" + +#: frescobaldi_app/scorewiz/dialog.py:80 +#, fuzzy +msgid "Clear" +msgstr "Czelesta" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:83 +#, fuzzy +msgid "Preview" +msgstr "Podgląd PDF" + +#: frescobaldi_app/scorewiz/dialog.py:130 +#, fuzzy +msgid "Score Preview" +msgstr "Podgląd PDF" + +#: frescobaldi_app/scorewiz/dialog.py:164 +#, fuzzy +msgid "&Titles and Headers" +msgstr "Tytuły i nagłówki" + +#: frescobaldi_app/scorewiz/dialog.py:173 +#, fuzzy +msgid "&Parts" +msgstr "Głosy" + +#: frescobaldi_app/scorewiz/dialog.py:182 +#, fuzzy +msgid "&Score settings" +msgstr "Ustawienia partytury" + +#: frescobaldi_app/scorewiz/dialog.py:191 +#, fuzzy +msgid "The Score Wizard" +msgstr "Kreator partytury" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Kliknij by wprowadzić wartość." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "stopka pierwszej strony" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "stopka ostatniej strony" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "Dedykacja" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Tytuł" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Podtytuł" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "Podpodtytuł" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Instrument" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Kompozytor" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Aranżer" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Autor tekstu" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Licznik" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Utwór" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Copyright" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Przypis" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Dostępne głosy:" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Partytura:" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +#, fuzzy +msgid "&Remove" +msgstr "Usuń laseczki nut" + +#: frescobaldi_app/scorewiz/score.py:104 +#, fuzzy +msgid "Move up" +msgstr "Skocz do" + +#: frescobaldi_app/scorewiz/score.py:105 +#, fuzzy +msgid "Move down" +msgstr "Skocz do" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Tonacja:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Metrum:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Przedtakt:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Oznaczenie metronomiczne:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Oznaczenie tempa:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Dur" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Moll" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "Jońska" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Dorycka" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Frygijska" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Lidyjska" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Miksolidyjska" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Eolska" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Lokryjska" + +#: frescobaldi_app/scorewiz/settings.py:73 +#, fuzzy +msgid "Score properties" +msgstr "Ustawienia partytury" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Ustawienia ogólne" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Użyj cudzysłowu drukarskiego" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "Zamień normalny cudzysłów na cudzysłów drukarski." + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Usuń domyślną stopkę" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Ukryj domyślną stopkę dodawaną przez LilyPond." + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Usuń numery taktów" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "Ukryj numery taktów na początku każdego systemu." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "Generuj plik MIDI" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "Generuj plik MIDI oraz PDF." + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Pokaż oznaczenie metronomiczne" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"Jeśli zaznaczysz, oznaczenie metronomiczne pojawi się na początkupartytury. " +"Użyte zostanie także w pliku MIDI." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Rozmiar papieru:" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Układ poziomy" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Pełna nazwa" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Skrót" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Nazwy instrumentów" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "Pierwszy system:" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Inne systemy:" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "Użyj pełnej nazwy lub skrótu na początku pierwszego systemu. " + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "" +"Użyj skrótów, pełnych nazw lub nie używaj nazw przed kolejnymi systemami." + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "Język dla nazw instrumentów." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Język dla nazw dźwięków:" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "Wybierz język,którego Lilypond użyje dla zapisywania wysokości" + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Wersja:" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "Wersja LilyPond jakiej użyjesz dla tego dokumentu." + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "Brak dostępnych ustawień." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Ustal ilość oddzielnych głosów dla każdej pięciolinii. " + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "Jest to szczególnie użyteczne w pisaniu muzyki polifonicznej, np. fug." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Prawa ręka:" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Lewa ręka:" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Styl akordów:" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Wykres progów gitary" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Pokaż tabulaturowy wykres progów gitary pod nazwami akordów (LilyPond 2.12 i " +"wyższy)." + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "Poniżej wpisz akordy." + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "Niemiecki" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "Pół-Niemiecki" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "Włoski" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "Francuski" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Róg F" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "R. F" + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Trąbka C" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +#, fuzzy +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Tr.C" + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Trąbka Bb" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +#, fuzzy +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Tr.Bb" + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Puzon" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Puz." + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Tuba basowa" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "Tb.b." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Dęte blaszane" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +#, fuzzy +msgid "Staff Group" +msgstr "Rodzaj pięciolinii:" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "Klamra" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "Klamra" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +#, fuzzy +msgid "Square" +msgstr "Klamra kwadratowa" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "Typ:" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +#, fuzzy +msgid "Connect Barlines" +msgstr "Łącz kreski taktowe" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +#, fuzzy +msgid "Score" +msgstr "Partytura:" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +#, fuzzy +msgid "Piece:" +msgstr "Utwór" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +#, fuzzy +msgid "Opus:" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +#, fuzzy +msgid "Containers" +msgstr "Łącz kreski taktowe" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Fortepian" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "Pf." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Klawesyn" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Klws." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Klawikord" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Klwk." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Organy" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Org." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Pedał:" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Ustaw na zero, aby zupełnie wyłączyć pedał. " + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Czelesta" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Czel." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Instrumenty klawiszowe" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Kotły" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Ktł." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Ksylofon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Ksf." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Marimba" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "Górna pięciolinia:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "Dolna pięciolinia:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Wibrafon" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Wibr." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Dzwony rurowe" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Dzw.r." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Dzwonki orkiestrowe" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Dzw.o." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +#, fuzzy +msgid "Carillon" +msgstr "Klarnet" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +#, fuzzy +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +#, fuzzy +msgid "Manual staff:" +msgstr "Normalna pięciolinia" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +#, fuzzy +msgid "Pedal staff:" +msgstr "Normalna pięciolinia" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Perkusja" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Perk." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Głosy:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Usuń laseczki nut" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Usuń laseczki z nut perkusyjnych" + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "Poniżej wpisz nuty dla perkusji." + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "zachowaj odstęp." + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Perkusja (domyślnie 5 linii)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Zapis timbalesów (2 linie)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Zapis congi (2 linie)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Zapis bongosów (2 linie)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Zapis perkusyjny (1 linia)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Perkusja" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Rodzaj pięciolinii:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Strój:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Normalna pięciolinia" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Tabulatura" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Obydwa" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Mandolina" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mdl." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Strój mandoliny" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Banjo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Bj." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "Strój G (aDGHD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "Strój C (gCGHD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "Strój modalny(gDGCD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "Strój D (aDF#AD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "Strój d-moll (aDFAD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Cztery struny (zamiast pięciu)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Gitara " + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +#, fuzzy +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "Git." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Strój gitarowy" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "Strój G" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Gitara jazzowa" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "Git.jazz." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Bas" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "Strój basu" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Bas elektryczny" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "E.b." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Harfa" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Hf." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Strunowe szarpane" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Nazwy akordów" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Bas cyfrowany" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "Użyj wypełniających linii" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "Poniżej wpisz cyfowanie basu." + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "Pięciolinia:" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Specjalne" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Skrzypce" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Skrz." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Altówka" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "Alt." + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Wiolonczela" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Wiol." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "Kontrabas" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Kb." + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +msgid "Basso Continuo" +msgstr "Basso Continuo" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "B.c." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Smyczki" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Zwrotki:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Liczba strof." + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Ambitus" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "Pokaż skalę głosu na początku pięciolinii." + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "Poniżej wpisz tekst." + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Sopran" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +msgid "Mezzo-soprano" +msgstr "Mezzo-sopran" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "Ms." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Alt" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Tenor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Prymka" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"Prymka zawiera pięciolinię z akordami powyżej oraz tekstem poniżej.Drugi " +"system jest opcjonalny." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Dodaj pięciolinię z akompaniamentem" + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" +"Dodaje pięciolinię z akompaniamentem, a także głos na górnej pięciolinii." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Chór" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Wybierz głosy chóralne. Użyj liter S, A, T, B.Myślnik oznacza nowy system." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "Porada: Dla chóru podwójnego użyj dwóch systemów chóralnych." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Prowadzenie głosów:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "Słowa:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "Wyciąg fortepianowy:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "Dodaje automatycznie wygenerowany wyciąg fortepianowy." + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "Pliki MIDI do ćwiczeń" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" +"Tworzy pliki MIDI do ćwiczeń dla każdego głosu, nawet jeśli plik MIDI dla " +"partytury nie został wygenerowany." + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "Ch." + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "Pliki MIDI do ćwiczeń: " + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Ten sam tekst do wszystkich głosów" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "Grupa tych samych słów jest umieszczona pomiędzy wszystkimi systemami." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Ten sam tekst dla każdego głosu" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "" +"Każdy głos ma własne słowa, używając tego samego tekstu jak pozostałe głosy." + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Każdy głos z innym tekstem" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Każdy głos dostaje inny fragment tekstu." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "Rozmieść zwrotki" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "Zwrotki są umieszczane pomiędzy systemami." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "Głos" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Flet" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Pikulina" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Pik." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Flet basowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Fl.b." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Obój" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Ob." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +msgid "Oboe d'amore" +msgstr "Obój miłosny" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Ob.mił." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +msgid "English horn" +msgstr "Rożek angielski" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "R.ang." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Fagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Fg." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Kontrafagot" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "Kfg." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Klarnet" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Kl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Saksofon sopranino" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "Sx.Sno" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Saksofon sopranowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "S.Sx" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Saksofon altowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "Sx.a." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Saksofon tenorowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "Sx.t." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Saksofon barytonowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "Sx.b" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "Saksofon basowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "Sx.bs" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Flet prosty sopranowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "Fl.s." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Flet prosty altowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "Fl.a." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Flet prosty tenorowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "Fl.t." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Flet prosty basowy" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "Fl.b." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Dęte drewniane" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "Zarządzaj sesjami" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "Nazwa:" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "Zawsze zapisuj listę dokumentów w tej sesji" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "Katalog główny:" + +#: frescobaldi_app/sessions/dialog.py:133 +#, fuzzy +msgid "Edit session: {name}" +msgstr "Edytuj sesję: %1" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "Edytuj nową sesję" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "Proszę wpisać nazwę sesji." + +#: frescobaldi_app/sessions/dialog.py:174 +#, fuzzy +msgid "Please do not use the name '{name}'." +msgstr "Proszę nie używać nazwy '%1'." + +#: frescobaldi_app/sessions/dialog.py:180 +#, fuzzy +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" +"Inna sesja o nazwie %1 już istnieje.\n" +"\n" +"Czy chcesz ją nadpisać?" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "" + +#: frescobaldi_app/sessions/manager.py:127 +#, fuzzy +msgctxt "New Session" +msgid "&New..." +msgstr "Nowa..." + +#: frescobaldi_app/sessions/manager.py:129 +#, fuzzy +msgid "&Manage..." +msgstr "Zarządzaj sesjami..." + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "Brak sesji" + +#: frescobaldi_app/sessions/menu.py:55 +#, fuzzy +msgctxt "menu title" +msgid "&Session" +msgstr "&Sesja początkowa" + +#: frescobaldi_app/snippet/builtin.py:38 +#, fuzzy +msgid "Blank Line" +msgstr "Kreski taktowe" + +#: frescobaldi_app/snippet/builtin.py:44 +#, fuzzy +msgid "Single Typographical Quotes" +msgstr "Użyj cudzysłowu drukarskiego" + +#: frescobaldi_app/snippet/builtin.py:49 +#, fuzzy +msgid "Double Typographical Quotes" +msgstr "Użyj cudzysłowu drukarskiego" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:125 +#, fuzzy +msgid "Modern 2/2 Time Signature" +msgstr "Metrum:" + +#: frescobaldi_app/snippet/builtin.py:131 +#, fuzzy +msgid "Modern 4/4 Time Signature" +msgstr "Metrum:" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:148 +#, fuzzy +msgid "LilyPond Version" +msgstr "Domyślna wersja LilyPonda." + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:166 +#, fuzzy +msgid "Upper case selection" +msgstr "Wybór języka" + +#: frescobaldi_app/snippet/builtin.py:172 +#, fuzzy +msgid "Lower case selection" +msgstr "Wybór języka" + +#: frescobaldi_app/snippet/builtin.py:178 +#, fuzzy +msgid "Title case selection" +msgstr "Wybór języka" + +#: frescobaldi_app/snippet/builtin.py:189 +#, fuzzy +msgid "Markup lines" +msgstr "Kreski taktowe" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:202 +#, fuzzy +msgid "Tagline with date and LilyPond version" +msgstr "Nie można ustalić wersji LilyPonda." + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:227 +#, fuzzy +msgid "No Tagline" +msgstr "Przypis" + +#: frescobaldi_app/snippet/builtin.py:235 +#, fuzzy +msgid "No Barnumbers" +msgstr "Usuń numery taktów" + +#: frescobaldi_app/snippet/builtin.py:245 +#, fuzzy +msgid "Midi Tempo" +msgstr "Tempo:" + +#: frescobaldi_app/snippet/builtin.py:255 +#, fuzzy +msgid "Staff Size" +msgstr "Rozmiar pięciolinii:" + +#: frescobaldi_app/snippet/builtin.py:310 +#, fuzzy +msgid "A5 Paper" +msgstr "Papier" + +#: frescobaldi_app/snippet/builtin.py:318 +#, fuzzy +msgid "Document Fonts..." +msgstr "&Dokument " + +#: frescobaldi_app/snippet/builtin.py:346 +#, fuzzy +msgid "Last note or chord" +msgstr "Powtórz ostatnią nutę lub akord." + +#: frescobaldi_app/snippet/builtin.py:427 +#, fuzzy +msgid "Color" +msgstr "Kompozytor" + +#: frescobaldi_app/snippet/builtin.py:464 +#, fuzzy +msgid "Basic Leadsheet" +msgstr "Prymka" + +#: frescobaldi_app/snippet/builtin.py:508 +#, fuzzy +msgid "Choir Hymn" +msgstr "Chór" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:119 +#, fuzzy +msgid "Title:" +msgstr "Tytuł" + +#: frescobaldi_app/snippet/edit.py:120 +#, fuzzy +msgid "Shortcut:" +msgstr "Skrót" + +#: frescobaldi_app/snippet/edit.py:131 +#, fuzzy +msgid "Click to change the keyboard shortcut." +msgstr "Konfiguruj skróty klawiszowe" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:218 +#, fuzzy +msgctxt "menu title" +msgid "File" +msgstr "Tytuł" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:80 +#, fuzzy +msgid "The version of the default LilyPond program." +msgstr "Nazwa lub pełna ścieżka do programu LilyPond." + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:96 +#, fuzzy +msgid "The name of the current document." +msgstr "S&ynchronizuj Terminal z obecnym dokumentem" + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +#, fuzzy +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Usuń pauzy" + +#: frescobaldi_app/snippet/import_export.py:119 +#, fuzzy +msgid "New Snippets" +msgstr "Usuń pauzy" + +#: frescobaldi_app/snippet/import_export.py:120 +#, fuzzy +msgid "Updated Snippets" +msgstr "Usuń pauzy" + +#: frescobaldi_app/snippet/import_export.py:121 +#, fuzzy +msgid "Unchanged Snippets" +msgstr "Usuń pauzy" + +#: frescobaldi_app/snippet/import_export.py:183 +#, fuzzy +msgid "Import Keyboard Shortcuts" +msgstr "Konfiguruj skróty klawiszowe" + +#: frescobaldi_app/snippet/import_export.py:188 +#, fuzzy +msgid "Choose which snippets you want to import:" +msgstr "Proszę wybrać pliki do drukowania:" + +#: frescobaldi_app/snippet/import_export.py:190 +#, fuzzy +msgid "There are no new or updated snippets in the file." +msgstr "Brak plików do wysłania przez e-mail." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Wstaw " + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "Nazwa" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Opis" + +#: frescobaldi_app/snippet/template.py:33 +#, fuzzy +msgid "Save as Template" +msgstr "Ilość pięciolinii na stronie:" + +#: frescobaldi_app/snippet/template.py:34 +#, fuzzy +msgid "Please enter a template name:" +msgstr "Proszę wpisać nazwę sesji." + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +#, fuzzy +msgid "Snippets" +msgstr "Usuń pauzy" + +#: frescobaldi_app/snippet/tool.py:54 +#, fuzzy +msgid "&Snippets" +msgstr "Usuń pauzy" + +#: frescobaldi_app/snippet/tool.py:79 +#, fuzzy +msgid "Save as Template..." +msgstr "Zapisz PDF jako..." + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +#, fuzzy +msgid "&Edit..." +msgstr "Drukuj..." + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:179 +#, fuzzy +msgid "Remove the selected snippets." +msgstr "Powtórz zaznaczony fragment muzyki" + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:181 +#, fuzzy +msgid "Apply the current snippet." +msgstr "Umieść kursor w tym miejscu." + +#: frescobaldi_app/snippet/widget.py:182 +#, fuzzy +msgid "&Import..." +msgstr "Drukuj..." + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:184 +#, fuzzy +msgid "E&xport..." +msgstr "Drukuj..." + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:188 +#, fuzzy +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" +"Wstaw tyle liter (S, A, T lub B), ile jest pięciolinii.\n" +"Zobacz \"Co to jest\", by uzyskać więcej informacji." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +#, fuzzy +msgid "XML Files" +msgstr "Wszystkie pliki" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:400 +#, fuzzy +msgctxt "menu title" +msgid "Insert" +msgstr "&Wstaw " + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +#, fuzzy +msgid "Input" +msgstr "Wejście MIDI:" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +#, fuzzy +msgid "Scheme:" +msgstr "Partytura:" + +#: frescobaldi_app/widgets/schemeselector.py:63 +#, fuzzy +msgctxt "New Scheme" +msgid "&New..." +msgstr "Nowa..." + +#: frescobaldi_app/widgets/schemeselector.py:93 +#, fuzzy +msgid "Please enter a name for the new scheme:" +msgstr "" +"Proszę wybrać nazwę dla zmniennej przyporządkowanej do wybranego tekstu:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +#, fuzzy +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Skrót" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +#, fuzzy +msgid "&No shortcut" +msgstr "Skrót" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +#, fuzzy +msgid "Use a &custom shortcut:" +msgstr "Użyj wersji użytkownika:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +#, fuzzy +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "Brak" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Kliknij na ten przycisk by ustalić tempo." + +#: frescobaldi_app/widgets/urlrequester.py:75 +#, fuzzy +msgid "Open file dialog" +msgstr "Otwórz plik" + +#: frescobaldi_app/widgets/urlrequester.py:119 +#, fuzzy +msgid "Select a directory" +msgstr "Domyślna lokalizacja:" + +#: frescobaldi_app/widgets/urlrequester.py:121 +#, fuzzy +msgid "Select a file" +msgstr "Zaznacz wszystko" + +#, fuzzy +#~ msgid "Edit..." +#~ msgstr "Drukuj..." + +#, fuzzy +#~ msgid "Remove" +#~ msgstr "Usuń laseczki nut" + +#~ msgid "Copyright (c) 2008-2010, Wilbert Berendsen" +#~ msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your name" +#~ msgstr "Piotr Komorowski" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "i18n@frescobaldi.org" +#~ msgstr "i18n@frescobaldi.org" + +#~ msgid "Session to start" +#~ msgstr "Sesja początkowa" + +#~ msgid "Start a new instance" +#~ msgstr "Rozpocznij nowy przykład" + +#~ msgid "Try to use smart line and column numbers" +#~ msgstr "Spróbuj użyć linii i numerów kolumn" + +#~ msgid "LilyPond files to open, may also be textedit URLs" +#~ msgstr "Plik LilyPonda, lub tekstowy URL do otwarcia " + +#~ msgid "Left Sidebar" +#~ msgstr "Lewy panel" + +#~ msgid "Right Sidebar" +#~ msgstr "Prawy panel" + +#~ msgid "Top Sidebar" +#~ msgstr "Górny panel" + +#~ msgid "Bottom Sidebar" +#~ msgstr "Dolny panel" + +#~ msgid "Show Path" +#~ msgstr "Pokaż ścieżkę" + +#~ msgid "Show Document Tabs" +#~ msgstr "Pokaż zakładki dokumentów" + +#~ msgid "" +#~ "Could not find the XMLGUI container \"%1\".\n" +#~ "\n" +#~ "Probably the local ui.rc file contains errors. It is recommended to " +#~ "delete this file because elements in the user interface will be missing. " +#~ "This is the full path of the file:\n" +#~ "\n" +#~ "%2\n" +#~ msgstr "" +#~ "Nie można odnaleźć kontenera XMLGUI \"%1\".\n" +#~ "\n" +#~ "Prawdopodobnie lokalny plik ui.rc zawiera błędy. Zalecane jest usunięcie " +#~ "tego pliku, ponieważ w przeciwnym przypadku elementy interfejsu " +#~ "użytkownika (ui) zostaną utracone. Oto pełna ścieżka do tego pliku:\n" +#~ "\n" +#~ "%2\n" + +#~ msgid "Please select some text first." +#~ msgstr "Proszę najpierw wybrać tekst" + +#~ msgid "Line: %1 Col: %2" +#~ msgstr "Linia: %1 Kol: %2" + +#~ msgid "BLOCK" +#~ msgstr "Blok" + +#~ msgid "Block selection mode" +#~ msgstr "Tryb wyboru blokowego" + +#~ msgid "LINE" +#~ msgstr "Linia" + +#~ msgid "Line selection mode" +#~ msgstr "Tryb wyboru liniowego" + +#~ msgid "Right-click for tab options" +#~ msgstr "Prawy klik dla opcji zakładek" + +#~ msgid "Please install %1" +#~ msgstr "Proszę zainstalować %1" + +#~ msgid "Press the button to configure the keyboard shortcut for:" +#~ msgstr "Wciśnij klawisz, aby ustalić skrót dla:" + +#~ msgid "Session" +#~ msgstr "Sesja " + +#~ msgid "Properties of this session" +#~ msgstr "Właściwości tej sesji" + +#~ msgid "Please do not use the ampersand (&) character in a session name." +#~ msgstr "Proszę nie używać znaku & w nazwie sesji." + +#~ msgid "Open %1 in external viewer" +#~ msgstr "Otwórz %1 w przeglądarce zewnętrznej" + +#~ msgid "(No up-to-date MIDI or PDF files available.)" +#~ msgstr "(Brak zaktualizowanych plików MIDI, lub PDF.)" + +#~ msgid "" +#~ "There are no up-to-date MIDI or PDF files available. Please run LilyPond " +#~ "to create one or more output files." +#~ msgstr "" +#~ "Brak zaktualizowanych plików MIDI, lub PDF. Proszę najpierw uruchomić " +#~ "LiliPonda, aby stworzyć te pliki." + +#~ msgid "No files to send" +#~ msgstr "Brak plików do wysłania" + +#~ msgid "" +#~ "There are no PDF documents to print.\n" +#~ "\n" +#~ "You probably need to run LilyPond to create or update a PDF document. If " +#~ "you are creating MIDI files, be sure you also put a \\layout { } section " +#~ "in your score, otherwise LilyPond will not create a PDF." +#~ msgstr "" +#~ "Brak dokumentu PDF do wydrukowania.\n" +#~ "\n" +#~ "Prawdopodobnie należy uruchomić LilyPonda, aby stworzyć lub zaktualizować " +#~ "dokument PDF. Jeśli tworzysz plik MIDI, upewnij się, że dodałeś sekcję " +#~ "\\layout { } do swojej partytury, w przeciwnym wypadku LilyPond nie " +#~ "utworzy pliku PDF." + +#~ msgid "No files to print" +#~ msgstr "Brak plików do wydrukowania" + +#~ msgid "Email documents" +#~ msgstr "Wyślij dokumenty e-mailem" + +#~ msgid "Please select the files you want to send:" +#~ msgstr "Proszę wybrać pliki do wysłania:" + +#~ msgid "" +#~ "These are the files that are up-to-date (i.e. newer than the LilyPond " +#~ "source document). Also LilyPond files included by the source document are " +#~ "shown." +#~ msgstr "" +#~ "To są zaktualizowane pliki (tj. nowsze niż dokument źródłowy LilyPonda). " +#~ "Pokazane są również pliki zawarte w dokumencie źródłowym." + +#~ msgid "" +#~ "Note: this PDF file has been created with embedded point-and-click URLs " +#~ "(preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the file in publish mode, because then the PDF file " +#~ "is much smaller." +#~ msgid_plural "" +#~ "Note: these PDF files have been created with embedded point-and-click " +#~ "URLs (preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the files in publish mode, because then the PDF files " +#~ "are much smaller." +#~ msgstr[0] "" +#~ "Uwaga:ten plik PDF został stworzony w trybie podglądu i zawiera punkty " +#~ "URLs, co znacznie zwiększa jego objętość.Proszę rozważyć zamianę na tryb " +#~ "wydruku, co spowoduję znaczne zmniejszenie objętości pliku." +#~ msgstr[1] "" +#~ "Uwaga:ten plik PDF został stworzony w trybie podglądu i zawiera punkty " +#~ "URLs, co znacznie zwiększa jego objętość.Proszę rozważyć zamianę na tryb " +#~ "wydruku, co spowoduję znaczne zmniejszenie objętości pliku." +#~ msgstr[2] "" +#~ "Uwaga:ten plik PDF został stworzony w trybie podglądu i zawiera punkty " +#~ "URLs, co znacznie zwiększa jego objętość.Proszę rozważyć zamianę na tryb " +#~ "wydruku, co spowoduję znaczne zmniejszenie objętości pliku." + +#~ msgid "" +#~ "Note: If there are no PDF and no MIDI files, you probably need to run " +#~ "LilyPond to update those files, before sending the e-mail." +#~ msgstr "" +#~ "Uwaga: Jeśli brak plików PDF, lub MIDI znaczy to prawdopodobnie, że " +#~ "należy uruchomić LilyPonda, aby zaktualizować te pliki, zanim zostaną " +#~ "wysłane e-mailem." + +#~ msgid "" +#~ "These are the PDF documents that are up-to-date (i.e. newer than the " +#~ "LilyPond source document). Check the documents you want to send to the " +#~ "printer." +#~ msgstr "" +#~ "To są dokumenty PDF, które są zaktualizowane (tj. nowsze niż źródłowy " +#~ "dokument LilyPonda). Sprawdź dokumenty, które chcesz wysłać do drukarki." + +#~ msgid "Print %1" +#~ msgstr "Drukuj %1" + +#~ msgid "" +#~ "A print command (like 'lpr' or 'lp') could not be found on your system." +#~ msgstr "" +#~ "Polecenie drukowania (tj. 'lpr' lub 'lp') nie zostało znalezione w Twoim " +#~ "systemie." + +#~ msgid "The command '%1' could not be found on your system." +#~ msgstr "Polecenie '%1' nie zostało odnalezione w Twoim systemie." + +#~ msgid "" +#~ "The command below has been run, but exited with a return code %1.\n" +#~ "\n" +#~ "%2" +#~ msgstr "" +#~ "Poniższe polecenie zostało uruchomione, ale zwróciło kod %1.\n" +#~ "\n" +#~ "%2" + +#~ msgid "Create blank staff paper" +#~ msgstr "Utwórz pusty papier nutowy" + +#~ msgid "Choose what kind of empty staves you want to create." +#~ msgstr "Wybierz rodzaj pustej pięciolinii do utworzenia." + +#~ msgid "Choose which action happens when clicking \"Ok\"." +#~ msgstr "Wybierz rodzaj akcji dla przycisku \"Ok\"." + +#~ msgid "Preview the empty staff paper." +#~ msgstr "Podgląd pustego papieru nutowego." + +#~ msgid "Click to see more settings." +#~ msgstr "Kliknij, aby zobaczyć więcej ustawień." + +#~ msgid "Print Bar Lines" +#~ msgstr "Drukuj kreski taktowe" + +#~ msgid "Bars per line:" +#~ msgstr "Ilość taktów na linię:" + +#~ msgid "Blank staff paper preview" +#~ msgstr "Podgląd pustego papieru nutowego" + +#~ msgid "No PDF was created." +#~ msgstr "Nie utworzono pliku PDF." + +#~ msgid "Open in PDF viewer" +#~ msgstr "Otwórz w przeglądarce PDF" + +#~ msgid "Print staff paper" +#~ msgstr "Drukuj papier nutowy" + +#~ msgid "Copy LilyPond code to editor" +#~ msgstr "Kopiuj kod LilyPonda do edytora" + +#~ msgid "Clef:" +#~ msgstr "Klucz:" + +#~ msgid "Single Staff" +#~ msgstr "Pojedyncza pięciolinia" + +#~ msgid "Systems per page:" +#~ msgstr "Ilość systemów na stronie:" + +#~ msgid "Clefs" +#~ msgstr "Klucze" + +#~ msgid "Piano Staff" +#~ msgstr "System fortepianowy" + +#~ msgid "Organ Staff" +#~ msgstr "System organowy" + +#~ msgid "Staves per system:" +#~ msgstr "Ilość pięciolinii na system:" + +#~ msgid "Clefs:" +#~ msgstr "Klucze:" + +#~ msgid "" +#~ "To configure clefs, first set the number of staves per system. Then enter " +#~ "as many letters (S, A, T or B) as there are staves.\n" +#~ "\n" +#~ "S or A: treble clef,\n" +#~ "T: treble clef with an \"8\" below,\n" +#~ "B: bass clef\n" +#~ "\n" +#~ "So when you want to create music paper for a four-part mixed choir score, " +#~ "first set the number of staves per system to 4. Then enter \"SATB" +#~ "\" (without the quotes) here." +#~ msgstr "" +#~ "Aby ustalić klucze, najpierw ustaw liczbę pięciolinii dla danego systemu. " +#~ "Następnie wprowadź tyle liter (S, A, T lub B), ile jest pięciolinii.\n" +#~ "\n" +#~ "S lub A: klucz wiolinowy,\n" +#~ "T: klucz wiolinowy 8va bassa,\n" +#~ "B: klucz basowy.\n" +#~ " \n" +#~ "Jeśli chcesz utworzyć papier nutowy dla 4-ro głosowego chóru mieszanego, " +#~ "najpierw ustal liczbę pięciolinii na 4. Następnie wprowadź \"SATB\"(bez " +#~ "czudzysłowu)." + +#~ msgid "Choir Staff" +#~ msgstr "System chóralny" + +#~ msgid "Custom Staff" +#~ msgstr "System użytkownika" + +#~ msgid "Space below:" +#~ msgstr "Przestrzeń poniżej:" + +#~ msgid "Please select a music expression, enclosed in << ... >> or { ... }." +#~ msgstr "Proszę zaznaczyć oznaczenie wykonawcze w klamrach <<...>>lub {...}." + +#~ msgid "Please enter a start pitch and a destination pitch:" +#~ msgstr "Proszę wprowadzić wysokość wyjściową i docelową:" + +#~ msgid "Transpose from:" +#~ msgstr "Transponuj z:" + +#~ msgid "to:" +#~ msgstr "do:" + +#~ msgid "Install" +#~ msgstr "Instaluj" + +#~ msgid "Download LilyPond" +#~ msgstr "Pobierz LilyPond" + +#~ msgid "" +#~ "With this tool you can download packaged binary releases of LilyPond for " +#~ "your operating system." +#~ msgstr "" +#~ "Narzędzie to umożliwia pobranie spakowanej wersji binarnej wydania " +#~ "LilyPonda dla twojego systemu operacyjnego." + +#~ msgid "Select the LilyPond version you want to download." +#~ msgstr "Proszę wybrać, którą wersję Lilyponda pobrać." + +#~ msgid "" +#~ "Select a writable directory you want to install LilyPond to.\n" +#~ "(A version-numbered directory will be created in this directory.)" +#~ msgstr "" +#~ "Wybierz katalog z prawem do zapisu, w którym chcesz zainstalować " +#~ "LilyPonda.\n" +#~ "(W katalogu tym zostanie utworzony katalog oznaczony numerem wersji)." + +#~ msgid "Install into:" +#~ msgstr "Zainstaluj w:" + +#~ msgid "Details" +#~ msgstr "Szczegóły" + +#~ msgid "The website where LilyPond binaries can be downloaded." +#~ msgstr "Strona internetowa gdzie można pobrać pakiety binarne Lilyponda." + +#~ msgid "Download from:" +#~ msgstr "Pobierz z:" + +#~ msgid "Machine type:" +#~ msgstr "Rodzaj maszyny:" + +#~ msgid "" +#~ "This is the URL to the package that will be downloaded and installed.\n" +#~ "You can also browse to other places to select a LilyPond package." +#~ msgstr "" +#~ "To jest URL do pakietu, który zostanie pobrany i zainstalowany.\n" +#~ "Możesz również przejść do innego miejsca, aby wybrać pakiet z Lilypondem." + +#~ msgid "Package Url:" +#~ msgstr "Url pakietu:" + +#~ msgid "Downloading directory listing..." +#~ msgstr "Pobieranie listingu katalogów..." + +#~ msgid "No packages found. You can browse to a package manually." +#~ msgstr "Nie znaleziono pakietów. Możesz spróbować znaleźć je samemu." + +#~ msgid "Latest Development Version (%1)" +#~ msgstr "Ostania wersja rozwojowa (%1)" + +#~ msgid "Latest Stable Version (%1)" +#~ msgstr "Ostatnia wersja stabilna (%1)" + +#~ msgid "Downloading %1..." +#~ msgstr "Pobieranie %1..." + +#~ msgid "Download cancelled." +#~ msgstr "Pobieranie anulowane." + +#~ msgid "Download failed: %1" +#~ msgstr "Pobieranie nie powiodło się: %1" + +#~ msgid "" +#~ "LilyPond %1 seems already to be installed in %2.\n" +#~ "\n" +#~ "Do you want to use it or to remove and re-install?" +#~ msgstr "" +#~ "LilyPond %1 jest już prawdopodobnie zainstalowany w %2.\n" +#~ "\n" +#~ "Czy chcesz go użyć, czy usunąć go i zainstalować ponownie?" + +#~ msgid "Use existing LilyPond" +#~ msgstr "Użyj istniejącego Lilyponda" + +#~ msgid "Remove and re-install" +#~ msgstr "Usuń i zainstaluj ponownie" + +#~ msgid "Unpacking %1..." +#~ msgstr "Rozpakowywanie %1..." + +#~ msgid "Unpacking finished." +#~ msgstr "Rozpokowywanie ukończone." + +#~ msgid "Unpacking failed." +#~ msgstr "Rozpakowywanie nie powiodło się." + +#~ msgid "" +#~ "An error occurred:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Pojawił się błąd:\n" +#~ "\n" +#~ "%1" + +#~ msgid "" +#~ "This is the list of defined expansions.\n" +#~ "\n" +#~ "Click on a row to see or change the associated text. Doubleclick a " +#~ "shortcut or its description to change it. You can also press F2 to edit " +#~ "the current shortcut.\n" +#~ "\n" +#~ "Use the buttons below to add or remove expansions.\n" +#~ "\n" +#~ "There are two ways to use the expansion: either type the shortcut in the " +#~ "text and then call the Expand function, or just call the Expand function " +#~ "(default shortcut: Ctrl+.), choose the expansion from the list and press " +#~ "Enter or click Ok." +#~ msgstr "" +#~ "To jest lista zdefiniowanych rozszerzeń.\n" +#~ "\n" +#~ "Kliknij na wybrany rząd, aby zobaczyć lub zmienić skojarzony z nim tekst. " +#~ "Kliknij dwukrotnie na skrót lub jego opis, aby go zmnienić. Możesz " +#~ "również wcisnąć F2, żeby edytować obecny skrót.\n" +#~ "\n" +#~ "Użyj przycisków poniżej, aby dodać lub usunąć rozszerzenia.\n" +#~ "\n" +#~ "Rozszerzeń można używać na dwa sposoby: wystukując nazwę skrótu na " +#~ "klawiaturze, a następnie przywołując funkcję Rozszerzenia, bądź " +#~ "przywołując funkcję (skrót: Ctrl+.) i wybierając rozszerzenie z listy " +#~ "(zatwierdzając Enter lub OK)." + +#~ msgid "" +#~ "This is the text associated with the selected shortcut. Some characters " +#~ "have special meaning:" +#~ msgstr "" +#~ "To jest tekst skojarzony z wybranym skrótem. Niektóry znaki posiadają " +#~ "specjalne znaczenie:" + +#~ msgid "Translate the following pitch." +#~ msgstr "Przetłumacz daną nazwę dźwięku." + +#~ msgid "New Item" +#~ msgstr "Nowy objekt." + +#~ msgid "" +#~ "Another expansion already uses this name.\n" +#~ "\n" +#~ "Please use a different name." +#~ msgstr "" +#~ "Inne rozszerzenie korzysta już z tej nazwy.\n" +#~ "\n" +#~ "Proszę użyć innej nazwy." + +#~ msgid "" +#~ "Please only use letters, numbers and the underscore character in the " +#~ "expansion name." +#~ msgstr "" +#~ "Proszę używać wyłącznie liter, liczb i znaków podkreślenia w nazwie " +#~ "rozszerzeń." + +#~ msgid "Please don't leave the description empty." +#~ msgstr "Proszę nie zostawiać pustego pola opisu." + +#~ msgid "" +#~ "Could not find any hyphenation dictionaries.\n" +#~ "\n" +#~ "Please install a package containing some and/or or configure the search " +#~ "path to find them in the Frescobaldi settings under \"Paths.\"" +#~ msgstr "" +#~ "Nie znaleziono żadnych słowników z regułami dzielenia wyrazów.\n" +#~ "\n" +#~ "Proszę zainstalować pakiet zawierający taki słownik, lub skonfigurować " +#~ "ścieżkę do tego pakietu ustawieniach programu Frescobaldi o nazwie " +#~ "\"Ścieżki\". " + +#~ msgid "Larger text" +#~ msgstr "Większy tekst" + +#~ msgid "Smaller text" +#~ msgstr "Mniejszy tekst" + +#~ msgid "Up one level" +#~ msgstr "Do góry o jeden poziom" + +#~ msgid "Index" +#~ msgstr "Indeks" + +#~ msgid "Copy &Link" +#~ msgstr "Kopiuj &Odnośnik" + +#~ msgid "Open Link in &New Window" +#~ msgstr "Otwórz Odnośnik w &Nowym Oknie" + +#~ msgid "Open Document in &New Window" +#~ msgstr "Otwórz Dokument w &Nowym Oknie" + +#~ msgid "Loading..." +#~ msgstr "Ładowanie..." + +#~ msgid "LilyPond Command Index" +#~ msgstr "Indeks poleceń LilyPonda" + +#~ msgid "Learning Manual" +#~ msgstr "Podręcznik użytkownika" + +#~ msgid "Learning Manual Index" +#~ msgstr "Indeks podręcznika użytkownika" + +#~ msgid "The %1 context" +#~ msgstr "%1 spis treści" + +#~ msgid "" +#~ "Where to add articulations et cetera: above or below the staff or in the " +#~ "default position." +#~ msgstr "" +#~ "Miejsce dodania artykulacji etc.: powyżej lub poniżej pięciolinii lub też " +#~ "w pozycji domyślnej." + +#~ msgid "Click an articulation sign to add it to your document." +#~ msgstr "" +#~ "Kliknij oznaczenie artykulacyjne, aby dodać je do Twojego dokumentu." + +#~ msgid "" +#~ "If you select some music first, the articulation will be added to all " +#~ "notes in the selection." +#~ msgstr "" +#~ "Jeśli najpierw zaznaczysz fragment muzyki, artykulacja zostanie dodana do " +#~ "wszystkich nut w danym obszarze." + +#~ msgid "Click a dynamic sign to add it to your document." +#~ msgstr "Kliknij oznaczenie dynamiki, aby dodać je do Twojego dokumentu." + +#~ msgid "" +#~ "If you select some music first, dynamic spanners will be added the " +#~ "selected fragment." +#~ msgstr "" +#~ "Jeśli najpierw zaznaczysz fragment muzyki, symbol dynamiki zostanie " +#~ "dodany do zaznaczonego obszaru." + +#~ msgid "" +#~ "If you have selected some music and you click a sign after a spanner, the " +#~ "sign will terminate the spanner." +#~ msgstr "" +#~ "Jeśli zaznaczyłeś fragment muzyczny i klikniesz na znak za linią " +#~ "dynamiki, znak ten ustawi miejsce zakończenia linii dynamiki (cresc., " +#~ "dim.)." + +#~ msgid "These spanners need a music fragment to be selected." +#~ msgstr "Użycie tych linii wymaga uprzedniego zaznaczenia fragmentu muzyki." + +#~ msgid "Arpeggios are used with chords with multiple notes." +#~ msgstr "Arpeggia używa się do akordów." + +#~ msgid "" +#~ "Glissandos are attached to a note and automatically extend to the next " +#~ "note." +#~ msgstr "" +#~ "Glissanda dodawane są do nuty i automatycznie rozciągane do następnej " +#~ "nuty." + +#~ msgid "Run LilyPond (preview)" +#~ msgstr "Uruchom LilyPonda (podgląd)" + +#~ msgid "Run LilyPond (publish)" +#~ msgstr "Uruchom LiliPonda (do druku)" + +#~ msgid "Run LilyPond (custom)..." +#~ msgstr "Uruchom LiliPonda (użytkownik)..." + +#~ msgid "Interrupt LilyPond Job" +#~ msgstr "Przerwij działanie LilyPonda" + +#~ msgid "Email Documents..." +#~ msgstr "Wyślij dokumenty e-mailem..." + +#~ msgid "Cut selection and assign it to a LilyPond variable." +#~ msgstr "Wytnij fragment i przyporządkuj go do zmiennej LilyPonda." + +#~ msgid "Repeat the last music expression (note or chord)." +#~ msgstr "Powtórz ostatnie wyrażenie (nutę lub akord)." + +#~ msgid "Insert or Manage Expansions..." +#~ msgstr "Wstaw lub zarządzaj rozszerzeniami..." + +#~ msgid "Expand last word or open the expansions dialog." +#~ msgstr "Rozszerz ostatni wyraz lub otwórz okno dialogowe rozszerzeń." + +#~ msgid "Insert special characters." +#~ msgstr "Wstaw znaki specjalne." + +#~ msgid "Add to Expansions" +#~ msgstr "Dodaj do Rozszerzeń" + +#~ msgid "Go to the next blank line." +#~ msgstr "Przejdź do następnej pustej lini." + +#~ msgid "Previous blank line" +#~ msgstr "Poprzednia pusta linia." + +#~ msgid "Go to the previous blank line." +#~ msgstr "Przejdź do poprzedniej pustej lini." + +#~ msgid "Select to next blank line" +#~ msgstr "Zaznacz do następnej pustej linii." + +#~ msgid "" +#~ "Selects text from the current position down to and including the next " +#~ "blank line." +#~ msgstr "" +#~ "Zaznacza tekst od obecnej pozycji aż do (i razem z) następnej pustej " +#~ "linii." + +#~ msgid "Select to previous blank line" +#~ msgstr "Zaznacz do poprzedniej pustej linii." + +#~ msgid "" +#~ "Selects text from the current position up to right after the previous " +#~ "blank line." +#~ msgstr "" +#~ "Zaznacza tekst od obecnej pozycji, aż do miejsca zaraz za poprzednią " +#~ "pustą linią." + +#~ msgid "Move selection to next blank line" +#~ msgstr "Przenieś zaznaczenie do następnej pustej linii." + +#~ msgid "Moves selected block to next blank line." +#~ msgstr "Przenieś zaznaczony blok do następnej pustej linii." + +#~ msgid "Move selection to previous blank line" +#~ msgstr "Przenieś zaznaczenie do poprzedniej pustej linii." + +#~ msgid "Moves selected block to previous blank line." +#~ msgstr "Przenieś zaznaczony blok do poprzedniej pustej linii." + +#~ msgid "Single Quote" +#~ msgstr "Cudzysłów pojedynczy" + +#~ msgid "Double Quote" +#~ msgstr "Cudzysłów podwójny" + +#~ msgid "Align" +#~ msgstr "Wyrównaj" + +#~ msgid "Insert pair of braces" +#~ msgstr "Wstaw klamrę" + +#~ msgid "" +#~ "Your document has been modified and needs to be saved before LilyPond can " +#~ "be started.\n" +#~ "\n" +#~ "Save the document now?" +#~ msgstr "" +#~ "Twój dokument został zmieniony i musi być zapisany zanim zostanie " +#~ "uruchomiony LilyPond.\n" +#~ "\n" +#~ "Czy zapisać dokument teraz?" + +#~ msgid "There is already a LilyPond job running for this document." +#~ msgstr "LilyPond już pracuje nad tym dokumentem." + +#~ msgid "Can't process document" +#~ msgstr "Nie można przetworzyć dokumentu" + +#~ msgid "Continue anyway?" +#~ msgstr "Czy mimo to kontynuować?" + +#~ msgid "" +#~ "You want to run LilyPond in preview mode (with point and click enabled), " +#~ "but your document contains a command to turn point and click off." +#~ msgstr "" +#~ "Chcesz uruchomić LilyPonda w trybie podglądu (z opcją point and click), " +#~ "ale Twój dokument zawiera polecenia wyłączenia tej opcji." + +#~ msgid "" +#~ "You want to run LilyPond in publish mode (with point and click disabled), " +#~ "but your document contains a command to turn point and click on." +#~ msgstr "" +#~ "Chcesz uruchomić LilyPonda w trybie do druku (bez opcji point and click), " +#~ "ale Twój dokument zawiera polecenia włączenia tej opcji." + +#~ msgid "Abort the running LilyPond process" +#~ msgstr "Przerwij działanie LilyPonda" + +#~ msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" +#~ msgstr "" +#~ "Uruchom LilyPonda w trybie podglądu (Shift-klik dla okna użytkownika)" + +#~ msgid "LilyPond has successfully compiled %1." +#~ msgstr "Lilypond poprawnie skompilował %1." + +#~ msgid "LilyPond exited with an error compiling %1." +#~ msgstr "LilyPond zakończył z błędem kompilacji %1." + +#~ msgid "" +#~ "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" +#~ msgstr "" +#~ "Wprowadź rytm używając wartości oddzielonych spacją (np. 8. 16 8 4 8)" + +#~ msgid "Terminal" +#~ msgstr "Terminal" + +#~ msgid "" +#~ "Could not load the KMid part.\n" +#~ "Please install KMid 2.4.0 or higher." +#~ msgstr "" +#~ "Nie można wczytać części KMid.\n" +#~ "Proszę zainstalować KMid 2.4.0 lub wyższy." + +#~ msgid "Show PDF Navigation Panel" +#~ msgstr "Pokaż panel nawigacyjny PDF" + +#~ msgid "Show PDF minipager" +#~ msgstr "Pokaż minipodgląd PDF" + +#~ msgid "Configure Okular..." +#~ msgstr "Ustawienia Okular..." + +#~ msgid "S&ynchronize Preview with Current Document" +#~ msgstr "S&ynchronizuj podgląd z obecnym dokumentem" + +#~ msgid "Reload" +#~ msgstr "Odśwież" + +#~ msgid "no log" +#~ msgstr "no log" + +#~ msgid "Only show on errors" +#~ msgstr "Pokazuj tylko przy błędzie" + +#~ msgid "Rumor" +#~ msgstr "Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter " +#~ "from the LilyPond document." +#~ msgstr "" +#~ "Ustawienie tempa. Pozostaw 'Auto', aby Frescobaldi określił tempo na " +#~ "podstawie danych dokumentu LilyPonda" + +#~ msgid "Quantize:" +#~ msgstr "Kwantyzuj:" + +#~ msgid "The shortest note duration to use." +#~ msgstr "Najkrótsza użyta wartość" + +#~ msgid "Record LilyPond input note by note, without durations." +#~ msgstr "Nagrywaj nuta po nucie, bez wartości rytmicznych." + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Record monophonic input, without chords." +#~ msgstr "Nagrywaj jednogłosowo, bez akordów." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let Frescobaldi determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Ilość znaków chromatycznych. Liczba negatywna oznacza bemole. Pozostaw " +#~ "'Auto',aby pozwolić Frescobaldiemu\n" +#~ " \n" +#~ "ustalić tonację na podstawie dokumentu LilyPonda." + +#~ msgid "Meter:" +#~ msgstr "Licznik:" + +#~ msgid "Key:" +#~ msgstr "Tonacja:" + +#~ msgid "Configure..." +#~ msgstr "Ustawienia..." + +#~ msgid "Adjust more settings, like MIDI input and output." +#~ msgstr "Więcej ustawień, np. wejścia i wyjścia MIDI. " + +#~ msgid "Set these settings as default." +#~ msgstr "Ustaw jako domyślne." + +#~ msgid "Found rumor version %1." +#~ msgstr "Znaleziono rumor w wersji %1." + +#~ msgid "Could not find Rumor: %1" +#~ msgstr "Nie znaleziono Rumora :%1" + +#~ msgid "Settings have been saved." +#~ msgstr "Ustawienia zostały zapisane." + +#~ msgid "Record" +#~ msgstr "Nagrywaj" + +#~ msgid "Start or stop Rumor MIDI-recording." +#~ msgstr "Zacznij lub skończ nagrywanie MIDI z Rumorem" + +#~ msgid "Rumor is recording, press ESC to stop." +#~ msgstr "Rumor nagrywa, naciśnij ESC by zakończyć." + +#~ msgid "Rumor stopped." +#~ msgstr "Rumor zatrzymany." + +#~ msgid "TiMidity" +#~ msgstr "TiMidity" + +#~ msgid "Start or stop the TiMidity ALSA MIDI client." +#~ msgstr "Zacznij lub zakończ TiMidity jako klienta ALSA MIDI." + +#~ msgid "Rumor Settings" +#~ msgstr "Ustawienia Rumora" + +#~ msgid "OSS device %1" +#~ msgstr "Urządzenie OSS %1" + +#~ msgid "" +#~ "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard " +#~ "of your computer." +#~ msgstr "" +#~ "Wejście MIDI. Wybierz 'Keybourd', jeśli chcesz grać na klawiaturze " +#~ "komputera." + +#~ msgid "MIDI output to use." +#~ msgstr "Wyjście MIDI do wykorzystania" + +#~ msgid "The LilyPond language you want Rumor to output the pitches in." +#~ msgstr "Ustawienie języka LilyPond, w którym Rumor zapisze nagrywane nuty." + +#~ msgid "Explicit durations" +#~ msgstr "Uwidocznione wartości rytmiczne" + +#~ msgid "" +#~ "Add a duration after every note, even if it is the same as the preceding " +#~ "note." +#~ msgstr "" +#~ "Dodaj wartość do każdej nuty, nawet jeśli jest taka sama jak poprzednia." + +#~ msgid "Absolute pitch" +#~ msgstr "Absolutne wysokości" + +#~ msgid "Use absolute pitches instead of relative." +#~ msgstr "Używaj absolutnych nazw wysokości, zamiast relatywnych." + +#~ msgid "No barlines" +#~ msgstr "Bez kresek taktowych" + +#~ msgid "Filter the barlines out of Rumor's output." +#~ msgstr "Filtruj kreski taktowe z wyjścia Rumora." + +#~ msgid "No dots" +#~ msgstr "Bez kropek" + +#~ msgid "Do not use dotted notes, but ties instead." +#~ msgstr "Zamiast kropek używaj wiązań." + +#~ msgid "Legato" +#~ msgstr "Legato" + +#~ msgid "Do not use rests, but give all notes the maximum length." +#~ msgstr "Zamiast pauz, wydłużaj wartości nut" + +#~ msgid "Strip leading and trialing rests from output." +#~ msgstr "Usuń pauzy na początku i końcu pliku wyjściowego." + +#~ msgid "Guile scripts to load:" +#~ msgstr "Skrypt Guile do załadowania:" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. Check " +#~ "\"What's this\" for more information." +#~ msgstr "" +#~ "Tu możesz wybrać skrypt Guile, jakiego ma używać Rumor. Sprawdź \"Co to " +#~ "jest\", by uzyskać więcej informacji." + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %1. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Tu możesz wybrać, który skrypt Guile ma być użytu przez Rumor. Możesz " +#~ "dodać własne skrypty, umieszczając je w %1. Jeśli pierwsza linijka " +#~ "twojego skryptu rozpoczyna się średnikiem, będzie ona pokazywana jako " +#~ "opis." + +#~ msgid "publish mode" +#~ msgstr "tryb wydruku" + +#~ msgid "LilyPond %1 [%2] starting (%3)..." +#~ msgstr "LilyPond %1 [%2] zaczyna (%3)..." + +#~ msgid "LilyPond [%1] starting (%2)..." +#~ msgstr "LilyPond [%1] zaczyna (%2)..." + +#~ msgid "LilyPond [%1] finished (%2)." +#~ msgstr "LilyPond [%1] zakończył (%2)." + +#~ msgid "Select which LilyPond version you want to run:" +#~ msgstr "Proszę wybrać, którą wersję Lilyponda uruchomić:" + +#~ msgid "LilyPond %1" +#~ msgstr "LilyPond %1" + +#~ msgid "Automatic LilyPond Version (determined from document)." +#~ msgstr "Wersja LilyPond jakiej użyjesz dla tego dokumentu." + +#~ msgid "Path: %1" +#~ msgstr "Ścieżka: %1" + +#~ msgid "LilyPond (version unknown)" +#~ msgstr "LilyPond (wersja nieznana)" + +#~ msgid "" +#~ "Use LilyPond (version unknown)\n" +#~ "Path: %1" +#~ msgstr "" +#~ "Użyj LilyPonda (nieznana wersja)\n" +#~ "Ścieżka: %1" + +#~ msgid "Save LilyPond Log as" +#~ msgstr "Zapisz LilyPond Log jako" + +#~ msgid "" +#~ "Could not save LilyPond log:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Nie można zapisać logu LilyPonda:\n" +#~ "\n" +#~ "%1" + +#~ msgid "LilyPond-related settings" +#~ msgstr "Ustawienia związane z LilyPondem" + +#~ msgid "LilyPond version to use:" +#~ msgstr "Używana wersja LilyPonda:" + +#~ msgid "" +#~ "Here you can set a fixed LilyPond version to run on documents in this " +#~ "session.\n" +#~ "\n" +#~ "The LilyPond version selected here is run by default on your documents, " +#~ "and it's also used by the \"Insert Version\" command." +#~ msgstr "" +#~ "Tu możesz ustawić stałą wersję LilyPonda, używaną dla dokumentów w tej " +#~ "sesji.\n" +#~ "\n" +#~ "Wersja LilyPonda wybrana tutaj używana jest domyślnie do Twoich " +#~ "dokumentów i używana jest także przez polecenie \"Wstaw wersję\"." + +#~ msgid "Configure" +#~ msgstr "Ustaw" + +#~ msgid "General Frescobaldi Preferences" +#~ msgstr "Ustawienia ogólne Frescobaldiego" + +#~ msgid "Paths to programs or data used by Frescobaldi" +#~ msgstr "Ścieżka do programów lub danych używanych przez Frescobaldiego" + +#~ msgid "Rumor MIDI input" +#~ msgstr "Wejście MIDI Rumora" + +#~ msgid "Rumor MIDI input plugin settings" +#~ msgstr "Ustawienia wtyczki wejścia MIDI Rumora" + +#~ msgid "Editor Component" +#~ msgstr "Edytor komponentów" + +#~ msgid "Editor Component Options" +#~ msgstr "Opcje edytora komponentów" + +#~ msgid "LilyPond version number to use for new documents" +#~ msgstr "Wersja LilyPond jakiej użyjesz dla tego dokumentu." + +#~ msgid "Use version number of installed LilyPond" +#~ msgstr "Użyj numeru wersji LilyPonda, która jest zainstalowana" + +#~ msgid "Use version number of last convert-ly rule" +#~ msgstr "Użyj numeru wersji z ostaniej dostępnej reguły convert-ly" + +#~ msgid "Enter a valid LilyPond version number, e.g. 2.12.0" +#~ msgstr "Wprowadź poprawną wersję LilyPonda, np. 2.12.0" + +#~ msgid "Warnings and Notifications" +#~ msgstr "Ostrzeżenia i powiadomienia" + +#~ msgid "Warn when a document contains a conflicting point and click setting" +#~ msgstr "" +#~ "Ostrzegaj kiedy dokument zawiera wywołujące konflikty ustawienia point " +#~ "and click" + +#~ msgid "Warn when a document needs to be saved before LilyPond is run" +#~ msgstr "" +#~ "Ostrzegaj kiedy dokument musi być zapisany przed uruchomieniem Lilyponda" + +#~ msgid "Warn when saving a session would overwrite another" +#~ msgstr "Ostrzegaj gdy zapisywanie sesji może nadpisać inną sesję" + +#~ msgid "Point and Click" +#~ msgstr "Point and Click" + +#~ msgid "Enable Point and Click" +#~ msgstr "Włącz Point and Click" + +#~ msgid "" +#~ "Click this button if Point and Click does not work. See Shift+F1 (What's " +#~ "This) for more information." +#~ msgstr "" +#~ "Kliknij ten przycisk, gdy Point and Click nie działa. Sprawdź Shift+F1 " +#~ "(Co to jest?), aby uzyskać więcej informacji." + +#~ msgid "" +#~ "On its first run, Frescobaldi tries to auto-configure Okular (which " +#~ "provides the PDF preview) to call Frescobaldi when a clickable object is " +#~ "clicked.\n" +#~ "\n" +#~ "But this setting can get lost when you move Frescobaldi to a different " +#~ "location or when other applications reconfigure Okular.\n" +#~ "\n" +#~ "Click this button to configure Frescobaldi as 'custom editor' inside " +#~ "Okular. This works best when all instances of Okular are closed and the " +#~ "PDF preview has not yet been opened." +#~ msgstr "" +#~ "Podczas pierwszego uruchomienia Frescobaldi próbuje automatycznie " +#~ "skonfigurować Okular (jest to przeglądarka PDF) w taki sposób, aby " +#~ "wywoływał Frescobaldi przy każdym kliknięciu na odpowiedni obiekt " +#~ "(funkcja Point and Click).\n" +#~ "\n" +#~ "Ustawienie to może jednak zostać zmienione, gdy Frescobaldi zostanie " +#~ "przeniesiony w inne miejsce, lub gdy inna aplikacja zrekonfiguruje " +#~ "Okular.\n" +#~ "\n" +#~ "Kliknij ten przycisk, aby skonfigurować Frescobaldi jako 'edytor " +#~ "użytkownika' dla Okulara. Ta funkcja działa najlepiej gdy Okular jest " +#~ "zamknięty, a podgląd PDF nie został jeszcze otwarty." + +#~ msgid "" +#~ "The Okular PDF preview has been reconfigured.\n" +#~ "\n" +#~ "If you already opened the PDF preview, restart Frescobaldi for the new " +#~ "settings to take effect." +#~ msgstr "" +#~ "Podgląd PDF w Okularze został zrekonfigurowany.\n" +#~ "\n" +#~ "Jeśli już otworzyłeś podgląd PDF, zrestartuj Frescobaldiego, aby nowe " +#~ "ustawienia zostały włączone." + +#~ msgid "PDF Viewer:" +#~ msgstr "Przeglądarka PDF:" + +#~ msgid "PDF Viewer" +#~ msgstr "Przeglądarka PDF" + +#~ msgid "(leave empty for operating system default)" +#~ msgstr "(pozostaw puste dla domyślnych wartości systemu operacyjnego)" + +#~ msgid "MIDI Player:" +#~ msgstr "Odtwarzacz MIDI:" + +#~ msgid "Url:" +#~ msgstr "Url:" + +#~ msgid "Url or path to the LilyPond documentation." +#~ msgstr "Url lub ścieżka do dokumentacji LilyPonda." + +#~ msgid "Lyrics Hyphenation" +#~ msgstr "Rozdzielanie słów myślnikami" + +#~ msgid "" +#~ "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " +#~ "KOffice, etc, one per line. If you leave out the starting slash, the " +#~ "prefixes from the KDEDIRS environment variable are prepended." +#~ msgstr "" +#~ "Ścieżki do reguł rozdzielania wyrazów ze słowników OpenOffice.org, " +#~ "Scribus, KOffice, itd., (po jednej na linię). Jeśli pozostawisz " +#~ "początkowy lewy ukośnik, użyte zostaną prefiksy dla zmiennych " +#~ "środowiskowych z KDEDIRS. " + +#~ msgid "Commands used by the Rumor MIDI input module" +#~ msgstr "Polecenia używane przez moduł wejścia MIDI Rumora" + +#~ msgid "Name or full path of the Rumor program." +#~ msgstr "Nazwa lub pełna ścieżka programu Rumor." + +#~ msgid "" +#~ "Name or full path of the aconnect program (part of ALSA, for MIDI input " +#~ "and playback using Rumor)." +#~ msgstr "" +#~ "Nazwa lub pełna ścieżka do programu aconnect (część ALSA, dla wejść i " +#~ "wyjść MIDI przy użyciu Rumora)." + +#~ msgid "" +#~ "Full command to start Timidity (or any other program) as an ALSA MIDI " +#~ "client." +#~ msgstr "" +#~ "Pełne polecenie rozpoczynające Timidity (lub inny program), jako klienta " +#~ "MIDI dla ALSA." + +#~ msgid "Close Button" +#~ msgstr "Przycisk zamykania" + +#~ msgid "Large Tabs" +#~ msgstr "Duże karty" + +#~ msgid "Tabs can be moved" +#~ msgstr "Karty mogą być przesuwane" + +#~ msgid "Download..." +#~ msgstr "Pobierz..." + +#~ msgid "Download new binary LilyPond releases." +#~ msgstr "Pobierz nową binarne wydanie Lilyponda." + +#~ msgid "LilyPond Command" +#~ msgstr "Polecenie LilyPonda" + +#~ msgid "Choose a session." +#~ msgstr "Wybierz sesję." + +#~ msgid "Choose..." +#~ msgstr "Wybierz..." + +#~ msgid "Your document has already a LilyPond version statement." +#~ msgstr "Twój dokument ma już oznaczenie wersji LilyPonda." + +#~ msgid "Version already set" +#~ msgstr "Wersja jest już ustalona" + +#~ msgid "" +#~ "Can't determine the version of LilyPond. Please check your LilyPond " +#~ "installation." +#~ msgstr "" +#~ "Nie można ustalić wersji LilyPonda. Proszę sprawdzić czy jest " +#~ "zainstalowany." + +#~ msgid "" +#~ "Can't determine the LilyPond version of the current document. Please add " +#~ "a \\version statement with the correct version." +#~ msgstr "" +#~ "Nie można ustalić wersji LilyPonda dla obecnego dokumentu. Proszędodać " +#~ "wyrażenie \\version z poprawnym numerem wersji." + +#~ msgid "This LilyPond document is already up-to-date." +#~ msgstr "Ten dokument LilyPonda jest już w najnowszej wersji." + +#~ msgid "" +#~ "The document has been processed with convert-ly. You'll find the messages " +#~ "of convert-ly in a comment block at the end. You still may have to edit " +#~ "some parts manually." +#~ msgstr "" +#~ "Ten dokument był przetwarzany przy użyciu convert-ly. Informacje o tym " +#~ "znajdziesz w komentarzu na końcu pliku. Nadal możesz pracawać nad " +#~ "niektórymipartiami ręcznie." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %1" +#~ msgstr "" +#~ "Ten dokument był przetwarzany przez convert-ly, ale pozostał niezmieniony." +#~ "To jest wiadomość od convert-ly: %1" + +#~ msgid "The tempo in beats per minute." +#~ msgstr "Tempo wg metronomu." + +#~ msgid "Treble" +#~ msgstr "Wiolinowy" + +#~ msgid "Treble 8" +#~ msgstr "Wiolinowy 8" + +#~ msgid "Tab clef" +#~ msgstr "Klucz tabulaturowy" + +#~ msgid "No Clef" +#~ msgstr "Bez klucza" + +#~ msgid "Add selected part to your score." +#~ msgstr "Dodaj wybrane głosy do partytury." + +#~ msgid "A tempo indication, e.g. \"Allegro.\"" +#~ msgstr "Oznaczenie tempa, np. \"Allegro.\"" + +#~ msgid "Wrap score in \\book block" +#~ msgstr "Wstaw partyturę do bloku \\book" + +#~ msgid "If checked, wraps the \\score block inside a \\book block." +#~ msgstr "Jeśli zaznaczone, wstawia blok \\score do bloku \\book." + +#~ msgid "How many voices to put in this staff." +#~ msgstr "Ilość głosów dla tej pięciolinii." + +#~ msgid "Basso continuo" +#~ msgstr "Basso continuo" + +#~ msgid "Guitar" +#~ msgstr "Gitara" + +#~ msgid "Oboe d'Amore" +#~ msgstr "Obój miłosny" + +#~ msgid "English Horn" +#~ msgstr "Rożek angielski" + +#~ msgid "Mezzo soprano" +#~ msgstr "Mezzo-sopran" + +#~ msgid "Open PDF" +#~ msgstr "Otwórz PDF" + +#~ msgid "Email..." +#~ msgstr "Email..." + +#~ msgid "Disable the built-in PDF preview" +#~ msgstr "Wyłącz wbudowany podgląd PDF" + +#~ msgid "The direction to use for the articulations." +#~ msgstr "Kierunek oznaczeń artykulacyjnych" + +#~ msgid "Your document has been modified, please save first." +#~ msgstr "Twój dokument został zmieniony, proszę najpierw go zapisać." + +#~ msgid "" +#~ "Printing failed: %1\n" +#~ "\n" +#~ "The print command %2 does probably not exist. Please check your settings." +#~ msgstr "" +#~ "Drukowanie nie powiodło się: %1\n" +#~ "\n" +#~ "Zadanie wydruku %2 prawdopodobnie nie istnieje. Proszę sprawdzić " +#~ "ustawienia." + +#~ msgid "The print command contains errors. Please check your settings." +#~ msgstr "Zadanie wydruku zawiera błędy. Proszę sprawdzić ustawienia." + +#~ msgid "Directly print on default printer" +#~ msgstr "Wydrukuj bezpośrednio na drukarce domyślnej." + +#, fuzzy +#~ msgid "Notify when a document has been sent to the printer" +#~ msgstr "Dokument został wysłany do drukarki" + +#~ msgid "" +#~ "Command to print a PDF file, for example lpr or kprinter. You may add " +#~ "some arguments, e.g. lpr -P myprinter." +#~ msgstr "" +#~ "Polecenie wydruku pliku PDF, np. lpr lub kprinter. Możesz dodać różne " +#~ "wartości, np. lpr -P myprinter." + +#~ msgid "Space above:" +#~ msgstr "Przestrzeń powyżej:" + +#~ msgid "Name or full path of the convert-ly program." +#~ msgstr "Nazwa lub pełna ścieżka do programu convert-ly" + +#~ msgid "Expand" +#~ msgstr "Rozszerz" + +#~ msgid "Show" +#~ msgstr "Pokaż" + +#~ msgid "Your document currently has no filename, please save first." +#~ msgstr "Twój dokument nie ma jeszcze nazwy, najpierw go zapisz." + +#~ msgid "" +#~ "Sorry, support for remote files is not yet implemented.\n" +#~ "Please save your document to a local file." +#~ msgstr "" +#~ "Niestety, na razie brak obsługi plików sieciowych.\n" +#~ "Proszę zapisać dokument jako plik lokalny." + +#~ msgid "Already Running" +#~ msgstr "Już pracuje" diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/qtranslator.py frescobaldi-2.0.0/frescobaldi_app/po/qtranslator.py --- frescobaldi-1.2.0/frescobaldi_app/po/qtranslator.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/qtranslator.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,62 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Translation of some parts of Qt (like dialog buttons) via our PO files. + +The strings that are needed are in the qtmessages.py file in this directory. + +""" + + +from PyQt4.QtCore import QCoreApplication, QTranslator + +import app + + +_translator = None + +class Translator(QTranslator): + """Subclass of QTranslator that gets its messages via the _() function.""" + def translate(self, context, sourceText, disambiguation=""): + #_debug(context, sourceText) + return _(context, sourceText) + + +def installTranslator(): + """Install a QTranslator so Qt's own texts are also translated.""" + global _translator + if _translator is not None: + QCoreApplication.removeTranslator(_translator) + _translator = Translator() + QCoreApplication.installTranslator(_translator) + +# just install again on change, so the widgets get a LanguageChange event +app.languageChanged.connect(installTranslator) +installTranslator() + + +# DEBUG: show translatable Qt messages once +_debugmessages = set() +def _debug(context, sourceText): + l = len(_debugmessages) + _debugmessages.add((context, sourceText)) + if len(_debugmessages) > l: + print context, sourceText + Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/ru.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/ru.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/ru.po frescobaldi-2.0.0/frescobaldi_app/po/ru.po --- frescobaldi-1.2.0/frescobaldi_app/po/ru.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/ru.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6814 @@ +# translation of ru.po to Russian +# translation of ru.po to +# Copyright (C) +# This file is distributed under the same license as the Frescobaldi package. +# Serj Poltavski +# +# Serj Poltavski , 2009. +# Artem Zolochevskiy , 2009. +msgid "" +msgstr "" +"Project-Id-Version: ru\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: 2009-10-08 21:17+0300\n" +"Last-Translator: Artem Zolochevskiy \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"#-#-#-#-# ru.po (ru) #-#-#-#-#\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: Lokalize 1.0\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "" + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +#, fuzzy +msgid "Python" +msgstr "Пути" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +#, fuzzy +msgid "Poppler" +msgstr "Размер страницы:" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "" + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "" + +#: frescobaldi_app/about.py:87 +#, fuzzy +msgid "About" +msgstr "Автоматически" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "" + +#: frescobaldi_app/about.py:89 +#, fuzzy +msgid "Version" +msgstr "Версия:" + +#: frescobaldi_app/about.py:144 +#, fuzzy +msgid "Operating System" +msgstr "Остальные системы:" + +#: frescobaldi_app/about.py:151 +#, fuzzy +msgid "Version {version}" +msgstr "Вставить версию LilyPond" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +#, fuzzy +msgid "A LilyPond Music Editor" +msgstr "Музыкальный нотатор LilyPond" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "" + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "" + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "" + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +#, fuzzy +msgid "Shortcut Conflict" +msgstr "Сокращение" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "" + +#: frescobaldi_app/app.py:128 +#, fuzzy +msgid "LilyPond Files" +msgstr "Файлы LilyPon" + +#: frescobaldi_app/app.py:129 +#, fuzzy +msgid "LaTeX Files" +msgstr "Все файлы" + +#: frescobaldi_app/app.py:130 +#, fuzzy +msgid "DocBook Files" +msgstr "Все файлы" + +#: frescobaldi_app/app.py:131 +#, fuzzy +msgid "HTML Files" +msgstr "Все файлы" + +#: frescobaldi_app/app.py:132 +#, fuzzy +msgid "Texinfo Files" +msgstr "Открыть файл" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Все файлы" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:115 +#, fuzzy +msgid "Next Mark" +msgstr "Далее" + +#: frescobaldi_app/bookmarkmanager.py:116 +#, fuzzy +msgid "Previous Mark" +msgstr "Предыдущий" + +#: frescobaldi_app/convert_ly.py:118 +#, fuzzy +msgid "From version:" +msgstr "Вставить версию LilyPond" + +#: frescobaldi_app/convert_ly.py:119 +#, fuzzy +msgid "To version:" +msgstr "Версия:" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "" + +#: frescobaldi_app/convert_ly.py:125 +#, fuzzy +msgid "&Changes" +msgstr "Размер страницы:" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +msgid "" +msgstr "" + +#: frescobaldi_app/convert_ly.py:138 +#, fuzzy +msgid "Convert-ly from LilyPond {version}" +msgstr "Вставить версию LilyPond" + +#: frescobaldi_app/convert_ly.py:162 +#, fuzzy +msgid "(set in document)" +msgstr "Послать документы по email" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "" + +#: frescobaldi_app/convert_ly.py:190 +#, fuzzy +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr " Невозможно запустить convert-ly: %1" + +#: frescobaldi_app/convert_ly.py:196 +#, fuzzy +msgid "The document has not been changed." +msgstr "Документ отправлен на печать" + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Current Document" +msgstr "&Документ" + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Converted Document" +msgstr "&Исходный документ" + +#: frescobaldi_app/convert_ly.py:208 +#, fuzzy +msgid "Colors:" +msgstr "Композитор" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "" + +#: frescobaldi_app/convert_ly.py:211 +msgid "Deleted" +msgstr "" + +#: frescobaldi_app/convert_ly.py:212 +#, fuzzy +msgid "Links:" +msgstr "Тексты" + +#: frescobaldi_app/convert_ly.py:213 +#, fuzzy +msgid "First Change" +msgstr "Первая страница" + +#: frescobaldi_app/convert_ly.py:214 +#, fuzzy +msgid "Next Change" +msgstr "Следующая пустая строка" + +#: frescobaldi_app/convert_ly.py:215 +#, fuzzy +msgid "Top" +msgstr "Щёлкните" + +#: frescobaldi_app/cut_assign.py:39 +#, fuzzy +msgid "Cut and Assign" +msgstr "Вырезать и Присвоить" + +#: frescobaldi_app/cut_assign.py:40 +#, fuzzy +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "" +"Введите имя для переменной, которая будет присвоена выделенному тексту:" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +#, fuzzy +msgid "Untitled" +msgstr "Заголовок 2" + +#: frescobaldi_app/document.py:145 +msgid "Untitled ({num})" +msgstr "" + +#: frescobaldi_app/documentactions.py:125 +#, fuzzy +msgid "Cut and Assign..." +msgstr "Вырезать и Присвоить" + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "" + +#: frescobaldi_app/documentactions.py:127 +msgid "&Automatic Indent" +msgstr "" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "" + +#: frescobaldi_app/documentactions.py:129 +#, fuzzy +msgid "&Format" +msgstr "Фермата" + +#: frescobaldi_app/documentactions.py:130 +#, fuzzy +msgid "&Update with convert-ly..." +msgstr "Обновить с помощью convert-ly" + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +#, fuzzy +msgid "&Save" +msgstr "Сохранить" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +msgid "Save &As..." +msgstr "" + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "" + +#: frescobaldi_app/documentmenu.py:42 +#, fuzzy +msgctxt "menu title" +msgid "&Document" +msgstr "&Документ" + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Произошла внутренняя ошибка:" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "Внутренняя ошибка" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Послать отчет об ошибке по Email" + +#: frescobaldi_app/exception.py:79 +#, fuzzy +msgid "Optionally describe below what you were doing:" +msgstr "Дополнительно опишите ваши действия:" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:76 +msgid "Roman Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:77 +msgid "Sans Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:79 +#, fuzzy +msgid "Staff Size:" +msgstr "Тип нотоносца:" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Расставить переносы в тексте" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Выберите язык:" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +#, fuzzy +msgid "Lyrics" +msgstr "Тексты" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +#, fuzzy +msgctxt "menu title" +msgid "Tools" +msgstr "&Панели инструментов" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +#, fuzzy +msgid "Preferences" +msgstr "Общие настройки" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/inputdialog.py:101 +#, fuzzy +msgid "Select Color" +msgstr "Каталог по умолчанию:" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:206 +#, fuzzy +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "" +"Невозможно запустить LilyPond/ Проверьте путь к программе и разрешения." + +#: frescobaldi_app/job.py:209 +#, fuzzy +msgid "Could not read from the process." +msgstr "Невозможно чтение из процесса LilyPond." + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Неизвестная ошибка произошла." + +#: frescobaldi_app/job.py:216 +#, fuzzy +msgid "Exited with return code {code}." +msgstr "Программа LilyPond [%1] завершилась с кодом %2." + +#: frescobaldi_app/job.py:218 +#, fuzzy +msgid "Exited with exit status {status}." +msgstr "Программа LilyPond [%1] завершилась с кодом %2." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "" + +#: frescobaldi_app/lyrics.py:132 +#, fuzzy +msgid "&Hyphenate Lyrics Text..." +msgstr "Расставить переносы в тексте" + +#: frescobaldi_app/lyrics.py:133 +#, fuzzy +msgid "&Remove hyphenation" +msgstr "Удалить переносы" + +#: frescobaldi_app/lyrics.py:134 +#, fuzzy +msgid "&Copy Lyrics with hyphenation removed" +msgstr "Удалить переносы" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "" + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Используемая кодировка" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Номер строки для перехода, начиная с 1" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Столбец для перехода, начиная с 0" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +#, fuzzy +msgid "[modified]" +msgstr "изменен" + +#: frescobaldi_app/mainwindow.py:268 +#, fuzzy +msgctxt "dialog title" +msgid "Close Document" +msgstr "&Исходный документ" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:281 +#, fuzzy +msgid "Tab Bar" +msgstr "Табулатура" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +#, fuzzy +msgid "Warning" +msgstr "Настройка гитары" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:354 +#, fuzzy +msgctxt "dialog title" +msgid "Open File" +msgstr "Открыть файл" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:399 +#, fuzzy +msgctxt "dialog title" +msgid "Save File" +msgstr "Сохранить" + +#: frescobaldi_app/mainwindow.py:439 +#, fuzzy +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Сохранить" + +#: frescobaldi_app/mainwindow.py:445 +#, fuzzy +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Настройки партитуры" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:541 +#, fuzzy +msgctxt "dialog title" +msgid "Print Source" +msgstr "Печать" + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:923 +msgctxt "action: new document" +msgid "&New" +msgstr "" + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:927 +#, fuzzy +msgid "Open Current Directory" +msgstr "Открыть текущую папку" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:931 +#, fuzzy +msgid "Save All" +msgstr "Сохранить" + +#: frescobaldi_app/mainwindow.py:932 +#, fuzzy +msgid "Print Source..." +msgstr "Печать" + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "" + +#: frescobaldi_app/mainwindow.py:935 +#, fuzzy +msgid "Close All Documents" +msgstr "&Исходный документ" + +#: frescobaldi_app/mainwindow.py:936 +#, fuzzy +msgid "Closes all documents and leaves the current session." +msgstr "Уменьшает длительности в 2 раза в выделенном фрагменте." + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:941 +#, fuzzy +msgid "&Undo" +msgstr "Скрыть док" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Копировать" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:946 +#, fuzzy +msgid "&Paste" +msgstr "Размер страницы:" + +#: frescobaldi_app/mainwindow.py:947 +msgid "Select &All" +msgstr "" + +#: frescobaldi_app/mainwindow.py:948 +msgid "Select &Block" +msgstr "" + +#: frescobaldi_app/mainwindow.py:949 +msgid "Select &None" +msgstr "" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "" + +#: frescobaldi_app/mainwindow.py:952 +#, fuzzy +msgid "&Find..." +msgstr "Печать" + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "" + +#: frescobaldi_app/mainwindow.py:954 +#, fuzzy +msgid "Find Pre&vious" +msgstr "Предыдущий" + +#: frescobaldi_app/mainwindow.py:955 +#, fuzzy +msgid "&Replace..." +msgstr "Поиск..." + +#: frescobaldi_app/mainwindow.py:956 +#, fuzzy +msgid "Pr&eferences..." +msgstr "Общие настройки" + +#: frescobaldi_app/mainwindow.py:958 +#, fuzzy +msgid "&Next Document" +msgstr "&Документ" + +#: frescobaldi_app/mainwindow.py:959 +#, fuzzy +msgid "&Previous Document" +msgstr "&Исходный документ" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:961 +#, fuzzy +msgid "Scroll Down" +msgstr "Вниз" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "" + +#: frescobaldi_app/menu.py:81 +#, fuzzy +msgctxt "menu title" +msgid "&File" +msgstr "Заголовок" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "" + +#: frescobaldi_app/menu.py:147 +#, fuzzy +msgctxt "menu title" +msgid "&View" +msgstr "&Панели инструментов" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "" + +#: frescobaldi_app/menu.py:189 +#, fuzzy +msgctxt "menu title" +msgid "&LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/menu.py:208 +#, fuzzy +msgctxt "menu title" +msgid "&Tools" +msgstr "&Панели инструментов" + +#: frescobaldi_app/menu.py:233 +#, fuzzy +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "&Тексты" + +#: frescobaldi_app/menu.py:245 +#, fuzzy +msgctxt "submenu title" +msgid "&Pitch" +msgstr "&Тон" + +#: frescobaldi_app/menu.py:259 +#, fuzzy +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "&Ритм" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "" + +#: frescobaldi_app/musicpreview.py:113 +#, fuzzy +msgid "Document:" +msgstr "&Документ" + +#: frescobaldi_app/musicpreview.py:195 +#, fuzzy +msgid "&Print" +msgstr "Печать" + +#: frescobaldi_app/musicpreview.py:196 +#, fuzzy +msgid "Music Preview" +msgstr "Предпросмотр PDF" + +#: frescobaldi_app/popplerdummy.py:42 +#, fuzzy +msgid "Could not load the {name} module." +msgstr "Не удалось загрузить %1" + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" + +#: frescobaldi_app/popplerprint.py:61 +#, fuzzy +msgid "PDF Document" +msgstr "&Документ" + +#: frescobaldi_app/popplerprint.py:69 +#, fuzzy +msgid "Print {filename}" +msgstr "Печать %1" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +#, fuzzy +msgid "Printing Error" +msgstr "Внутренняя ошибка" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +#, fuzzy +msgid "Could not send the document to the printer." +msgstr "Невозможно чтение из процесса LilyPond." + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "" + +#: frescobaldi_app/search.py:99 +#, fuzzy +msgid "Search:" +msgstr "Поиск..." + +#: frescobaldi_app/search.py:100 +#, fuzzy +msgid "&Case" +msgstr "Размер страницы:" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "" + +#: frescobaldi_app/search.py:104 +#, fuzzy +msgid "The total number of matches" +msgstr "Количество строф." + +#: frescobaldi_app/search.py:105 +#, fuzzy +msgid "Close" +msgstr "Композитор" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "" + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "" + +#: frescobaldi_app/search.py:110 +#, fuzzy +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "Уменьшает длительности в 2 раза в выделенном фрагменте." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "" + +#: frescobaldi_app/viewmanager.py:91 +#, fuzzy +msgid "&Close View" +msgstr "&Панели инструментов" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:444 +msgid "Close &Other Views" +msgstr "" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:446 +#, fuzzy +msgid "&Previous View" +msgstr "Предыдущий" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +msgid "Special Characters" +msgstr "" + +#: frescobaldi_app/charmap/__init__.py:41 +msgid "Special Charac&ters" +msgstr "" + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +#, fuzzy +msgid "Documentation Browser" +msgstr "Документация LilyPond" + +#: frescobaldi_app/docbrowser/__init__.py:47 +#, fuzzy +msgid "&Documentation Browser" +msgstr "Документация LilyPond" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +#, fuzzy +msgid "Back" +msgstr "Медные духовые" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "" + +#: frescobaldi_app/docbrowser/__init__.py:84 +#, fuzzy +msgid "&LilyPond Documentation" +msgstr "Документация LilyPond:" + +#: frescobaldi_app/docbrowser/__init__.py:85 +#, fuzzy +msgid "&Contextual LilyPond Help" +msgstr "LilyPond" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Поиск..." + +#: frescobaldi_app/docbrowser/browser.py:136 +#, fuzzy +msgid "(local)" +msgstr "Голос" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +#, fuzzy +msgid "LilyPond Source" +msgstr "LilyPond журнал" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +#, fuzzy +msgid "Documents" +msgstr "&Документ" + +#: frescobaldi_app/doclist/__init__.py:40 +#, fuzzy +msgid "Docum&ents" +msgstr "&Документ" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:119 +#, fuzzy +msgid "LilyPond Version:" +msgstr "Вставить версию LilyPond" + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:121 +#, fuzzy +msgid "Resolution:" +msgstr "Версия:" + +#: frescobaldi_app/engrave/custom.py:123 +#, fuzzy +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "Запустить LilyPond в режиме предварительного просмотра" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "Запускать LilyPond в режиме вывода подробной информации" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +#, fuzzy +msgid "Delete intermediate output files" +msgstr "Удалить служебные файлы LilyPond." + +#: frescobaldi_app/engrave/custom.py:126 +#, fuzzy +msgid "Command line:" +msgstr "Команда печати:" + +#: frescobaldi_app/engrave/custom.py:127 +#, fuzzy +msgid "Run LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/engrave/custom.py:149 +#, fuzzy +msgid "LilyPond {version}" +msgstr "Вставить версию LilyPond" + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:218 +#, fuzzy +msgid "The LilyPond executable" +msgstr "Файлы LilyPon" + +#: frescobaldi_app/engrave/custom.py:219 +#, fuzzy +msgid "All the include paths" +msgstr "Файлы LilyPon" + +#: frescobaldi_app/engrave/custom.py:220 +#, fuzzy +msgid "The filename of the document" +msgstr "Синхронизировать консоль с текущим документом" + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/result_menu.py:45 +#, fuzzy +msgid "Generated &Files" +msgstr "&Сгенерированные файлы" + +#: frescobaldi_app/engrave/result_menu.py:66 +#, fuzzy +msgid "No files available" +msgstr "Настройки недоступны." + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "" + +#: frescobaldi_app/help/browser.py:78 +#, fuzzy +msgid "Start" +msgstr "Стаккато" + +#: frescobaldi_app/help/browser.py:79 +#, fuzzy +msgid "Contents" +msgstr "Команда печати:" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "" + +#: frescobaldi_app/help/contents.py:46 +#, fuzzy +msgid "Frescobaldi Manual" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "" + +#: frescobaldi_app/help/contents.py:88 +#, fuzzy +msgid "Introduction" +msgstr "Направление:" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +#, fuzzy +msgid "LilyPond Preferences" +msgstr "Файлы LilyPon" + +#: frescobaldi_app/help/contents.py:142 +msgctxt "menu title" +msgid "View" +msgstr "" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "" + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:228 +#, fuzzy +msgid "Other Tools" +msgstr "Другие" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:252 +#, fuzzy +msgid "About Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "" + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:321 +#, fuzzy +msgid "History of Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "" + +#: frescobaldi_app/help/contents.py:377 +#, fuzzy +msgid "Edit" +msgstr "Печать" + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:427 +#, fuzzy +msgid "Document variables" +msgstr "Показать закладки документов" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "" + +#: frescobaldi_app/help/contents.py:444 +#, fuzzy +msgid "mode" +msgstr "Удалить нотные штили" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" + +#: frescobaldi_app/help/contents.py:448 +#, fuzzy +msgid "filename" +msgstr "Печать %1" + +#: frescobaldi_app/help/contents.py:449 +#, fuzzy +msgid "Compiles another LilyPond document instead of the current." +msgstr "Невозможно чтение из процесса LilyPond." + +#: frescobaldi_app/help/contents.py:450 +#, fuzzy +msgid "encoding" +msgstr "Используемая кодировка" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "" + +#: frescobaldi_app/help/contents.py:452 +#, fuzzy +msgid "version" +msgstr "Версия:" + +#: frescobaldi_app/help/contents.py:453 +#, fuzzy +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "Версия LilyPond используемая для текущего документа." + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +#, fuzzy +msgid "number" +msgstr "Имя" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "" + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "" + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "" + +#: frescobaldi_app/help/contents.py:479 +#, fuzzy +msgid "Table of Contents" +msgstr "Оглавление" + +#: frescobaldi_app/help/helpimpl.py:115 +#, fuzzy +msgid "Up:" +msgstr "Вверх" + +#: frescobaldi_app/help/helpimpl.py:130 +#, fuzzy +msgid "Next:" +msgstr "Далее" + +#: frescobaldi_app/help/helpimpl.py:133 +msgid "See also:" +msgstr "" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "LilyPond журнал" + +#: frescobaldi_app/logtool/__init__.py:51 +#, fuzzy +msgid "LilyPond &Log" +msgstr "LilyPond журнал" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Щёлкните, для редактирования этого файла" + +#: frescobaldi_app/miditool/__init__.py:51 +#, fuzzy +msgid "MIDI" +msgstr "Воспроизвести MIDI" + +#: frescobaldi_app/miditool/__init__.py:52 +#, fuzzy +msgid "MIDI &Player" +msgstr "Программа воспроизведения MIDI" + +#: frescobaldi_app/miditool/__init__.py:97 +#, fuzzy +msgctxt "midi player" +msgid "Pause" +msgstr "Размер страницы:" + +#: frescobaldi_app/miditool/__init__.py:98 +#, fuzzy +msgctxt "midi player" +msgid "Play" +msgstr "Воспроизвести %1" + +#: frescobaldi_app/miditool/__init__.py:99 +#, fuzzy +msgctxt "midi player" +msgid "Stop" +msgstr "Шаг" + +#: frescobaldi_app/miditool/__init__.py:100 +#, fuzzy +msgctxt "midi player" +msgid "Restart" +msgstr "Стаккато" + +#: frescobaldi_app/miditool/widget.py:102 +#, fuzzy +msgid "Tempo" +msgstr "Темп:" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:191 +#, fuzzy +msgid "Select Music View Document" +msgstr "&Исходный документ" + +#: frescobaldi_app/musicview/__init__.py:192 +#, fuzzy +msgid "&Print Music..." +msgstr "Печать" + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:198 +#, fuzzy +msgid "Fit &Page" +msgstr "Первая страница" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:339 +msgid "Choose the PDF document to display." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:401 +#, fuzzy +msgid "Fit Page" +msgstr "Первая страница" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "" + +#: frescobaldi_app/musicview/image.py:129 +#, fuzzy +msgid "Antialias" +msgstr "Итальянский" + +#: frescobaldi_app/musicview/image.py:130 +#, fuzzy +msgid "Drag" +msgstr "Дорийский" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "" + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "" + +#: frescobaldi_app/musicview/image.py:133 +#, fuzzy +msgid "&Save As..." +msgstr "Сохранить" + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" + +#: frescobaldi_app/musicview/image.py:167 +#, fuzzy +msgid "Image from {filename}" +msgstr "Печать %1" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "" + +#: frescobaldi_app/musicview/image.py:214 +#, fuzzy +msgid "Could not save the image." +msgstr "Не удалось загрузить %1" + +#: frescobaldi_app/pitch/__init__.py:99 +#, fuzzy +msgid "Pitch Name &Language" +msgstr "Язык нотной записи" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "Изменить язык ввода нот в этом документе или в выделении." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:109 +#, fuzzy +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "Уменьшает длительности в 2 раза в выделенном фрагменте." + +#: frescobaldi_app/pitch/__init__.py:111 +msgid "&Transpose..." +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:113 +#, fuzzy +msgid "Transposes all notes in the document or selection." +msgstr "Уменьшает длительности в 2 раза в выделенном фрагменте." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Язык нотной записи" + +#: frescobaldi_app/pitch/pitch.py:82 +#, fuzzy +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"Невозможно выполнить требуемое преобразование.\n" +"\n" +"Музыка содержит четвертьтоновые альтерации, которые недоступны в языковой " +"записи \"%1\"." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"Язык ввода нот выделенного текста был обновлен, но Вы должны вручную " +"добавить следующую команду в документ:" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:399 +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:581 +#, fuzzy +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"Невозможно выполнить требуемое преобразование. Музыка содержит " +"четвертьтоновые альтерации, которые недоступны в языковой записи %1." + +#: frescobaldi_app/pitch/pitch.py:712 +#, fuzzy +msgid "Pitch manipulation" +msgstr "Артикуляция" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:744 +#, fuzzy +msgctxt "submenu title" +msgid "Pitch" +msgstr "&Тон" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "" + +#: frescobaldi_app/po/messages.py:44 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Сохранить" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "" + +#: frescobaldi_app/po/messages.py:46 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Композитор" + +#: frescobaldi_app/po/messages.py:47 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Открыть %1" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "" + +#: frescobaldi_app/po/messages.py:50 +#, fuzzy +msgctxt "QFileDialog" +msgid "File" +msgstr "Заголовок" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "" + +#: frescobaldi_app/po/messages.py:52 +#, fuzzy +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Каталог по умолчанию:" + +#: frescobaldi_app/po/messages.py:53 +#, fuzzy +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Все файлы" + +#: frescobaldi_app/po/messages.py:55 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "Партия ударных" + +#: frescobaldi_app/po/messages.py:56 +#, fuzzy +msgctxt "QScrollBar" +msgid "Top" +msgstr "Щёлкните" + +#: frescobaldi_app/po/messages.py:57 +#, fuzzy +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Портато" + +#: frescobaldi_app/po/messages.py:58 +msgctxt "QScrollBar" +msgid "Page up" +msgstr "" + +#: frescobaldi_app/po/messages.py:59 +msgctxt "QScrollBar" +msgid "Page down" +msgstr "" + +#: frescobaldi_app/po/messages.py:60 +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "" + +#: frescobaldi_app/po/messages.py:61 +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "" + +#: frescobaldi_app/po/messages.py:62 +#, fuzzy +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Left heel" + +#: frescobaldi_app/po/messages.py:63 +#, fuzzy +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Right heel" + +#: frescobaldi_app/po/messages.py:64 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Флажолет" + +#: frescobaldi_app/po/messages.py:65 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Вставить ритм" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Общие настройки" + +#: frescobaldi_app/preferences/__init__.py:182 +#, fuzzy +msgid "MIDI Settings" +msgstr "Струнные" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +msgid "Helper Applications" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Пути" + +#: frescobaldi_app/preferences/__init__.py:212 +#, fuzzy +msgid "LilyPond Documentation" +msgstr "Документация LilyPond:" + +#: frescobaldi_app/preferences/__init__.py:222 +#, fuzzy +msgid "Keyboard Shortcuts" +msgstr "Клавишные" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:242 +#, fuzzy +msgid "Tools" +msgstr "&Панели инструментов" + +#: frescobaldi_app/preferences/documentation.py:64 +#, fuzzy +msgid "Paths to LilyPond Documentation" +msgstr "Документация LilyPond:" + +#: frescobaldi_app/preferences/documentation.py:66 +#, fuzzy +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "Здесь Вы можете выбрать, какие Guile скрипты загружать в Rumor." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:111 +#, fuzzy +msgid "Preferred Language:" +msgstr "Язык:" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "По умолчанию" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:135 +#, fuzzy +msgid "Please enter a local path or a URL:" +msgstr "" +"Используйте только латинские буквы, цифры и символ подчеркивания в названии " +"расширения." + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:124 +#, fuzzy +msgid "Default Styles" +msgstr "По умолчанию" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +#, fuzzy +msgid "Text" +msgstr "Далее" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:363 +#, fuzzy +msgid "Italic" +msgstr "Итальянский" + +#: frescobaldi_app/preferences/fontscolors.py:364 +msgid "Underline" +msgstr "" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +msgid "Selected Text" +msgstr "" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +#, fuzzy +msgid "Marked Line" +msgstr "&Тактовые черты" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +#, fuzzy +msgid "Error Line" +msgstr "&Тактовые черты" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +msgid "Matching Character" +msgstr "" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +#, fuzzy +msgid "Preview Background" +msgstr "режим просмотра" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +#, fuzzy +msgid "Keyword" +msgstr "Клавиатура" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +#, fuzzy +msgid "Function" +msgstr "Направление:" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +#, fuzzy +msgid "Value" +msgstr "Размер страницы:" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +#, fuzzy +msgid "String" +msgstr "Струнные" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +#, fuzzy +msgid "Escape" +msgstr "Альбомная" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +#, fuzzy +msgid "Comment" +msgstr "Команда печати:" + +#: frescobaldi_app/preferences/fontscolors.py:483 +#, fuzzy +msgid "Pitch" +msgstr "&Тон" + +#: frescobaldi_app/preferences/fontscolors.py:484 +#, fuzzy +msgid "Octave" +msgstr "Сохранить" + +#: frescobaldi_app/preferences/fontscolors.py:485 +#, fuzzy +msgid "Duration" +msgstr "Добавить точки к длительностям" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +#, fuzzy +msgid "String Number" +msgstr "&Тактовые черты" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:491 +msgid "Dynamic" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Артикуляция" + +#: frescobaldi_app/preferences/fontscolors.py:493 +#, fuzzy +msgid "Chord" +msgstr "Хор" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +msgid "Repeat" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +#, fuzzy +msgid "Command" +msgstr "Команда печати:" + +#: frescobaldi_app/preferences/fontscolors.py:499 +#, fuzzy +msgid "Specifier" +msgstr "Другие" + +#: frescobaldi_app/preferences/fontscolors.py:500 +#, fuzzy +msgid "User Command" +msgstr "Команда печати:" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +#, fuzzy +msgid "Markup" +msgstr "Арфа" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:503 +#, fuzzy +msgid "Lyric Text" +msgstr "Расставить переносы в тексте" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:506 +#, fuzzy +msgid "Layout Object" +msgstr "Выбор языка" + +#: frescobaldi_app/preferences/fontscolors.py:507 +#, fuzzy +msgid "Property" +msgstr "Поэт" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +msgid "Escaped Character" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:517 +#, fuzzy +msgid "Tag" +msgstr "Щёлкните" + +#: frescobaldi_app/preferences/fontscolors.py:518 +#, fuzzy +msgid "LilyPond Tag" +msgstr "LilyPond журнал" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:521 +#, fuzzy +msgid "Entity Reference" +msgstr "Общие настройки" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:527 +#, fuzzy +msgid "Number" +msgstr "Имя" + +#: frescobaldi_app/preferences/fontscolors.py:528 +#, fuzzy +msgid "LilyPond Environment" +msgstr "Документация LilyPond" + +#: frescobaldi_app/preferences/fontscolors.py:532 +#, fuzzy +msgid "Texinfo" +msgstr "Тенор" + +#: frescobaldi_app/preferences/fontscolors.py:534 +msgid "Block" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Язык:" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Стиль:" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "" + +#: frescobaldi_app/preferences/general.py:214 +#, fuzzy +msgid "When saving documents" +msgstr "Послать документы по email" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "Запоминать позицию курсора, закладки и т.п." + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Каталог по умолчанию:" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "Каталог по умолчанию для Ваших LilyPond документов (опционально)." + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:71 +#, fuzzy +msgid "MIDI:" +msgstr "Воспроизвести MIDI" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:76 +#, fuzzy +msgid "File Manager:" +msgstr "Менеджер сокращений" + +#: frescobaldi_app/preferences/helpers.py:77 +#, fuzzy +msgid "Shell:" +msgstr "Партитура:" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:81 +#, fuzzy +msgid "LilyPond versions to use" +msgstr "Вставить версию LilyPond" + +#: frescobaldi_app/preferences/lilypond.py:82 +#, fuzzy +msgid "Automatically choose LilyPond version from document" +msgstr "Версия LilyPond используемая для новых документов" + +#: frescobaldi_app/preferences/lilypond.py:84 +#, fuzzy +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "Здесь Вы можете выбрать, какие Guile скрипты загружать в Rumor." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:101 +msgid "See also {link}." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:149 +#, fuzzy +msgid "Set as &Default" +msgstr "Сохранить по умолчанию" + +#: frescobaldi_app/preferences/lilypond.py:190 +#, fuzzy +msgid "default" +msgstr "По умолчанию" + +#: frescobaldi_app/preferences/lilypond.py:238 +#, fuzzy +msgid "LilyPond Command:" +msgstr "Документация LilyPond:" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "Имя или полный путь к программе LilyPond" + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:241 +#, fuzzy +msgid "LilyPond-book:" +msgstr "LilyPond" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:279 +#, fuzzy +msgid "Running LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:286 +#, fuzzy +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "Удалить служебные файлы LilyPond." + +#: frescobaldi_app/preferences/lilypond.py:287 +#, fuzzy +msgid "LilyPond include path:" +msgstr "Файлы LilyPon" + +#: frescobaldi_app/preferences/midi.py:77 +#, fuzzy +msgid "MIDI Ports" +msgstr "Программа воспроизведения MIDI" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" + +#: frescobaldi_app/preferences/midi.py:82 +#, fuzzy +msgid "Player output:" +msgstr "Выход MIDI:" + +#: frescobaldi_app/preferences/midi.py:84 +#, fuzzy +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "Здесь Вы можете выбрать, какие Guile скрипты загружать в Rumor." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:135 +#, fuzzy +msgid "Close unused MIDI output" +msgstr "Создать MIDI" + +#: frescobaldi_app/preferences/midi.py:137 +#, fuzzy +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "Здесь Вы можете выбрать, какие Guile скрипты загружать в Rumor." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Сокращение" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:125 +#, fuzzy +msgid "Other commands:" +msgstr "Команда печати:" + +#: frescobaldi_app/preferences/shortcuts.py:173 +#, fuzzy +msgid "&Edit Shortcut for \"{name}\"" +msgstr "Сокращение" + +#: frescobaldi_app/preferences/shortcuts.py:178 +#, fuzzy +msgid "(no shortcut)" +msgstr "Сокращение" + +#: frescobaldi_app/preferences/shortcuts.py:206 +#, fuzzy +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "Удалить штили у ударных нот." +msgstr[1] "Удалить штили у ударных нот." +msgstr[2] "Удалить штили у ударных нот." + +#: frescobaldi_app/preferences/shortcuts.py:304 +#, fuzzy +msgid "(default)" +msgstr "По умолчанию" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:142 +#, fuzzy +msgid "Magnifier Size:" +msgstr "Размер страницы:" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "" + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:220 +#, fuzzy +msgid "Group documents by directory" +msgstr "Открыть текущую папку" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Быстрая вставка" + +#: frescobaldi_app/quickinsert/__init__.py:48 +#, fuzzy +msgid "Quick &Insert" +msgstr "Быстрая вставка" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Использовать сокращения" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "" +"Использовать сокращенную нотацию для некоторых обозначений, таких как " +"стаккато." + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Артикуляционные обозначения" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Другие артикуляционные обозначения или другие знаки." + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Акцент" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Маркато" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Стаккатиссимо" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Стаккато" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Портато" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Тенуто" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Орнаментация" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Трель" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Мордент" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Перечеркнутый мордент" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Группетто" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "Двойной мордент" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "Двойной перечеркнутый мордент" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Обратное группетто" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "Знаки" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Фермата" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Короткая фермата" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Длинная фермата" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Очень длинная фермата" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Segno" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Varcoda" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Другие" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Вверх смычком" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Вниз смычком" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Флажолет" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Ставка" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Left heel" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Right heel" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Right toe" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +#, fuzzy +msgid "Bar Lines" +msgstr "&Тактовые черты" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Двойная тактовая черта" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "Заключительная тактовая черта" + +#: frescobaldi_app/quickinsert/barlines.py:63 +#, fuzzy +msgid "Dotted bar line" +msgstr "Без тактовых черт" + +#: frescobaldi_app/quickinsert/barlines.py:64 +#, fuzzy +msgid "Dashed bar line" +msgstr "Пункти́рная та́ктовая черта́" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Невидимая тактовая черта" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:71 +#, fuzzy +msgid "Tick bar line" +msgstr "Без тактовых черт" + +#: frescobaldi_app/quickinsert/barlines.py:72 +#, fuzzy +msgid "Single bar line" +msgstr "Одиночная тактовая черта" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:75 +#, fuzzy +msgid "Double wide bar line" +msgstr "Увеличить длительности в 2 раза" + +#: frescobaldi_app/quickinsert/barlines.py:76 +#, fuzzy +msgid "Segno bar line" +msgstr "Одиночная тактовая черта" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +msgid "Configure Keyboard Shortcut ({key})" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Нет" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:128 +msgid "Dynamic sign {name}" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:115 +#, fuzzy +msgid "Dashed Glissando" +msgstr "Пункти́рная та́ктовая черта́" + +#: frescobaldi_app/quickinsert/spanners.py:116 +#, fuzzy +msgid "Dotted Glissando" +msgstr "Без тактовых черт" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Направление:" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Вверх" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Автоматически" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Вниз" + +#: frescobaldi_app/quickinsert/widget.py:127 +#, fuzzy +msgid "The Quick Insert Panel" +msgstr "Быстрая вставка" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:146 +#, fuzzy +msgid "&Double durations" +msgstr "Увеличить длительности в 2 раза" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Увеличивает длительности в 2 раза в выделенном фрагменте" + +#: frescobaldi_app/rhythm/__init__.py:149 +#, fuzzy +msgid "&Halve durations" +msgstr "Уменьшить длительности в 2 раза" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Уменьшает длительности в 2 раза в выделенном фрагменте." + +#: frescobaldi_app/rhythm/__init__.py:152 +#, fuzzy +msgid "Do&t durations" +msgstr "Добавить точки к длительностям" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Добавляет точки ко всем длительностям в выделенном фрагменте." + +#: frescobaldi_app/rhythm/__init__.py:155 +#, fuzzy +msgid "&Undot durations" +msgstr "Удалить точки у длительностей" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Удаляет одну точку у всех длительностей в выделенном фрагменте." + +#: frescobaldi_app/rhythm/__init__.py:158 +#, fuzzy +msgid "Remove &scaling" +msgstr "Удалить нерегулярные группы" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "Удалить нерегулярные группы (*n/m) в выделенном." + +#: frescobaldi_app/rhythm/__init__.py:161 +#, fuzzy +msgid "&Remove durations" +msgstr "Удалить длительности" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "Удаляет все длительности в выделенном фрагменте." + +#: frescobaldi_app/rhythm/__init__.py:164 +#, fuzzy +msgid "Make &implicit" +msgstr "Сделать длительности неявными" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "Делает длительности неявными (удаляет повторяющиеся длительности)" + +#: frescobaldi_app/rhythm/__init__.py:167 +#, fuzzy +msgid "Make implicit (per &line)" +msgstr "Сделать длительности неявными" + +#: frescobaldi_app/rhythm/__init__.py:169 +#, fuzzy +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "Делает длительности неявными (удаляет повторяющиеся длительности)" + +#: frescobaldi_app/rhythm/__init__.py:171 +#, fuzzy +msgid "Make &explicit" +msgstr "Сделать длительности явными" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "Сделать длительности явными" + +#: frescobaldi_app/rhythm/__init__.py:175 +#, fuzzy +msgid "&Apply rhythm..." +msgstr "Применить ритм..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Применить введенный ритм к выделенной музыке." + +#: frescobaldi_app/rhythm/__init__.py:178 +#, fuzzy +msgid "&Copy rhythm" +msgstr "Копировать ритм" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Копировать ритм выделенной музыки." + +#: frescobaldi_app/rhythm/__init__.py:181 +#, fuzzy +msgid "&Paste rhythm" +msgstr "Вставить ритм" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Вставить ритм в выделенную музыку." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Применить ритм" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Введите ритм:" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:279 +#, fuzzy +msgctxt "submenu title" +msgid "Rhythm" +msgstr "&Ритм" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Новая партитура" + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "Music follows here." + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Удалить строку LilyPond по умолчанию" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Мастер Настройки Партитуры" + +#: frescobaldi_app/scorewiz/dialog.py:80 +#, fuzzy +msgid "Clear" +msgstr "Челеста" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:83 +#, fuzzy +msgid "Preview" +msgstr "Предпросмотр PDF" + +#: frescobaldi_app/scorewiz/dialog.py:130 +#, fuzzy +msgid "Score Preview" +msgstr "Предпросмотр PDF" + +#: frescobaldi_app/scorewiz/dialog.py:164 +#, fuzzy +msgid "&Titles and Headers" +msgstr "Заголовки" + +#: frescobaldi_app/scorewiz/dialog.py:173 +#, fuzzy +msgid "&Parts" +msgstr "Инструменты" + +#: frescobaldi_app/scorewiz/dialog.py:182 +#, fuzzy +msgid "&Score settings" +msgstr "Настройки партитуры" + +#: frescobaldi_app/scorewiz/dialog.py:191 +#, fuzzy +msgid "The Score Wizard" +msgstr "Мастер Настройки Партитуры" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Щёлкните для ввода значения." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "внизу первой страницы" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "внизу последней страницы" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "Посвящение" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Заголовок" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Заголовок 2" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "Заголовок 3" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Инструмент" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Композитор" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Редактор" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Поэт" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Метр" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Название произведения" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Опус" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Авторское право" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Строка программы" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Доступные инструменты:" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Партитура:" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +#, fuzzy +msgid "&Remove" +msgstr "Удалить нотные штили" + +#: frescobaldi_app/scorewiz/score.py:104 +#, fuzzy +msgid "Move up" +msgstr "Переместить" + +#: frescobaldi_app/scorewiz/score.py:105 +#, fuzzy +msgid "Move down" +msgstr "Переместить" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Ключевые знаки:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Размер:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Затакт:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Метроном:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Темп:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Мажор" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Минор" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "Ионийский" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Дорийский" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Фригийский" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Лидийский" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Миксолидийский" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Эолийский" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Локрийский" + +#: frescobaldi_app/scorewiz/settings.py:73 +#, fuzzy +msgid "Score properties" +msgstr "Настройки партитуры" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Общие настройки" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Использовать типографские кавычки" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "Заменить обычные кавычки в заголовках на типографские." + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Удалить строку программы по умолчанию" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Удаляет строку программы выводимую LilyPond по умолчанию." + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Удалить номера тактов" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "Удаляет номера тактов в начале каждой системы." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "Создать MIDI" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "Создать MIDI файл, в дополнение к PDF" + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Показать метроном" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"Если выбрано, показывает значение метронома в начале партитуры. Вывод MIDI " +"также использует значение метронома." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Размер страницы:" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Альбомная" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Длинный" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Короткий" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Названия инструментов" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "Первая система:" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Остальные системы:" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "" +"Использовать длинные или короткие имена инструментов перед первой системой." + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "" +"(Не)Показывать сокращенные или длинные названия инструментов перед " +"следующими системами." + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "Язык LilyPond для названий инструментов." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Язык нотной записи:" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "Язык LilyPond для обозначения нот." + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Версия:" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "Версия LilyPond используемая для текущего документа." + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "Настройки недоступны." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Количество голосов на каждом нотоносце." + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "В основном, полезно при наборе полифонической музыки." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Правая рука:" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Левая рука:" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Стиль аккордов:" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Гитарные диаграммы" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Показывать предопределенные гитарные диаграммы под названиями аккордов " +"(версия Lilypond 2.12 и выше)" + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "Немецкий" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +#, fuzzy +msgid "Semi-German" +msgstr "Semi-German" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "Итальянский" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "Французский" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Валторна" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "Hn.F." + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Труба in C" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +#, fuzzy +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Tr.C" + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Труба in B" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +#, fuzzy +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Tr.Bb" + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Тромбон" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Trb." + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Туба" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Басовая туба" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "B.Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Медные духовые" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +#, fuzzy +msgid "Staff Group" +msgstr "Тип нотоносца:" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +#, fuzzy +msgid "Brace" +msgstr "Медные духовые" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +#, fuzzy +msgid "Square" +msgstr "Сохранить" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +#, fuzzy +msgid "Connect Barlines" +msgstr "Без тактовых черт" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +#, fuzzy +msgid "Score" +msgstr "Партитура:" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +#, fuzzy +msgid "Piece:" +msgstr "Название произведения" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +#, fuzzy +msgid "Opus:" +msgstr "Опус" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +#, fuzzy +msgid "Containers" +msgstr "Без тактовых черт" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Фортепиано" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "Pno." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Клавесин" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Hs." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Клавикорд" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Clv." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Орган" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Org." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Педаль:" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Установите 0, чтобы убрать педаль." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Челеста" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Cel." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Клавишные" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Литавры" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Tmp." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Ксилофон" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Xyl." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Маримба" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +#, fuzzy +msgid "Lower staff:" +msgstr "Обычный" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Вибрафон" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Vib." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Колокола" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Tub." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Колокольчик" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Gls." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +#, fuzzy +msgid "Carillon" +msgstr "Кларнет" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +#, fuzzy +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +#, fuzzy +msgid "Manual staff:" +msgstr "Обычный" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +#, fuzzy +msgid "Pedal staff:" +msgstr "Обычный" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Ударные" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Dr." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Голоса:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Удалить нотные штили" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Удалить штили у ударных нот." + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "Партия ударных" + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "сохранять дистанцию" + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Ударные (5 линеек, по умолчанию)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Timbales-style (2 линейки)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Congas-style (2 линейки)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Bongos-style (2 линейки)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Percussion-style (1 линейка)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Ударные" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Тип нотоносца:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Настройка:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Обычный" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Табулатура" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Оба" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Мандолина" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mdl." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Настройка мандолины" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Банджо" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Bj." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Четыре струны (вместо пяти)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Классическая гитара" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +#, fuzzy +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "Gt." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Настройка гитары" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Джазовая гитара" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "J.Gt." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Бас" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "Bs." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Бас-гитара" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "E.Bs." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Арфа" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Hp." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Струнные щипковые" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Названия аккордов" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Цифрованный бас" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/special.py:70 +#, fuzzy +msgid "Staff" +msgstr "Тип нотоносца:" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Другие" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Скрипка" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Vl." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Альт" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "Vla." + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Виолончель" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "Контрабас" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Cb." + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +#, fuzzy +msgid "Basso Continuo" +msgstr "Бассо континуо" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "B.c." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Струнные" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Строфы:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Количество строф." + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Амбитус" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "" +"Показывает диапазон голоса от низшего до высшего тона в начале нотоносца" + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Сопрано" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +#, fuzzy +msgid "Mezzo-soprano" +msgstr "Меццо-сопрано" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "Ms." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Альт" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Тенор" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Нотный стан" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"Нотный стан с названиями аккордов сверху и текстом снизу. Второй нотоносец " +"опционален." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Добавить стан для аккомпанемента." + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" +"Добавить станы для аккомпанемента и поместить аккомпанируемый голос верхним." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Хор" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Выберите голоса для хора. Используйте буквы S, A, T или B. Дефис означает " +"новый нотоносец." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "Совет: для двойного хора можно использовать две хоровые партии." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Голоса:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +#, fuzzy +msgid "Lyrics:" +msgstr "Тексты" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +#, fuzzy +msgid "Piano reduction" +msgstr "Направление:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "Ch." + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Одинаковый текст во всех голосах" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +#, fuzzy +msgid "A set of the same lyrics is placed between all staves." +msgstr "Один и тот же текст располагается между всеми нотоносцами." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Одинаковый текст во всех голосах" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Разный текст у каждого голоса" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Каждый голос имеет свой текст." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +#, fuzzy +msgid "One set of stanzas is distributed across the staves." +msgstr "Один и тот же текст располагается между всеми нотоносцами." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "Голос" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Флейта" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Флейта пикколо" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Pic." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Басовая флейта" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Bfl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Гобой" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Ob." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +#, fuzzy +msgid "Oboe d'amore" +msgstr "Гобой д'амур" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Ob.d'am." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +#, fuzzy +msgid "English horn" +msgstr "Английский рожок" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "Eng.h." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Фагот" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Bn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Контрафагот" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "C.Bn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Кларнет" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Саксофон-сопранино" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "SiSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Саксофон-сопрано" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "SoSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Альт-саксофон" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "ASx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Тенор-саксофон" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "TSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Баритон-саксофон" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "BSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "Бас-саксофон" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "BsSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Сопрановая блокфлейта" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "S.rec." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Альтовая блокфлейта" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "A.rec." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Теноровая блокфлейта" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "T.rec." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Басовая блокфлейта" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "B.rec." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Деревянные духовые" + +#: frescobaldi_app/sessions/dialog.py:40 +#, fuzzy +msgid "Manage Sessions" +msgstr "Используемая сессия" + +#: frescobaldi_app/sessions/dialog.py:109 +#, fuzzy +msgid "Name:" +msgstr "Имя" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:111 +#, fuzzy +msgid "Base directory:" +msgstr "Каталог по умолчанию:" + +#: frescobaldi_app/sessions/dialog.py:133 +msgid "Edit session: {name}" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:166 +#, fuzzy +msgid "Please enter a session name." +msgstr "" +"Используйте только латинские буквы, цифры и символ подчеркивания в названии " +"расширения." + +#: frescobaldi_app/sessions/dialog.py:174 +#, fuzzy +msgid "Please do not use the name '{name}'." +msgstr "" +"Используйте только латинские буквы, цифры и символ подчеркивания в названии " +"расширения." + +#: frescobaldi_app/sessions/dialog.py:180 +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "" + +#: frescobaldi_app/sessions/manager.py:127 +msgctxt "New Session" +msgid "&New..." +msgstr "" + +#: frescobaldi_app/sessions/manager.py:129 +msgid "&Manage..." +msgstr "" + +#: frescobaldi_app/sessions/manager.py:130 +#, fuzzy +msgid "No Session" +msgstr "Ударные" + +#: frescobaldi_app/sessions/menu.py:55 +#, fuzzy +msgctxt "menu title" +msgid "&Session" +msgstr "Используемая сессия" + +#: frescobaldi_app/snippet/builtin.py:38 +#, fuzzy +msgid "Blank Line" +msgstr "&Тактовые черты" + +#: frescobaldi_app/snippet/builtin.py:44 +#, fuzzy +msgid "Single Typographical Quotes" +msgstr "Использовать типографские кавычки" + +#: frescobaldi_app/snippet/builtin.py:49 +#, fuzzy +msgid "Double Typographical Quotes" +msgstr "Использовать типографские кавычки" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:125 +#, fuzzy +msgid "Modern 2/2 Time Signature" +msgstr "Размер:" + +#: frescobaldi_app/snippet/builtin.py:131 +#, fuzzy +msgid "Modern 4/4 Time Signature" +msgstr "Размер:" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:148 +#, fuzzy +msgid "LilyPond Version" +msgstr "Вставить версию LilyPond" + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:166 +#, fuzzy +msgid "Upper case selection" +msgstr "Настройки партитуры" + +#: frescobaldi_app/snippet/builtin.py:172 +#, fuzzy +msgid "Lower case selection" +msgstr "Настройки партитуры" + +#: frescobaldi_app/snippet/builtin.py:178 +#, fuzzy +msgid "Title case selection" +msgstr "Построчный режим выбора" + +#: frescobaldi_app/snippet/builtin.py:189 +#, fuzzy +msgid "Markup lines" +msgstr "&Тактовые черты" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:202 +#, fuzzy +msgid "Tagline with date and LilyPond version" +msgstr "Вставить версию LilyPond" + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:227 +#, fuzzy +msgid "No Tagline" +msgstr "Строка программы" + +#: frescobaldi_app/snippet/builtin.py:235 +#, fuzzy +msgid "No Barnumbers" +msgstr "Удалить номера тактов" + +#: frescobaldi_app/snippet/builtin.py:245 +#, fuzzy +msgid "Midi Tempo" +msgstr "Темп:" + +#: frescobaldi_app/snippet/builtin.py:255 +#, fuzzy +msgid "Staff Size" +msgstr "Тип нотоносца:" + +#: frescobaldi_app/snippet/builtin.py:310 +#, fuzzy +msgid "A5 Paper" +msgstr "Размер страницы:" + +#: frescobaldi_app/snippet/builtin.py:318 +#, fuzzy +msgid "Document Fonts..." +msgstr "&Документ" + +#: frescobaldi_app/snippet/builtin.py:346 +#, fuzzy +msgid "Last note or chord" +msgstr "Повторить последнюю ноту или аккорд" + +#: frescobaldi_app/snippet/builtin.py:427 +#, fuzzy +msgid "Color" +msgstr "Композитор" + +#: frescobaldi_app/snippet/builtin.py:464 +#, fuzzy +msgid "Basic Leadsheet" +msgstr "Нотный стан" + +#: frescobaldi_app/snippet/builtin.py:508 +#, fuzzy +msgid "Choir Hymn" +msgstr "Хор" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:119 +#, fuzzy +msgid "Title:" +msgstr "Заголовок" + +#: frescobaldi_app/snippet/edit.py:120 +#, fuzzy +msgid "Shortcut:" +msgstr "Сокращение" + +#: frescobaldi_app/snippet/edit.py:131 +msgid "Click to change the keyboard shortcut." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:218 +#, fuzzy +msgctxt "menu title" +msgid "File" +msgstr "Заголовок" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:80 +#, fuzzy +msgid "The version of the default LilyPond program." +msgstr "Имя или полный путь к программе LilyPond" + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:96 +#, fuzzy +msgid "The name of the current document." +msgstr "Синхронизировать консоль с текущим документом" + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +#, fuzzy +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Удалить паузы" + +#: frescobaldi_app/snippet/import_export.py:119 +#, fuzzy +msgid "New Snippets" +msgstr "Удалить паузы" + +#: frescobaldi_app/snippet/import_export.py:120 +#, fuzzy +msgid "Updated Snippets" +msgstr "Удалить паузы" + +#: frescobaldi_app/snippet/import_export.py:121 +#, fuzzy +msgid "Unchanged Snippets" +msgstr "Удалить паузы" + +#: frescobaldi_app/snippet/import_export.py:183 +#, fuzzy +msgid "Import Keyboard Shortcuts" +msgstr "Клавишные" + +#: frescobaldi_app/snippet/import_export.py:188 +#, fuzzy +msgid "Choose which snippets you want to import:" +msgstr "Выберите файлы, которые Вы хотите послать:" + +#: frescobaldi_app/snippet/import_export.py:190 +#, fuzzy +msgid "There are no new or updated snippets in the file." +msgstr "Нет файлов для email." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Вставка" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "Имя" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Описание" + +#: frescobaldi_app/snippet/template.py:33 +msgid "Save as Template" +msgstr "" + +#: frescobaldi_app/snippet/template.py:34 +#, fuzzy +msgid "Please enter a template name:" +msgstr "" +"Используйте только латинские буквы, цифры и символ подчеркивания в названии " +"расширения." + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +#, fuzzy +msgid "Snippets" +msgstr "Удалить паузы" + +#: frescobaldi_app/snippet/tool.py:54 +#, fuzzy +msgid "&Snippets" +msgstr "Удалить паузы" + +#: frescobaldi_app/snippet/tool.py:79 +#, fuzzy +msgid "Save as Template..." +msgstr "Сохранить" + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +#, fuzzy +msgid "&Edit..." +msgstr "Печать" + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:179 +#, fuzzy +msgid "Remove the selected snippets." +msgstr "Вставить ритм в выделенную музыку." + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:181 +#, fuzzy +msgid "Apply the current snippet." +msgstr "Поместить курсор на это место." + +#: frescobaldi_app/snippet/widget.py:182 +#, fuzzy +msgid "&Import..." +msgstr "Печать" + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:184 +#, fuzzy +msgid "E&xport..." +msgstr "Печать" + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:188 +#, fuzzy +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "Здесь Вы можете выбрать, какие Guile скрипты загружать в Rumor." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +#, fuzzy +msgid "XML Files" +msgstr "Все файлы" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:400 +#, fuzzy +msgctxt "menu title" +msgid "Insert" +msgstr "&Вставка" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +#, fuzzy +msgid "Input" +msgstr "Вход MIDI:" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +#, fuzzy +msgid "Scheme:" +msgstr "Партитура:" + +#: frescobaldi_app/widgets/schemeselector.py:63 +msgctxt "New Scheme" +msgid "&New..." +msgstr "" + +#: frescobaldi_app/widgets/schemeselector.py:93 +#, fuzzy +msgid "Please enter a name for the new scheme:" +msgstr "" +"Введите имя для переменной, которая будет присвоена выделенному тексту:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +#, fuzzy +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Сокращение" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +#, fuzzy +msgid "&No shortcut" +msgstr "Сокращение" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +#, fuzzy +msgid "Use a &custom shortcut:" +msgstr "Использовать другую версию:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +#, fuzzy +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "Нет" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Щёлкните по кнопке несколько раз, чтобы установить темп." + +#: frescobaldi_app/widgets/urlrequester.py:75 +#, fuzzy +msgid "Open file dialog" +msgstr "Открыть файл" + +#: frescobaldi_app/widgets/urlrequester.py:119 +#, fuzzy +msgid "Select a directory" +msgstr "Каталог по умолчанию:" + +#: frescobaldi_app/widgets/urlrequester.py:121 +msgid "Select a file" +msgstr "" + +#, fuzzy +#~ msgid "Edit..." +#~ msgstr "Печать" + +#, fuzzy +#~ msgid "Remove" +#~ msgstr "Удалить нотные штили" + +#~ msgid "Copyright (c) 2008-2010, Wilbert Berendsen" +#~ msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your name" +#~ msgstr "Сергей Полтавский,Артём Золочевский" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "i18n@frescobaldi.org" +#~ msgstr "serge.uliss@gmail.com,artem.zolochevskiy@gmail.com" + +#~ msgid "Session to start" +#~ msgstr "Используемая сессия" + +#~ msgid "Start a new instance" +#~ msgstr "Начать новую сессию" + +#~ msgid "Try to use smart line and column numbers" +#~ msgstr "Пытаться использовать интеллигентные номера сток и столбцов" + +#~ msgid "LilyPond files to open, may also be textedit URLs" +#~ msgstr "Файлы lilypond или URL" + +#~ msgid "Left Sidebar" +#~ msgstr "Левая панель" + +#~ msgid "Right Sidebar" +#~ msgstr "Правая панель" + +#~ msgid "Top Sidebar" +#~ msgstr "Верхняя панель" + +#~ msgid "Bottom Sidebar" +#~ msgstr "Нижняя панель" + +#~ msgid "Show Path" +#~ msgstr "Показать путь" + +#~ msgid "Show Document Tabs" +#~ msgstr "Показать закладки документов" + +#~ msgid "Please select some text first." +#~ msgstr "Сначала необходимо выбрать текст." + +#~ msgid "Line: %1 Col: %2" +#~ msgstr "Строка: %1 Поз.: %2" + +#~ msgid "BLOCK" +#~ msgstr "БЛОК" + +#~ msgid "Block selection mode" +#~ msgstr "Блочный режим выбора" + +#~ msgid "LINE" +#~ msgstr "СТРОКА" + +#~ msgid "Please install %1" +#~ msgstr "Пожалуйста, установите %1" + +#, fuzzy +#~ msgid "Session" +#~ msgstr "Используемая сессия" + +#~ msgid "Open %1 in external viewer" +#~ msgstr "Открыть %1 во внешней программе просмотра" + +#~ msgid "No files to send" +#~ msgstr "Нет файлов для посылки." + +#, fuzzy +#~ msgid "No files to print" +#~ msgstr "Нет файлов для посылки." + +#~ msgid "Email documents" +#~ msgstr "Послать документы по email" + +#~ msgid "Please select the files you want to send:" +#~ msgstr "Выберите файлы, которые Вы хотите послать:" + +#~ msgid "" +#~ "These are the files that are up-to-date (i.e. newer than the LilyPond " +#~ "source document). Also LilyPond files included by the source document are " +#~ "shown." +#~ msgstr "" +#~ "Эти файлы обновлены (т.е. созданы позже, чем исходные файлы LilyPond). " +#~ "Также показаны файлы включенные в исходный документ." + +#~ msgid "" +#~ "Note: this PDF file has been created with embedded point-and-click URLs " +#~ "(preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the file in publish mode, because then the PDF file " +#~ "is much smaller." +#~ msgid_plural "" +#~ "Note: these PDF files have been created with embedded point-and-click " +#~ "URLs (preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the files in publish mode, because then the PDF files " +#~ "are much smaller." +#~ msgstr[0] "" +#~ "Это PDF документ был создан с использованием \"point-and-click\" " +#~ "технологии (режим просмотра), которая сильно увеличивает размер файла. " +#~ "Возможно, лучше будет пересоздать файл в режиме публикации, так как " +#~ "полученный PDF файл будет значительно меньшего размера." +#~ msgstr[1] "" +#~ "Эти PDF документы были созданы с использованием \"point-and-click\" " +#~ "технологии (режим просмотра), которая сильно увеличивает размер файлов. " +#~ "Возможно, лучше будет пересоздать файлы в режиме публикации, так как " +#~ "полученные PDF файлы будет значительно меньшего размера." +#~ msgstr[2] "" +#~ "Это PDF документ был создан с использованием \"point-and-click\" " +#~ "технологии (режим просмотра), которая сильно увеличивает размер файла. " +#~ "Лучше отсылать по электронной почте документы без \"point-and-click\", " +#~ "потому что они значительно меньше. Все равно продолжить?" + +#, fuzzy +#~ msgid "" +#~ "These are the PDF documents that are up-to-date (i.e. newer than the " +#~ "LilyPond source document). Check the documents you want to send to the " +#~ "printer." +#~ msgstr "" +#~ "Эти файлы обновлены (т.е. созданы позже, чем исходные файлы LilyPond). " +#~ "Также показаны файлы включенные в исходный документ." + +#~ msgid "Print %1" +#~ msgstr "Печать %1" + +#, fuzzy +#~ msgid "Click to see more settings." +#~ msgstr "Настройки партитуры" + +#, fuzzy +#~ msgid "Print Bar Lines" +#~ msgstr "&Тактовые черты" + +#, fuzzy +#~ msgid "Bars per line:" +#~ msgstr "Размер страницы:" + +#, fuzzy +#~ msgid "Open in PDF viewer" +#~ msgstr "Открыть %1 во внешней программе просмотра" + +#, fuzzy +#~ msgid "Copy LilyPond code to editor" +#~ msgstr "Музыкальный нотатор LilyPond" + +#, fuzzy +#~ msgid "Single Staff" +#~ msgstr "Одинарная кавычка" + +#, fuzzy +#~ msgid "Clefs" +#~ msgstr "Челеста" + +#, fuzzy +#~ msgid "Piano Staff" +#~ msgstr "Фортепиано" + +#, fuzzy +#~ msgid "Organ Staff" +#~ msgstr "Орган" + +#, fuzzy +#~ msgid "Staves per system:" +#~ msgstr "Остальные системы:" + +#, fuzzy +#~ msgid "Clefs:" +#~ msgstr "Челеста" + +#, fuzzy +#~ msgid "Choir Staff" +#~ msgstr "Хор" + +#, fuzzy +#~ msgid "Custom Staff" +#~ msgstr "Хор" + +#, fuzzy +#~ msgid "to:" +#~ msgstr "Направление:" + +#, fuzzy +#~ msgid "Download LilyPond" +#~ msgstr "LilyPond" + +#, fuzzy +#~ msgid "Select the LilyPond version you want to download." +#~ msgstr "Выберите файлы, которые Вы хотите послать:" + +#, fuzzy +#~ msgid "Install into:" +#~ msgstr "Итальянский" + +#, fuzzy +#~ msgid "Download failed: %1" +#~ msgstr "Печать завершилась с ошибкой: %1" + +#, fuzzy +#~ msgid "Use existing LilyPond" +#~ msgstr "LilyPond" + +#, fuzzy +#~ msgid "Remove and re-install" +#~ msgstr "Удалить длительности" + +#, fuzzy +#~ msgid "Unpacking failed." +#~ msgstr "Печать завершилась с ошибкой: %1" + +#, fuzzy +#~ msgid "" +#~ "An error occurred:\n" +#~ "\n" +#~ "%1" +#~ msgstr "Неизвестная ошибка произошла." + +#~ msgid "" +#~ "This is the list of defined expansions.\n" +#~ "\n" +#~ "Click on a row to see or change the associated text. Doubleclick a " +#~ "shortcut or its description to change it. You can also press F2 to edit " +#~ "the current shortcut.\n" +#~ "\n" +#~ "Use the buttons below to add or remove expansions.\n" +#~ "\n" +#~ "There are two ways to use the expansion: either type the shortcut in the " +#~ "text and then call the Expand function, or just call the Expand function " +#~ "(default shortcut: Ctrl+.), choose the expansion from the list and press " +#~ "Enter or click Ok." +#~ msgstr "" +#~ "Это список определенных сокращений.\n" +#~ "\n" +#~ "Щёлкните на строке, чтобы увидеть или изменить связанный текст. Двойной " +#~ "щелчок на сокращении или его описании изменит его. Вы можете также нажать " +#~ "F2 для редактирования текущего сокращения. \n" +#~ "\n" +#~ "Используйте кнопки ниже для добавления или удаления сокращений.\n" +#~ "\n" +#~ "Есть два способа использования сокращений: набрать сокращение и затем " +#~ "выбрать функцию \"Раскрыть сокращение\" (клавиатурная комбинация по " +#~ "умолчанию: Ctrl+.) или же вызвать диалог сокращения, выбрать нужное, а " +#~ "затем нажать Enter или Ok." + +#~ msgid "" +#~ "This is the text associated with the selected shortcut. Some characters " +#~ "have special meaning:" +#~ msgstr "" +#~ "Это текст связанный с выбранным сокращением. Некоторые символы имеют " +#~ "особое значение:" + +#~ msgid "Translate the following pitch." +#~ msgstr "Преобразовать следующие ноты." + +#~ msgid "New Item" +#~ msgstr "Новый пункт" + +#~ msgid "" +#~ "Another expansion already uses this name.\n" +#~ "\n" +#~ "Please use a different name." +#~ msgstr "" +#~ "Существующее сокращение уже использует это имя.\n" +#~ "\n" +#~ "Выберите другое имя." + +#~ msgid "" +#~ "Please only use letters, numbers and the underscore character in the " +#~ "expansion name." +#~ msgstr "" +#~ "Используйте только латинские буквы, цифры и символ подчеркивания в " +#~ "названии расширения." + +#~ msgid "Please don't leave the description empty." +#~ msgstr "Пожалуйста, не оставляйте поле description пустым." + +#, fuzzy +#~ msgid "Index" +#~ msgstr "Инструмент" + +#~ msgid "Copy &Link" +#~ msgstr "Копировать &ссылку" + +#~ msgid "Open Link in &New Window" +#~ msgstr "Открыть ссылку в &новом окне" + +#~ msgid "Open Document in &New Window" +#~ msgstr "Открыть документ в &новом окне" + +#, fuzzy +#~ msgid "The %1 context" +#~ msgstr "Оглавление" + +#~ msgid "Click an articulation sign to add it to your document." +#~ msgstr "Щёлкните на артикуляционном знаке, чтобы добавить его в документ." + +#~ msgid "" +#~ "If you select some music first, the articulation will be added to all " +#~ "notes in the selection." +#~ msgstr "" +#~ "Если сначала Вы выделите музыкальный фрагмент, то артикуляционные знаки " +#~ "будут добавлены ко всем нотам выбранного фрагмента." + +#, fuzzy +#~ msgid "Click a dynamic sign to add it to your document." +#~ msgstr "Щёлкните на артикуляционном знаке, чтобы добавить его в документ." + +#, fuzzy +#~ msgid "" +#~ "If you select some music first, dynamic spanners will be added the " +#~ "selected fragment." +#~ msgstr "" +#~ "Если сначала Вы выделите музыкальный фрагмент, то артикуляционные знаки " +#~ "будут добавлены ко всем нотам выбранного фрагмента." + +#~ msgid "Run LilyPond (preview)" +#~ msgstr "Запустить LilyPond (просмотр)" + +#~ msgid "Run LilyPond (publish)" +#~ msgstr "Запустить LilyPond (публикация)" + +#, fuzzy +#~ msgid "Run LilyPond (custom)..." +#~ msgstr "Запустить LilyPond (публикация)" + +#~ msgid "Interrupt LilyPond Job" +#~ msgstr "Прервать текущее задание" + +#, fuzzy +#~ msgid "Email Documents..." +#~ msgstr "Послать документы по email" + +#~ msgid "Cut selection and assign it to a LilyPond variable." +#~ msgstr "Вырезать выделение и присвоить его переменной LilyPond." + +#~ msgid "Repeat the last music expression (note or chord)." +#~ msgstr "Повторить последнее музыкальное выражение (ноту или аккорд)." + +#~ msgid "Expand last word or open the expansions dialog." +#~ msgstr "Раскрыть сокращение или открыть диалог сокращений." + +#~ msgid "Go to the next blank line." +#~ msgstr "Перейти к следующей пустой строке." + +#~ msgid "Previous blank line" +#~ msgstr "Предыдущая пустая строка" + +#~ msgid "Go to the previous blank line." +#~ msgstr "Перейти к предыдущей пустой строке." + +#, fuzzy +#~ msgid "Select to next blank line" +#~ msgstr "Перейти к следующей пустой строке." + +#, fuzzy +#~ msgid "Select to previous blank line" +#~ msgstr "Перейти к предыдущей пустой строке." + +#, fuzzy +#~ msgid "Move selection to next blank line" +#~ msgstr "Перейти к следующей пустой строке." + +#, fuzzy +#~ msgid "Moves selected block to next blank line." +#~ msgstr "Перейти к следующей пустой строке." + +#, fuzzy +#~ msgid "Move selection to previous blank line" +#~ msgstr "Перейти к предыдущей пустой строке." + +#, fuzzy +#~ msgid "Moves selected block to previous blank line." +#~ msgstr "Перейти к предыдущей пустой строке." + +#~ msgid "Single Quote" +#~ msgstr "Одинарная кавычка" + +#~ msgid "Double Quote" +#~ msgstr "Двойная кавычка" + +#~ msgid "Align" +#~ msgstr "Выровнять отступы" + +#~ msgid "There is already a LilyPond job running for this document." +#~ msgstr "LilyPond уже запущен для этого документа." + +#~ msgid "Can't process document" +#~ msgstr "Невозможно обработать документ" + +#~ msgid "Abort the running LilyPond process" +#~ msgstr "Прервать запущенный процесс LilyPond" + +#, fuzzy +#~ msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" +#~ msgstr "Запустить LilyPond в режиме предварительного просмотра" + +#, fuzzy +#~ msgid "LilyPond exited with an error compiling %1." +#~ msgstr "Программа LilyPond [%1] завершилась с кодом %2." + +#~ msgid "" +#~ "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" +#~ msgstr "" +#~ "Введите ритм, используя пробел в качестве разделителя длительностей, " +#~ "например, 8 16 8 4 8" + +#~ msgid "Terminal" +#~ msgstr "Консоль" + +#~ msgid "Show PDF Navigation Panel" +#~ msgstr "Показать панель навигации по PDF документу" + +#~ msgid "Show PDF minipager" +#~ msgstr "Показать PDF мини-пейджер" + +#~ msgid "Configure Okular..." +#~ msgstr "Настройка Okular..." + +#~ msgid "S&ynchronize Preview with Current Document" +#~ msgstr "Синхронизировать просмотр с текущим документом" + +#, fuzzy +#~ msgid "Reload" +#~ msgstr "Запись" + +#~ msgid "no log" +#~ msgstr "нет записей в журнале" + +#~ msgid "Only show on errors" +#~ msgstr "Показывать только при ошибках" + +#~ msgid "Rumor" +#~ msgstr "Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter " +#~ "from the LilyPond document." +#~ msgstr "" +#~ "Используемый метр. Оставьте Auto, чтобы Frescobaldi определил метр исходя " +#~ "из LilyPond документа." + +#~ msgid "Quantize:" +#~ msgstr "Квант:" + +#~ msgid "The shortest note duration to use." +#~ msgstr "Самая короткая используемая длительность." + +#~ msgid "Record LilyPond input note by note, without durations." +#~ msgstr "Записывать ввод LilyPond нота за нотой, без длительностей." + +#~ msgid "Mono" +#~ msgstr "Моно" + +#~ msgid "Record monophonic input, without chords." +#~ msgstr "Записывать одноголосный ввод, без аккордов." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let Frescobaldi determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Количество ключевых знаков. Отрицательное число означает бемоли. Оставьте " +#~ "\"Автоматически\", чтобы LilyPond определил их из документа." + +#~ msgid "Meter:" +#~ msgstr "Метр:" + +#~ msgid "Key:" +#~ msgstr "Ключ:" + +#~ msgid "Configure..." +#~ msgstr "Настройка..." + +#~ msgid "Adjust more settings, like MIDI input and output." +#~ msgstr "Другие настройки, такие как MIDI ввод и вывод." + +#~ msgid "Set these settings as default." +#~ msgstr "Сохранить по умолчанию" + +#~ msgid "Found rumor version %1." +#~ msgstr "Найдена версия Rumor %1." + +#~ msgid "Could not find Rumor: %1" +#~ msgstr "Невозможно найти Rumor: %1" + +#~ msgid "Settings have been saved." +#~ msgstr "Настройки сохранены" + +#~ msgid "Record" +#~ msgstr "Запись" + +#~ msgid "Start or stop Rumor MIDI-recording." +#~ msgstr "Запустить или остановить запись Rumor" + +#~ msgid "Rumor is recording, press ESC to stop." +#~ msgstr "Идет запись Rumor, нажмите ESC для остановки." + +#~ msgid "Rumor stopped." +#~ msgstr "Rumor остановлен." + +#~ msgid "TiMidity" +#~ msgstr "TiMidity" + +#~ msgid "Start or stop the TiMidity ALSA MIDI client." +#~ msgstr "Запустить или остановить TiMidity ALSA MIDI клиент." + +#~ msgid "Rumor Settings" +#~ msgstr "Настройки Rumor" + +#~ msgid "OSS device %1" +#~ msgstr "OSS устройство %1" + +#~ msgid "" +#~ "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard " +#~ "of your computer." +#~ msgstr "" +#~ "Вход MIDI. Выберите \"Клавиатура\", если хотите использовать клавиатуру " +#~ "Вашего компьютера." + +#~ msgid "MIDI output to use." +#~ msgstr "Используемый MIDI выход." + +#~ msgid "The LilyPond language you want Rumor to output the pitches in." +#~ msgstr "Язык LilyPond, в котором Rumor будет выводить названия нот." + +#~ msgid "Explicit durations" +#~ msgstr "Явные длительности" + +#~ msgid "" +#~ "Add a duration after every note, even if it is the same as the preceding " +#~ "note." +#~ msgstr "" +#~ "Добавлять длительность после каждой ноты, даже если она совпадает с " +#~ "предыдущей." + +#~ msgid "Absolute pitch" +#~ msgstr "Абсолютная высота нот" + +#~ msgid "Use absolute pitches instead of relative." +#~ msgstr "Использовать абсолютную высоту нот вместо относительной." + +#~ msgid "No barlines" +#~ msgstr "Без тактовых черт" + +#~ msgid "Filter the barlines out of Rumor's output." +#~ msgstr "Удалять тактовые черты из вывода Rumor." + +#~ msgid "No dots" +#~ msgstr "Без точек" + +#~ msgid "Do not use dotted notes, but ties instead." +#~ msgstr "Использовать вместо точек связующие лиги." + +#~ msgid "Legato" +#~ msgstr "Легато" + +#~ msgid "Do not use rests, but give all notes the maximum length." +#~ msgstr "" +#~ "Не использовать паузы, а делать ноты максимальной продолжительности." + +#~ msgid "Strip leading and trialing rests from output." +#~ msgstr "Удалить паузы в начале и в конце документа." + +#~ msgid "Guile scripts to load:" +#~ msgstr "Guile скрипт для загрузки:" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %1. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Здесь Вы можете выбрать, какие Guile-скрипты должен загружать Rumor. Вы " +#~ "можете добавить собственные скрипты в %1. Если первая строка Вашего " +#~ "скрипта начинается с точки с запятой (;), она будет показана как описание." + +#~ msgid "publish mode" +#~ msgstr "режим публикации" + +#~ msgid "LilyPond %1 [%2] starting (%3)..." +#~ msgstr "Запуск LilyPond %1 [%2] (%3)..." + +#~ msgid "LilyPond [%1] starting (%2)..." +#~ msgstr "Запуск LilyPond [%1] (%2)..." + +#~ msgid "LilyPond [%1] finished (%2)." +#~ msgstr "LilyPond [%1] завершен (%2)." + +#, fuzzy +#~ msgid "Select which LilyPond version you want to run:" +#~ msgstr "Выберите файлы, которые Вы хотите послать:" + +#, fuzzy +#~ msgid "LilyPond %1" +#~ msgstr "LilyPond" + +#, fuzzy +#~ msgid "Path: %1" +#~ msgstr "Воспроизвести %1" + +#, fuzzy +#~ msgid "LilyPond (version unknown)" +#~ msgstr "Вставить версию LilyPond" + +#, fuzzy +#~ msgid "" +#~ "Use LilyPond (version unknown)\n" +#~ "Path: %1" +#~ msgstr "Вставить версию LilyPond" + +#~ msgid "Save LilyPond Log as" +#~ msgstr "Сохранить журнал LilyPond как" + +#~ msgid "" +#~ "Could not save LilyPond log:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Не удалось сохранить журнал LilyPond в файле:\n" +#~ "\n" +#~ "%1" + +#, fuzzy +#~ msgid "LilyPond-related settings" +#~ msgstr "Файлы LilyPon" + +#, fuzzy +#~ msgid "LilyPond version to use:" +#~ msgstr "Вставить версию LilyPond" + +#~ msgid "Configure" +#~ msgstr "Настройка" + +#~ msgid "General Frescobaldi Preferences" +#~ msgstr "Общие настройки Frescobaldi" + +#~ msgid "Paths to programs or data used by Frescobaldi" +#~ msgstr "Пути к программам или данным, используемым Frescobaldi" + +#~ msgid "Rumor MIDI input" +#~ msgstr "Ввод MIDI Rumor" + +#~ msgid "Rumor MIDI input plugin settings" +#~ msgstr "Настройки ввода MIDI Rumor" + +#~ msgid "Editor Component" +#~ msgstr "Редактор" + +#~ msgid "Editor Component Options" +#~ msgstr "Настройки редактора" + +#~ msgid "LilyPond version number to use for new documents" +#~ msgstr "Версия LilyPond используемая для новых документов" + +#~ msgid "Use version number of installed LilyPond" +#~ msgstr "Использовать версию установленного LilyPond" + +#~ msgid "Use version number of last convert-ly rule" +#~ msgstr "Использовать версию последнего запуска convert-ly" + +#~ msgid "Enter a valid LilyPond version number, e.g. 2.12.0" +#~ msgstr "Введите версию Lilypond, например 2.12.0" + +#, fuzzy +#~ msgid "Warn when a document needs to be saved before LilyPond is run" +#~ msgstr "Сохранять документ перед запуском LilyPond" + +#~ msgid "PDF Viewer:" +#~ msgstr "Просмотрщик PDF:" + +#~ msgid "PDF Viewer" +#~ msgstr "Просмотрщик PDF" + +#~ msgid "(leave empty for operating system default)" +#~ msgstr "(оставьте пустым для значения по умолчанию)" + +#~ msgid "MIDI Player:" +#~ msgstr "Программа воспроизведения MIDI:" + +#~ msgid "Url or path to the LilyPond documentation." +#~ msgstr "Url или путь к документации LilyPond." + +#~ msgid "" +#~ "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " +#~ "KOffice, etc, one per line. If you leave out the starting slash, the " +#~ "prefixes from the KDEDIRS environment variable are prepended." +#~ msgstr "" +#~ "Пути поиска словарей для переносов слов от OpenOffice.org, Scribus, " +#~ "KOffice и т.д., по одному на строку. Если опустить начальный слеш, " +#~ "префиксы из KDEDIRS переменных окружения будут добавлены." + +#~ msgid "Commands used by the Rumor MIDI input module" +#~ msgstr "Команды используемые модулем ввода MIDI Rumor" + +#~ msgid "Name or full path of the Rumor program." +#~ msgstr "Имя или полный путь к программе Rumor." + +#~ msgid "" +#~ "Name or full path of the aconnect program (part of ALSA, for MIDI input " +#~ "and playback using Rumor)." +#~ msgstr "" +#~ "Имя или полный путь к программе aconnect (часть пакета ALSA, для ввода и " +#~ "воспроизведения MIDI, используя Rumor)" + +#~ msgid "" +#~ "Full command to start Timidity (or any other program) as an ALSA MIDI " +#~ "client." +#~ msgstr "" +#~ "Полная команда запуска TiMidity или другой программы MIDI-клиента ALSA." + +#, fuzzy +#~ msgid "LilyPond Command" +#~ msgstr "Документация LilyPond:" + +#~ msgid "Your document has already a LilyPond version statement." +#~ msgstr "Ваш документ уже содержит сведения о версии LilyPond" + +#~ msgid "Version already set" +#~ msgstr "Версия уже установлена" + +#~ msgid "" +#~ "Can't determine the version of LilyPond. Please check your LilyPond " +#~ "installation." +#~ msgstr "Невозможно определить версию LilyPond. Проверьте установку." + +#~ msgid "" +#~ "Can't determine the LilyPond version of the current document. Please add " +#~ "a \\version statement with the correct version." +#~ msgstr "" +#~ "Невозможно определить версию LilyPond у текущего документа. Добавьте " +#~ "\\version утверждение с правильной версией." + +#~ msgid "This LilyPond document is already up-to-date." +#~ msgstr "LilyPond документ уже обновлен" + +#~ msgid "" +#~ "The document has been processed with convert-ly. You'll find the messages " +#~ "of convert-ly in a comment block at the end. You still may have to edit " +#~ "some parts manually." +#~ msgstr "" +#~ "Документ был обработан при помощи convert-ly. Сообщения программы в " +#~ "блоке комментария, в конце. Возможно, Вам придется редактировать " +#~ "некоторые части вручную." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %1" +#~ msgstr "" +#~ "Документ был обработан при помощи convert-ly, но остался неизменным. " +#~ "Сообщение от convert-ly: %1" + +#~ msgid "The tempo in beats per minute." +#~ msgstr "Темп в ударах в минуту." + +#, fuzzy +#~ msgid "Treble" +#~ msgstr "Заголовок" + +#~ msgid "Add selected part to your score." +#~ msgstr "Добавить выбранные инструменты в партитуру." + +#~ msgid "A tempo indication, e.g. \"Allegro.\"" +#~ msgstr "Указание темпа, например, \"Allegro\"" + +#, fuzzy +#~ msgid "How many voices to put in this staff." +#~ msgstr "Количество голосов ударных инструментов на нотоносце." + +#~ msgid "Open PDF" +#~ msgstr "Открыть PDF" + +#~ msgid "Email..." +#~ msgstr "Email..." + +#~ msgid "Disable the built-in PDF preview" +#~ msgstr "Запретить встроенный просмотр PDF" + +#~ msgid "The direction to use for the articulations." +#~ msgstr "Направление используемое для артикуляционных обозначений" + +#~ msgid "Your document has been modified, please save first." +#~ msgstr "Документ был изменен, необходимо сохранить его." + +#~ msgid "" +#~ "Printing failed: %1\n" +#~ "\n" +#~ "The print command %2 does probably not exist. Please check your settings." +#~ msgstr "" +#~ "Ошибка печати: %1\n" +#~ "\n" +#~ "Команда печати %2 не может быть выполнена. Проверьте настройки." + +#~ msgid "The print command contains errors. Please check your settings." +#~ msgstr "Команда печати содержит ошибки. Пожалуйста, проверьте настройки." + +#, fuzzy +#~ msgid "Notify when a document has been sent to the printer" +#~ msgstr "Документ отправлен на печать" + +#~ msgid "" +#~ "Command to print a PDF file, for example lpr or kprinter. You may add " +#~ "some arguments, e.g. lpr -P myprinter." +#~ msgstr "" +#~ "Команда печати PDF файла, например, lpr или kprinter. Вы можете добавить " +#~ "дополнительные аргументы, напр. lpr -P myprinter" + +#~ msgid "Name or full path of the convert-ly program." +#~ msgstr "Имя или полный путь к программе convert-ly" + +#~ msgid "Expand" +#~ msgstr "Раскрыть сокращение" + +#~ msgid "Show" +#~ msgstr "Показать" + +#, fuzzy +#~ msgid "Paper Size A4" +#~ msgstr "Размер страницы:" + +#, fuzzy +#~ msgid "Paper Size A5" +#~ msgstr "Размер страницы:" + +#, fuzzy +#~ msgid "Paper Size Letter" +#~ msgstr "Размер страницы:" + +#, fuzzy +#~ msgid "Stem Up" +#~ msgstr "Шаг" + +#, fuzzy +#~ msgid "Lyric Stanza" +#~ msgstr "Строфы:" + +#, fuzzy +#~ msgid "Midi section" +#~ msgstr "Посвящение" + +#, fuzzy +#~ msgid "With: instrumentName" +#~ msgstr "Названия инструментов" + +#, fuzzy +#~ msgid "With: shortInstrumentName" +#~ msgstr "Названия инструментов" + +#, fuzzy +#~ msgid "New Lyrics" +#~ msgstr "Тексты" + +#~ msgid "Your document currently has no filename, please save first." +#~ msgstr "У документа нет имени файла, сохраните его сначала." + +#~ msgid "" +#~ "Sorry, support for remote files is not yet implemented.\n" +#~ "Please save your document to a local file." +#~ msgstr "" +#~ "Извините, еще нет поддержки удаленных файлов.\n" +#~ "Сохраните Ваш документ локально." + +#~ msgid "Already Running" +#~ msgstr "Уже запущен" diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/setup.py frescobaldi-2.0.0/frescobaldi_app/po/setup.py --- frescobaldi-1.2.0/frescobaldi_app/po/setup.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/setup.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,62 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Setup the application language. +""" + +import locale + +from PyQt4.QtCore import QSettings, QTimer + +import app + +from . import find, install +from . import qtranslator + + +_currentlanguage = None + + +def setup(): + """Set application language according to settings.""" + global _currentlanguage + + language = QSettings().value("language", "") + if not language: + try: + language = locale.getdefaultlocale()[0] + except ValueError: + pass + if language: + if _currentlanguage is not None and language != _currentlanguage: + QTimer.singleShot(0, app.languageChanged) + _currentlanguage = language + if language != "none": + mo = find(language) + if mo: + try: + install(mo) + return + except Exception: + pass + install(None) + +app.settingsChanged.connect(setup) +setup() Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/po/tr.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/po/tr.mo differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/po/tr.po frescobaldi-2.0.0/frescobaldi_app/po/tr.po --- frescobaldi-1.2.0/frescobaldi_app/po/tr.po 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/po/tr.po 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7253 @@ +# translation of tr.po to Türkçe +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Server Acim , 2008, 2009. +# Server Acim , 2010. +msgid "" +msgstr "" +"Project-Id-Version: tr\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: 2010-12-12 07:48+0200\n" +"Last-Translator: Server Acim \n" +"Language-Team: Turkish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.0\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "" + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +#, fuzzy +msgid "Python" +msgstr "Yol" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +#, fuzzy +msgid "Poppler" +msgstr "Sayfa" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "" + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "" + +#: frescobaldi_app/about.py:87 +#, fuzzy +msgid "About" +msgstr "Otomatik" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "Sürüm" + +#: frescobaldi_app/about.py:144 +#, fuzzy +msgid "Operating System" +msgstr "Diğer satırlar:" + +#: frescobaldi_app/about.py:151 +#, fuzzy +msgid "Version {version}" +msgstr "LilyPond Sürümünü ekle" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +#, fuzzy +msgid "A LilyPond Music Editor" +msgstr "LilyPond Müzik Düzenleyicisi" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "" + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "" + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "" + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +#, fuzzy +msgid "Shortcut Conflict" +msgstr "Kısayol" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "" + +#: frescobaldi_app/app.py:128 +#, fuzzy +msgid "LilyPond Files" +msgstr "LilyPond dosyaları" + +#: frescobaldi_app/app.py:129 +#, fuzzy +msgid "LaTeX Files" +msgstr "Tüm dosyalar" + +#: frescobaldi_app/app.py:130 +#, fuzzy +msgid "DocBook Files" +msgstr "PDf Dosyaları" + +#: frescobaldi_app/app.py:131 +#, fuzzy +msgid "HTML Files" +msgstr "Tüm dosyalar" + +#: frescobaldi_app/app.py:132 +#, fuzzy +msgid "Texinfo Files" +msgstr "Dosya Aç" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "Tüm dosyalar" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:115 +#, fuzzy +msgid "Next Mark" +msgstr "Sonraki" + +#: frescobaldi_app/bookmarkmanager.py:116 +#, fuzzy +msgid "Previous Mark" +msgstr "Önceki" + +#: frescobaldi_app/convert_ly.py:118 +#, fuzzy +msgid "From version:" +msgstr "LilyPond Sürümünü ekle" + +#: frescobaldi_app/convert_ly.py:119 +#, fuzzy +msgid "To version:" +msgstr "Sürüm:" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "" + +#: frescobaldi_app/convert_ly.py:125 +#, fuzzy +msgid "&Changes" +msgstr "Durakla" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +#, fuzzy +msgid "" +msgstr "bilinmeyen" + +#: frescobaldi_app/convert_ly.py:138 +#, fuzzy +msgid "Convert-ly from LilyPond {version}" +msgstr "LilyPond sürüm numarasını kullan %1" + +#: frescobaldi_app/convert_ly.py:162 +#, fuzzy +msgid "(set in document)" +msgstr "Belgeleri yazdır" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "" + +#: frescobaldi_app/convert_ly.py:190 +#, fuzzy +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "convert-ly başlatılamadı: %1" + +#: frescobaldi_app/convert_ly.py:196 +#, fuzzy +msgid "The document has not been changed." +msgstr "Belge yazıcıya gönderildi." + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Current Document" +msgstr "&Belge" + +#: frescobaldi_app/convert_ly.py:202 +#, fuzzy +msgid "Converted Document" +msgstr "Diğer Belgeleri Kapat" + +#: frescobaldi_app/convert_ly.py:208 +#, fuzzy +msgid "Colors:" +msgstr "Besteci" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "" + +#: frescobaldi_app/convert_ly.py:211 +#, fuzzy +msgid "Deleted" +msgstr "Hepsini seç" + +#: frescobaldi_app/convert_ly.py:212 +#, fuzzy +msgid "Links:" +msgstr "Şarkı Sözleri:" + +#: frescobaldi_app/convert_ly.py:213 +#, fuzzy +msgid "First Change" +msgstr "İlk Sayfa" + +#: frescobaldi_app/convert_ly.py:214 +#, fuzzy +msgid "Next Change" +msgstr "Sonraki boş satır" + +#: frescobaldi_app/convert_ly.py:215 +#, fuzzy +msgid "Top" +msgstr "Tıkla" + +#: frescobaldi_app/cut_assign.py:39 +#, fuzzy +msgid "Cut and Assign" +msgstr "Kes ve Ata:" + +#: frescobaldi_app/cut_assign.py:40 +#, fuzzy +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "Lütfen, metne atamak üzere değişkene bir ad veriniz:" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +msgid "Untitled" +msgstr "Başlıksız" + +#: frescobaldi_app/document.py:145 +#, fuzzy +msgid "Untitled ({num})" +msgstr "Başlıksız" + +#: frescobaldi_app/documentactions.py:125 +#, fuzzy +msgid "Cut and Assign..." +msgstr "Kes ve Ata:" + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "" + +#: frescobaldi_app/documentactions.py:127 +#, fuzzy +msgid "&Automatic Indent" +msgstr "otomatik" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "" + +#: frescobaldi_app/documentactions.py:129 +#, fuzzy +msgid "&Format" +msgstr "Fermata" + +#: frescobaldi_app/documentactions.py:130 +#, fuzzy +msgid "&Update with convert-ly..." +msgstr "convert-ly ile Güncelle" + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +#, fuzzy +msgid "&Save" +msgstr "Kaydet" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +#, fuzzy +msgid "Save &As..." +msgstr "PDF'yi Farklı Kaydet..." + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "" + +#: frescobaldi_app/documentmenu.py:42 +#, fuzzy +msgctxt "menu title" +msgid "&Document" +msgstr "&Belge" + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "Bir iç hata oluştu:" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "İç Hata" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "Hata Raporunu E-posta ile gönder..." + +#: frescobaldi_app/exception.py:79 +#, fuzzy +msgid "Optionally describe below what you were doing:" +msgstr "Aşağıya ne yaptığını opsiyonel olarak tanımla:" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:76 +msgid "Roman Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:77 +msgid "Sans Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:79 +#, fuzzy +msgid "Staff Size:" +msgstr "Dizek Boyutu:" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "Şarkı Sözleri Metnini Tirele" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "Lütfen bir dil seçiniz:" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +#, fuzzy +msgid "Lyrics" +msgstr "Şarkı Sözleri:" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +#, fuzzy +msgctxt "menu title" +msgid "Tools" +msgstr "&Araç Görünümleri" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +#, fuzzy +msgid "Preferences" +msgstr "Genel Tercihler" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/inputdialog.py:101 +#, fuzzy +msgid "Select Color" +msgstr "Hepsini seç" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:206 +#, fuzzy +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "LilyPond başlayamıyor. Lütfen yolu ve izinleri denetleyiniz." + +#: frescobaldi_app/job.py:209 +#, fuzzy +msgid "Could not read from the process." +msgstr "Lilypond işlemi okunamadı" + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "Bilinmeyen bir hata meydana geldi." + +#: frescobaldi_app/job.py:216 +#, fuzzy +msgid "Exited with return code {code}." +msgstr "LilyPond [%1] dönüş koduyla çıktı %2." + +#: frescobaldi_app/job.py:218 +#, fuzzy +msgid "Exited with exit status {status}." +msgstr "LilyPond [%1] dönüş koduyla çıktı %2." + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "" + +#: frescobaldi_app/lyrics.py:132 +#, fuzzy +msgid "&Hyphenate Lyrics Text..." +msgstr "Şarkı Sözleri Metnini Tirele" + +#: frescobaldi_app/lyrics.py:133 +#, fuzzy +msgid "&Remove hyphenation" +msgstr "Tirelemeyi kaldır" + +#: frescobaldi_app/lyrics.py:134 +#, fuzzy +msgid "&Copy Lyrics with hyphenation removed" +msgstr "Şarkı Sözlerini tirelemeler kaldırılmış şekilde kopyalayın" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "" + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "Kullanılacak dil kodlaması" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "Gidilecek satır numarası, sıra numarası 1'den başlamaktadır." + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "Gidilecek sütun numarası, sıra numarası 0'dan başlamaktadır." + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +#, fuzzy +msgid "[modified]" +msgstr "değiştirilmiş" + +#: frescobaldi_app/mainwindow.py:268 +#, fuzzy +msgctxt "dialog title" +msgid "Close Document" +msgstr "Diğer Belgeleri Kapat" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:281 +#, fuzzy +msgid "Tab Bar" +msgstr "Tablature" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +#, fuzzy +msgid "Warning" +msgstr "Gitar akordu" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:354 +#, fuzzy +msgctxt "dialog title" +msgid "Open File" +msgstr "Dosya Aç" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:399 +#, fuzzy +msgctxt "dialog title" +msgid "Save File" +msgstr "PDF'yi Kaydet" + +#: frescobaldi_app/mainwindow.py:439 +#, fuzzy +msgctxt "dialog title" +msgid "Save Copy" +msgstr "Kaydet" + +#: frescobaldi_app/mainwindow.py:445 +#, fuzzy +msgctxt "dialog title" +msgid "Save Selection" +msgstr "Partisyon ayarları" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:541 +#, fuzzy +msgctxt "dialog title" +msgid "Print Source" +msgstr "Kaynağı Yazdır..." + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:923 +#, fuzzy +msgctxt "action: new document" +msgid "&New" +msgstr "Yeni..." + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:927 +#, fuzzy +msgid "Open Current Directory" +msgstr "Yürürlükteki Dosyayı Aç" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:931 +#, fuzzy +msgid "Save All" +msgstr "Kaydet" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "Kaynağı Yazdır..." + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "Diğer Belgeleri Kapat" + +#: frescobaldi_app/mainwindow.py:935 +#, fuzzy +msgid "Close All Documents" +msgstr "Diğer Belgeleri Kapat" + +#: frescobaldi_app/mainwindow.py:936 +#, fuzzy +msgid "Closes all documents and leaves the current session." +msgstr "Belgede veya seçimdeki tüm notaların aktarımını yapar." + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:941 +#, fuzzy +msgid "&Undo" +msgstr "Uzat" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "&Kopyala" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:946 +#, fuzzy +msgid "&Paste" +msgstr "Durakla" + +#: frescobaldi_app/mainwindow.py:947 +#, fuzzy +msgid "Select &All" +msgstr "Hepsini seç" + +#: frescobaldi_app/mainwindow.py:948 +#, fuzzy +msgid "Select &Block" +msgstr "Hepsini seç" + +#: frescobaldi_app/mainwindow.py:949 +#, fuzzy +msgid "Select &None" +msgstr "Hepsini seç" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "" + +#: frescobaldi_app/mainwindow.py:952 +#, fuzzy +msgid "&Find..." +msgstr "Yazdır..." + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "" + +#: frescobaldi_app/mainwindow.py:954 +#, fuzzy +msgid "Find Pre&vious" +msgstr "Önceki" + +#: frescobaldi_app/mainwindow.py:955 +#, fuzzy +msgid "&Replace..." +msgstr "Ara..." + +#: frescobaldi_app/mainwindow.py:956 +#, fuzzy +msgid "Pr&eferences..." +msgstr "Genel Tercihler" + +#: frescobaldi_app/mainwindow.py:958 +#, fuzzy +msgid "&Next Document" +msgstr "&Belge" + +#: frescobaldi_app/mainwindow.py:959 +#, fuzzy +msgid "&Previous Document" +msgstr "&Kaynak Belgesi" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:961 +#, fuzzy +msgid "Scroll Down" +msgstr "Prall down" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "" + +#: frescobaldi_app/menu.py:81 +#, fuzzy +msgctxt "menu title" +msgid "&File" +msgstr "Başlık" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "" + +#: frescobaldi_app/menu.py:147 +#, fuzzy +msgctxt "menu title" +msgid "&View" +msgstr "&Araç Görünümleri" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "" + +#: frescobaldi_app/menu.py:189 +#, fuzzy +msgctxt "menu title" +msgid "&LilyPond" +msgstr "&LilyPond" + +#: frescobaldi_app/menu.py:208 +#, fuzzy +msgctxt "menu title" +msgid "&Tools" +msgstr "&Araç Görünümleri" + +#: frescobaldi_app/menu.py:233 +#, fuzzy +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "Şarkı &Sözleri" + +#: frescobaldi_app/menu.py:245 +#, fuzzy +msgctxt "submenu title" +msgid "&Pitch" +msgstr "Ses noktası" + +#: frescobaldi_app/menu.py:259 +#, fuzzy +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "&Ritm" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "" + +#: frescobaldi_app/musicpreview.py:113 +#, fuzzy +msgid "Document:" +msgstr "&Belge" + +#: frescobaldi_app/musicpreview.py:195 +#, fuzzy +msgid "&Print" +msgstr "Yazdır" + +#: frescobaldi_app/musicpreview.py:196 +#, fuzzy +msgid "Music Preview" +msgstr "PDF Önizleme" + +#: frescobaldi_app/popplerdummy.py:42 +#, fuzzy +msgid "Could not load the {name} module." +msgstr "Yüklenemedi %s" + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" + +#: frescobaldi_app/popplerprint.py:61 +#, fuzzy +msgid "PDF Document" +msgstr "&Belge" + +#: frescobaldi_app/popplerprint.py:69 +#, fuzzy +msgid "Print {filename}" +msgstr "%1 dosyalarını yazdır" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +#, fuzzy +msgid "Printing Error" +msgstr "İç Hata" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +#, fuzzy +msgid "Could not send the document to the printer." +msgstr "Lilypond işlemi okunamadı" + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "" + +#: frescobaldi_app/search.py:99 +#, fuzzy +msgid "Search:" +msgstr "Ara..." + +#: frescobaldi_app/search.py:100 +#, fuzzy +msgid "&Case" +msgstr "Durakla" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "" + +#: frescobaldi_app/search.py:104 +#, fuzzy +msgid "The total number of matches" +msgstr "Kıtaların numarası." + +#: frescobaldi_app/search.py:105 +#, fuzzy +msgid "Close" +msgstr "Besteci" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "" + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "" + +#: frescobaldi_app/search.py:110 +#, fuzzy +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "Belgede veya seçimdeki tüm notaların aktarımını yapar." + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "" + +#: frescobaldi_app/viewmanager.py:91 +#, fuzzy +msgid "&Close View" +msgstr "&Araç Görünümleri" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:444 +#, fuzzy +msgid "Close &Other Views" +msgstr "Diğer Belgeleri Kapat" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:446 +#, fuzzy +msgid "&Previous View" +msgstr "Önceki" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +#, fuzzy +msgid "Special Characters" +msgstr "Özel Karakterler..." + +#: frescobaldi_app/charmap/__init__.py:41 +#, fuzzy +msgid "Special Charac&ters" +msgstr "Özel Karakterler..." + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +#, fuzzy +msgid "Documentation Browser" +msgstr "LilyPond Belgelendirmesi" + +#: frescobaldi_app/docbrowser/__init__.py:47 +#, fuzzy +msgid "&Documentation Browser" +msgstr "LilyPond Belgelendirmesi" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +#, fuzzy +msgid "Back" +msgstr "Kalın parantez" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "Ana Sayfa" + +#: frescobaldi_app/docbrowser/__init__.py:84 +#, fuzzy +msgid "&LilyPond Documentation" +msgstr "LilyPond belgelendirmesi:" + +#: frescobaldi_app/docbrowser/__init__.py:85 +#, fuzzy +msgid "&Contextual LilyPond Help" +msgstr "LilyPond &Yardım" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "Ara..." + +#: frescobaldi_app/docbrowser/browser.py:136 +#, fuzzy +msgid "(local)" +msgstr "İnsan sesi" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +#, fuzzy +msgid "LilyPond Source" +msgstr "LilyPond Günlüğü" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +#, fuzzy +msgid "Documents" +msgstr "&Belge" + +#: frescobaldi_app/doclist/__init__.py:40 +#, fuzzy +msgid "Docum&ents" +msgstr "&Belge" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:119 +#, fuzzy +msgid "LilyPond Version:" +msgstr "Varsayılan LilyPond Sürüm Numarası." + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:121 +#, fuzzy +msgid "Resolution:" +msgstr "Sürüm:" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "LilyPond'u önizleme kipinde çalıştır (İşaretle ve Tıkla ile)" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "LilyPond'u önizleme kipinde çalıştır" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +#, fuzzy +msgid "Delete intermediate output files" +msgstr "LilyPond'un ara çıktı dosyalarını silmesine izin ver" + +#: frescobaldi_app/engrave/custom.py:126 +#, fuzzy +msgid "Command line:" +msgstr "Komut" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "LilyPond'u Çalıştır" + +#: frescobaldi_app/engrave/custom.py:149 +#, fuzzy +msgid "LilyPond {version}" +msgstr "Varsayılan LilyPond Sürüm Numarası." + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:218 +#, fuzzy +msgid "The LilyPond executable" +msgstr "LilyPond Tercihleri" + +#: frescobaldi_app/engrave/custom.py:219 +#, fuzzy +msgid "All the include paths" +msgstr "LilyPond içeren yol:" + +#: frescobaldi_app/engrave/custom.py:220 +#, fuzzy +msgid "The filename of the document" +msgstr "Yürürlükteki& Belge ile Konsolu Senkronize Ediniz." + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/result_menu.py:45 +#, fuzzy +msgid "Generated &Files" +msgstr "İşlenecek &Dosyalar" + +#: frescobaldi_app/engrave/result_menu.py:66 +#, fuzzy +msgid "No files available" +msgstr "Uygun değil" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "" + +#: frescobaldi_app/help/browser.py:78 +#, fuzzy +msgid "Start" +msgstr "Başlayan numara:" + +#: frescobaldi_app/help/browser.py:79 +#, fuzzy +msgid "Contents" +msgstr "Komut" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "" + +#: frescobaldi_app/help/contents.py:46 +#, fuzzy +msgid "Frescobaldi Manual" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "" + +#: frescobaldi_app/help/contents.py:88 +#, fuzzy +msgid "Introduction" +msgstr "Piyano indirgemesi" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "LilyPond" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "LilyPond Tercihleri" + +#: frescobaldi_app/help/contents.py:142 +#, fuzzy +msgctxt "menu title" +msgid "View" +msgstr "Çal/Görüntüle" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "" + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:228 +#, fuzzy +msgid "Other Tools" +msgstr "&Ekstra Araçlar" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:252 +#, fuzzy +msgid "About Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "" + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:321 +#, fuzzy +msgid "History of Frescobaldi" +msgstr "Frescobaldi" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "" + +#: frescobaldi_app/help/contents.py:377 +#, fuzzy +msgid "Edit" +msgstr "Yazdır..." + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:427 +#, fuzzy +msgid "Document variables" +msgstr "Belge Sekmeleri" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "" + +#: frescobaldi_app/help/contents.py:444 +#, fuzzy +msgid "mode" +msgstr "Kuyrukları kaldır" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" + +#: frescobaldi_app/help/contents.py:448 +#, fuzzy +msgid "filename" +msgstr "%1 dosyalarını yazdır" + +#: frescobaldi_app/help/contents.py:449 +#, fuzzy +msgid "Compiles another LilyPond document instead of the current." +msgstr "Lilypond işlemi okunamadı" + +#: frescobaldi_app/help/contents.py:450 +#, fuzzy +msgid "encoding" +msgstr "Kullanılacak dil kodlaması" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "" + +#: frescobaldi_app/help/contents.py:452 +#, fuzzy +msgid "version" +msgstr "Sürüm" + +#: frescobaldi_app/help/contents.py:453 +#, fuzzy +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "Bu belge için kullanacağınız Lilypond sürüm numarası:" + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +#, fuzzy +msgid "number" +msgstr "İsim" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "" + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "" + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "" + +#: frescobaldi_app/help/contents.py:479 +#, fuzzy +msgid "Table of Contents" +msgstr "İçindekiler" + +#: frescobaldi_app/help/helpimpl.py:115 +#, fuzzy +msgid "Up:" +msgstr "Yukarı" + +#: frescobaldi_app/help/helpimpl.py:130 +#, fuzzy +msgid "Next:" +msgstr "Sonraki" + +#: frescobaldi_app/help/helpimpl.py:133 +#, fuzzy +msgid "See also:" +msgstr "Hepsini seç" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "LilyPond Günlüğü" + +#: frescobaldi_app/logtool/__init__.py:51 +#, fuzzy +msgid "LilyPond &Log" +msgstr "LilyPond Günlüğü" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "Bu dosyayı düzenlemek için tıklayınız." + +#: frescobaldi_app/miditool/__init__.py:51 +#, fuzzy +msgid "MIDI" +msgstr "MIDI çal" + +#: frescobaldi_app/miditool/__init__.py:52 +#, fuzzy +msgid "MIDI &Player" +msgstr "MIDI Çalıcı" + +#: frescobaldi_app/miditool/__init__.py:97 +#, fuzzy +msgctxt "midi player" +msgid "Pause" +msgstr "Durakla" + +#: frescobaldi_app/miditool/__init__.py:98 +#, fuzzy +msgctxt "midi player" +msgid "Play" +msgstr "Çal %1" + +#: frescobaldi_app/miditool/__init__.py:99 +#, fuzzy +msgctxt "midi player" +msgid "Stop" +msgstr "Adım" + +#: frescobaldi_app/miditool/__init__.py:100 +#, fuzzy +msgctxt "midi player" +msgid "Restart" +msgstr "Tekrar başla" + +#: frescobaldi_app/miditool/widget.py:102 +#, fuzzy +msgid "Tempo" +msgstr "Hız:" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:191 +#, fuzzy +msgid "Select Music View Document" +msgstr "&Kaynak Belgesi" + +#: frescobaldi_app/musicview/__init__.py:192 +#, fuzzy +msgid "&Print Music..." +msgstr "Müziği Yazdır..." + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:198 +#, fuzzy +msgid "Fit &Page" +msgstr "İlk Sayfa" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:339 +#, fuzzy +msgid "Choose the PDF document to display." +msgstr "Diğer Belgeleri Kapat" + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:401 +#, fuzzy +msgid "Fit Page" +msgstr "İlk Sayfa" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "" + +#: frescobaldi_app/musicview/image.py:129 +#, fuzzy +msgid "Antialias" +msgstr "İtalyan" + +#: frescobaldi_app/musicview/image.py:130 +#, fuzzy +msgid "Drag" +msgstr "Doryan" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "" + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "" + +#: frescobaldi_app/musicview/image.py:133 +#, fuzzy +msgid "&Save As..." +msgstr "PDF'yi Farklı Kaydet..." + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" + +#: frescobaldi_app/musicview/image.py:167 +#, fuzzy +msgid "Image from {filename}" +msgstr "%1 dosyalarını yazdır" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "" + +#: frescobaldi_app/musicview/image.py:214 +#, fuzzy +msgid "Could not save the image." +msgstr "Yüklenemedi %s" + +#: frescobaldi_app/pitch/__init__.py:99 +#, fuzzy +msgid "Pitch Name &Language" +msgstr "Ses Adı Dili" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" +"Bu belgedeki veya seçimde ses adları için kullanılan LilyPond dilini " +"değiştir." + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "Relativ'i &Absolüt'e dönüştür" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" +"Belgedeki veya seçimdeki notaları relativden absölüt ses noktasına " +"dönüştürür." + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "Abolüt'ü Relativ'e Dönüştür" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "Belgedeki veya seçilen notaları absolüt'ten relativ'e dönüştürür." + +#: frescobaldi_app/pitch/__init__.py:111 +#, fuzzy +msgid "&Transpose..." +msgstr "Aktar..." + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "Belgede veya seçimdeki tüm notaların aktarımını yapar." + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "Ses Adı Dili" + +#: frescobaldi_app/pitch/pitch.py:82 +#, fuzzy +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" +"İstenen çeviriyi uygulayamaz.\n" +"\n" +"Müzik, çeyrek ses değişimleri içermektedir, fakat bunlar \"%1\" ses dili " +"için mümkün değildir." + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" +"Seçilmiş olan metindeki ses noktası dili güncellendi, fakat belgeniz " +"aşağıdaki komutu elle eklemelisiniz:" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "(LilyPond 2.14'den daha düşük sürüm için), veya" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "(LilyPond 2.14 ve daha üst sürüm için.)" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "Aktarım" + +#: frescobaldi_app/pitch/pitch.py:399 +#, fuzzy +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" +"Girilen sesleri anlayamadı.\n" +"\n" +"Lütfen ses adlarının doğru dilde yazıldığına emin olun, seçilen dil \"%1\"." + +#: frescobaldi_app/pitch/pitch.py:581 +#, fuzzy +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" +"İstenen aktarımı uygulayamaz.\n" +"\n" +"Aktarılmış müzik, çeyrek ses değişimleri içermektedir, fakat bunlar %1 ses " +"dili için mümkün değildir." + +#: frescobaldi_app/pitch/pitch.py:712 +#, fuzzy +msgid "Pitch manipulation" +msgstr "Artükülasyon" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:744 +#, fuzzy +msgctxt "submenu title" +msgid "Pitch" +msgstr "Ses noktası" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "" + +#: frescobaldi_app/po/messages.py:44 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "Kaydet" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "" + +#: frescobaldi_app/po/messages.py:46 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "Besteci" + +#: frescobaldi_app/po/messages.py:47 +#, fuzzy +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "Aç %1" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "" + +#: frescobaldi_app/po/messages.py:50 +#, fuzzy +msgctxt "QFileDialog" +msgid "File" +msgstr "Başlık" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "" + +#: frescobaldi_app/po/messages.py:52 +#, fuzzy +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "Ön tanımlı dizin:" + +#: frescobaldi_app/po/messages.py:53 +#, fuzzy +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "Tüm dosyalar" + +#: frescobaldi_app/po/messages.py:55 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "Davul notası burada başlayacak." + +#: frescobaldi_app/po/messages.py:56 +#, fuzzy +msgctxt "QScrollBar" +msgid "Top" +msgstr "Tıkla" + +#: frescobaldi_app/po/messages.py:57 +#, fuzzy +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "Portato" + +#: frescobaldi_app/po/messages.py:58 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page up" +msgstr "Prall up" + +#: frescobaldi_app/po/messages.py:59 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page down" +msgstr "Prall down" + +#: frescobaldi_app/po/messages.py:60 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "Prall up" + +#: frescobaldi_app/po/messages.py:61 +#, fuzzy +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "Prall down" + +#: frescobaldi_app/po/messages.py:62 +#, fuzzy +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "Left heel" + +#: frescobaldi_app/po/messages.py:63 +#, fuzzy +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "Right heel" + +#: frescobaldi_app/po/messages.py:64 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page left" +msgstr "Flageolet" + +#: frescobaldi_app/po/messages.py:65 +#, fuzzy +msgctxt "QScrollBar" +msgid "Page right" +msgstr "Bir ritm yapıştırınız" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "Genel Tercihler" + +#: frescobaldi_app/preferences/__init__.py:182 +#, fuzzy +msgid "MIDI Settings" +msgstr "Ayarlar" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +#, fuzzy +msgid "Helper Applications" +msgstr "Yardımcı Uygulamalar" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "Yollar" + +#: frescobaldi_app/preferences/__init__.py:212 +#, fuzzy +msgid "LilyPond Documentation" +msgstr "LilyPond belgelendirmesi:" + +#: frescobaldi_app/preferences/__init__.py:222 +#, fuzzy +msgid "Keyboard Shortcuts" +msgstr "Klavye Kısayollarını Yapılandır" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:242 +#, fuzzy +msgid "Tools" +msgstr "&Araç Görünümleri" + +#: frescobaldi_app/preferences/documentation.py:64 +#, fuzzy +msgid "Paths to LilyPond Documentation" +msgstr "LilyPond belgelendirmesi:" + +#: frescobaldi_app/preferences/documentation.py:66 +#, fuzzy +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "" +"Dizek başlıklarını harf olarak giriniz (S, A, T veya B gibi).\n" +"Daha fazla bilgi için \"Bu nedir\" kısmına bakın." + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:111 +#, fuzzy +msgid "Preferred Language:" +msgstr "Dil:" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "Öntanımlı" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:135 +#, fuzzy +msgid "Please enter a local path or a URL:" +msgstr "Lütfen bir oturum adı giriniz." + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:124 +#, fuzzy +msgid "Default Styles" +msgstr "Öntanımlı" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +#, fuzzy +msgid "Text" +msgstr "Sonraki" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:363 +#, fuzzy +msgid "Italic" +msgstr "İtalyan" + +#: frescobaldi_app/preferences/fontscolors.py:364 +#, fuzzy +msgid "Underline" +msgstr "Uzatma çizgilerini kullan" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +#, fuzzy +msgid "Selected Text" +msgstr "Hepsini seç" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +#, fuzzy +msgid "Marked Line" +msgstr "Ölçü Çizgileri" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +#, fuzzy +msgid "Error Line" +msgstr "Ölçü Çizgileri" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +#, fuzzy +msgid "Matching Character" +msgstr "Özel Karakterler" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +#, fuzzy +msgid "Preview Background" +msgstr "önizleme kipi" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +#, fuzzy +msgid "Keyword" +msgstr "Klavye" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +#, fuzzy +msgid "Function" +msgstr "Eylem:" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +#, fuzzy +msgid "Value" +msgstr "Ses Yüksekliği" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +#, fuzzy +msgid "String" +msgstr "Yaylılar" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +#, fuzzy +msgid "Escape" +msgstr "Yatay" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +#, fuzzy +msgid "Comment" +msgstr "Komut" + +#: frescobaldi_app/preferences/fontscolors.py:483 +#, fuzzy +msgid "Pitch" +msgstr "Ses noktası" + +#: frescobaldi_app/preferences/fontscolors.py:484 +#, fuzzy +msgid "Octave" +msgstr "Kaydet" + +#: frescobaldi_app/preferences/fontscolors.py:485 +#, fuzzy +msgid "Duration" +msgstr "Noktalı süreler" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +#, fuzzy +msgid "String Number" +msgstr "Sayfa Numaralarını Göster" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "Deyim Bağı" + +#: frescobaldi_app/preferences/fontscolors.py:491 +#, fuzzy +msgid "Dynamic" +msgstr "Gürlükler" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "Artükülasyon" + +#: frescobaldi_app/preferences/fontscolors.py:493 +#, fuzzy +msgid "Chord" +msgstr "Koro" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "Kuyruk Birleştiricisi" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +#, fuzzy +msgid "Repeat" +msgstr "Tekrar sonu" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "Komut" + +#: frescobaldi_app/preferences/fontscolors.py:499 +#, fuzzy +msgid "Specifier" +msgstr "Özel" + +#: frescobaldi_app/preferences/fontscolors.py:500 +#, fuzzy +msgid "User Command" +msgstr "Komut" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +#, fuzzy +msgid "Markup" +msgstr "Harp" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:503 +#, fuzzy +msgid "Lyric Text" +msgstr "Şarkı Sözleri Metnini Tirele" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:506 +#, fuzzy +msgid "Layout Object" +msgstr "Dil Seçimi" + +#: frescobaldi_app/preferences/fontscolors.py:507 +#, fuzzy +msgid "Property" +msgstr "Şair" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +#, fuzzy +msgid "Escaped Character" +msgstr "Özel Karakterler" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:517 +#, fuzzy +msgid "Tag" +msgstr "Tıkla" + +#: frescobaldi_app/preferences/fontscolors.py:518 +#, fuzzy +msgid "LilyPond Tag" +msgstr "LilyPond Günlüğü" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:521 +#, fuzzy +msgid "Entity Reference" +msgstr "Notasyon Referansı" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:527 +#, fuzzy +msgid "Number" +msgstr "İsim" + +#: frescobaldi_app/preferences/fontscolors.py:528 +#, fuzzy +msgid "LilyPond Environment" +msgstr "LilyPond Belgelendirmesi" + +#: frescobaldi_app/preferences/fontscolors.py:532 +#, fuzzy +msgid "Texinfo" +msgstr "Tenor" + +#: frescobaldi_app/preferences/fontscolors.py:534 +#, fuzzy +msgid "Block" +msgstr "Kısalt" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "Dil:" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "Stil:" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "Frescobadli'nin parametreler olmadan başlatılacağı oturumun yüklemesi" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "Oturum olmadan başla" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "Son kullanılan oturum ile başla" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "Oturum ile başla:" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "Belgeleri saklarken" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "İmleç konumunu, yer imlerini, ve bunun gibi öğeleri hatırla." + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "Öntanımlı dizin:" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "LilyPond belgelerinizin öntanımlı dizini (opsiyonel)." + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:71 +#, fuzzy +msgid "MIDI:" +msgstr "MIDI çal" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:76 +#, fuzzy +msgid "File Manager:" +msgstr "Genişleme Düzenleyicisi" + +#: frescobaldi_app/preferences/helpers.py:77 +#, fuzzy +msgid "Shell:" +msgstr "Partisyon:" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:81 +#, fuzzy +msgid "LilyPond versions to use" +msgstr "Kullanılacak LilyPond sürümleri:" + +#: frescobaldi_app/preferences/lilypond.py:82 +#, fuzzy +msgid "Automatically choose LilyPond version from document" +msgstr "" +"Otomatik sürüm seçimini etkinleştirin (Belgeden LilyPond sürümünü seçin)" + +#: frescobaldi_app/preferences/lilypond.py:84 +#, fuzzy +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" +"Buradan, bu oturumdaki belgelerde kullanılacak olan sabit bir LilyPond " +"sürümünü ayarlayabilirsiniz.\n" +"Daha fazla bilgi için Bu Nedir (Shift+F1) kısayolunu kullanın." + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:101 +#, fuzzy +msgid "See also {link}." +msgstr "Hepsini seç" + +#: frescobaldi_app/preferences/lilypond.py:149 +#, fuzzy +msgid "Set as &Default" +msgstr "Öntanımlı olarak ayarlayın" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "öntanımlı" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "LilyPond Komutu:" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "Lilypond programının tam yolunun adı." + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "Convert-ly:" + +#: frescobaldi_app/preferences/lilypond.py:241 +#, fuzzy +msgid "LilyPond-book:" +msgstr "LilyPond-book:" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "Otomatik sürüm seçimini içersin" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "LilyPond Çalışıyor" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:286 +#, fuzzy +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "LilyPond'un ara çıktı dosyalarını silmesine izin ver" + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "LilyPond içeren yol:" + +#: frescobaldi_app/preferences/midi.py:77 +#, fuzzy +msgid "MIDI Ports" +msgstr "MIDI Çalıcı" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" + +#: frescobaldi_app/preferences/midi.py:82 +#, fuzzy +msgid "Player output:" +msgstr "Sayfa numarası:" + +#: frescobaldi_app/preferences/midi.py:84 +#, fuzzy +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" +"Dizek başlıklarını harf olarak giriniz (S, A, T veya B gibi).\n" +"Daha fazla bilgi için \"Bu nedir\" kısmına bakın." + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:135 +#, fuzzy +msgid "Close unused MIDI output" +msgstr "MIDI çıktısı oluştur" + +#: frescobaldi_app/preferences/midi.py:137 +#, fuzzy +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" +"Dizek başlıklarını harf olarak giriniz (S, A, T veya B gibi).\n" +"Daha fazla bilgi için \"Bu nedir\" kısmına bakın." + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "Kısayol" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:125 +#, fuzzy +msgid "Other commands:" +msgstr "Yazdırma komutu:" + +#: frescobaldi_app/preferences/shortcuts.py:173 +#, fuzzy +msgid "&Edit Shortcut for \"{name}\"" +msgstr "Kısayol" + +#: frescobaldi_app/preferences/shortcuts.py:178 +#, fuzzy +msgid "(no shortcut)" +msgstr "Kısayol" + +#: frescobaldi_app/preferences/shortcuts.py:206 +#, fuzzy +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "Davul notasından kuyrukları kaldır." + +#: frescobaldi_app/preferences/shortcuts.py:304 +#, fuzzy +msgid "(default)" +msgstr "öntanımlı" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:142 +#, fuzzy +msgid "Magnifier Size:" +msgstr "Sayfa ebadı:" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "" + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:220 +#, fuzzy +msgid "Group documents by directory" +msgstr "Yürürlükteki Dosyayı Aç" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "Hızılı Ekle" + +#: frescobaldi_app/quickinsert/__init__.py:48 +#, fuzzy +msgid "Quick &Insert" +msgstr "Hızılı Ekle" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "Kısaltmalara izin ver" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "Staccato gibi artikülasyonlar için kısa notasyonu kullan." + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "Artükülasyonlar" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "Farklı türde artikülasyonlar ve diğer işaretler." + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "Vurgu" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "Marcato" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "Staccatissimo" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "Staccato" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "Portato" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "Tenuto" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "Espressivo" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "Süslemeler" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "Trill" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "Prall" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "Mordent" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "Turn" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "Prall prall" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "Prall mordent" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "Up prall" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "Down prall" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "Up mordent" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "Down mordent" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "Prall up" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "Prall down" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "Line prall" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "Reverse turn" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "İşaretler" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "Fermata" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "Short fermata" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "Long fermata" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "Very long fermata" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "Segno" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "Coda" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "Varcoda" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "Signumcongruentiae" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "Diğer" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "Upbow" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "Downbow" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "Snappizzicato" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "Open (e.g. brass)" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "Stopped (e.g. brass)" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "Flageolet" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "Thumb" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "Left heel" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "Right heel" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "Left toe" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "Right toe" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "Yarım açık (örneğin h-hat)" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "Ölçü Çizgileri" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "Ölçü çizgileri, nefes işaretleri, vesaire." + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "Çift ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "Bitiş ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "Noktalı ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "Kesik ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "Görünmeyen ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "Tekrar başla" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "Her ikisini de tekrarla" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "Tekrar sonu" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "Her ikisini de tekrarla (eski)" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "Her ikisini de tekrarla (klasik)" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "Tik ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "Tek ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "Küçük-Geniş-Küçük ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "Geniş-Küçük ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "Çift geniş ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "Segno ölçü çizgisi" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "Nefes İşaretleri" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "Öntanımlı Nefes İşaretleri" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "Kesin Nefes İşareti" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "Kıvrımlı Nefes Keskisi" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "Kesin Nefes İşareti" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#, fuzzy +msgid "Configure Keyboard Shortcut ({key})" +msgstr "Klavye Kısayollarını Yapılandır (%1)" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "Yok" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "Gürlükler" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "Gürlük sembolleri." + +#: frescobaldi_app/quickinsert/dynamics.py:128 +#, fuzzy +msgid "Dynamic sign {name}" +msgstr "Gürlük işareti %1" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "Çeşitli Semboller" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "Crescendo kıvrımı" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "Crescendo" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "Diminuendo kıvrımı" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "Diminuendo" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "Decrescendo" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "Bağlar, çeşitli semboller, vesaire." + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "Arpejler" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "Arpej" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "Üst Ok işaretli Arpej" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "Alt Ok işaretli Arpej" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "Düz Arpej" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "Arpej Parantezi" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "Kaydırmalar" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "Kaydırma" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "Kesik Çizgili Kaydırma" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "Noktalı İşaretle Kaydırma" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "Zigzaglı Kaydırma" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "Trill ile Kaydırma" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "Cümle Bağı" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "Yön:" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "Yukarı" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "Natürel" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "Aşağı" + +#: frescobaldi_app/quickinsert/widget.py:127 +#, fuzzy +msgid "The Quick Insert Panel" +msgstr "Hızılı Ekle" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:146 +#, fuzzy +msgid "&Double durations" +msgstr "Katlı süreler" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "Seçilen tüm süreleri katlı hale getir." + +#: frescobaldi_app/rhythm/__init__.py:149 +#, fuzzy +msgid "&Halve durations" +msgstr "Süreleri yarı değerine indir" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "Seçilen tüm süreleri yarıya indir." + +#: frescobaldi_app/rhythm/__init__.py:152 +#, fuzzy +msgid "Do&t durations" +msgstr "Noktalı süreler" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "Seçilen tüm sürelere nokta ekle." + +#: frescobaldi_app/rhythm/__init__.py:155 +#, fuzzy +msgid "&Undot durations" +msgstr "Sürelerdeki noktaları kaldır" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "Seçilen tüm notalardan bir nokta kaldır." + +#: frescobaldi_app/rhythm/__init__.py:158 +#, fuzzy +msgid "Remove &scaling" +msgstr "Ölçeklemeyi kaldır" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "Seçilen tüm sürelerdeki ölçeklemeyi (*n/m) kaldır." + +#: frescobaldi_app/rhythm/__init__.py:161 +#, fuzzy +msgid "&Remove durations" +msgstr "Süreleri kaldır" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "Seçilen tüm süreleri kaldır." + +#: frescobaldi_app/rhythm/__init__.py:164 +#, fuzzy +msgid "Make &implicit" +msgstr "Görünmez yap" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "Süreleri görünmez yap (tekrarlanan süreleri kaldır)." + +#: frescobaldi_app/rhythm/__init__.py:167 +#, fuzzy +msgid "Make implicit (per &line)" +msgstr "Görünmez yap (satır başına her birini)" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" +"Süreleri görünmez yap (tekrarlanan süreleri kaldır), satırdaki ilk süre " +"hariç." + +#: frescobaldi_app/rhythm/__init__.py:171 +#, fuzzy +msgid "Make &explicit" +msgstr "Görünmez yap" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" +"Süreleri görünmez yap (bir önceki notanın süresi aynı olsa bile, her notaya " +"süre ekle)" + +#: frescobaldi_app/rhythm/__init__.py:175 +#, fuzzy +msgid "&Apply rhythm..." +msgstr "Ritm uygula..." + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "Seçilen müziğe bir ritm girişi uygulayınız." + +#: frescobaldi_app/rhythm/__init__.py:178 +#, fuzzy +msgid "&Copy rhythm" +msgstr "Ritmi kopyala" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "Seçilen müziğe ritmi kopyalayınız." + +#: frescobaldi_app/rhythm/__init__.py:181 +#, fuzzy +msgid "&Paste rhythm" +msgstr "Bir ritm yapıştırınız" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "Seçilen müziğe bir ritm girişi yapıştırınız." + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "Ritm uygula" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "Bir ritm giriniz:" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:279 +#, fuzzy +msgctxt "submenu title" +msgid "Rhythm" +msgstr "&Ritm" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "Yeni Bir Esere Başla..." + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "Müziği buradan gireceksiniz." + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "Öntanımlı Lilypond sloganını kaldır" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "Partisyon Yapılandırma Sihirbazı" + +#: frescobaldi_app/scorewiz/dialog.py:80 +#, fuzzy +msgid "Clear" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:83 +#, fuzzy +msgid "Preview" +msgstr "PDF Önizleme" + +#: frescobaldi_app/scorewiz/dialog.py:130 +#, fuzzy +msgid "Score Preview" +msgstr "PDF Önizleme" + +#: frescobaldi_app/scorewiz/dialog.py:164 +#, fuzzy +msgid "&Titles and Headers" +msgstr "Başlık isimleri ve Başlıklar" + +#: frescobaldi_app/scorewiz/dialog.py:173 +#, fuzzy +msgid "&Parts" +msgstr "Partiler" + +#: frescobaldi_app/scorewiz/dialog.py:182 +#, fuzzy +msgid "&Score settings" +msgstr "Partisyon ayarları" + +#: frescobaldi_app/scorewiz/dialog.py:191 +#, fuzzy +msgid "The Score Wizard" +msgstr "Partisyon Yapılandırma Sihirbazı" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "Bir değer girmek için tıklayınız." + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "ilk sayfanın altı" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "son sayfanın altı" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "İthaf" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "Başlık" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "Alt Başlık" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "Alt alt başlık" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "Çalgı" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "Besteci" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "Aranjör" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "Şair" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "Ölçü" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "Parça" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "Telif Hakkı" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "Slogan" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "Uygun partiler:" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "Partisyon:" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +#, fuzzy +msgid "&Remove" +msgstr "Kuyrukları kaldır" + +#: frescobaldi_app/scorewiz/score.py:104 +#, fuzzy +msgid "Move up" +msgstr "Buraya Taşı" + +#: frescobaldi_app/scorewiz/score.py:105 +#, fuzzy +msgid "Move down" +msgstr "Buraya Taşı" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "Donanım:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "Ölçü birimi:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "Önel ölçüsü:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "Metronom işareti:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "Hız belirteci:" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "Majör" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "Minör" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "İyonyan" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "Doryan" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "Frigyan" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "Lidyan" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "Miksolidyan" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "Aolyan" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "Lokriyan" + +#: frescobaldi_app/scorewiz/settings.py:73 +#, fuzzy +msgid "Score properties" +msgstr "Partisyon ayarları" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "Genel tercihler" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "Tipografik tırnak işaretini kullan" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "" +"Başlıklardaki normal tırnak işaretlerini güzel tipografik tırnaklarla " +"değiştir." + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "Öntanımlı sloganı kaldır" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "Lilypond'un öntanımlı slogan çıktısını gösterme." + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "Ölçü numaralarını kaldır" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "Her satırdaki ölçü işaretlerinin gösterilmesini önle." + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "MIDI çıktısı oluştur" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "PDF dosyasıyla birlikte MIDI dosyası da oluştur." + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "Metronom işaretini göster" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" +"Eğer işaretlenmişse, notanın başında metronom işaretini göster. MIDI çıktısı " +"da metronom ayarını kullanacaktır böylece." + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "Sayfa ebadı:" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "Yatay" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "Uzun" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "Kısa" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "Çalgı isimleri" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "İlk satır:" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "Diğer satırlar:" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "İlk satırdan önce uzun ve kısa çalgı isimlerini kullan." + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "Sonraki satırda kısa, uzun veya hiç çalgı isimleri kullanmayınız." + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "Çalgı isimleri için hangi dili kullanmayı istersiniz." + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "Ses adı dili:" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "Ses bölgesi adları için kullanmak istediğiniz LilyPond dili." + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "Sürüm:" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "Bu belge için kullanacağınız Lilypond sürüm numarası:" + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "Hiç bir ayarlama yapılamaz." + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "Her dizekte kaç tane ayrı ses istediğinizi ayarlayın." + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "" +"Bu özellik füg gibi polifonik bir müzik yazıyorsanız birincil derecede " +"faydalıdır." + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "Sağ el:" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "Sol el:" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "Akor stili:" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "Gitar fret diyagramları" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" +"Akor adlarının üzerine önceden tanımlanmış olan gitar fret diyagramlarını " +"göster (LilyPond 2.12 veya üzeri için)." + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "Akorlar burada başlayacak." + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "Alman" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "Yarı-Alman" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "İtalyan" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "Fransız" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "Horn in F" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "Hn.F." + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "Trumpet in C" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +#, fuzzy +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "Tr.C" + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "Trumpet in Bb" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +#, fuzzy +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "Tr.Bb" + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "Trombone" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "Trb." + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "Bass Tuba" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "B.Tb." + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "Bakır üflemeliler" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +#, fuzzy +msgid "Staff Group" +msgstr "Dizek türü" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "Parantez" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "Kalın parantez" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +#, fuzzy +msgid "Square" +msgstr "Kare parantez" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "Tür:" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +#, fuzzy +msgid "Connect Barlines" +msgstr "Ölçü çizgilerini bağla" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +#, fuzzy +msgid "Score" +msgstr "Partisyon:" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +#, fuzzy +msgid "Piece:" +msgstr "Parça" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +#, fuzzy +msgid "Opus:" +msgstr "Opus" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +#, fuzzy +msgid "Containers" +msgstr "Ölçü çizgilerini bağla" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "Piano" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "Pno." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "Harpsichord" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "Hs." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "Clavichord" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "Clv." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "Organ" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "Org." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "Pedal:" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "Pedal'ı yok etmek istiyorsanız 0 olarak ayarlayınız." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "Celesta" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "Cel." + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "Tuşlu çalgılar" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "Timpani" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "Tmp." + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "Xylophone" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "Xyl." + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "Marimba" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "Üst dizek:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "Bas dizek:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "Vibraphone" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "Vib." + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "Tubular bells" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "Tub." + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "Glockenspiel" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "Gls." + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +#, fuzzy +msgid "Carillon" +msgstr "Clarinet" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +#, fuzzy +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "Mar." + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +#, fuzzy +msgid "Manual staff:" +msgstr "Normal dizek" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +#, fuzzy +msgid "Pedal staff:" +msgstr "Normal dizek" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "Drums" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "Dr." + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "Sesler:" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "Kuyrukları kaldır" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "Davul notasından kuyrukları kaldır." + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "Davul notası burada başlayacak." + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "biraz mesafe bırak." + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "Davul (5 çizgi, varsayılan)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "Timbal-stili (2 çizgi)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "Konga-stili (2 çizgi)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "Bongo-stili (2 çizgi)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "Perküsyon-stili (1 çizgi)" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "Vurmalı Çalgılar" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "Dizek türü" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "Akort:" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "Normal dizek" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "Tablature" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "Her ikisi de" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "Mandolin" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "Mdl." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "Mandolin akordu" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "Banjo" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "Bj." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "Açık SOL-teli akordu (aDGBD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "DO-akordu (gCGBD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "Modal akort (gDGCD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "Açık RE akordu (aDF#AD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "Açık Re minör-akordu (aDFAD)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "Dört tel (beş tel yerine)" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "Klasik Gitar" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +#, fuzzy +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "Gt." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "Gitar akordu" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "Açık SOL-akordu" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "Jazz guitar" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "J.Gt." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "Bass" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "Bs." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "Bas akordu" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "Electric bass" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "E.Bs." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "Harp" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "Hp." + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "Telli çalgılar" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "Akor adları" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "Şifreli Bas" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "Uzatma çizgilerini kullan" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "Figürler burada başlayacak." + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "Dizek" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "Özel" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "Violin" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "Vl." + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "Viola" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "Vla." + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "Cello" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "Contrabass" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "Cb." + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +#, fuzzy +msgid "Basso Continuo" +msgstr "Basso continuo" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "B.c." + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "Yaylılar" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "Kıtalar:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "Kıtaların numarası." + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "Ses genişliği" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "Dizeğin en başında sesin ses genişliğini göster." + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "Şarkı sözleri burada başlayacak." + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "Soprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "S." + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +#, fuzzy +msgid "Mezzo-soprano" +msgstr "Mezzo soprano" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "Ms." + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "Alto" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "A." + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "Tenor" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "T." + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "B." + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "Detaylı Şarkı Notası" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" +"Detaylı Şarkı Notası, üzerinde akorları olan ve altında da şarkı sözlerini " +"içeren notadır. İkinci dizek opsiyoneldir." + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "Eşlik dizeği ekle" + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "Bir eşlik dizeği ekler ve aynı zamanda da üst dizeğe eşlik sesi ekler." + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "Koro" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" +"Lütfen koro için sesleri seçiniz. Sesleri seçmek için S,A, T veya B gibi " +"harfleri kullanınız. Tire eklemek yeni bir dizek anlamına gelir." + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "İpucu: Çift koro için iki koro partilerini kullanabilirsiniz." + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "Çoksesleme:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "Şarkı Sözleri:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "Piyano indirgemesi" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "Otomatik olarak oluşturulan piyano indirgemesini ekler." + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "Prova MIDI dosyaları" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" +"Asıl notada MIDI çıkış ayarları belirtilmiş olmasa da, her ses için bir " +"prova MIDI dosyası yaratın." + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "Ch." + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "Prova MIDI dosyaları:" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "Tüm seslerde aynı sözler" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "Şarkı sözlerinin tek seti bütün dizek aralarına yerleştirilmiştir." + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "Her ses de aynı sözler" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "" +"Her sesin diğer seslerdeki aynı metni kullanan kendine ait sözleri vardır, " + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "Her sesin sözleri farklıdır" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "Her sesin sözleri kendine özgüdür." + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "Dörtlükleri (kıtayı) dağıtın" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "Bir set şarkı sözü kıtaları dizek aralarına yerleştirilmiştir." + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "İnsan sesi" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "Flute" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "Fl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "Piccolo" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "Pic." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "Bass flute" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "Bfl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "Oboe" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "Ob." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +#, fuzzy +msgid "Oboe d'amore" +msgstr "Oboe d'Amore" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "Ob.d'am." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +#, fuzzy +msgid "English horn" +msgstr "English Horn" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "Eng.h." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "Bassoon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "Bn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "Contrabassoon" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "C.Bn." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "Clarinet" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "Cl." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "Sopranino Sax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "SiSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "Soprano Sax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "SoSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "Alto Sax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "ASx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "Tenor Sax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "TSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "Baritone Sax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "BSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "Bass Sax" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "BsSx." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "Soprano recorder" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "S.rec." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "Alto recorder" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "A.rec." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "Tenor recorder" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "T.rec." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "Bass recorder" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "B.rec." + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "Tahta üflemeliler" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "Oturumları Düzenle" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "İsim:" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "Bu oturumdaki belgeleri listesini daima kaydet" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "Ön tanımlı dizin:" + +#: frescobaldi_app/sessions/dialog.py:133 +#, fuzzy +msgid "Edit session: {name}" +msgstr "Oturumu düzenle: %1" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "Yeni oturum ayarla:" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "Lütfen bir oturum adı giriniz." + +#: frescobaldi_app/sessions/dialog.py:174 +#, fuzzy +msgid "Please do not use the name '{name}'." +msgstr "Lütfen şu adı kullanmayın '%1'." + +#: frescobaldi_app/sessions/dialog.py:180 +#, fuzzy +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" +"Bu isimle %1 başka bir oturum zaten var.\n" +"\n" +"Üzerine yazmak ister misiniz?" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "" + +#: frescobaldi_app/sessions/manager.py:127 +#, fuzzy +msgctxt "New Session" +msgid "&New..." +msgstr "Yeni..." + +#: frescobaldi_app/sessions/manager.py:129 +#, fuzzy +msgid "&Manage..." +msgstr "Oturumları Düzenle..." + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "Hiç Oturum Yok" + +#: frescobaldi_app/sessions/menu.py:55 +#, fuzzy +msgctxt "menu title" +msgid "&Session" +msgstr "&Oturumlar" + +#: frescobaldi_app/snippet/builtin.py:38 +#, fuzzy +msgid "Blank Line" +msgstr "Ölçü Çizgileri" + +#: frescobaldi_app/snippet/builtin.py:44 +#, fuzzy +msgid "Single Typographical Quotes" +msgstr "Tipografik tırnak işaretini kullan" + +#: frescobaldi_app/snippet/builtin.py:49 +#, fuzzy +msgid "Double Typographical Quotes" +msgstr "Tipografik tırnak işaretini kullan" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:125 +#, fuzzy +msgid "Modern 2/2 Time Signature" +msgstr "Ölçü birimi:" + +#: frescobaldi_app/snippet/builtin.py:131 +#, fuzzy +msgid "Modern 4/4 Time Signature" +msgstr "Ölçü birimi:" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:148 +#, fuzzy +msgid "LilyPond Version" +msgstr "Varsayılan LilyPond Sürüm Numarası." + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:166 +#, fuzzy +msgid "Upper case selection" +msgstr "Partisyon ayarları" + +#: frescobaldi_app/snippet/builtin.py:172 +#, fuzzy +msgid "Lower case selection" +msgstr "Partisyon ayarları" + +#: frescobaldi_app/snippet/builtin.py:178 +#, fuzzy +msgid "Title case selection" +msgstr "Satır seçim kipi" + +#: frescobaldi_app/snippet/builtin.py:189 +#, fuzzy +msgid "Markup lines" +msgstr "Ölçü Çizgileri" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:202 +#, fuzzy +msgid "Tagline with date and LilyPond version" +msgstr "LilyPond sürümü tanımlanamıyor." + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:227 +#, fuzzy +msgid "No Tagline" +msgstr "Slogan" + +#: frescobaldi_app/snippet/builtin.py:235 +#, fuzzy +msgid "No Barnumbers" +msgstr "Ölçü numaralarını kaldır" + +#: frescobaldi_app/snippet/builtin.py:245 +#, fuzzy +msgid "Midi Tempo" +msgstr "Hız:" + +#: frescobaldi_app/snippet/builtin.py:255 +#, fuzzy +msgid "Staff Size" +msgstr "Dizek Boyutu:" + +#: frescobaldi_app/snippet/builtin.py:310 +#, fuzzy +msgid "A5 Paper" +msgstr "Sayfa" + +#: frescobaldi_app/snippet/builtin.py:318 +#, fuzzy +msgid "Document Fonts..." +msgstr "&Belge" + +#: frescobaldi_app/snippet/builtin.py:346 +#, fuzzy +msgid "Last note or chord" +msgstr "Son notayı veya akoru tekrarlayın." + +#: frescobaldi_app/snippet/builtin.py:427 +#, fuzzy +msgid "Color" +msgstr "Besteci" + +#: frescobaldi_app/snippet/builtin.py:464 +#, fuzzy +msgid "Basic Leadsheet" +msgstr "Detaylı Şarkı Notası" + +#: frescobaldi_app/snippet/builtin.py:508 +#, fuzzy +msgid "Choir Hymn" +msgstr "Koro" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:119 +#, fuzzy +msgid "Title:" +msgstr "Başlık" + +#: frescobaldi_app/snippet/edit.py:120 +#, fuzzy +msgid "Shortcut:" +msgstr "Kısayol" + +#: frescobaldi_app/snippet/edit.py:131 +#, fuzzy +msgid "Click to change the keyboard shortcut." +msgstr "Klavye Kısayollarını Yapılandır" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:218 +#, fuzzy +msgctxt "menu title" +msgid "File" +msgstr "Başlık" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:80 +#, fuzzy +msgid "The version of the default LilyPond program." +msgstr "Lilypond programının tam yolunun adı." + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:96 +#, fuzzy +msgid "The name of the current document." +msgstr "Yürürlükteki& Belge ile Konsolu Senkronize Ediniz." + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +#, fuzzy +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "Susları çıkar" + +#: frescobaldi_app/snippet/import_export.py:119 +#, fuzzy +msgid "New Snippets" +msgstr "Susları çıkar" + +#: frescobaldi_app/snippet/import_export.py:120 +#, fuzzy +msgid "Updated Snippets" +msgstr "Susları çıkar" + +#: frescobaldi_app/snippet/import_export.py:121 +#, fuzzy +msgid "Unchanged Snippets" +msgstr "Susları çıkar" + +#: frescobaldi_app/snippet/import_export.py:183 +#, fuzzy +msgid "Import Keyboard Shortcuts" +msgstr "Klavye Kısayollarını Yapılandır" + +#: frescobaldi_app/snippet/import_export.py:188 +#, fuzzy +msgid "Choose which snippets you want to import:" +msgstr "Lütfen yazdırmak istediğiniz dosyaları seçiniz:" + +#: frescobaldi_app/snippet/import_export.py:190 +#, fuzzy +msgid "There are no new or updated snippets in the file." +msgstr "E-posta olarak gönderilecek dosya bulunmamaktadır." + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "&Ekle" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "İsim" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "Tanım" + +#: frescobaldi_app/snippet/template.py:33 +#, fuzzy +msgid "Save as Template" +msgstr "Sayfa başına düşen dizek sayısı:" + +#: frescobaldi_app/snippet/template.py:34 +#, fuzzy +msgid "Please enter a template name:" +msgstr "Lütfen bir oturum adı giriniz." + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +#, fuzzy +msgid "Snippets" +msgstr "Susları çıkar" + +#: frescobaldi_app/snippet/tool.py:54 +#, fuzzy +msgid "&Snippets" +msgstr "Susları çıkar" + +#: frescobaldi_app/snippet/tool.py:79 +#, fuzzy +msgid "Save as Template..." +msgstr "PDF'yi Farklı Kaydet..." + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +#, fuzzy +msgid "&Edit..." +msgstr "Yazdır..." + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:179 +#, fuzzy +msgid "Remove the selected snippets." +msgstr "Seçilen müziği tekrarla" + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:181 +#, fuzzy +msgid "Apply the current snippet." +msgstr "İmleçi bu unsura yerleştirin." + +#: frescobaldi_app/snippet/widget.py:182 +#, fuzzy +msgid "&Import..." +msgstr "Yazdır..." + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:184 +#, fuzzy +msgid "E&xport..." +msgstr "Yazdır..." + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:188 +#, fuzzy +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" +"Dizek başlıklarını harf olarak giriniz (S, A, T veya B gibi).\n" +"Daha fazla bilgi için \"Bu nedir\" kısmına bakın." + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +#, fuzzy +msgid "XML Files" +msgstr "Tüm dosyalar" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:400 +#, fuzzy +msgctxt "menu title" +msgid "Insert" +msgstr "&Ekle" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +#, fuzzy +msgid "Input" +msgstr "MIDI girişi:" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +#, fuzzy +msgid "Scheme:" +msgstr "Partisyon:" + +#: frescobaldi_app/widgets/schemeselector.py:63 +#, fuzzy +msgctxt "New Scheme" +msgid "&New..." +msgstr "Yeni..." + +#: frescobaldi_app/widgets/schemeselector.py:93 +#, fuzzy +msgid "Please enter a name for the new scheme:" +msgstr "Lütfen, metne atamak üzere değişkene bir ad veriniz:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +#, fuzzy +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "Kısayol" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +#, fuzzy +msgid "&No shortcut" +msgstr "Kısayol" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +#, fuzzy +msgid "Use a &custom shortcut:" +msgstr "Güncel sürüm numarasını kullan:" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +#, fuzzy +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "Yok" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "Hızı ayarlamak için bu düğmeye bir kaç kez tıklayınız." + +#: frescobaldi_app/widgets/urlrequester.py:75 +#, fuzzy +msgid "Open file dialog" +msgstr "Dosya Aç" + +#: frescobaldi_app/widgets/urlrequester.py:119 +#, fuzzy +msgid "Select a directory" +msgstr "Öntanımlı dizin:" + +#: frescobaldi_app/widgets/urlrequester.py:121 +#, fuzzy +msgid "Select a file" +msgstr "Hepsini seç" + +#, fuzzy +#~ msgid "Edit..." +#~ msgstr "Yazdır..." + +#, fuzzy +#~ msgid "Remove" +#~ msgstr "Kuyrukları kaldır" + +#~ msgid "Copyright (c) 2008-2010, Wilbert Berendsen" +#~ msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your name" +#~ msgstr "Server Acim" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "i18n@frescobaldi.org" +#~ msgstr "i18n@frescobaldi.org" + +#~ msgid "Session to start" +#~ msgstr "Başlatılacak oturum" + +#~ msgid "Start a new instance" +#~ msgstr "Yeni bir çalışmaya başla" + +#~ msgid "Try to use smart line and column numbers" +#~ msgstr "Akıllı satır ve sütun numaralarını kullanmaya çalış" + +#~ msgid "LilyPond files to open, may also be textedit URLs" +#~ msgstr "" +#~ "Açılacak LilyPond dosyaları, bunlardan bazıları metin işlemeli URL'lerdir." + +#~ msgid "Left Sidebar" +#~ msgstr "Sol Kenar Çubuğu" + +#~ msgid "Right Sidebar" +#~ msgstr "Sağ Kenar Çubuğu" + +#~ msgid "Top Sidebar" +#~ msgstr "Üst Kenar Çubuğu" + +#~ msgid "Bottom Sidebar" +#~ msgstr "Alt Kenar Çubuğu" + +#~ msgid "Show Path" +#~ msgstr "Yolu Göster" + +#~ msgid "Show Document Tabs" +#~ msgstr "Belge Sekmelerini Göster" + +#~ msgid "" +#~ "Could not find the XMLGUI container \"%1\".\n" +#~ "\n" +#~ "Probably the local ui.rc file contains errors. It is recommended to " +#~ "delete this file because elements in the user interface will be missing. " +#~ "This is the full path of the file:\n" +#~ "\n" +#~ "%2\n" +#~ msgstr "" +#~ "XMLGUI içeriği bulunamıyor \"%1\".\n" +#~ "\n" +#~ "Belki de yerel ui.rc dosyasında hatalar olabilir. Bu dosyanın silinmesi " +#~ "önerilir çünkü kullanıcı arayüzündeki bazı ögeler kayıp olabilir. Bu " +#~ "dosyanın tam yolunun adresidir:\n" +#~ "\n" +#~ "%2\n" + +#~ msgid "Please select some text first." +#~ msgstr "Lütfen önce bir metin seçiniz." + +#~ msgid "Line: %1 Col: %2" +#~ msgstr "Satır: %1 Sütun: %2" + +#~ msgid "BLOCK" +#~ msgstr "GENİŞLİK" + +#~ msgid "Block selection mode" +#~ msgstr "Genişlik seçim kipi" + +#~ msgid "LINE" +#~ msgstr "SATIR" + +#~ msgid "Right-click for tab options" +#~ msgstr "Sekme seçenekleri için sağ-tıklayınız" + +#~ msgid "Please install %1" +#~ msgstr "Lütfen kurunuz %1" + +#~ msgid "Press the button to configure the keyboard shortcut for:" +#~ msgstr "Klavye kısayol yapılandırması için düğmeye tıklayın:" + +#~ msgid "Session" +#~ msgstr "Oturum" + +#~ msgid "Properties of this session" +#~ msgstr "Bu oturumun özellikleri" + +#~ msgid "Please do not use the ampersand (&) character in a session name." +#~ msgstr "Lütfen bir oturuma isim verirken ve işaretini (&) kullanmayın." + +#~ msgid "Open %1 in external viewer" +#~ msgstr "Bu dosyayı %1 dış görüntüleyicide aç" + +#~ msgid "(No up-to-date MIDI or PDF files available.)" +#~ msgstr "(Hiç güncel MIDI veya PDF dosyası yok)" + +#~ msgid "" +#~ "There are no up-to-date MIDI or PDF files available. Please run LilyPond " +#~ "to create one or more output files." +#~ msgstr "" +#~ "Güncel hiç MIDI veya PDF dosyası yok. Lütfen bir veya birden fazla çıktı " +#~ "dosyası oluşturmak için LilyPond'u çalıştırın." + +#~ msgid "No files to send" +#~ msgstr "Gönderilecek dosya yok" + +#~ msgid "" +#~ "There are no PDF documents to print.\n" +#~ "\n" +#~ "You probably need to run LilyPond to create or update a PDF document. If " +#~ "you are creating MIDI files, be sure you also put a \\layout { } section " +#~ "in your score, otherwise LilyPond will not create a PDF." +#~ msgstr "" +#~ "Yazdırılacak hiç PDF belgesi yok.\n" +#~ "\n" +#~ "Bir PDF belgesi oluşturmak veya güncellemek için LilyPond'un " +#~ "çalıştırmanız gereklidir. Eğer MIDI dosyaları oluşturuyorsanız, notanıza " +#~ "bir \\layout { } bölmesi eklediğinizden emin olun, aksi taktirde LilyPond " +#~ "bir PDF oluşturmayacaktır." + +#~ msgid "No files to print" +#~ msgstr "Yazdırılacak dosya yok" + +#~ msgid "Email documents" +#~ msgstr "E-posta belgeleri" + +#~ msgid "Please select the files you want to send:" +#~ msgstr "Lütfen göndermek istediğiniz dosyaları seçiniz:" + +#~ msgid "" +#~ "These are the files that are up-to-date (i.e. newer than the LilyPond " +#~ "source document). Also LilyPond files included by the source document are " +#~ "shown." +#~ msgstr "" +#~ "Güncel dosyalar var (örn. LilyPond kaynak dosyasından daha yeniler). " +#~ "Ayrıca, LilyPond kaynak dosyaları da görüntülenmektedir." + +#~ msgid "" +#~ "Note: this PDF file has been created with embedded point-and-click URLs " +#~ "(preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the file in publish mode, because then the PDF file " +#~ "is much smaller." +#~ msgid_plural "" +#~ "Note: these PDF files have been created with embedded point-and-click " +#~ "URLs (preview mode), which increases the file size dramatically. Please " +#~ "consider to rebuild the files in publish mode, because then the PDF files " +#~ "are much smaller." +#~ msgstr[0] "" +#~ "Bu PDF dosyaları, dosya boyutu önemli derece arttıran gömülü işaretle-ve-" +#~ "tıkla bağlantısıyla yaratılmıştır. (önizleme kipi) Lütfen dosyayı " +#~ "yayınlama kipinde yeniden derlemeyi deneyiniz, böylece PDF dosya boyutu " +#~ "daha küçülecektir." + +#~ msgid "" +#~ "Note: If there are no PDF and no MIDI files, you probably need to run " +#~ "LilyPond to update those files, before sending the e-mail." +#~ msgstr "" +#~ "Dikkat: Eğer hiç PDF veya MIDI dosyası yoksa, e-posta göndermeden önce bu " +#~ "belgeleri güncellemek için büyük olasılıkla LilyPond'u çalıştırmanız " +#~ "gerekecektir." + +#~ msgid "" +#~ "These are the PDF documents that are up-to-date (i.e. newer than the " +#~ "LilyPond source document). Check the documents you want to send to the " +#~ "printer." +#~ msgstr "" +#~ "Güncel PDF dosyaları var (örn. LilyPond kaynak dosyasından daha yeniler). " +#~ "Yazıcıya göndermek istediğiniz belgeleri denetleyin." + +#~ msgid "Print %1" +#~ msgstr "Yazdır %1" + +#~ msgid "" +#~ "A print command (like 'lpr' or 'lp') could not be found on your system." +#~ msgstr "Bir yazdırma komutu ('lpr' veya 'lp' gibi) sisteminizde bulunamadı." + +#~ msgid "The command '%1' could not be found on your system." +#~ msgstr "Komut '%1' sisteminizde çalıştırılamıyor." + +#~ msgid "" +#~ "The command below has been run, but exited with a return code %1.\n" +#~ "\n" +#~ "%2" +#~ msgstr "" +#~ "Aşağıdaki komut çalıştırılmış, ancak bir dönüş koduyla çıkmış durumda %" +#~ "1.\n" +#~ "\n" +#~ "%2" + +#~ msgid "Create blank staff paper" +#~ msgstr "Boş nota kağıdı oluştur" + +#~ msgid "Choose what kind of empty staves you want to create." +#~ msgstr "Ne tür boş nota kağıdı oluşturacağınızı seçin." + +#~ msgid "Choose which action happens when clicking \"Ok\"." +#~ msgstr "" +#~ "\"Tamam\" düğmesini tıkladığınızda hangi tür eylemin gerçekleşeceğini " +#~ "seçin." + +#~ msgid "Preview the empty staff paper." +#~ msgstr "Boş nota kağıdını ön izle." + +#~ msgid "Click to see more settings." +#~ msgstr "Daha fazla ayarı görmek için tıklayın." + +#~ msgid "Print Bar Lines" +#~ msgstr "Ölçü Çizgilerini Göster" + +#~ msgid "Bars per line:" +#~ msgstr "Satır başına düşen ölçü:" + +#~ msgid "Blank staff paper preview" +#~ msgstr "Boş nota kağıdı önizleme" + +#~ msgid "No PDF was created." +#~ msgstr "PDF oluşturulmadı." + +#~ msgid "Open in PDF viewer" +#~ msgstr "PDF göstericide Aç" + +#~ msgid "Print staff paper" +#~ msgstr "Dizek kağıdını yazdır" + +#~ msgid "Copy LilyPond code to editor" +#~ msgstr "LilyPond kodunu düzenleyiciye kopyala" + +#~ msgid "Clef:" +#~ msgstr "Anahtar:" + +#~ msgid "Single Staff" +#~ msgstr "Tek Dizek" + +#~ msgid "Systems per page:" +#~ msgstr "Sayfa başına düşen sistemler:" + +#~ msgid "Clefs" +#~ msgstr "Anahtarlar" + +#~ msgid "Piano Staff" +#~ msgstr "Piano Dizeği" + +#~ msgid "Organ Staff" +#~ msgstr "Org Dizeği" + +#~ msgid "Staves per system:" +#~ msgstr "Sistem başına düşen dizekler:" + +#~ msgid "Clefs:" +#~ msgstr "Anahtarlar" + +#~ msgid "" +#~ "To configure clefs, first set the number of staves per system. Then enter " +#~ "as many letters (S, A, T or B) as there are staves.\n" +#~ "\n" +#~ "S or A: treble clef,\n" +#~ "T: treble clef with an \"8\" below,\n" +#~ "B: bass clef\n" +#~ "\n" +#~ "So when you want to create music paper for a four-part mixed choir score, " +#~ "first set the number of staves per system to 4. Then enter \"SATB" +#~ "\" (without the quotes) here." +#~ msgstr "" +#~ "Anahtarları yapılandırmak için, önce sistem başına düşen dizek sayısını " +#~ "ayarlayın. Sonra dizeklere harf karşılığı giriniz (S, A, T veya B gibi).\n" +#~ "\n" +#~ "S veya A: sol anahtarı,\n" +#~ "T: altta \"8\" ile sol anahtarı,\n" +#~ "B: fa anahtarı\n" +#~ "\n" +#~ "Sonra, dört partili karışık koro müziği oluşturduğunuzda, sistem başına " +#~ "dizelerin sayısını 4 olarak ayarlayın. Sonra aralarında virgül olmadan " +#~ "\"SATB\" buraya giriniz." + +#~ msgid "Choir Staff" +#~ msgstr "Koro Dizeği" + +#~ msgid "Custom Staff" +#~ msgstr "Özelleştirilmiş Dizek" + +#~ msgid "Space below:" +#~ msgstr "Aşağıdaki boşluk:" + +#~ msgid "Please select a music expression, enclosed in << ... >> or { ... }." +#~ msgstr "Lütfen bir ifade seçiniz, aralarında <<...>> veya { ... } olsun." + +#~ msgid "Please enter a start pitch and a destination pitch:" +#~ msgstr "Lütfen bir başlangıç sesi ve aktarılacak uzaklıktaki sesi giriniz:" + +#~ msgid "Transpose from:" +#~ msgstr "Aktarın yapılacak yer:" + +#~ msgid "to:" +#~ msgstr "yön:" + +#~ msgid "Install" +#~ msgstr "Yükle" + +#~ msgid "Download LilyPond" +#~ msgstr "LilyPond'u İndir" + +#~ msgid "" +#~ "With this tool you can download packaged binary releases of LilyPond for " +#~ "your operating system." +#~ msgstr "" +#~ "Bu araç ile işletim sisteminiz için LilyPond'un ikili sürümlerini " +#~ "indirebilirsiniz." + +#~ msgid "Select the LilyPond version you want to download." +#~ msgstr "İndirmek istediğiniz LilyPond sürümünü seçiniz." + +#~ msgid "" +#~ "Select a writable directory you want to install LilyPond to.\n" +#~ "(A version-numbered directory will be created in this directory.)" +#~ msgstr "" +#~ "LilyPond'u kuracağınız yazılabilir dizini seçiniz.\n" +#~ "(Bu dizinde sürüm-numarası ile numaralandırılmış bir dizin " +#~ "oluşturulacaktır.)" + +#~ msgid "Install into:" +#~ msgstr "Buraya kur:" + +#~ msgid "Details" +#~ msgstr "Ayrıntılar" + +#~ msgid "The website where LilyPond binaries can be downloaded." +#~ msgstr "LilyPond ikili sürümlerinin indirilebileceği web sayfası." + +#~ msgid "Download from:" +#~ msgstr "Buradan indir:" + +#~ msgid "Machine type:" +#~ msgstr "Makine türü:" + +#~ msgid "" +#~ "This is the URL to the package that will be downloaded and installed.\n" +#~ "You can also browse to other places to select a LilyPond package." +#~ msgstr "" +#~ "Bu URL paketin indirilip kurulabileceği adrestir.\n" +#~ "Bir LilyPond paketi seçmek için diğer yerlere de göz atabilirsiniz." + +#~ msgid "Package Url:" +#~ msgstr "Paket Url adresi:" + +#~ msgid "Downloading directory listing..." +#~ msgstr "Dizin listelemesini indiriyor..." + +#~ msgid "No packages found. You can browse to a package manually." +#~ msgstr "Paket bulunamadı. Pakete el ile göz atabilirsiniz." + +#~ msgid "Latest Development Version (%1)" +#~ msgstr "En Güncel Geliştirme Sürümü (%1)" + +#~ msgid "Latest Stable Version (%1)" +#~ msgstr "En Son Kararlı Sürüm (%1)" + +#~ msgid "Downloading %1..." +#~ msgstr "İndiriliyor %1..." + +#~ msgid "Download cancelled." +#~ msgstr "İndirmekten vazgeçildi." + +#~ msgid "Download failed: %1" +#~ msgstr "İndirme başarısız:%1" + +#~ msgid "" +#~ "LilyPond %1 seems already to be installed in %2.\n" +#~ "\n" +#~ "Do you want to use it or to remove and re-install?" +#~ msgstr "" +#~ "LilyPond %1 zaten şurada kurulmuş gözüküyor %2.\n" +#~ "\n" +#~ "Bunu kullanmak istiyor musunuz? Ya da kaldırıp yeniden mi kurmak " +#~ "istiyorsunuz?" + +#~ msgid "Use existing LilyPond" +#~ msgstr "Eski LilyPond'u Kullan" + +#~ msgid "Remove and re-install" +#~ msgstr "Kaldır ve yeniden kur" + +#~ msgid "Unpacking %1..." +#~ msgstr "Paket Çıkarılıyor %1..." + +#~ msgid "Unpacking finished." +#~ msgstr "Paket çıkarma işlemi bitti." + +#~ msgid "Unpacking failed." +#~ msgstr "Paketi çıkarma başarısız." + +#~ msgid "" +#~ "An error occurred:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "Bilinmeyen bir hata meydana geldi:\n" +#~ "\n" +#~ "%1" + +#~ msgid "" +#~ "This is the list of defined expansions.\n" +#~ "\n" +#~ "Click on a row to see or change the associated text. Doubleclick a " +#~ "shortcut or its description to change it. You can also press F2 to edit " +#~ "the current shortcut.\n" +#~ "\n" +#~ "Use the buttons below to add or remove expansions.\n" +#~ "\n" +#~ "There are two ways to use the expansion: either type the shortcut in the " +#~ "text and then call the Expand function, or just call the Expand function " +#~ "(default shortcut: Ctrl+.), choose the expansion from the list and press " +#~ "Enter or click Ok." +#~ msgstr "" +#~ "Tanımlı genişlemelerin listesi.\n" +#~ "\n" +#~ "İlgili metni görmek veya değiştirmek için sıradaki öğeye tıklayınız. " +#~ "Kısayolun tanımını değiştirmek için ona çift tıklayınız. O kısayolu " +#~ "düzenlemek için ayrıca F2 tuşuna da basabilirsiniz.\n" +#~ "\n" +#~ "Genişlemeleri eklemek veya çıkarmak için aşağıdaki düğmeleri kullanınız.\n" +#~ "\n" +#~ "Genişlemeyi kullanmanın iki yolu vardır: ya metindeki kısayolu yazını ve " +#~ "ardından Genişlet işlevini çağırın, ya da sadece Genişlet işlevini " +#~ "çağırın (öntanımlı kısayol: Ctrl+.), listeden genişleme özelliğini seçip " +#~ "Enter veya OK tuşuna basın" + +#~ msgid "" +#~ "This is the text associated with the selected shortcut. Some characters " +#~ "have special meaning:" +#~ msgstr "" +#~ "Bu, seçili kısayola atanmış metindir. Bazı karakterlerin özel anlamı " +#~ "vardır:" + +#~ msgid "Translate the following pitch." +#~ msgstr "Gelen sesi çevirin." + +#~ msgid "New Item" +#~ msgstr "Yeni Öğe" + +#~ msgid "" +#~ "Another expansion already uses this name.\n" +#~ "\n" +#~ "Please use a different name." +#~ msgstr "" +#~ "Başka genişleme aynı adı kullanıyor.\n" +#~ "\n" +#~ "Lütgen başka bir ad kullanın." + +#~ msgid "" +#~ "Please only use letters, numbers and the underscore character in the " +#~ "expansion name." +#~ msgstr "" +#~ "Genişleme adında lütfen sadece harf, rakkkam ve küçük harf kullanın." + +#~ msgid "Please don't leave the description empty." +#~ msgstr "Lütfen tanımı boş bırakmayın." + +#~ msgid "" +#~ "Could not find any hyphenation dictionaries.\n" +#~ "\n" +#~ "Please install a package containing some and/or or configure the search " +#~ "path to find them in the Frescobaldi settings under \"Paths.\"" +#~ msgstr "" +#~ "Tireleme sözlüğü bulunamıyor.\n" +#~ "\n" +#~ "\"Yollar.\" altındaki Frescobaldi ayarlarında bulmak için arama yolunu " +#~ "ayarlayın ve/veya bunu sağlayacak bir paket yükleyin." + +#~ msgid "Larger text" +#~ msgstr "Daha büyük metin" + +#~ msgid "Smaller text" +#~ msgstr "Daha küçük metin" + +#~ msgid "Up one level" +#~ msgstr "Bir seviye yukarı" + +#~ msgid "Index" +#~ msgstr "İçindekiler" + +#~ msgid "Copy &Link" +#~ msgstr "Kopyala &Bağlantı" + +#~ msgid "Open Link in &New Window" +#~ msgstr "Bağlantıyı Aç &Yeni Pencerede" + +#~ msgid "Open Document in &New Window" +#~ msgstr "Belgeyi Aç &Yeni Pencerede" + +#~ msgid "Loading..." +#~ msgstr "Yüklüyor..." + +#~ msgid "LilyPond Command Index" +#~ msgstr "LilyPond Komut Listesi" + +#~ msgid "Learning Manual" +#~ msgstr "Öğrenme El Kitabı" + +#~ msgid "Learning Manual Index" +#~ msgstr "Öğrenme El Kitabı İndeksi" + +#~ msgid "Internals Reference" +#~ msgstr "Dahili Başvuru" + +#~ msgid "The %1 context" +#~ msgstr "%1 İçindekiler" + +#~ msgid "The %1 layout object" +#~ msgstr "%1 yerleşim nesnesi" + +#~ msgid "" +#~ "Where to add articulations et cetera: above or below the staff or in the " +#~ "default position." +#~ msgstr "" +#~ "Artikülasyon ve benzeri işaretler nereye yerleştirilecek: dizeğin altına " +#~ "veya üstüne mi yoksa öntanımlı yerine mi." + +#~ msgid "Click an articulation sign to add it to your document." +#~ msgstr "Belgenize eklemek için bir artikülasyon işaretine tıklayınız." + +#~ msgid "" +#~ "If you select some music first, the articulation will be added to all " +#~ "notes in the selection." +#~ msgstr "" +#~ "Eğer önce notaları seçerseniz, artikülasyon seçilen tüm notalara " +#~ "uygulanacaktır." + +#~ msgid "Click a dynamic sign to add it to your document." +#~ msgstr "Belgenize eklemek için bir gürlük işaretine tıklayınız." + +#~ msgid "" +#~ "If you select some music first, dynamic spanners will be added the " +#~ "selected fragment." +#~ msgstr "" +#~ "Eğer önce notaları seçerseniz, gürlük işaretleri seçilen tüm notalara " +#~ "uygulanacaktır." + +#~ msgid "" +#~ "If you have selected some music and you click a sign after a spanner, the " +#~ "sign will terminate the spanner." +#~ msgstr "" +#~ "Müziğin bir kısmını seçip sembol sonrasındaki bir işarete tıklarsanız, bu " +#~ "işaret sembolü sonlandıracaktır." + +#~ msgid "These spanners need a music fragment to be selected." +#~ msgstr "" +#~ "Bu sembolleri kullanmak için bir müzik cümlesinin seçilmiş olması " +#~ "gereklidir." + +#~ msgid "Arpeggios are used with chords with multiple notes." +#~ msgstr "Arpejler birden fazla nota içeren akorlarla birlikte kullanılır." + +#~ msgid "" +#~ "Glissandos are attached to a note and automatically extend to the next " +#~ "note." +#~ msgstr "" +#~ "Kaydırmalar bir notadan başlar ve bir sonraki notaya kadar devam eder." + +#~ msgid "Run LilyPond (preview)" +#~ msgstr "LilyPond'u çalıştır (önizleme)" + +#~ msgid "Run LilyPond (publish)" +#~ msgstr "LilyPond'u çalıştır (yayınla)" + +#~ msgid "Run LilyPond (custom)..." +#~ msgstr "LilyPond'u çalıştır (bilindik yöntemle)..." + +#~ msgid "Interrupt LilyPond Job" +#~ msgstr "Lilypond Görevini Durdur" + +#~ msgid "Email Documents..." +#~ msgstr "Belgeleri E-posta İle Gönder..." + +#~ msgid "Cut selection and assign it to a LilyPond variable." +#~ msgstr "Seçimi kesin ve onu LilyPond değişkeni olarak atayın." + +#~ msgid "Repeat the last music expression (note or chord)." +#~ msgstr "Son müzik ifadesini tekrarlayın (nota veya akor)." + +#~ msgid "Insert or Manage Expansions..." +#~ msgstr "Genişlemeleri Gir veya Düzenle..." + +#~ msgid "Expand last word or open the expansions dialog." +#~ msgstr "Son kelimeyi genişlet veya genişletmeler penceresini aç." + +#~ msgid "Insert special characters." +#~ msgstr "Özel karakterler ekle." + +#~ msgid "Add to Expansions" +#~ msgstr "Genişlemelere Ekle" + +#~ msgid "Go to the next blank line." +#~ msgstr "Bir sonraki boş satıra geç." + +#~ msgid "Previous blank line" +#~ msgstr "Önceki boş satır" + +#~ msgid "Go to the previous blank line." +#~ msgstr "Önceki boş satıra git." + +#~ msgid "Select to next blank line" +#~ msgstr "Bir sonraki boş satırı seç" + +#~ msgid "" +#~ "Selects text from the current position down to and including the next " +#~ "blank line." +#~ msgstr "" +#~ "Metni şu anki konumundan aşağıya kadar seçiniz ve bu seçiminiz bir " +#~ "sonraki boş satırı da içersin." + +#~ msgid "Select to previous blank line" +#~ msgstr "Önceki boş satırı seç" + +#~ msgid "" +#~ "Selects text from the current position up to right after the previous " +#~ "blank line." +#~ msgstr "" +#~ "Metni şu anki konumundan yukarı ve sağa doğru seçiniz ve seçime bir " +#~ "önceki boş satırdan başlayın." + +#~ msgid "Move selection to next blank line" +#~ msgstr "Seçimi bir sonraki boş satıra taşı" + +#~ msgid "Moves selected block to next blank line." +#~ msgstr "Seçili bloğu bir sonraki boş satıra taşır." + +#~ msgid "Move selection to previous blank line" +#~ msgstr "Seçimi bir önceki boş satıra taşı" + +#~ msgid "Moves selected block to previous blank line." +#~ msgstr "Seçiliği bloğu bir önceki boş satıra taşır." + +#~ msgid "Single Quote" +#~ msgstr "Tek Tırnak" + +#~ msgid "Double Quote" +#~ msgstr "Çift Tırnak" + +#~ msgid "Align" +#~ msgstr "Yasla" + +#~ msgid "Insert pair of braces" +#~ msgstr "Bir çift yan kaplama çizgisi ekle" + +#~ msgid "" +#~ "Your document has been modified and needs to be saved before LilyPond can " +#~ "be started.\n" +#~ "\n" +#~ "Save the document now?" +#~ msgstr "" +#~ "Belgeniz değiştirilmiş ve kaydedilmesi gerekiyor, aksi taktirde LilyPond " +#~ "çalıştırılamayacaktır.\n" +#~ "\n" +#~ "Belge şimdi kaydedilsin mi?" + +#~ msgid "There is already a LilyPond job running for this document." +#~ msgstr "Bu belge için yürütülmekte olan bir LilyPond görevi bulunmaktadır." + +#~ msgid "Can't process document" +#~ msgstr "Belgeyi işleyemiyor" + +#~ msgid "Continue anyway?" +#~ msgstr "Yine de devam et?" + +#~ msgid "" +#~ "You want to run LilyPond in preview mode (with point and click enabled), " +#~ "but your document contains a command to turn point and click off." +#~ msgstr "" +#~ "LilyPond'u önizleme modunda çalıştırmak istiyor olabilirsiniz (seç ve " +#~ "tıkla etkinleştirilmiş olarak), fakat belgeniz seç ve tıkla özelliğinin " +#~ "kapatılmasını gerektiren bir komut içeriyor." + +#~ msgid "" +#~ "You want to run LilyPond in publish mode (with point and click disabled), " +#~ "but your document contains a command to turn point and click on." +#~ msgstr "" +#~ "LilyPond'u yayınlama modunda çalıştırmak istiyor olabilirsiniz (seç ve " +#~ "tıkla devre dışı bırakılmış olarak), fakat belgeniz seç ve tıkla " +#~ "özelliğinin açılmasını gerektiren bir komut içeriyor." + +#~ msgid "Abort the running LilyPond process" +#~ msgstr "Sürmekte olan LilyPond süreçlerini durdurunuz." + +#~ msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" +#~ msgstr "LilyPond'u önizleme kipinde çalıştır (Shift-klik kısayolu ile)" + +#~ msgid "LilyPond has successfully compiled %1." +#~ msgstr "LilyPond başarıyla derledi %1." + +#~ msgid "LilyPond exited with an error compiling %1." +#~ msgstr "LilyPond derlemesi sırasında bir hata oluştu %1." + +#~ msgid "" +#~ "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" +#~ msgstr "" +#~ "Süre değerlerine göre boşluk bırakarak bir ritm girin (örn. 8. 16 8 4 8)" + +#~ msgid "Terminal" +#~ msgstr "Konsol" + +#~ msgid "" +#~ "Could not load the KMid part.\n" +#~ "Please install KMid 2.4.0 or higher." +#~ msgstr "" +#~ "KMid partisi yüklenemedi.\n" +#~ "Lütfen KMid 2.4.0 veya daha yüksek sürümünü kurunuz." + +#~ msgid "Show PDF Navigation Panel" +#~ msgstr "PDF Görüntülenme Çubuğunu Göster" + +#~ msgid "Show PDF minipager" +#~ msgstr "PDF göstericiyi görüntüle" + +#~ msgid "Configure Okular..." +#~ msgstr "Okular uygulamasını yapılandır..." + +#~ msgid "S&ynchronize Preview with Current Document" +#~ msgstr "Yürürlükteki& Belge ile Önizlemeyi Senkronize Ediniz." + +#~ msgid "Reload" +#~ msgstr "Yeniden Yükle" + +#~ msgid "no log" +#~ msgstr "log kaydı yok" + +#~ msgid "Only show on errors" +#~ msgstr "Sadece hatalarda göster" + +#~ msgid "Rumor" +#~ msgstr "Rumor" + +#~ msgid "" +#~ "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter " +#~ "from the LilyPond document." +#~ msgstr "" +#~ "Kullanılacak ölçü. Frescobaldi'nin Lilypond belgesinden yola çıkarak " +#~ "ölçüyü belirlemesi için Otomatik ayarını olduğu gibi bırakın." + +#~ msgid "Quantize:" +#~ msgstr "Quantize:" + +#~ msgid "The shortest note duration to use." +#~ msgstr "Kullanılacak en kısa nota." + +#~ msgid "Record LilyPond input note by note, without durations." +#~ msgstr "Lilypond girişini süreler olmadan nota nota kaydet," + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Record monophonic input, without chords." +#~ msgstr "Akorlar olmadan tek sesli girişi kaydet." + +#~ msgid "" +#~ "The number of accidentals. A negative number designates flats. Leave " +#~ "'Auto' to let Frescobaldi determine the key signature from the LilyPond " +#~ "document." +#~ msgstr "" +#~ "Arızaların sayısı. Eksi numara bemolleri nitelendirir. Frescobaldi'nin " +#~ "Lilypond belgesinden yola çıkarak tonu ayarlaması için Otomatik " +#~ "seçeneğini olduğu gibi bırakın." + +#~ msgid "Meter:" +#~ msgstr "Ölçü:" + +#~ msgid "Key:" +#~ msgstr "Tonalite:" + +#~ msgid "Configure..." +#~ msgstr "Yapılandır..." + +#~ msgid "Adjust more settings, like MIDI input and output." +#~ msgstr "MIDI giriş ve çıkış gibi daha çok ayarı yapılandırın." + +#~ msgid "Set these settings as default." +#~ msgstr "Bu ayarları öntanımlı olarak ayarlayın." + +#~ msgid "Found rumor version %1." +#~ msgstr "Rumor sürümü bulundu %1." + +#~ msgid "Could not find Rumor: %1" +#~ msgstr "Rumor bulunamadı: %1" + +#~ msgid "Settings have been saved." +#~ msgstr "Ayarlar kaydedildi." + +#~ msgid "Record" +#~ msgstr "Kayıt" + +#~ msgid "Start or stop Rumor MIDI-recording." +#~ msgstr "Rumor' MIDI kaydını başlat veya durdur." + +#~ msgid "Rumor is recording, press ESC to stop." +#~ msgstr "Rumor kaydediyor, durdurmak için ESC tuşuna basınız." + +#~ msgid "Rumor stopped." +#~ msgstr "Rumor durduruldu." + +#~ msgid "TiMidity" +#~ msgstr "TiMidity" + +#~ msgid "Start or stop the TiMidity ALSA MIDI client." +#~ msgstr "TiMidity ALSA MIDI istemcisini başlat veya durdur." + +#~ msgid "Rumor Settings" +#~ msgstr "Rumor Ayarları" + +#~ msgid "OSS device %1" +#~ msgstr "OSS aygıtı %1" + +#~ msgid "" +#~ "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard " +#~ "of your computer." +#~ msgstr "" +#~ "Kullanılacak MIDI girişi. Eğer bilgisayarınızın klavyesinden çalmak " +#~ "istiyorsanız Klavye'yi seçin." + +#~ msgid "MIDI output:" +#~ msgstr "MIDI çıkışı:" + +#~ msgid "MIDI output to use." +#~ msgstr "Kullanılacak olan MIDI çıkışı." + +#~ msgid "The LilyPond language you want Rumor to output the pitches in." +#~ msgstr "Rumor'un içindeki sesleri dışa aktaracağı Lilypond dili." + +#~ msgid "Explicit durations" +#~ msgstr "Süreleri netleştir" + +#~ msgid "" +#~ "Add a duration after every note, even if it is the same as the preceding " +#~ "note." +#~ msgstr "Bir öncekinin aynısı olsa bile her notadan sonra bir süre ekle." + +#~ msgid "Absolute pitch" +#~ msgstr "Mutlak ses" + +#~ msgid "Use absolute pitches instead of relative." +#~ msgstr "İlgili ses yerine mutlak sesleri kullan." + +#~ msgid "No barlines" +#~ msgstr "Ölçü çizgisi yok" + +#~ msgid "Filter the barlines out of Rumor's output." +#~ msgstr "Rumor'un çıkışından ölçü çizgisi çıktılarını filtrele." + +#~ msgid "No dots" +#~ msgstr "Nokta yok" + +#~ msgid "Do not use dotted notes, but ties instead." +#~ msgstr "Noktaları kullanmayıp onun yerine uzatma bağlarını kullanın." + +#~ msgid "Legato" +#~ msgstr "Bağlı" + +#~ msgid "Do not use rests, but give all notes the maximum length." +#~ msgstr "Susları kullanmayın, fakat tüm notalara maksimum uzunluk verin." + +#~ msgid "Strip leading and trialing rests from output." +#~ msgstr "Çıktıdan ilk ve son susları çıkar." + +#~ msgid "Guile scripts to load:" +#~ msgstr "Yüklenecek Guile betikleri:" + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. Check " +#~ "\"What's this\" for more information." +#~ msgstr "" +#~ "Buradan Rumor'un yüklemesini istediğiniz Guile betiklerini " +#~ "seçebilirsiniz. Daha fazla bilgi için \"Bu Nedir\"i seçiniz." + +#~ msgid "" +#~ "Here you can select which Guile scripts you want Rumor to load. You can " +#~ "add your own scripts by putting them in %1. If the first line of your " +#~ "script starts with a semicolon (;) that line will be shown as description." +#~ msgstr "" +#~ "Buradan Rumor'un yüklemesini istediğiniz Guile betiklerini " +#~ "seçebilirsiniz. Kendi betiklerinizi onlara %1 işaretini koyarak " +#~ "ekleyebilirsiniz. Eğer betiğinizin ilk satırı bir noktalı virgül ile (;) " +#~ "başlarsa, bu satır tanımlama olarak gösterilecektir." + +#~ msgid "publish mode" +#~ msgstr "yayınlama kipi" + +#~ msgid "LilyPond %1 [%2] starting (%3)..." +#~ msgstr "LilyPond %1 [%2] başlıyor (%3)..." + +#~ msgid "LilyPond [%1] starting (%2)..." +#~ msgstr "LilyPond [%1] başlıyor (%2)..." + +#~ msgid "LilyPond [%1] finished (%2)." +#~ msgstr "LilyPond [%1] tamamlandı (%2)." + +#~ msgid "Select which LilyPond version you want to run:" +#~ msgstr "Çalıştırmak istediğiniz LilyPond sürümünü seçiniz:" + +#~ msgid "LilyPond %1" +#~ msgstr "LilyPond %1" + +#~ msgid "Automatic LilyPond Version (determined from document)." +#~ msgstr "Otomatik LilyPond Sürümü (belgeden sağlanan)." + +#~ msgid "Path: %1" +#~ msgstr "Yol: %1" + +#~ msgid "LilyPond (version unknown)" +#~ msgstr "LilyPond (sürüm no bilinmeyen)" + +#~ msgid "" +#~ "Use LilyPond (version unknown)\n" +#~ "Path: %1" +#~ msgstr "" +#~ "LilyPond kullan (sürüm numarası bilinmeyen)\n" +#~ "Yol: %1" + +#~ msgid "Save LilyPond Log as" +#~ msgstr "LilyPond hata mesajları belgesini kaydet" + +#~ msgid "" +#~ "Could not save LilyPond log:\n" +#~ "\n" +#~ "%1" +#~ msgstr "" +#~ "LilyPond hata mesajları belgesini kaydedemiyor:\n" +#~ "\n" +#~ "%1" + +#~ msgid "LilyPond-related settings" +#~ msgstr "LilyPond ile ilgili ayarlar" + +#~ msgid "LilyPond version to use:" +#~ msgstr "Kullanılacak LilyPond sürümü:" + +#~ msgid "" +#~ "Here you can set a fixed LilyPond version to run on documents in this " +#~ "session.\n" +#~ "\n" +#~ "The LilyPond version selected here is run by default on your documents, " +#~ "and it's also used by the \"Insert Version\" command." +#~ msgstr "" +#~ "Bu oturumda kullanılmak üzere belirli bir LilyPond sürüm numarasını " +#~ "buradan ayarlayabilirsiniz.\n" +#~ "\n" +#~ "Belgelerinizde öntanımlı olarak bu LilyPond sürümü seçilmiştir, ve ayrıca " +#~ "buradaki özellik \"Sürüm Ekle\" komutuyla eklenmiştir." + +#~ msgid "Configure" +#~ msgstr "Yapılandır" + +#~ msgid "General Frescobaldi Preferences" +#~ msgstr "Genel Frescobaldi Tercihleri" + +#~ msgid "Paths to programs or data used by Frescobaldi" +#~ msgstr "Frescobaldi'nin kullanacağı program veya verilerin yolları" + +#~ msgid "Rumor MIDI input" +#~ msgstr "Rumor MIDI girişi" + +#~ msgid "Rumor MIDI input plugin settings" +#~ msgstr "Rumor MIDI girişi eklentisi ayarları" + +#~ msgid "Editor Component" +#~ msgstr "Düzenleyici Bileşeni" + +#~ msgid "Editor Component Options" +#~ msgstr "Düzenleyini Bileşeni Seçenekleri" + +#~ msgid "LilyPond version number to use for new documents" +#~ msgstr "Bu belge için kullanacak olduğunuz Lilypond sürüm numarası:" + +#~ msgid "Use version number of installed LilyPond" +#~ msgstr "Yüklü LilyPond'un sürüm numarasını kullan" + +#~ msgid "Use version number of last convert-ly rule" +#~ msgstr "Son convert-ly kuralının sürüm numarasını kullan" + +#~ msgid "Enter a valid LilyPond version number, e.g. 2.12.0" +#~ msgstr "Geçerli bir LilyPond sürüm numarası girin, 2.12.0 gibi" + +#~ msgid "Warnings and Notifications" +#~ msgstr "Uyarılar ve Bildirimler" + +#~ msgid "Warn when a document contains a conflicting point and click setting" +#~ msgstr "Bir belgenin seç ve tıkla ayarlarında çakışma varsa, uyar" + +#~ msgid "Warn when a document needs to be saved before LilyPond is run" +#~ msgstr "" +#~ "LilyPond'u çalıştırmadan önce bir belgenin kaydedilmesi gerekiyorsa uyar" + +#~ msgid "Warn when saving a session would overwrite another" +#~ msgstr "Bir oturum kaydedilirken başkasının üzerine yazılacak ise uyar" + +#~ msgid "Point and Click" +#~ msgstr "İşaretle ve Tıkla" + +#~ msgid "Enable Point and Click" +#~ msgstr "İşaretle ve Tıkla Özelliğini Etkinleştir" + +#~ msgid "" +#~ "Click this button if Point and Click does not work. See Shift+F1 (What's " +#~ "This) for more information." +#~ msgstr "" +#~ "Eğer İşaretle ve Tıkla çalışmıyorsa bu düğmeye tıklayın. Daha fazla bilgi " +#~ "için Shift+F1 (Bu Nedir)." + +#~ msgid "" +#~ "On its first run, Frescobaldi tries to auto-configure Okular (which " +#~ "provides the PDF preview) to call Frescobaldi when a clickable object is " +#~ "clicked.\n" +#~ "\n" +#~ "But this setting can get lost when you move Frescobaldi to a different " +#~ "location or when other applications reconfigure Okular.\n" +#~ "\n" +#~ "Click this button to configure Frescobaldi as 'custom editor' inside " +#~ "Okular. This works best when all instances of Okular are closed and the " +#~ "PDF preview has not yet been opened." +#~ msgstr "" +#~ "İlk çalıştırmada, Frescobaldi PDF görüntüleyicisi olan Okular'ı otomatik " +#~ "olarak yapılandırmayı dener. Tıklanabilen bir nesne tıklandığında " +#~ "Frescobaldi'nin açılması sağlanacaktır böylece.\n" +#~ "\n" +#~ "Fakat bu ayar, Frescobaldi'yi başka bir bölgeye taşıdığınızda veya diğer " +#~ "uygulamalar Okular'ı yeniden yapılandırdıklarında kaybolacaktır.\n" +#~ "\n" +#~ "Bu düğmeye Okular'daki varsayılan düzenleyici olarak Frescobaldi'nin " +#~ "yapılandırılması için tıklayın. Bu özellik Okular tamamen kapalı " +#~ "olduğunda ve PDF önizleme henüz açık değilken devreye sokulduğunda çok " +#~ "iyi sonuç verir." + +#~ msgid "" +#~ "The Okular PDF preview has been reconfigured.\n" +#~ "\n" +#~ "If you already opened the PDF preview, restart Frescobaldi for the new " +#~ "settings to take effect." +#~ msgstr "" +#~ "Okular PDF ön izleme özelliği yeniden yapılandırıldı.\n" +#~ "\n" +#~ "Eğer PDF ön izlemeyi açtıysanız, yeni ayarların etkili olması için " +#~ "Frescobaldi'yi yeniden başlatınız." + +#~ msgid "PDF Viewer:" +#~ msgstr "PDF Görüntüleyici:" + +#~ msgid "PDF Viewer" +#~ msgstr "PDF Görüntüleyici" + +#~ msgid "MIDI Player:" +#~ msgstr "MIDI Çalıcı:" + +#~ msgid "Url:" +#~ msgstr "Bağlantı:" + +#~ msgid "Url or path to the LilyPond documentation." +#~ msgstr "Lilypond belgelerinin Url adresi veya tam yolu." + +#~ msgid "Lyrics Hyphenation" +#~ msgstr "Şarkı Sözler Tirelemesi" + +#~ msgid "" +#~ "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " +#~ "KOffice, etc, one per line. If you leave out the starting slash, the " +#~ "prefixes from the KDEDIRS environment variable are prepended." +#~ msgstr "" +#~ "Her satır için OpenOffice.org, Scribus, KOffice vb, uygulamalarında " +#~ "tireleme sözlüklerini arama yolları. Eğer başlangıç eğri çizgisini " +#~ "çıkarırsanız, KDEDIRS ortam değişkenlerinin önekleri kendiliğinden " +#~ "eklenir." + +#~ msgid "Commands used by the Rumor MIDI input module" +#~ msgstr "Rumor MIDI giriş modülünde kullanılan komutlar" + +#~ msgid "Name or full path of the Rumor program." +#~ msgstr "Rumor programının tam yolunun adı." + +#~ msgid "" +#~ "Name or full path of the aconnect program (part of ALSA, for MIDI input " +#~ "and playback using Rumor)." +#~ msgstr "" +#~ "Programa bağlanmanın adı veya tam yolu (ALSA'nın bir parçası, MIDI girişi " +#~ "ve Rumor'u kullanarak çalmak için)" + +#~ msgid "" +#~ "Full command to start Timidity (or any other program) as an ALSA MIDI " +#~ "client." +#~ msgstr "" +#~ "ALSA MIDI istemcisi olarak Timidity (veya bir diğer başka programı) " +#~ "başlatmanın tam komutu." + +#~ msgid "Close Button" +#~ msgstr "Kapat Düğmesi" + +#~ msgid "Large Tabs" +#~ msgstr "Büyük Sekmeler" + +#~ msgid "Tabs can be moved" +#~ msgstr "Tab'ler kaldırılabilir" + +#~ msgid "Download..." +#~ msgstr "İndir..." + +#~ msgid "Download new binary LilyPond releases." +#~ msgstr "Yeni ikili LilyPond sürümlerini indir." + +#~ msgid "LilyPond Command" +#~ msgstr "LilyPond Komutu" + +#~ msgid "Choose a session." +#~ msgstr "Bir oturum seçin." + +#~ msgid "Choose..." +#~ msgstr "Seç..." + +#~ msgid "Your document has already a LilyPond version statement." +#~ msgstr "Belgenizde zaten Lilypond sürüm bildirimi var." + +#~ msgid "Version already set" +#~ msgstr "Sürüm numarası ayarlanmış durumda" + +#~ msgid "" +#~ "Can't determine the version of LilyPond. Please check your LilyPond " +#~ "installation." +#~ msgstr "" +#~ "Lilypond sürümü belirli değil. Lütfen, Lilypond kurulumunuzu denetleyin." + +#~ msgid "" +#~ "Can't determine the LilyPond version of the current document. Please add " +#~ "a \\version statement with the correct version." +#~ msgstr "" +#~ "Bu dosyada Lilypond sürüm belirteci bulunmuyor. Lütfen, \\version " +#~ "belirtecini doğru sürüm numarasını kullanarak ekleyiniz." + +#~ msgid "This LilyPond document is already up-to-date." +#~ msgstr "Bu Lilypond belgesi zaten güncel." + +#~ msgid "" +#~ "The document has been processed with convert-ly. You'll find the messages " +#~ "of convert-ly in a comment block at the end. You still may have to edit " +#~ "some parts manually." +#~ msgstr "" +#~ "Bu belge convert-ly ile işlenmiş. Convert-ly mesajlarını sondaki yorum " +#~ "bloğunda bulacaksınız. Bazı kısımları yine de elle düzenlemeniz " +#~ "gerekebilir." + +#~ msgid "" +#~ "The document has been processed with convert-ly, but remained unchanged. " +#~ "This is the message given by convert-ly: %1" +#~ msgstr "" +#~ "Belge, convert-ly ile işlenmiş, ancak değiştirilmeden kalmış. Bu ileti " +#~ "convert-ly tarafından hazırlanmıştır: %1" + +#~ msgid "The tempo in beats per minute." +#~ msgstr "Dakika başına göre vuruşların hızı." + +#~ msgid "Treble" +#~ msgstr "Tiz - Sol anahtarı" + +#~ msgid "Treble 8" +#~ msgstr "Sekizli Yukarı" + +#~ msgid "Tab clef" +#~ msgstr "Tab anahtarı" + +#~ msgid "No Clef" +#~ msgstr "Anahtar yok" + +#~ msgid "Add selected part to your score." +#~ msgstr "Seçili partiyi partisyonunuza ekleyin." + +#~ msgid "A tempo indication, e.g. \"Allegro.\"" +#~ msgstr "Bir hız belirteci, örneğin \"Allegro.\"" + +#~ msgid "Wrap score in \\book block" +#~ msgstr "\\book bloğundaki nota bölgesini seçin" + +#~ msgid "If checked, wraps the \\score block inside a \\book block." +#~ msgstr "Eğer işaretlenmişse, \\score bloğunu \\book bloğuna yerleştirir." + +#~ msgid "How many voices to put in this staff." +#~ msgstr "Bu dizeğe kaç ses yazılmalı." + +#~ msgid "Open PDF" +#~ msgstr "PDF aç" + +#~ msgid "Email..." +#~ msgstr "E-posta..." + +#~ msgid "Disable the built-in PDF preview" +#~ msgstr "Yerleşik PDF önizlemeyi devre dışı bırak." + +#~ msgid "The direction to use for the articulations." +#~ msgstr "Artikülasyonlar için kullanılacak yön." + +#~ msgid "Your document has been modified, please save first." +#~ msgstr "Belgeniz değiştirildi, lütfen önce kaydediniz." + +#~ msgid "" +#~ "Printing failed: %1\n" +#~ "\n" +#~ "The print command %2 does probably not exist. Please check your settings." +#~ msgstr "" +#~ "Yazdırma başarısız: %1\n" +#~ "\n" +#~ "Yazdırma komuyu %2 büyük olasılıkla verilemedi. Lütfen yazıcı " +#~ "ayarlarınızı denetleyin." + +#~ msgid "The print command contains errors. Please check your settings." +#~ msgstr "" +#~ "Yazdırma komutu hatalar içermektedir. Lütfen yazıcı ayarlarınızı " +#~ "denetleyin." + +#~ msgid "Directly print on default printer" +#~ msgstr "Doğrudan öntanımlı yazıcıdan yazdır" + +#, fuzzy +#~ msgid "Notify when a document has been sent to the printer" +#~ msgstr "Belge yazıcıya gönderildi." + +#~ msgid "" +#~ "Command to print a PDF file, for example lpr or kprinter. You may add " +#~ "some arguments, e.g. lpr -P myprinter." +#~ msgstr "" +#~ "Bir PDF dosyasını yazdırma komutu, örneğin lpr veya kprinter. Bu " +#~ "komutlara lpr -P yazıcım gibi değerler eklemek de mümkündür." + +#~ msgid "Space above:" +#~ msgstr "Yukardakı boşluk:" + +#~ msgid "Name or full path of the convert-ly program." +#~ msgstr "Convert-ly programının tam yolunun adı." + +#~ msgid "Expand" +#~ msgstr "Genişlet" + +#~ msgid "Show" +#~ msgstr "Göster" + +#, fuzzy +#~ msgid "Paper Size A4" +#~ msgstr "Sayfa ebadı:" + +#, fuzzy +#~ msgid "Paper Size A5" +#~ msgstr "Sayfa ebadı:" + +#, fuzzy +#~ msgid "Paper Size Letter" +#~ msgstr "Sayfa ebadı:" + +#, fuzzy +#~ msgid "Stem Up" +#~ msgstr "Adım" + +#, fuzzy +#~ msgid "Stem Down" +#~ msgstr "Aşağı" + +#, fuzzy +#~ msgid "Lyric Stanza" +#~ msgstr "Kıtalar:" + +#, fuzzy +#~ msgid "Midi section" +#~ msgstr "İthaf" + +#, fuzzy +#~ msgid "With: instrumentName" +#~ msgstr "Çalgı isimleri" + +#, fuzzy +#~ msgid "With: shortInstrumentName" +#~ msgstr "Çalgı isimleri" + +#, fuzzy +#~ msgid "New Lyrics" +#~ msgstr "Şarkı Sözleri" + +#~ msgid "Your document currently has no filename, please save first." +#~ msgstr "Belgenize bir dosya adı vermediniz, lütfen önce kaydediniz." + +#~ msgid "" +#~ "Sorry, support for remote files is not yet implemented.\n" +#~ "Please save your document to a local file." +#~ msgstr "" +#~ "Üzgünüm, uzak dosya desteği henüz verilmiyor.\n" +#~ "Lütfen belgenizi yerel bir dosyaya kaydediniz." + +#~ msgid "Already Running" +#~ msgstr "Şu Anda Çalışıyor" diff -Nru frescobaldi-1.2.0/frescobaldi_app/popplerdummy.py frescobaldi-2.0.0/frescobaldi_app/popplerdummy.py --- frescobaldi-1.2.0/frescobaldi_app/popplerdummy.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/popplerdummy.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,48 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A dummy surface only showing a "could not load popplerqt4 module" message. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QLabel, QLayout, QVBoxLayout + +import qpopplerview +import app + + +class Surface(qpopplerview.Surface): + def __init__(self, view): + super(Surface, self).__init__(view) + self._msg = QLabel(openExternalLinks = True) + layout = QVBoxLayout(sizeConstraint = QLayout.SetFixedSize) + self.setLayout(layout) + layout.addWidget(self._msg) + app.translateUI(self) + + def translateUI(self): + self._msg.setText(_("Could not load the {name} module.").format( + name = 'popplerqt4')) + + def paintEvent(self, ev): + super(qpopplerview.Surface, self).paintEvent(ev) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/popplerprint.py frescobaldi-2.0.0/frescobaldi_app/popplerprint.py --- frescobaldi-1.2.0/frescobaldi_app/popplerprint.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/popplerprint.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,148 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Prints a PDF (or Poppler) document. + +On Mac OS X and Linux, the document is just sent to lpr +(via a dialog). + +On Windows, another command can be configured or bitmaps of the poppler document +can be printed. +""" + +from __future__ import unicode_literals + + +import os +import subprocess + +from PyQt4.QtCore import pyqtSignal, QTemporaryFile, Qt, QThread +from PyQt4.QtGui import QMessageBox, QPrinter, QPrintDialog, QProgressDialog + +import app +import fileprinter +import qpopplerview.printer + + +def print_(doc, filename=None, widget=None): + """Prints the popplerqt4.Poppler.Document. + + The filename is used in the dialog and print job name. + If the filename is not given, it defaults to a translation of "PDF Document". + The widget is a widget to use as parent for the print dialog etc. + + """ + cmd = fileprinter.lprCommand() + if not cmd and QMessageBox.information(widget, _("Warning"), _( + "No print command to print a PostScript file could be found.\n\n" + "Therefore the document will be printed using raster images at {resolution} DPI. " + "It is recommended to print using a dedicated PDF viewer.\n\n" + "Do you want to continue?").format(resolution=300), + QMessageBox.Yes | QMessageBox.No) != QMessageBox.Yes: + return # cancelled + + filename = os.path.basename(filename) if filename else _("PDF Document") + + printer = QPrinter() + printer.setDocName(filename) + + dlg = QPrintDialog(printer, widget) + dlg.setMinMax(1, doc.numPages()) + dlg.setOption(QPrintDialog.PrintToFile, False) + dlg.setWindowTitle(app.caption(_("Print {filename}").format(filename=filename))) + + result = dlg.exec_() + if widget: + dlg.deleteLater() # because it has a parent + if not result: + return # cancelled + + if cmd: + # make a PostScript file with the desired paper size + ps = QTemporaryFile() + if ps.open() and qpopplerview.printer.psfile(doc, printer, ps): + ps.close() + # let all converted pages print + printer.setPrintRange(QPrinter.AllPages) + command = fileprinter.printCommand(cmd, printer, ps.fileName()) + if not subprocess.call(command): + return # success! + QMessageBox.warning(widget, _("Printing Error"), + _("Could not send the document to the printer.")) + else: + # Fall back printing of rendered raster images. + # It is unsure if the Poppler ArthurBackend ever will be ready for + # good rendering directly to a painter, so we'll fall back to using + # 300DPI raster images. + + p = Printer() + p.setDocument(doc) + p.setPrinter(printer) + p.setResolution(300) + + d = QProgressDialog() + d.setModal(True) + d.setMinimumDuration(0) + d.setRange(0, len(p.pageList()) + 1) + d.canceled.connect(p.abort) + + def progress(num, total, page): + d.setValue(num) + d.setLabelText(_("Printing page {page} ({num} of {total})...").format( + page=page, num=num, total=total)) + + def finished(): + p.deleteLater() + d.deleteLater() + d.hide() + if not p.success and not p.aborted(): + QMessageBox.warning(widget, _("Printing Error"), + _("Could not send the document to the printer.")) + + p.finished.connect(finished) + p.printing.connect(progress) + p.start() + + +class Printer(QThread, qpopplerview.printer.Printer): + """Simple wrapper that prints the raster images in a background thread.""" + printing = pyqtSignal(int, int, int) + + def __init__(self, parent=None): + QThread.__init__(self, parent) + qpopplerview.printer.Printer.__init__(self) + self.success = None + + def run(self): + self.success = self.print_() + + def progress(self, num, total, page): + self.printing.emit(num, total, page) + + +def printDocument(document, widget=None): + """Prints the document described by the popplertools.Document. + + The widget is a widget to use as parent for the print dialog etc. + + """ + print_(document.document(), document.filename(), widget) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/popplertools.py frescobaldi-2.0.0/frescobaldi_app/popplertools.py --- frescobaldi-1.2.0/frescobaldi_app/popplertools.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/popplertools.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,70 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Some useful tools dealing with popplerqt4 (PDF) documents. +""" + +import os + + +class Document(object): + """Represents a (lazily) loaded PDF document.""" + def __init__(self, filename=''): + self._filename = filename + self._document = None + self._dirty = True + + def filename(self): + """Returns the filename, set on init or via setFilename().""" + return self._filename + + def setFilename(self, filename): + """Sets a filename. + + The document will be reloaded next time it is requested. + + """ + self._filename = filename + self._dirty = True + + def name(self): + """Returns the filename without path.""" + return os.path.basename(self._filename) + + def document(self): + """Returns the PDF document the filename points to, reloading if the filename was set. + + Can return None, in case the document failed to load. + + """ + if self._dirty: + self._document = self.load() + self._dirty = False + return self._document + + def load(self): + """Should load and return the popplerqt4 Document for our filename.""" + try: + import popplerqt4 + except ImportError: + return + return popplerqt4.Poppler.Document.load(self._filename) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/popplerview.py frescobaldi-2.0.0/frescobaldi_app/popplerview.py --- frescobaldi-1.2.0/frescobaldi_app/popplerview.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/popplerview.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,105 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A slightly customized subclass of qpopplerview.View. + +This is used throughout Frescobaldi, to obey color settings etc. + +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings + +import app +import textformats +import qpopplerview + + +# global setup of background color +def _setbackground(): + colors = textformats.formatData('editor').baseColors + qpopplerview.cache.options().setPaperColor(colors['paper']) +app.settingsChanged.connect(_setbackground, -1) +_setbackground() + + +class View(qpopplerview.View): + def __init__(self, parent=None): + super(View, self).__init__(parent) + try: + import popplerqt4 + except ImportError: + # surface with a "could not load popplerqt4" message + import popplerdummy + self.setSurface(popplerdummy.Surface(self)) + self.surface().pageLayout().setDPI(self.physicalDpiX(), self.physicalDpiY()) + app.settingsChanged.connect(self.readSettings) + self.readSettings() + + def readSettings(self): + self.redraw() # because of possibly changed background color + # magnifier size and scale + s = MagnifierSettings.load() + self.surface().magnifier().resize(s.size, s.size) + self.surface().magnifier().setScale(s.scale / 100.0) + + +class MagnifierSettings(object): + """Manages settings for the MusicView Magnifier.""" + sizeRange = (200, 800) + scaleRange = (150, 500) + + def __init__(self, size=300, scale=300): + self.size = size + self.scale = scale + + @classmethod + def load(cls): + """Returns a loaded Magnifier settings instance.""" + self = cls() + s = QSettings() + s.beginGroup("musicview/magnifier") + try: + self.size = int(s.value("size", self.size)) + except ValueError: + pass + try: + self.scale = int(s.value("scale", self.scale)) + except ValueError: + pass + + self.size = bound(self.size, *cls.sizeRange) + self.scale = bound(self.scale, *cls.scaleRange) + return self + + def save(self): + """Stores the settings.""" + s = QSettings() + s.beginGroup("musicview/magnifier") + s.setValue("size", self.size) + s.setValue("scale", self.scale) + + +def bound(value, start, end): + """Clips value so it falls in the int range defined by start and end.""" + return max(start, min(end, value)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/portmidi/ctypes_pypm.py frescobaldi-2.0.0/frescobaldi_app/portmidi/ctypes_pypm.py --- frescobaldi-1.2.0/frescobaldi_app/portmidi/ctypes_pypm.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/portmidi/ctypes_pypm.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,191 @@ +#! python +# This module provides the same api via ctypes as John Harrison's pyrex-based +# PortMIDI binding. +# Don't use this module directly but via the toplevel API of this package. +# Copyright (C) 2011 Wilbert Berendsen, placed in the public domain. + +from ctypes import byref, create_string_buffer + +from .pm_ctypes import ( + libpm, libpt, + pmHostError, PmEvent, + PmTimeProcPtr, NullTimeProcPtr, + PortMidiStreamPtr, +) + +from . import MidiException + + +__all__ = [ + 'TRUE', + 'FALSE', + 'Initialize', + 'Terminate', + 'CountDevices', + 'GetDeviceInfo', + 'GetDefaultInputDeviceID', + 'GetDefaultOutputDeviceID', + 'GetErrorText', + 'Time', + 'Input', + 'Output', +] + + +FALSE = 0 +TRUE = 1 + + +def Initialize(): + libpm.Pm_Initialize() + # equiv to TIME_START: start timer w/ ms accuracy + libpt.Pt_Start(1, NullTimeProcPtr, None) + + +def Terminate(): + libpm.Pm_Terminate() + + +def GetDeviceInfo(device_id): + info_ptr = libpm.Pm_GetDeviceInfo(device_id) + if info_ptr: + info = info_ptr.contents + return ( + info.interf, + info.name, + bool(info.input), + bool(info.output), + bool(info.opened), + ) + + +CountDevices = libpm.Pm_CountDevices +GetDefaultInputDeviceID = libpm.Pm_GetDefaultInputDeviceID +GetDefaultOutputDeviceID = libpm.Pm_GetDefaultOutputDeviceID +GetErrorText = libpm.Pm_GetErrorText +Time = libpt.Pt_Time + + +class Output(object): + buffer_size = 1024 + def __init__(self, device_id, latency=0): + self.device_id = device_id + self.latency = latency + self._midi_stream = PortMidiStreamPtr() + self._open = False + self._open_device() + + def _open_device(self): + err = libpm.Pm_OpenOutput(byref(self._midi_stream), self.device_id, + None, 0, NullTimeProcPtr, None, self.latency) + _check_error(err) + self._open = True + + def Close(self): + if self._open and GetDeviceInfo(self.device_id)[4]: + err = libpm.Pm_Abort(self._midi_stream) + _check_error(err) + err = libpm.Pm_Close(self._midi_stream) + _check_error(err) + self._open = False + + __del__ = Close + + def Write(self, data): + bufsize = self.buffer_size + + if len(data) > bufsize: + raise ValueError("too much data for buffer") + + BufferType = PmEvent * bufsize + buf = BufferType() + + for i, event in enumerate(data): + msg, buf[i].timestamp = event + if len(msg) > 4 or len(msg) < 1: + raise ValueError("invalid message size") + message = 0 + for j, byte in enumerate(msg): + message += ((byte & 0xFF) << (8*j)) + buf[i].message = message + err = libpm.Pm_Write(self._midi_stream, buf, len(data)) + _check_error(err) + + def WriteShort(self, status, data1=0, data2=0): + buf = PmEvent() + buf.timestamp = libpt.Pt_Time() + buf.message = (((data2 << 16) & 0xFF0000) | + ((data1 << 8) & 0xFF00) | (status & 0xFF)) + err = libpm.Pm_Write(self._midi_stream, buf, 1) + _check_error(err) + + def WriteSysEx(self, timestamp, msg): + """msg may be a tuple or list of ints, or a bytes string.""" + if isinstance(msg, (tuple, list)): + msg = array.array('B', msg).tostring() + cur_time = Time() + err = libpm.Pm_WriteSysEx(self._midi_stream, timestamp, msg) + _check_error(err) + while Time() == cur_time: + pass + + +class Input(object): + def __init__(self, device_id, bufsize=1024): + self.device_id = device_id + self.buffer_size = bufsize + self._midi_stream = PortMidiStreamPtr() + self._open = False + self._open_device() + + def _open_device(self): + err = libpm.Pm_OpenInput(byref(self._midi_stream), self.device_id, + None, 100, NullTimeProcPtr, None) + _check_error(err) + self._open = True + + def Close(self): + """Closes a midi stream, flushing any pending buffers.""" + if self._open and GetDeviceInfo(self.device_id)[4]: + err = libpm.Pm_Abort(self._midi_stream) + _check_error(err) + err = libpm.Pm_Close(self._midi_stream) + _check_error(err) + self._opened = False + + __del__ = Close + + def Poll(self): + return libpm.Pm_Poll(self._midi_stream) + + def Read(self, length): + bufsize = self.buffer_size + BufferType = PmEvent * bufsize + buf = BufferType() + + if not 1 <= length <= bufsize: + raise ValueError("invalid length") + num_events = libpm.Pm_Read(self._midi_stream, buf, length) + _check_error(num_events) + + data = [] + for i in range(num_events): + ev = buf[i] + msg = ev.message + msg = (msg & 255, (msg>>8) & 255, (msg>>16) & 255, (msg>>24) & 255) + data.append((msg, ev.timestamp)) + return data + + +def _check_error(err_no): + if err_no < 0: + if err_no == pmHostError: + err_msg = create_string_buffer('\000' * 256) + libpm.Pm_GetHostErrorText(err_msg, 256) + err_msg = err_msg.value + else: + err_msg = libpm.Pm_GetErrorText(err_no) + raise MidiException( + "PortMIDI-ctypes error [{0}]: {1}".format(err_no, err_msg)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/portmidi/__init__.py frescobaldi-2.0.0/frescobaldi_app/portmidi/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/portmidi/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/portmidi/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,323 @@ +#! python + +""" +This package brings the most important parts of the functionality of the +PortMIDI library in a flexible way to Python. + +This module provides a simple API to control the most important parts of +PortMIDI, very much like the pygame.midi api. + +It needs the PortMIDI library to be installed, and it is also recommended to +install the 'pypm' or 'pyportmidi' module providing a low-level access to the +PortMIDI library. This is a PyRex-based interface by John Harrison, which is +in some Linux distributions part of a package named 'python-portmidi' or +'python-pypm', and also part of the official PortMIDI package, but quite often +not installed by default. + +The PyGame package as of version 1.9.1 also installs the 'pypm' module. + +This module tries different ways to find the Python binding module. If that +fails, the PortMIDI library itself is loaded (if found) via ctypes. + +To affect the order in which the _setup() function tries to import PortMIDI, +the global try_order list can be changed. The first name in the list is tried +first. This only works before init() is called for the first time. + +This module can always be imported, but only init() and available() can be used +if PortMIDI itself is not available. + +This module itself is in the public domain, and written by Wilbert Berendsen +in fall 2011. + + +Usage: + +import portmidi + +# test if portmidi really loaded: +if portmidi.available(): + ... enable MIDI stuff + +# start using PortMIDI: init and quit may be used multiple times +portmidi.init() + + +# list devices: +for i in range(portmidi.get_count()): + print i, portmidi.get_device_info(i) + + +# play notes to device number 2: +o = portmidi.Output(2, 50) +o.note_on(60) +o.note_off(60) + + +# play a scale: +time = 0 +scale = [] +for note in 60, 62, 64, 65, 67, 69, 71, 72: + scale.append([[0x90, note, 80], time]) + scale.append([[0x80, note], time + 400]) + time += 500 + +o.write([[msg, portmidi.time() + time] for msg, time in scale]) + +Note that you always have to specify the time when a note is to be played. + +""" + +import atexit +import collections + + +__all__ = [ + 'available', 'init', 'quit', + 'get_count', 'get_device_info', + 'get_default_input_id', 'get_default_output_id', + 'time', + 'Input', 'Output', +] + +pypm = None +_initalized = None + + + +# you can change this before calling init() for the first time +try_order = ['pypm', 'pyportmidi', 'pygame', 'ctypes'] + + +def available(): + """Returns True if PortMIDI is available.""" + return _setup() + +def init(): + """Initializes the PortMIDI library for use. + + It is safe to call this more than once. + + """ + global _initalized + if _setup() and not _initalized: + pypm.Initialize() + _initalized = True + +def quit(): + """Terminates the PortMIDI library. + + It is safe to call this more than once. + On application exit this is also called. + + """ + global _initalized + if pypm and _initalized: + pypm.Terminate() + _initalized = False + +def get_count(): + """Returns the number if available MIDI devices.""" + _check_initialized() + return pypm.CountDevices() + +def get_default_input_id(): + """Returns the default input device number.""" + _check_initialized() + return pypm.GetDefaultInputDeviceID() + +def get_default_output_id(): + """Returns the default output device number.""" + _check_initialized() + return pypm.GetDefaultOutputDeviceID() + +def get_device_info(device_id): + """Returns information about a midi device. + + A file-tuple is returned: + (interf, name, isinput, isoutput, isopen). + + """ + _check_initialized() + return device_info(*pypm.GetDeviceInfo(device_id)) + +def time(): + """Returns the current time in ms of the PortMIDI timer.""" + return pypm.Time() + + +class Input(object): + """Reads MIDI input from a device.""" + def __init__(self, device_id, buffer_size=4096): + self._input = None + _check_initialized() + _check_device_id(device_id) + info = get_device_info(device_id) + if not info.isinput: + raise MidiException("not an input device") + + self._input = pypm.Input(device_id, buffer_size) + + def close(self): + """Closes the input stream.""" + if self._input: + self._input.Close() + self._input = None + + def read(self, num_events): + """reads num_events midi events from the buffer.""" + return self._input.Read(num_events) + + def poll(self): + """Returns True if there's data, otherwise False.""" + r = self._input.Poll() + if r == pypm.TRUE: + return True + elif r == pypm.FALSE: + return False + else: + raise MidiException(pypm.GetErrorText(r)) + + +class Output(object): + """Writes MIDI output to a device.""" + def __init__(self, device_id, latency = 0, buffer_size = 4096): + self._output = None + _check_initialized() + _check_device_id(device_id) + info = get_device_info(device_id) + if not info.isoutput: + raise MidiException("not an output device") + + self._output = pypm.Output(device_id, latency) + + def close(self): + """Closes the output stream.""" + if self._output: + self._output.Close() + self._output = None + + def write(self, data): + """Writes a list of MIDI data to the output. + + Each element of the list should be a list[message, timestamp]. + Each message is again a list: [status, data, data, ...] + + """ + self._output.Write(data) + + def write_short(self, status, data1 = 0, data2 = 0): + """Output MIDI information of 3 bytes or less.""" + self._output.WriteShort(status, data1, data2) + + def write_sys_ex(self, timestamp, message): + """Writes a timestamped System-Exclusive MIDI message. + + The message may be a list of integers or a bytes string. + + """ + self._output.WriteSysEx(timestamp, message) + + def note_on(self, note, velocity=80, channel = 0): + """Turns a midi note on.""" + _check_channel(channel) + self.write_short(0x90 + channel, note, velocity) + + def note_off(self, note, velocity=0, channel = 0): + """Turns a midi note off.""" + _check_channel(channel) + self.write_short(0x80 + channel, note, velocity) + + def set_instrument(self, instrument_id, channel = 0): + """Select an instrument.""" + if not 0 <= instrument_id <= 127: + raise ValueError("invalid instrument id") + _check_channel(channel) + self.write_short(0xC0 + channel, instrument_id) + + +class MidiException(Exception): + """Raised on MIDI-specific errors.""" + pass + + + +# helper functions + +device_info = collections.namedtuple('device_info', + 'interf name isinput isoutput isopen') + +def _check_device_id(device_id): + if not 0 <= device_id < get_count(): + raise ValueError("invalid device id") + +def _check_channel(channel): + if not 0 <= channel <= 15: + raise ValueError("invalid channel number (must be 0..15)") + +def _check_initialized(): + if not _initalized: + raise RuntimeError("PortMIDI not initialized.") + +def _setup(): + """Tries to import PortMIDI in the order given in the try_order global. + + Only one time the import is tried. + Returns True if PortMIDI could be loaded. + + """ + global pypm + if pypm is None: + for name in try_order: + try: + pypm = globals()['_do_import_' + name]() + break + except ImportError: + continue + else: + pypm = False + return bool(pypm) + +def _load_module(name): + """Loads and returns a single module. + + The name may be dotted, but no parent modules are imported. + Raises ImportError when the module can't be found. + + """ + import imp + path = None + for n in name.split('.'): + file_handle, path, desc = imp.find_module(n, path and [path]) + return imp.load_module(n, file_handle, path, desc) + + +# these functions try to import PortMIDI, returning the module +def _do_import_pypm(): + """Tries to import pypm (the c binding module) directly. + + Newer Ubuntu releases provide a python-pypm package with this module. + + """ + import pypm + return pypm + +def _do_import_pyportmidi(): + """This tries to import the c Python module from the PortMIDI distribution. + + Unfortunately not many Linux distros also install the Python binding. + + """ + return _load_module('pyportmidi._pyportmidi') + +def _do_import_pygame(): + """This tries to import the pypm module from the pygame package.""" + # We don't use 'from pygame import pypm' as that also imports a large + # part of pygame which we probably don't use. + return _load_module('pygame.pypm') + +def _do_import_ctypes(): + """This tries to load PortMIDI via ctypes.""" + from . import ctypes_pypm + return ctypes_pypm + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/portmidi/pm_ctypes.py frescobaldi-2.0.0/frescobaldi_app/portmidi/pm_ctypes.py --- frescobaldi-1.2.0/frescobaldi_app/portmidi/pm_ctypes.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/portmidi/pm_ctypes.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,240 @@ +# This script embeds the PortMidi Portable MIDI library via ctypes. +# It is based on Grant Yoshida's 2007 version with some updates from +# Christopher Arndt from 2009 with some bugs fixed and restructured a bit. + +from __future__ import unicode_literals + +import os +import sys + +from ctypes import (CDLL, CFUNCTYPE, POINTER, Structure, byref, c_char_p, + c_int32, c_uint, c_void_p, cast, create_string_buffer) + +# the basename of the portmidi/porttime libraries on different platforms +_PM_DLL = dict( + win32 = 'libportmidi-0', + linux2 = 'portmidi', + darwin = 'portmidi' +) +_PT_DLL = dict( + win32 = 'libporttime-0', + linux2 = 'porttime', + darwin = 'porttime' +) + +if sys.platform.startswith('win'): + # ctypes.util.find_library() does not implement the full Windows DLL search + # order, so we have to provide it ourselves, so that the PortMidi DLL can + # be found. See the docstring of the find_library() function for more + # information. + + from ctypes import windll, c_wchar_p, create_unicode_buffer + + def get_system_directory(): + """Return the path of the Windos system directory as a unicode string.""" + try: + windll.kernel32.GetSystemDirectoryW.argtypes = [c_wchar_p, c_uint] + windll.kernel32.GetSystemDirectoryW.restype = c_uint + except AttributeError: + return None + else: + path = create_unicode_buffer(256) + plen = windll.kernel32.GetSystemDirectoryW(path, 256) + return plen and path.value or None + + def get_windows_directory(): + """Return the path of the Windos directory as a unicode string.""" + try: + windll.kernel32.GetWindowsDirectoryW.argtypes = [c_wchar_p, c_uint] + windll.kernel32.GetWindowsDirectoryW.restype = c_uint + except AttributeError: + return None + else: + path = create_unicode_buffer(256) + plen = windll.kernel32.GetWindowsDirectoryW(path, 256) + return plen and path.value or None + + def find_library(name, prepend_paths=None): + """Find and return the path of the given DLL using the DLL search order. + + 'name' should be the basename of the DLL with or without the '.dll' + extension. If 'prepend_paths' is specified, it should be a list of + directories to be searched before the default ones. + + The default search order searches these directories: + + - The directory from where the application (i.e. the main Python script) + is loaded + - The Windows system directory (e.g. C:\Windows\System32) + - The Windows 16-bit system directory (e.g. C:\Windows\System) + - The Windows directory (e.g. C:\Windows) + - The current directory + - Any directory named on the PATH environment variable + + """ + windir = get_windows_directory() + search_paths = (prepend_paths or []) + [ + os.path.dirname(sys.argv[0]), + get_system_directory(), + os.path.join(windir, 'System'), + windir, + os.curdir + ] + [p for p in os.environ['PATH'].split(os.pathsep) if p] + for directory in search_paths: + fname = os.path.join(directory, name) + if os.path.exists(fname): + return fname + if fname.lower().endswith(".dll"): + continue + fname = fname + ".dll" + if os.path.exists(fname): + return fname + return None + + dll_name = find_library(_PM_DLL['win32'], [os.path.dirname(__file__)]) +else: + from ctypes.util import find_library + dll_name = find_library(_PM_DLL.get(sys.platform, 'portmidi')) +if dll_name is None: + raise ImportError("Couldn't find the PortMidi library.") + +libpm = CDLL(dll_name) +# portmidi mightbe linked against porttime but not actually export its symbols +# so we might need to load the porttime lib dynamically as well. +try: + libpm.Pt_Time +except AttributeError: + libpt = CDLL(find_library(_PT_DLL.get(sys.platform, 'porttime'))) +else: + libpt = libpm + + +# portmidi.h + +PmError = c_int32 +# PmError enum +pmNoError = 0 +pmHostError = -10000 +pmInvalidDeviceId = -9999 +pmInsufficientMemory = -9998 +pmBufferTooSmall = -9997 +pmBufferOverflow = -9996 +pmBadPtr = -9995 +pmBadData = -9994 +pmInternalError = -9993 +pmBufferMaxSize = -9992 + +libpm.Pm_Initialize.restype = PmError +libpm.Pm_Terminate.restype = PmError + +PmDeviceID = c_int32 + +PortMidiStreamPtr = c_void_p +PmStreamPtr = PortMidiStreamPtr +PortMidiStreamPtrPtr = POINTER(PortMidiStreamPtr) + +libpm.Pm_HasHostError.restype = c_int32 +libpm.Pm_HasHostError.argtypes = [PortMidiStreamPtr] + +libpm.Pm_GetErrorText.restype = c_char_p +libpm.Pm_GetErrorText.argtypes = [PmError] + +libpm.Pm_GetHostErrorText.argtypes = [c_char_p, c_uint] + +pmNoDevice = -1 + +class PmDeviceInfo(Structure): + _fields_ = [("structVersion", c_int32), + ("interf", c_char_p), + ("name", c_char_p), + ("input", c_int32), + ("output", c_int32), + ("opened", c_int32)] + +PmDeviceInfoPtr = POINTER(PmDeviceInfo) + +libpm.Pm_CountDevices.restype = c_int32 +libpm.Pm_GetDefaultOutputDeviceID.restype = PmDeviceID +libpm.Pm_GetDefaultInputDeviceID.restype = PmDeviceID + +PmTimestamp = c_int32 +PmTimeProcPtr = CFUNCTYPE(PmTimestamp, c_void_p) +NullTimeProcPtr = cast(None, PmTimeProcPtr) + +# PmBefore is not defined + +libpm.Pm_GetDeviceInfo.argtypes = [PmDeviceID] +libpm.Pm_GetDeviceInfo.restype = PmDeviceInfoPtr + +libpm.Pm_OpenInput.restype = PmError +libpm.Pm_OpenInput.argtypes = [PortMidiStreamPtrPtr, + PmDeviceID, + c_void_p, + c_int32, + PmTimeProcPtr, + c_void_p] + +libpm.Pm_OpenOutput.restype = PmError +libpm.Pm_OpenOutput.argtypes = [PortMidiStreamPtrPtr, + PmDeviceID, + c_void_p, + c_int32, + PmTimeProcPtr, + c_void_p, + c_int32] + +libpm.Pm_SetFilter.restype = PmError +libpm.Pm_SetFilter.argtypes = [PortMidiStreamPtr, c_int32] + +libpm.Pm_SetChannelMask.restype = PmError +libpm.Pm_SetChannelMask.argtypes = [PortMidiStreamPtr, c_int32] + +libpm.Pm_Abort.restype = PmError +libpm.Pm_Abort.argtypes = [PortMidiStreamPtr] + +libpm.Pm_Close.restype = PmError +libpm.Pm_Close.argtypes = [PortMidiStreamPtr] + +PmMessage = c_int32 + +class PmEvent(Structure): + _fields_ = [("message", PmMessage), + ("timestamp", PmTimestamp)] + +PmEventPtr = POINTER(PmEvent) + +libpm.Pm_Read.restype = PmError +libpm.Pm_Read.argtypes = [PortMidiStreamPtr, PmEventPtr, c_int32] + +libpm.Pm_Poll.restype = PmError +libpm.Pm_Poll.argtypes = [PortMidiStreamPtr] + +libpm.Pm_Write.restype = PmError +libpm.Pm_Write.argtypes = [PortMidiStreamPtr, PmEventPtr, c_int32] + +libpm.Pm_WriteShort.restype = PmError +libpm.Pm_WriteShort.argtypes = [PortMidiStreamPtr, PmTimestamp, c_int32] + +libpm.Pm_WriteSysEx.restype = PmError +libpm.Pm_WriteSysEx.argtypes = [PortMidiStreamPtr, PmTimestamp, c_char_p] + +# porttime.h + +# PtError enum +PtError = c_int32 +ptNoError = 0 +ptHostError = -10000 +ptAlreadyStarted = -9999 +ptAlreadyStopped = -9998 +ptInsufficientMemory = -9997 + +PtTimestamp = c_int32 +PtCallback = CFUNCTYPE(PmTimestamp, c_void_p) + +libpt.Pt_Start.restype = PtError +libpt.Pt_Start.argtypes = [c_int32, PtCallback, c_void_p] + +libpt.Pt_Stop.restype = PtError +libpt.Pt_Started.restype = c_int32 +libpt.Pt_Time.restype = PtTimestamp + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/documentation.py frescobaldi-2.0.0/frescobaldi_app/preferences/documentation.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/documentation.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/documentation.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,153 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Documentation preferences. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings, Qt +from PyQt4.QtGui import QComboBox, QCompleter, QGridLayout, QLabel, QVBoxLayout + +import app +import icons +import preferences +import widgets.listedit +import widgets.dialog +import lilydoc +import language_names + + +class Documentation(preferences.GroupsPage): + def __init__(self, dialog): + super(Documentation, self).__init__(dialog) + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(Paths(self)) + layout.addWidget(Browser(self)) + layout.addStretch(1) + + +class Paths(preferences.Group): + def __init__(self, page): + super(Paths, self).__init__(page) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.paths = LilyDocPathsList() + self.paths.changed.connect(self.changed) + layout.addWidget(self.paths) + + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Paths to LilyPond Documentation")) + self.paths.setToolTip(_( + "Add paths or URLs. See \"What's This\" for more information.")) + self.paths.setWhatsThis(_( + "

Here you can add local paths or URLs pointing to LilyPond " + "documentation. A local path should point to the directory where " + "either the \"{documentation}\" directory lives, or the whole " + "\"share/doc/lilypond/html/offline-root\" path.

\n" + "

If those can't be found, documentation is looked for in all " + "subdirectories of the given path, one level deep. This makes it " + "possible to put multiple versions of LilyPond documentation in " + "different subdirectories and have Frescobaldi automatically find " + "them.

").format(documentation="Documentation")) + + def loadSettings(self): + self.paths.setValue(QSettings().value("documentation/paths", []) or []) + + def saveSettings(self): + s = QSettings() + s.beginGroup("documentation") + paths = self.paths.value() + if paths: + s.setValue("paths", paths) + else: + s.remove("paths") + + +class Browser(preferences.Group): + def __init__(self, page): + super(Browser, self).__init__(page) + + layout = QGridLayout() + self.setLayout(layout) + + self.languagesLabel = QLabel() + self.languages = QComboBox(currentIndexChanged=self.changed) + layout.addWidget(self.languagesLabel, 0, 0) + layout.addWidget(self.languages, 0, 1) + + items = ['', ''] + items.extend(language_names.languageName(l, l) for l in lilydoc.translations) + self.languages.addItems(items) + + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Documentation Browser")) + self.languagesLabel.setText(_("Preferred Language:")) + self.languages.setItemText(0, _("Default")) + self.languages.setItemText(1, _("English (untranslated)")) + + def loadSettings(self): + lang = QSettings().value("documentation/language", "default") + if lang in lilydoc.translations: + i = lilydoc.translations.index(lang) + 2 + elif lang == "C": + i = 1 + else: + i = 0 + self.languages.setCurrentIndex(i) + + def saveSettings(self): + langs = ['default', 'C'] + lilydoc.translations + QSettings().setValue("documentation/language", + langs[self.languages.currentIndex()]) + + +class LilyDocPathsList(widgets.listedit.ListEdit): + def openEditor(self, item): + + dlg = widgets.dialog.Dialog(self, + _("Please enter a local path or a URL:"), + app.caption("LilyPond Documentation"), + icon = icons.get('lilypond-run')) + urlreq = widgets.urlrequester.UrlRequester() + urlreq.lineEdit.setCompleter(QCompleter([ + "http://lilypond.org/doc/v2.12/", + "http://lilypond.org/doc/stable/", + "http://lilypond.org/doc/latest/", + ], urlreq.lineEdit)) + dlg.setMainWidget(urlreq) + urlreq.setPath(item.text()) + urlreq.setMinimumWidth(320) + urlreq.lineEdit.setFocus() + if dlg.exec_(): + item.setText(urlreq.path()) + return True + return False + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/fontscolors.py frescobaldi-2.0.0/frescobaldi_app/preferences/fontscolors.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/fontscolors.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/fontscolors.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,542 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Fonts and Colors preferences page. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import icons +import preferences +import textformats +import util + +from widgets import ClearButton +from widgets.schemeselector import SchemeSelector +from widgets.colorbutton import ColorButton + + +class FontsColors(preferences.Page): + def __init__(self, dialog): + super(FontsColors, self).__init__(dialog) + + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + + self.scheme = SchemeSelector(self) + layout.addWidget(self.scheme) + + self.printScheme = QCheckBox() + layout.addWidget(self.printScheme) + + hbox = QHBoxLayout() + self.tree = QTreeWidget(self) + self.tree.setHeaderHidden(True) + self.tree.setAnimated(True) + self.stack = QStackedWidget(self) + hbox.addWidget(self.tree) + hbox.addWidget(self.stack) + layout.addLayout(hbox) + + hbox = QHBoxLayout() + self.fontLabel = QLabel() + self.fontChooser = QFontComboBox() + self.fontSize = QDoubleSpinBox() + self.fontSize.setRange(6.0, 32.0) + self.fontSize.setSingleStep(0.5) + self.fontSize.setDecimals(1) + hbox.addWidget(self.fontLabel) + hbox.addWidget(self.fontChooser, 1) + hbox.addWidget(self.fontSize) + layout.addLayout(hbox) + + # add the items to our list + self.baseColorsItem = i = QTreeWidgetItem() + self.tree.addTopLevelItem(i) + self.defaultStylesItem = i = QTreeWidgetItem() + self.tree.addTopLevelItem(i) + + self.defaultStyles = {} + for name in textformats.defaultStyles: + self.defaultStyles[name] = i = QTreeWidgetItem() + self.defaultStylesItem.addChild(i) + i.name = name + self.defaultStylesItem.setExpanded(True) + + self.allStyles = {} + for group, styles in textformats.allStyles: + i = QTreeWidgetItem() + children = {} + self.allStyles[group] = (i, children) + self.tree.addTopLevelItem(i) + i.group = group + for name in styles: + j = QTreeWidgetItem() + j.name = name + i.addChild(j) + children[name] = j + + self.baseColorsWidget = BaseColors(self) + self.customAttributesWidget = CustomAttributes(self) + self.emptyWidget = QWidget(self) + self.stack.addWidget(self.baseColorsWidget) + self.stack.addWidget(self.customAttributesWidget) + self.stack.addWidget(self.emptyWidget) + + self.tree.currentItemChanged.connect(self.currentItemChanged) + self.tree.setCurrentItem(self.baseColorsItem) + self.scheme.currentChanged.connect(self.currentSchemeChanged) + self.scheme.changed.connect(self.changed) + self.baseColorsWidget.changed.connect(self.baseColorsChanged) + self.customAttributesWidget.changed.connect(self.customAttributesChanged) + self.fontChooser.currentFontChanged.connect(self.fontChanged) + self.fontSize.valueChanged.connect(self.fontChanged) + self.printScheme.clicked.connect(self.printSchemeChanged) + + app.translateUI(self) + + def translateUI(self): + self.printScheme.setText(_("Use this scheme for printing")) + self.fontLabel.setText(_("Font:")) + self.baseColorsItem.setText(0, _("Base Colors")) + self.defaultStylesItem.setText(0, _("Default Styles")) + + self.defaultStyleNames = defaultStyleNames() + self.allStyleNames = allStyleNames() + + for name in textformats.defaultStyles: + self.defaultStyles[name].setText(0, self.defaultStyleNames[name]) + for group, styles in textformats.allStyles: + self.allStyles[group][0].setText(0, self.allStyleNames[group][0]) + for name in styles: + self.allStyles[group][1][name].setText(0, self.allStyleNames[group][1][name]) + + def currentItemChanged(self, item, previous): + if item is self.baseColorsItem: + self.stack.setCurrentWidget(self.baseColorsWidget) + elif not item.parent(): + self.stack.setCurrentWidget(self.emptyWidget) + else: + data = self.data[self.scheme.currentScheme()] + w = self.customAttributesWidget + self.stack.setCurrentWidget(w) + toptext = None + if item.parent() is self.defaultStylesItem: + # default style + w.setTitle(item.text(0)) + w.setTristate(False) + w.setTextFormat(data.defaultStyles[item.name]) + else: + # specific style of specific group + group, name = item.parent().group, item.name + w.setTitle("{0}: {1}".format(item.parent().text(0), item.text(0))) + inherit = textformats.inherits[group].get(name) + if inherit: + toptext = _("(Inherits: {name})").format(name=self.defaultStyleNames[inherit]) + w.setTristate(bool(inherit)) + w.setTextFormat(data.allStyles[group][name]) + w.setTopText(toptext) + + def currentSchemeChanged(self): + scheme = self.scheme.currentScheme() + if scheme not in self.data: + self.data[scheme] = textformats.TextFormatData(scheme) + self.updateDisplay() + if self.tree.currentItem(): + self.currentItemChanged(self.tree.currentItem(), None) + with util.signalsBlocked(self.printScheme): + self.printScheme.setChecked(scheme == self._printScheme) + + def fontChanged(self): + data = self.data[self.scheme.currentScheme()] + data.font = self.fontChooser.currentFont() + data.font.setPointSizeF(self.fontSize.value()) + self.updateDisplay() + self.changed.emit() + + def printSchemeChanged(self): + if self.printScheme.isChecked(): + self._printScheme = self.scheme.currentScheme() + else: + self._printScheme = None + self.changed.emit() + + def updateDisplay(self): + data = self.data[self.scheme.currentScheme()] + + with util.signalsBlocked(self.fontChooser, self.fontSize): + self.fontChooser.setCurrentFont(data.font) + self.fontSize.setValue(data.font.pointSizeF()) + + with util.signalsBlocked(self): + # update base colors + for name in textformats.baseColors: + self.baseColorsWidget.color[name].setColor(data.baseColors[name]) + + # update base colors for whole treewidget + p = QApplication.palette() + p.setColor(QPalette.Base, data.baseColors['background']) + p.setColor(QPalette.Text, data.baseColors['text']) + p.setColor(QPalette.Highlight, data.baseColors['selectionbackground']) + p.setColor(QPalette.HighlightedText, data.baseColors['selectiontext']) + self.tree.setPalette(p) + + def setItemTextFormat(item, f): + font = QFont(data.font) + if f.hasProperty(QTextFormat.ForegroundBrush): + item.setForeground(0, f.foreground().color()) + else: + item.setForeground(0, data.baseColors['text']) + if f.hasProperty(QTextFormat.BackgroundBrush): + item.setBackground(0, f.background().color()) + else: + item.setBackground(0, QBrush()) + font.setWeight(f.fontWeight()) + font.setItalic(f.fontItalic()) + font.setUnderline(f.fontUnderline()) + item.setFont(0, font) + + # update looks of default styles + for name in textformats.defaultStyles: + setItemTextFormat(self.defaultStyles[name], data.defaultStyles[name]) + + # update looks of all the specific styles + for group, styles in textformats.allStyles: + children = self.allStyles[group][1] + for name in styles: + inherit = textformats.inherits[group].get(name) + f = QTextCharFormat(data.defaultStyles[inherit]) if inherit else QTextCharFormat() + f.merge(data.allStyles[group][name]) + setItemTextFormat(children[name], f) + + def baseColorsChanged(self, name): + # keep data up to date with base colors + data = self.data[self.scheme.currentScheme()] + data.baseColors[name] = self.baseColorsWidget.color[name].color() + self.updateDisplay() + self.changed.emit() + + def customAttributesChanged(self): + item = self.tree.currentItem() + if not item or not item.parent(): + return + data = self.data[self.scheme.currentScheme()] + if item.parent() is self.defaultStylesItem: + # a default style has been changed + data.defaultStyles[item.name] = self.customAttributesWidget.textFormat() + else: + # a specific style has been changed + group, name = item.parent().group, item.name + data.allStyles[group][name] = self.customAttributesWidget.textFormat() + self.updateDisplay() + self.changed.emit() + + def loadSettings(self): + self.data = {} # holds all data with scheme as key + self._printScheme = QSettings().value("printer_scheme", "default") + self.scheme.loadSettings("editor_scheme", "editor_schemes") + + def saveSettings(self): + self.scheme.saveSettings("editor_scheme", "editor_schemes", "fontscolors") + for scheme in self.scheme.schemes(): + if scheme in self.data: + self.data[scheme].save(scheme) + if self._printScheme: + QSettings().setValue("printer_scheme", self._printScheme) + else: + QSettings().remove("printer_scheme") + + +class BaseColors(QGroupBox): + + changed = pyqtSignal(unicode) + + def __init__(self, parent=None): + super(BaseColors, self).__init__(parent) + + grid = QGridLayout() + grid.setSpacing(1) + self.setLayout(grid) + + self.color = {} + self.labels = {} + for name in textformats.baseColors: + c = self.color[name] = ColorButton(self) + c.colorChanged.connect((lambda name: lambda: self.changed.emit(name))(name)) + l = self.labels[name] = QLabel() + l.setBuddy(c) + row = grid.rowCount() + grid.addWidget(l, row, 0) + grid.addWidget(c, row, 1) + + grid.setRowStretch(grid.rowCount(), 2) + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Base Colors")) + names = baseColorNames() + for name in textformats.baseColors: + self.labels[name].setText(names[name]) + + +class CustomAttributes(QGroupBox): + + changed = pyqtSignal() + + def __init__(self, parent=None): + super(CustomAttributes, self).__init__(parent) + grid = QGridLayout() + self.setLayout(grid) + + self.toplabel = QLabel() + self.toplabel.setEnabled(False) + self.toplabel.setAlignment(Qt.AlignCenter) + grid.addWidget(self.toplabel, 0, 0, 1, 3) + + self.textColor = ColorButton() + l = self.textLabel = QLabel() + l.setBuddy(self.textColor) + grid.addWidget(l, 1, 0) + grid.addWidget(self.textColor, 1, 1) + c = ClearButton() + c.clicked.connect(self.textColor.clear) + grid.addWidget(c, 1, 2) + + self.backgroundColor = ColorButton() + l = self.backgroundLabel = QLabel() + l.setBuddy(self.backgroundColor) + grid.addWidget(l, 2, 0) + grid.addWidget(self.backgroundColor, 2, 1) + c = ClearButton() + c.clicked.connect(self.backgroundColor.clear) + grid.addWidget(c, 2, 2) + + self.bold = QCheckBox() + self.italic = QCheckBox() + self.underline = QCheckBox() + grid.addWidget(self.bold, 3, 0) + grid.addWidget(self.italic, 4, 0) + grid.addWidget(self.underline, 5, 0) + + self.underlineColor = ColorButton() + grid.addWidget(self.underlineColor, 5, 1) + c = ClearButton() + c.clicked.connect(self.underlineColor.clear) + grid.addWidget(c, 5, 2) + grid.setRowStretch(6, 2) + + self.textColor.colorChanged.connect(self.changed) + self.backgroundColor.colorChanged.connect(self.changed) + self.underlineColor.colorChanged.connect(self.changed) + self.bold.stateChanged.connect(self.changed) + self.italic.stateChanged.connect(self.changed) + self.underline.stateChanged.connect(self.changed) + + app.translateUI(self) + + def translateUI(self): + self.textLabel.setText(_("Text")) + self.backgroundLabel.setText(_("Background")) + self.bold.setText(_("Bold")) + self.italic.setText(_("Italic")) + self.underline.setText(_("Underline")) + + def setTopText(self, text): + self.toplabel.setText(text) + + def setTristate(self, enable): + self._tristate = enable + self.bold.setTristate(enable) + self.italic.setTristate(enable) + self.underline.setTristate(enable) + + def textFormat(self): + """Returns our settings as a QTextCharFormat object.""" + f = QTextCharFormat() + if self._tristate: + value = lambda checkbox: [False, None, True][checkbox.checkState()] + else: + value = lambda checkbox: checkbox.isChecked() + res = value(self.bold) + if res is not None: + f.setFontWeight(QFont.Bold if res else QFont.Normal) + res = value(self.italic) + if res is not None: + f.setFontItalic(res) + res = value(self.underline) + if res is not None: + f.setFontUnderline(res) + if self.textColor.color().isValid(): + f.setForeground(self.textColor.color()) + if self.backgroundColor.color().isValid(): + f.setBackground(self.backgroundColor.color()) + if self.underlineColor.color().isValid(): + f.setUnderlineColor(self.underlineColor.color()) + return f + + def setTextFormat(self, f): + """Sets our widget to the QTextCharFormat settings.""" + block = self.blockSignals(True) + absent = Qt.PartiallyChecked if self._tristate else Qt.Unchecked + if f.hasProperty(QTextFormat.FontWeight): + self.bold.setChecked(f.fontWeight() >= QFont.Bold) + else: + self.bold.setCheckState(absent) + if f.hasProperty(QTextFormat.FontItalic): + self.italic.setChecked(f.fontItalic()) + else: + self.italic.setCheckState(absent) + if f.hasProperty(QTextFormat.TextUnderlineStyle): + self.underline.setChecked(f.fontUnderline()) + else: + self.underline.setCheckState(absent) + + if f.hasProperty(QTextFormat.ForegroundBrush): + self.textColor.setColor(f.foreground().color()) + else: + self.textColor.setColor(QColor()) + if f.hasProperty(QTextFormat.BackgroundBrush): + self.backgroundColor.setColor(f.background().color()) + else: + self.backgroundColor.setColor(QColor()) + if f.hasProperty(QTextFormat.TextUnderlineColor): + self.underlineColor.setColor(f.underlineColor()) + else: + self.underlineColor.setColor(QColor()) + self.blockSignals(block) + + + +def baseColorNames(): + return { + # L10N: color of Text + 'text': _("Text"), + # L10N: color of Background + 'background': _("Background"), + # L10N: color of Selected Text + 'selectiontext': _("Selected Text"), + # L10N: color of Selection Background + 'selectionbackground': _("Selection Background"), + # L10N: color of Current Line + 'current': _("Current Line"), + # L10N: color of Marked Line (bookmark) + 'mark': _("Marked Line"), + # L10N: color of line with Error + 'error': _("Error Line"), + # L10N: color of highlighted search result + 'search': _("Search Result"), + # L10N: color of characters that match (e.g. braces, parentheses) + 'match': _("Matching Character"), + # L10N: color of paper in music preview + 'paper': _("Preview Background"), + # L10N: color of objects highlighting in preview + 'musichighlight': _("Preview Highlight"), + } + + +def defaultStyleNames(): + return { + # L10N: a basic type of input in the editor + 'keyword': _("Keyword"), + # L10N: a basic type of input in the editor + 'function': _("Function"), + # L10N: a basic type of input in the editor + 'variable': _("Variable"), + # L10N: a basic type of input in the editor + 'value': _("Value"), + # L10N: a basic type of input in the editor + 'string': _("String"), + # L10N: a basic type of input in the editor + 'escape': _("Escape"), # TODO: better translatable name + # L10N: a basic type of input in the editor + 'comment': _("Comment"), + # L10N: a basic type of input in the editor + 'error': _("Error"), + } + + +def allStyleNames(): + return { + 'lilypond': (_("LilyPond"), { + 'pitch': _("Pitch"), + 'octave': _("Octave"), + 'duration': _("Duration"), + 'octavecheck': _("Octave Check"), + 'fingering': _("Fingering"), + # L10N: For String instruments like Guitar + 'stringnumber': _("String Number"), + 'slur': _("Slur"), + 'dynamic': _("Dynamic"), + 'articulation': _("Articulation"), + 'chord': _("Chord"), + 'beam': _("Beam"), + 'check': _("Check"), + 'repeat': _("Repeat"), + 'keyword': _("Keyword"), + 'command': _("Command"), + 'specifier': _("Specifier"), + 'usercommand': _("User Command"), + 'markup': _("Markup"), + 'lyricmode': _("Lyric Mode"), + 'lyrictext': _("Lyric Text"), + 'delimiter': _("Delimiter"), + 'context': _("Context"), + 'grob': _("Layout Object"), + 'property': _("Property"), + 'variable': _("Variable"), + 'uservariable': _("User Variable"), + 'value': _("Value"), + 'string': _("String"), + 'stringescape': _("Escaped Character"), + 'comment': _("Comment"), + 'error': _("Error"), + }), + 'html': (_("HTML"), { + 'tag': _("Tag"), + 'lilypondtag': _("LilyPond Tag"), + 'attribute': _("Attribute"), + 'value': _("Value"), + 'entityref': _("Entity Reference"), + 'comment': _("Comment"), + 'string': _("String"), + }), + 'scheme': (_("Scheme"), { + 'scheme': _("Scheme"), + 'number': _("Number"), + 'lilypond': _("LilyPond Environment"), + 'string': _("String"), + 'comment': _("Comment"), + }), + 'texinfo': (_("Texinfo"), { + 'keyword': _("Keyword"), + 'block': _("Block"), + 'escapechar': _("Escaped Character"), + 'attribute': _("Attribute"), + 'verbatim': _("Verbatim"), + 'comment': _("Comment"), + }), + + } + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/general.py frescobaldi-2.0.0/frescobaldi_app/preferences/general.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/general.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/general.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,236 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Keyboard shortcuts settings page. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import info +import icons +import preferences +import sessions +import util +import po +import language_names + +from widgets.urlrequester import UrlRequester + + +class GeneralPrefs(preferences.GroupsPage): + def __init__(self, dialog): + super(GeneralPrefs, self).__init__(dialog) + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(General(self)) + layout.addStretch(0) + layout.addWidget(StartSession(self)) + layout.addStretch(0) + layout.addWidget(SavingDocument(self)) + + +class General(preferences.Group): + def __init__(self, page): + super(General, self).__init__(page) + + grid = QGridLayout() + self.setLayout(grid) + + self.langLabel = QLabel() + self.lang = QComboBox(currentIndexChanged=self.changed) + grid.addWidget(self.langLabel, 0, 0) + grid.addWidget(self.lang, 0, 1) + + self.styleLabel = QLabel() + self.styleCombo = QComboBox(currentIndexChanged=self.changed) + grid.addWidget(self.styleLabel, 1, 0) + grid.addWidget(self.styleCombo, 1, 1) + + self.systemIcons = QCheckBox(toggled=self.changed) + grid.addWidget(self.systemIcons, 2, 0, 1, 3) + + grid.setColumnStretch(2, 1) + + # fill in the language combo + self._langs = ["none", ""] + self.lang.addItems(('', '')) + langnames = [(language_names.languageName(lang, lang), lang) for lang in po.available()] + langnames.sort() + for name, lang in langnames: + self._langs.append(lang) + self.lang.addItem(name) + + # fill in style combo + self.styleCombo.addItem('') + self.styleCombo.addItems(QStyleFactory.keys()) + + app.translateUI(self) + + def loadSettings(self): + s = QSettings() + lang = s.value("language", "") + try: + index = self._langs.index(lang) + except ValueError: + index = 1 + self.lang.setCurrentIndex(index) + style = s.value("guistyle", "").lower() + styles = [name.lower() for name in QStyleFactory.keys()] + try: + index = styles.index(style) + 1 + except ValueError: + index = 0 + self.styleCombo.setCurrentIndex(index) + self.systemIcons.setChecked(s.value("system_icons", True) not in (False, "false")) + + def saveSettings(self): + s = QSettings() + s.setValue("language", self._langs[self.lang.currentIndex()]) + s.setValue("system_icons", self.systemIcons.isChecked()) + if self.styleCombo.currentIndex() == 0: + s.remove("guistyle") + else: + s.setValue("guistyle", self.styleCombo.currentText()) + + def translateUI(self): + self.setTitle(_("General Preferences")) + self.langLabel.setText(_("Language:")) + self.lang.setItemText(0, _("No Translation")) + self.lang.setItemText(1, _("System Default Language (if available)")) + self.styleLabel.setText(_("Style:")) + self.styleCombo.setItemText(0, _("Default")) + self.systemIcons.setText(_("Use System Icons")) + self.systemIcons.setToolTip(_( + "If checked, icons of the desktop icon theme " + "will be used instead of the bundled icons.\n" + "This setting takes effect on the next start of {appname}.").format(appname=info.appname)) + + +class StartSession(preferences.Group): + def __init__(self, page): + super(StartSession, self).__init__(page) + + grid = QGridLayout() + self.setLayout(grid) + + def changed(): + self.changed.emit() + self.combo.setEnabled(self.custom.isChecked()) + + self.none = QRadioButton(toggled=changed) + self.lastused = QRadioButton(toggled=changed) + self.custom = QRadioButton(toggled=changed) + self.combo = QComboBox(currentIndexChanged=changed) + + grid.addWidget(self.none, 0, 0, 1, 2) + grid.addWidget(self.lastused, 1, 0, 1, 2) + grid.addWidget(self.custom, 2, 0, 1, 1) + grid.addWidget(self.combo, 2, 1, 1, 1) + + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Session to load if Frescobaldi is started without arguments")) + self.none.setText(_("Start with no session")) + self.lastused.setText(_("Start with last used session")) + self.custom.setText(_("Start with session:")) + + def loadSettings(self): + s = QSettings() + s.beginGroup("session") + startup = s.value("startup", "none") + if startup == "lastused": + self.lastused.setChecked(True) + elif startup == "custom": + self.custom.setChecked(True) + else: + self.none.setChecked(True) + sessionNames = sessions.sessionNames() + self.combo.clear() + self.combo.addItems(sessionNames) + custom = s.value("custom", "") + if custom in sessionNames: + self.combo.setCurrentIndex(sessionNames.index(custom)) + + def saveSettings(self): + s = QSettings() + s.beginGroup("session") + s.setValue("custom", self.combo.currentText()) + if self.custom.isChecked(): + startup = "custom" + elif self.lastused.isChecked(): + startup = "lastused" + else: + startup = "none" + s.setValue("startup", startup) + + +class SavingDocument(preferences.Group): + def __init__(self, page): + super(SavingDocument, self).__init__(page) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.backup = QCheckBox(toggled=self.changed) + self.metainfo = QCheckBox(toggled=self.changed) + layout.addWidget(self.backup) + layout.addWidget(self.metainfo) + + hbox = QHBoxLayout() + layout.addLayout(hbox) + + self.basedirLabel = l = QLabel() + self.basedir = UrlRequester() + hbox.addWidget(self.basedirLabel) + hbox.addWidget(self.basedir) + self.basedir.changed.connect(self.changed) + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("When saving documents")) + self.backup.setText(_("Keep backup copy")) + self.backup.setToolTip(_( + "Frescobaldi always backups a file before overwriting it " + "with a new version.\n" + "If checked those backup copies are retained.")) + self.metainfo.setText(_("Remember cursor position, bookmarks, etc.")) + self.basedirLabel.setText(_("Default directory:")) + self.basedirLabel.setToolTip(_("The default folder for your LilyPond documents (optional).")) + + def loadSettings(self): + s = QSettings() + self.backup.setChecked(s.value("backup_keep", False) in (True, "true")) + self.metainfo.setChecked(s.value("metainfo", True) not in (False, "false")) + self.basedir.setPath(s.value("basedir", "")) + + def saveSettings(self): + s = QSettings() + s.setValue("backup_keep", self.backup.isChecked()) + s.setValue("metainfo", self.metainfo.isChecked()) + s.setValue("basedir", self.basedir.path()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/helpers.py frescobaldi-2.0.0/frescobaldi_app/preferences/helpers.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/helpers.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/helpers.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,106 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Helper application preferences. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings +from PyQt4.QtGui import QFileDialog, QGridLayout, QLabel, QVBoxLayout + +import app +import util +import icons +import preferences +import widgets.urlrequester + + +class Helpers(preferences.GroupsPage): + def __init__(self, dialog): + super(Helpers, self).__init__(dialog) + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(Apps(self)) + layout.addStretch(0) + + +class Apps(preferences.Group): + def __init__(self, page): + super(Apps, self).__init__(page) + + layout = QGridLayout(spacing=1) + self.setLayout(layout) + + self.messageLabel = QLabel(wordWrap=True) + layout.addWidget(self.messageLabel, 0, 0, 1, 2) + self.labels = {} + self.entries = {} + for row, (name, title) in enumerate(self.items(), 1): + self.labels[name] = l = QLabel() + self.entries[name] = e = widgets.urlrequester.UrlRequester() + e.setFileMode(QFileDialog.ExistingFile) + e.changed.connect(page.changed) + layout.addWidget(l, row, 0) + layout.addWidget(e, row, 1) + + app.translateUI(self) + + def items(self): + """Yields (name, title) tuples for every setting in this group.""" + yield "pdf", _("PDF:") + yield "midi", _("MIDI:") + yield "svg", _("SVG:") + yield "image", _("Image:") + yield "browser", _("Browser:") + yield "email", _("E-Mail:") + yield "directory", _("File Manager:") + yield "shell", _("Shell:") + + def translateUI(self): + self.setTitle(_("Helper Applications")) + self.messageLabel.setText(_( + "Below you can enter commands to open different file types. " + "$f is replaced with the filename, " + "$u with the URL. " + "Leave a field empty to use the operating system default " + "application.")) + for name, title in self.items(): + self.labels[name].setText(title) + self.entries["email"].setToolTip(_( + "Command that should accept a mailto: URL.")) + self.entries["shell"].setToolTip(_( + "Command to open a Terminal or Command window.")) + + def loadSettings(self): + s = QSettings() + s.beginGroup("helper_applications") + for name, title in self.items(): + self.entries[name].setPath(s.value(name, "")) + + def saveSettings(self): + s= QSettings() + s.beginGroup("helper_applications") + for name, title in self.items(): + s.setValue(name, self.entries[name].path()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/__init__.py frescobaldi-2.0.0/frescobaldi_app/preferences/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,298 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Preferences Dialog. +""" + +from __future__ import unicode_literals + + +from PyQt4.QtCore import QSettings, QSize, Qt, pyqtSignal +from PyQt4.QtGui import ( + QDialog, QDialogButtonBox, QGroupBox, QHBoxLayout, QListWidget, + QListWidgetItem, QStackedWidget, QVBoxLayout, QWidget) + +import app +import util +import icons +import widgets + + +_prefsindex = 0 # global setting for selected prefs page but not saved on exit + + +class PreferencesDialog(QDialog): + + def __init__(self, mainwindow): + super(PreferencesDialog, self).__init__(mainwindow) + self.setWindowModality(Qt.WindowModal) + self.addAction(mainwindow.actionCollection.help_whatsthis) + layout = QVBoxLayout() + layout.setSpacing(10) + self.setLayout(layout) + + # listview to the left, stacked widget to the right + top = QHBoxLayout() + layout.addLayout(top) + + self.pagelist = QListWidget(self) + self.stack = QStackedWidget(self) + top.addWidget(self.pagelist, 0) + top.addWidget(self.stack, 2) + + layout.addWidget(widgets.Separator(self)) + + b = self.buttons = QDialogButtonBox(self) + b.setStandardButtons( + QDialogButtonBox.Ok + | QDialogButtonBox.Cancel + | QDialogButtonBox.Apply + | QDialogButtonBox.Reset + | QDialogButtonBox.Help) + layout.addWidget(b) + b.accepted.connect(self.accept) + b.rejected.connect(self.reject) + b.button(QDialogButtonBox.Apply).clicked.connect(self.saveSettings) + b.button(QDialogButtonBox.Reset).clicked.connect(self.loadSettings) + b.button(QDialogButtonBox.Apply).setEnabled(False) + + # fill the pagelist + self.pagelist.setIconSize(QSize(32, 32)) + self.pagelist.setSpacing(2) + for item in ( + General, + LilyPond, + Midi, + Helpers, + Paths, + Documentation, + Shortcuts, + FontsColors, + Tools, + ): + self.pagelist.addItem(item()) + self.pagelist.currentItemChanged.connect(self.slotCurrentItemChanged) + + app.translateUI(self, 100) + # read our size and selected page + util.saveDialogSize(self, "preferences/dialog/size", QSize(500, 300)) + self.pagelist.setCurrentRow(_prefsindex) + + def translateUI(self): + self.pagelist.setFixedWidth(self.pagelist.sizeHintForColumn(0) + 12) + self.setWindowTitle(app.caption(_("Preferences"))) + + def done(self, result): + if result and self.buttons.button(QDialogButtonBox.Apply).isEnabled(): + self.saveSettings() + # save our size and selected page + global _prefsindex + _prefsindex = self.pagelist.currentRow() + super(PreferencesDialog, self).done(result) + + def pages(self): + """Yields the settings pages that are already instantiated.""" + for n in range(self.stack.count()): + yield self.stack.widget(n) + + def loadSettings(self): + """Loads the settings on reset.""" + for page in self.pages(): + page.loadSettings() + page.hasChanges = False + self.buttons.button(QDialogButtonBox.Apply).setEnabled(False) + + def saveSettings(self): + """Saves the settings and applies them.""" + for page in self.pages(): + if page.hasChanges: + page.saveSettings() + page.hasChanges = False + self.buttons.button(QDialogButtonBox.Apply).setEnabled(False) + + # emit the signal + app.settingsChanged() + + def slotCurrentItemChanged(self, item): + item.activate() + + def changed(self): + """Call this to enable the Apply button.""" + self.buttons.button(QDialogButtonBox.Apply).setEnabled(True) + + +class PrefsItemBase(QListWidgetItem): + def __init__(self): + super(PrefsItemBase, self).__init__() + self._widget = None + self.setIcon(icons.get(self.iconName)) + app.translateUI(self) + + def activate(self): + dlg = self.listWidget().parentWidget() + if self._widget is None: + w = self._widget = self.widget(dlg) + dlg.stack.addWidget(w) + w.loadSettings() + w.changed.connect(dlg.changed) + w.changed.connect(w.markChanged) + dlg.stack.setCurrentWidget(self._widget) + + +class General(PrefsItemBase): + iconName = "preferences-system" + def translateUI(self): + self.setText(_("General Preferences")) + + def widget(self, dlg): + import general + return general.GeneralPrefs(dlg) + + +class LilyPond(PrefsItemBase): + iconName = "lilypond-run" + def translateUI(self): + self.setText(_("LilyPond Preferences")) + + def widget(self, dlg): + import lilypond + return lilypond.LilyPondPrefs(dlg) + + +class Midi(PrefsItemBase): + iconName = "audio-volume-medium" + def translateUI(self): + self.setText(_("MIDI Settings")) + + def widget(self, dlg): + from . import midi + return midi.MidiPrefs(dlg) + + +class Helpers(PrefsItemBase): + iconName = "applications-other" + def translateUI(self): + self.setText(_("Helper Applications")) + + def widget(self, dlg): + import helpers + return helpers.Helpers(dlg) + + +class Paths(PrefsItemBase): + iconName = "folder-open" + def translateUI(self): + self.setText(_("Paths")) + + def widget(self, dlg): + from . import paths + return paths.Paths(dlg) + + +class Documentation(PrefsItemBase): + iconName = "help-contents" + def translateUI(self): + self.setText(_("LilyPond Documentation")) + + def widget(self, dlg): + from . import documentation + return documentation.Documentation(dlg) + + +class Shortcuts(PrefsItemBase): + iconName = "configure-shortcuts" + def translateUI(self): + self.setText(_("Keyboard Shortcuts")) + + def widget(self, dlg): + from . import shortcuts + return shortcuts.Shortcuts(dlg) + + +class FontsColors(PrefsItemBase): + iconName = "applications-graphics" + def translateUI(self): + self.setText(_("Fonts & Colors")) + + def widget(self, dlg): + from . import fontscolors + return fontscolors.FontsColors(dlg) + + +class Tools(PrefsItemBase): + iconName = "preferences-other" + def translateUI(self): + self.setText(_("Tools")) + + def widget(self, dlg): + from . import tools + return tools.Tools(dlg) + + +class Page(QWidget): + """Base class for settings pages.""" + changed = pyqtSignal() + hasChanges = False + + def markChanged(self): + """Called when something changes in the dialog.""" + self.hasChanges = True + + def loadSettings(self): + """Should load settings from config into our widget.""" + + def saveSettings(self): + """Should write settings from our widget to config.""" + + +class GroupsPage(Page): + """Base class for a Page with SettingsGroups. + + The load and save methods of the SettingsGroup groups are automatically called. + + """ + def __init__(self, dialog): + super(GroupsPage, self).__init__(dialog) + self.groups = [] + + def loadSettings(self): + for group in self.groups: + group.loadSettings() + + def saveSettings(self): + for group in self.groups: + group.saveSettings() + + +class Group(QGroupBox): + """This is a QGroupBox that auto-adds itself to a Page.""" + changed = pyqtSignal() + + def __init__(self, page): + super(Group, self).__init__() + page.groups.append(self) + self.changed.connect(page.changed) + + def loadSettings(self): + """Should load settings from config into our widget.""" + + def saveSettings(self): + """Should write settings from our widget to config.""" + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/lilypond.py frescobaldi-2.0.0/frescobaldi_app/preferences/lilypond.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/lilypond.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/lilypond.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,301 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +LilyPond preferences page +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import help.contents +import util +import icons +import preferences +import lilypondinfo +import widgets.listedit +import widgets.urlrequester + + +def settings(): + s = QSettings() + s.beginGroup("lilypond_settings") + return s + + +class LilyPondPrefs(preferences.GroupsPage): + def __init__(self, dialog): + super(LilyPondPrefs, self).__init__(dialog) + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(Versions(self)) + layout.addWidget(Running(self)) + + +class Versions(preferences.Group): + def __init__(self, page): + super(Versions, self).__init__(page) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.instances = InfoList(self) + self.instances.changed.connect(self.changed) + self.instances.defaultButton.clicked.connect(self.defaultButtonClicked) + layout.addWidget(self.instances) + self.auto = QCheckBox(clicked=self.changed) + layout.addWidget(self.auto) + app.translateUI(self) + help.openWhatsThis(self) + + def defaultButtonClicked(self): + self._defaultCommand = self.instances.listBox.currentItem()._info.command + for item in self.instances.items(): + item.display() + self.changed.emit() + + def translateUI(self): + self.setTitle(_("LilyPond versions to use")) + self.auto.setText(_("Automatically choose LilyPond version from document")) + self.auto.setToolTip(_( + "If checked, the document's version determines the LilyPond version to use.\n" + "See \"What's This\" for more information.")) + self.auto.setWhatsThis(_( + "

If this setting is enabled, the document is searched for a " + "LilyPond \\version command or a version " + "document variable.

\n" + "

The LilyPond version command looks like:

\n" + "
\\version \"2.14.0\"
\n" + "

The document variable looks like:

\n" + "
-*- version: 2.14.0;
\n" + "

somewhere (in a comments section) in the first or last 5 lines " + "of the document. " + "This way the LilyPond version to use can also be specified in non-LilyPond " + "documents like HTML, LaTeX, etc.

\n" + "

If the document specifies a version, the oldest suitable LilyPond version " + "is chosen. Otherwise, the default version is chosen.

\n" + ) + + _("See also {link}.").format(link=help.contents.document_variables.link())) + + def loadSettings(self): + s = settings() + default = lilypondinfo.default() + self._defaultCommand = s.value("default", default.command) + self.auto.setChecked(s.value("autoversion", True) in (True, "true")) + infos = sorted(lilypondinfo.infos(), key=lambda i: i.version) + if not infos: + infos = [default] + items = [InfoItem(info) for info in infos] + self.instances.setItems(items) + for item in items: + if item._info.command == self._defaultCommand: + self.instances.setCurrentItem(item) + break + + def saveSettings(self): + infos = [item._info for item in self.instances.items()] + if infos: + for info in infos: + if info.command == self._defaultCommand: + break + else: + self._defaultCommand = infos[0].command + else: + infos = [lilypondinfo.default()] + self._defaultCommand = infos[0].command + s = settings() + s.setValue("default", self._defaultCommand) + s.setValue("autoversion", self.auto.isChecked()) + lilypondinfo.setinfos(infos) + lilypondinfo.saveinfos() + + +class InfoList(widgets.listedit.ListEdit): + def __init__(self, group): + self.defaultButton = QPushButton() + super(InfoList, self).__init__(group) + self.layout().addWidget(self.defaultButton, 3, 1) + self.layout().addWidget(self.listBox, 0, 0, 5, 1) + self.listBox.itemSelectionChanged.connect(self._selectionChanged) + + def _selectionChanged(self): + self.defaultButton.setEnabled(bool(self.listBox.currentItem())) + + def translateUI(self): + super(InfoList, self).translateUI() + self.defaultButton.setText(_("Set as &Default")) + + def infoDialog(self): + try: + return self._infoDialog + except AttributeError: + self._infoDialog = InfoDialog(self) + return self._infoDialog + + def createItem(self): + return InfoItem(lilypondinfo.LilyPondInfo("lilypond")) + + def openEditor(self, item): + dlg = self.infoDialog() + dlg.loadInfo(item._info) + was_default = item._info.command == self.parentWidget()._defaultCommand + if dlg.exec_(): + item._info = dlg.newInfo() + if was_default: + self.parentWidget()._defaultCommand = item._info.command + return True + return False + + def itemChanged(self, item): + item.display() + self.setCurrentItem(item) + + +class InfoItem(QListWidgetItem): + def __init__(self, info): + super(InfoItem, self).__init__() + self._info = info + + def display(self): + text = util.homify(self._info.command) + if self._info.version: + text += " ({0})".format(self._info.versionString) + self.setIcon(icons.get("lilypond-run")) + else: + self.setIcon(icons.get("dialog-error")) + if self._info.command == self.listWidget().parentWidget().parentWidget()._defaultCommand: + text += " [{0}]".format(_("default")) + self.setText(text) + + +class InfoDialog(QDialog): + def __init__(self, parent): + super(InfoDialog, self).__init__(parent) + + layout = QVBoxLayout() + layout.setSpacing(10) + self.setLayout(layout) + grid = QGridLayout() + grid.setSpacing(4) + layout.addLayout(grid) + + self.lilypond = widgets.urlrequester.UrlRequester() + self.lilypond.setFileMode(QFileDialog.ExistingFile) + self.lilypondLabel = l = QLabel() + l.setBuddy(self.lilypond) + grid.addWidget(l, 0, 0, 1, 2) + grid.addWidget(self.lilypond, 1, 0, 1, 2) + + self.convert_ly = QLineEdit() + self.convert_lyLabel = l = QLabel() + l.setBuddy(self.convert_ly) + grid.addWidget(l, 2, 0) + grid.addWidget(self.convert_ly, 2, 1) + + self.lilypond_book = QLineEdit() + self.lilypond_bookLabel = l = QLabel() + l.setBuddy(self.lilypond_book) + grid.addWidget(l, 3, 0) + grid.addWidget(self.lilypond_book, 3, 1) + + self.auto = QCheckBox() + grid.addWidget(self.auto, 4, 1) + + layout.addWidget(widgets.Separator()) + b = self.buttons = QDialogButtonBox(self) + layout.addWidget(b) + + b.setStandardButtons(QDialogButtonBox.Help | QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + b.accepted.connect(self.accept) + b.rejected.connect(self.reject) + app.translateUI(self) + + def translateUI(self): + self.setWindowTitle(app.caption(_("LilyPond"))) + self.lilypondLabel.setText(_("LilyPond Command:")) + self.lilypond.lineEdit.setToolTip(_("Name or full path of the LilyPond program.")) + self.convert_lyLabel.setText(_("Convert-ly:")) + self.lilypond_bookLabel.setText(_("LilyPond-book:")) + self.auto.setText(_("Include in automatic version selection")) + + def loadInfo(self, info): + """Takes over settings for the dialog from the LilyPondInfo object.""" + self.lilypond.setPath(info.command) + self.convert_ly.setText(info.convert_ly) + self.lilypond_book.setText(info.lilypond_book) + self.auto.setChecked(info.auto) + + def newInfo(self): + """Returns a new LilyPondInfo instance for our settings.""" + info = lilypondinfo.LilyPondInfo(self.lilypond.path()) + info.auto = self.auto.isChecked() + info.convert_ly = self.convert_ly.text() + info.lilypond_book = self.lilypond_book.text() + return info + + +class Running(preferences.Group): + def __init__(self, page): + super(Running, self).__init__(page) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.saveDocument = QCheckBox(clicked=self.changed) + self.deleteFiles = QCheckBox(clicked=self.changed) + self.includeLabel = QLabel() + self.include = widgets.listedit.FilePathEdit() + self.include.changed.connect(self.changed) + layout.addWidget(self.saveDocument) + layout.addWidget(self.deleteFiles) + layout.addWidget(self.includeLabel) + layout.addWidget(self.include) + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Running LilyPond")) + self.saveDocument.setText(_("Save document if possible")) + self.saveDocument.setToolTip(_( + "If checked, the document is saved when it is local and modified.\n" + "Otherwise a temporary file is used to run LilyPond.")) + self.deleteFiles.setText(_("Delete intermediate output files")) + self.deleteFiles.setToolTip(_( + "If checked, LilyPond will delete intermediate PostScript files.")) + self.includeLabel.setText(_("LilyPond include path:")) + + def loadSettings(self): + s = settings() + self.saveDocument.setChecked(s.value("save_on_run", False) in (True, "true")) + self.deleteFiles.setChecked(s.value("delete_intermediate_files", True) not in (False, "false")) + self.include.setValue(s.value("include_path", []) or []) + + def saveSettings(self): + s = settings() + s.setValue("save_on_run", self.saveDocument.isChecked()) + s.setValue("delete_intermediate_files", self.deleteFiles.isChecked()) + s.setValue("include_path", self.include.value()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/midi.py frescobaldi-2.0.0/frescobaldi_app/preferences/midi.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/midi.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/midi.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,157 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +MIDI preferences. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + + +import app +import util +import icons +import preferences +import midihub +import listmodel + + +class MidiPrefs(preferences.GroupsPage): + def __init__(self, dialog): + super(MidiPrefs, self).__init__(dialog) + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(MidiPorts(self)) + layout.addWidget(Prefs(self)) + layout.addStretch(0) + + def saveSettings(self): + super(MidiPrefs, self).saveSettings() + midihub.settingsChanged() + + +class MidiPorts(preferences.Group): + def __init__(self, page): + super(MidiPorts, self).__init__(page) + + self._portsMessage = QLabel(wordWrap=True) + self._playerLabel = QLabel() + self._playerPort = QComboBox(editable=True, + editTextChanged=self.changed, insertPolicy=QComboBox.NoInsert) + + self._reloadMidi = QPushButton(icon=icons.get('view-refresh')) + self._reloadMidi.clicked.connect(self.refreshMidiPorts) + + grid = QGridLayout() + self.setLayout(grid) + grid.addWidget(self._portsMessage, 0, 0, 1, 3) + grid.addWidget(self._playerLabel, 1, 0) + grid.addWidget(self._playerPort, 1, 1, 1, 2) + grid.addWidget(self._reloadMidi, 2, 2) + + app.translateUI(self) + self.loadMidiPorts() + + def translateUI(self): + self.setTitle(_("MIDI Ports")) + self._portsMessage.setText(_( + "Note: There are no MIDI output ports available on your system. " + "To use MIDI, please check if PortMIDI is installed on your system " + "and that a MIDI synthesizer is available or connected.")) + self._playerLabel.setText(_("Player output:")) + self._playerPort.setToolTip(_( + "The MIDI port to play music to. " + "See \"What's This\" for more information.")) + self._playerPort.setWhatsThis(_( + "

" + "This dropdown menu lists the available MIDI ports on your system. " + "You can select one, or just type part of a name. " + "In that case, the first available port name that starts with the " + "specified characters is used." + "

\n

" + "Click the button to refresh the list, e.g. when you connect a " + "MIDI device or start a software synthesizer." + "

")) + self._reloadMidi.setText(_("Refresh MIDI ports")) + + def loadMidiPorts(self): + output = midihub.output_ports() + self._playerPort.setModel(listmodel.ListModel(output)) + self._portsMessage.setVisible(not output) + + def refreshMidiPorts(self): + midihub.refresh_ports() + with util.signalsBlocked(self): + self.loadMidiPorts() + self.loadSettings() + + def loadSettings(self): + port = midihub.default_output() + s = QSettings() + s.beginGroup("midi") + self._playerPort.setEditText(s.value("player/output_port", port)) + + def saveSettings(self): + s = QSettings() + s.beginGroup("midi") + s.setValue("player/output_port", self._playerPort.currentText()) + + +class Prefs(preferences.Group): + def __init__(self, page): + super(Prefs, self).__init__(page) + + self._closeOutputs = QCheckBox(clicked=self.changed) + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(self._closeOutputs) + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Preferences")) + self._closeOutputs.setText(_("Close unused MIDI output")) + self._closeOutputs.setToolTip(_( + "Closes unused MIDI ports after one minute. " + "See \"What's This\" for more information.")) + self._closeOutputs.setWhatsThis(_( + "

If checked, Frescobaldi will close MIDI output ports that are not " + "used for one minute.

\n" + "

This could free up system resources that a software MIDI synthesizer " + "might be using, thus saving battery power.

\n" + "

A side effect is that if you pause a MIDI file for a long time " + "the instruments are reset to the default piano (instrument 0). " + "In that case, playing the file from the beginning sets up the " + "instruments again.

\n")) + + def loadSettings(self): + self._closeOutputs.setChecked( + QSettings().value("midi/close_outputs", False) in (True, 'true')) + + def saveSettings(self): + QSettings().setValue("midi/close_outputs", self._closeOutputs.isChecked()) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/paths.py frescobaldi-2.0.0/frescobaldi_app/preferences/paths.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/paths.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/paths.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,75 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Paths preferences page +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import widgets.listedit +import preferences + + +class Paths(preferences.GroupsPage): + def __init__(self, dialog): + super(Paths, self).__init__(dialog) + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(HyphenPaths(self)) + layout.addStretch(1) + + +class HyphenPaths(preferences.Group): + def __init__(self, page): + super(HyphenPaths, self).__init__(page) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.listedit = widgets.listedit.FilePathEdit() + self.listedit.changed.connect(self.changed) + layout.addWidget(self.listedit) + + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Folders containing hyphenation dictionaries")) + + def loadSettings(self): + s = QSettings() + s.beginGroup("hyphenation") + self.listedit.setValue(s.value("paths", []) or []) + + def saveSettings(self): + s = QSettings() + s.beginGroup("hyphenation") + paths = self.listedit.value() + if paths: + s.setValue("paths", paths) + else: + s.remove("paths") + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/shortcuts.py frescobaldi-2.0.0/frescobaldi_app/preferences/shortcuts.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/shortcuts.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/shortcuts.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,308 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Keyboard shortcuts settings page. +""" + +from __future__ import unicode_literals + +import itertools + +from PyQt4.QtCore import QSettings, Qt +from PyQt4.QtGui import ( + QAction, QKeySequence, QMessageBox, QPushButton, QTreeWidget, + QTreeWidgetItem, QVBoxLayout) + +import app +import actioncollection +import actioncollectionmanager +import icons +import preferences + +from widgets.shortcuteditdialog import ShortcutEditDialog +from widgets.schemeselector import SchemeSelector + +_lastaction = '' # last selected action name (saved during running but not on exit) + + +class Shortcuts(preferences.Page): + def __init__(self, dialog): + super(Shortcuts, self).__init__(dialog) + + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + + self.scheme = SchemeSelector(self) + layout.addWidget(self.scheme) + self.tree = QTreeWidget(self) + self.tree.setHeaderLabels([_("Command"), _("Shortcut")]) + self.tree.setRootIsDecorated(False) + self.tree.setColumnCount(2) + self.tree.setAllColumnsShowFocus(True) + self.tree.setAnimated(True) + layout.addWidget(self.tree) + + self.edit = QPushButton(icons.get("configure-shortcuts"), '') + layout.addWidget(self.edit) + + # signals + self.scheme.currentChanged.connect(self.slotSchemeChanged) + self.scheme.changed.connect(self.changed) + self.tree.currentItemChanged.connect(self.slotCurrentItemChanged) + self.tree.itemDoubleClicked.connect(self.editCurrentItem) + self.edit.clicked.connect(self.editCurrentItem) + + # make a dict of all actions with the actions as key and the names as + # value, with the collection prepended (for loading/saving) + win = dialog.parent() + allactions = {} + for collection in actioncollectionmanager.manager(win).actionCollections(): + for name, action in collection.actions().items(): + allactions[action] = (collection, name) + + # keep a list of actions not in the menu structure + left = allactions.keys() + + def childactions(menu): + for a in menu.actions(): + if a.menu(): + for a in childactions(a.menu()): + yield a + elif a in left: + yield a + left.remove(a) + + # present the actions nicely ordered as in the menus + for a in win.menuBar().actions(): + menuitem = QTreeWidgetItem() + menu = a.menu() + text = actioncollection.removeAccels(a.text()) + for a in childactions(menu): + menuitem.addChild(ShortcutItem(a, *allactions[a])) + if menuitem.childCount(): + menuitem.setText(0, _("Menu {name}:").format(name=text)) + self.tree.addTopLevelItem(menuitem) + menuitem.setExpanded(True) + menuitem.setFlags(Qt.ItemIsEnabled) # disable selection + + # sort leftover actions + left.sort(key=lambda i: i.text()) + + # show actions that are left, grouped by collection + titlegroups = {} + for a in left[:]: # copy + collection, name = allactions[a] + if collection.title(): + titlegroups.setdefault(collection.title(), []).append(a) + left.remove(a) + for title in sorted(titlegroups): + item = QTreeWidgetItem(["{0}:".format(title)]) + for a in titlegroups[title]: + item.addChild(ShortcutItem(a, *allactions[a])) + self.tree.addTopLevelItem(item) + item.setExpanded(True) + item.setFlags(Qt.ItemIsEnabled) # disable selection + + # show other actions that were not in the menus + item = QTreeWidgetItem([_("Other commands:")]) + for a in left: + if not a.menu(): + item.addChild(ShortcutItem(a, *allactions[a])) + if item.childCount(): + self.tree.addTopLevelItem(item) + item.setExpanded(True) + item.setFlags(Qt.ItemIsEnabled) # disable selection + + item = self.tree.topLevelItem(0).child(0) + if _lastaction: + # find the previously selected item + for i in self.items(): + if i.name == _lastaction: + item = i + break + self.tree.setCurrentItem(item) + self.tree.resizeColumnToContents(0) + + def items(self): + for i in range(self.tree.topLevelItemCount()): + top = self.tree.topLevelItem(i) + for j in range(top.childCount()): + yield top.child(j) + + def saveSettings(self): + self.scheme.saveSettings("shortcut_scheme", "shortcut_schemes", "shortcuts") + for item in self.items(): + for scheme in self.scheme.schemes(): + item.save(scheme) + item.clearSettings() + item.switchScheme(self.scheme.currentScheme()) + + def loadSettings(self): + self.scheme.loadSettings("shortcut_scheme", "shortcut_schemes") + # clear the settings in all the items + for item in self.items(): + item.clearSettings() + item.switchScheme(self.scheme.currentScheme()) + + def slotSchemeChanged(self): + """Called when the Scheme combobox is changed by the user.""" + for item in self.items(): + item.switchScheme(self.scheme.currentScheme()) + + def slotCurrentItemChanged(self, item): + if isinstance(item, ShortcutItem): + self.edit.setText( + _("&Edit Shortcut for \"{name}\"").format(name=item.text(0))) + self.edit.setEnabled(True) + global _lastaction + _lastaction = item.name + else: + self.edit.setText(_("(no shortcut)")) + self.edit.setEnabled(False) + + def editCurrentItem(self): + item = self.tree.currentItem() + if not isinstance(item, ShortcutItem): + return + try: + dlg = self._editdialog + except AttributeError: + dlg = self._editdialog = ShortcutEditDialog(self) + scheme = self.scheme.currentScheme() + action = item.action(scheme) + default = item.defaultShortcuts() + if dlg.editAction(action, default): + shortcuts = action.shortcuts() + # check for conflicts + conflicting = [] + for i in self.items(): + if i is not item: + for s1, s2 in itertools.product(i.shortcuts(scheme), shortcuts): + if s1.matches(s2) or s2.matches(s1): + conflicting.append(i) + if conflicting: + # show a question dialog + msg = [_("This shortcut conflicts with the following command:", + "This shortcut conflicts with the following commands:", len(conflicting))] + msg.append('
'.join(i.text(0) for i in conflicting)) + msg.append(_("Remove the shortcut from that command?", + "Remove the shortcut from those commands?", len(conflicting))) + msg = '

{0}

'.format('

'.join(msg)) + res = QMessageBox.warning(self, _("Shortcut Conflict"), msg, + QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel) + if res == QMessageBox.Yes: + # remove from conflicting + for i in conflicting: + l = i.shortcuts(scheme) + for s1 in list(l): # copy + for s2 in shortcuts: + if s1.matches(s2) or s2.matches(s1): + l.remove(s1) + i.setShortcuts(l, scheme) + elif res == QMessageBox.No: + # remove from ourselves + for i in conflicting: + for s1 in list(shortcuts): # copy + for s2 in i.shortcuts(scheme): + if s1.matches(s2) or s2.matches(s1): + shortcuts.remove(s1) + else: + return # cancelled + # store the shortcut + item.setShortcuts(shortcuts, scheme) + self.changed.emit() + + +class ShortcutItem(QTreeWidgetItem): + def __init__(self, action, collection, name): + QTreeWidgetItem.__init__(self) + self.collection = collection + self.name = name + self.setIcon(0, action.icon()) + self.setText(0, actioncollection.removeAccels(action.text())) + self._shortcuts = {} + + def clearSettings(self): + self._shortcuts.clear() + + def action(self, scheme): + """Returns a new QAction that represents our item. + + The action contains the text, icon and current shortcut. + + """ + action = QAction(self.icon(0), self.text(0).replace('&', '&&'), None) + action.setShortcuts(self._shortcuts[scheme][0]) + return action + + def shortcuts(self, scheme): + """Returns the list of shortcuts currently set for scheme.""" + return list(self._shortcuts[scheme][0]) + + def setShortcuts(self, shortcuts, scheme): + default = shortcuts == self.defaultShortcuts() + self._shortcuts[scheme] = (shortcuts, default) + self.display(scheme) + + def defaultShortcuts(self): + """Returns a (possibly empty) list of QKeySequence objects. + + The list represents the default shortcut for this item, if any. + + """ + return self.collection.defaults().get(self.name, []) + + def switchScheme(self, scheme): + if scheme not in self._shortcuts: + s = QSettings() + key = "shortcuts/{0}/{1}/{2}".format(scheme, self.collection.name, self.name) + if s.contains(key): + self._shortcuts[scheme] = ([QKeySequence(v) for v in s.value(key) or []], False) + else: + # default + self._shortcuts[scheme] = (self.defaultShortcuts(), True) + self.display(scheme) + + def save(self, scheme): + try: + shortcuts, default = self._shortcuts[scheme] + except KeyError: + return + s =QSettings() + key = "shortcuts/{0}/{1}/{2}".format(scheme, self.collection.name, self.name) + if default: + s.remove(key) + else: + s.setValue(key, shortcuts) + + def display(self, scheme): + text = '' + shortcuts, default = self._shortcuts[scheme] + if shortcuts: + text = shortcuts[0].toString(QKeySequence.NativeText) + if len(shortcuts) > 1: + text += "..." + if default: + text += " " + _("(default)") + self.setText(1, text) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/preferences/tools.py frescobaldi-2.0.0/frescobaldi_app/preferences/tools.py --- frescobaldi-1.2.0/frescobaldi_app/preferences/tools.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/preferences/tools.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,233 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Per-tool preferences. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings, Qt +from PyQt4.QtGui import ( + QCheckBox, QDoubleSpinBox, QFont, QFontComboBox, QGridLayout, QHBoxLayout, + QLabel, QSlider, QSpinBox, QVBoxLayout) + +import app +import util +import preferences +import popplerview + + +class Tools(preferences.GroupsPage): + def __init__(self, dialog): + super(Tools, self).__init__(dialog) + + layout = QVBoxLayout() + self.setLayout(layout) + + layout.addWidget(LogTool(self)) + layout.addWidget(MusicView(self)) + layout.addWidget(CharMap(self)) + layout.addWidget(DocumentList(self)) + layout.addStretch(1) + + +class LogTool(preferences.Group): + def __init__(self, page): + super(LogTool, self).__init__(page) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.fontLabel = QLabel() + self.fontChooser = QFontComboBox(currentFontChanged=self.changed) + self.fontSize = QDoubleSpinBox(valueChanged=self.changed) + self.fontSize.setRange(6.0, 32.0) + self.fontSize.setSingleStep(0.5) + self.fontSize.setDecimals(1) + + box = QHBoxLayout() + box.addWidget(self.fontLabel) + box.addWidget(self.fontChooser, 1) + box.addWidget(self.fontSize) + layout.addLayout(box) + + self.showlog = QCheckBox(toggled=self.changed) + layout.addWidget(self.showlog) + + self.rawview = QCheckBox(toggled=self.changed) + layout.addWidget(self.rawview) + + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("LilyPond Log")) + self.fontLabel.setText(_("Font:")) + self.showlog.setText(_("Show log when a job is started")) + self.rawview.setText(_("Display plain log output")) + self.rawview.setToolTip(_( + "If checked, Frescobaldi will not shorten filenames in the log output.""")) + + def loadSettings(self): + s = QSettings() + s.beginGroup("log") + font = QFont(s.value("fontfamily", "monospace")) + font.setPointSizeF(float(s.value("fontsize", 9.0))) + with util.signalsBlocked(self.fontChooser, self.fontSize): + self.fontChooser.setCurrentFont(font) + self.fontSize.setValue(font.pointSizeF()) + self.showlog.setChecked(s.value("show_on_start", True) not in (False, "false")) + self.rawview.setChecked(s.value("rawview", True) not in (False, "false")) + + def saveSettings(self): + s = QSettings() + s.beginGroup("log") + s.setValue("fontfamily", self.fontChooser.currentFont().family()) + s.setValue("fontsize", self.fontSize.value()) + s.setValue("show_on_start", self.showlog.isChecked()) + s.setValue("rawview", self.rawview.isChecked()) + + +class MusicView(preferences.Group): + def __init__(self, page): + super(MusicView, self).__init__(page) + + layout = QGridLayout() + self.setLayout(layout) + + self.magnifierSizeLabel = QLabel() + self.magnifierSizeSlider = QSlider(Qt.Horizontal, valueChanged=self.changed) + self.magnifierSizeSlider.setSingleStep(50) + self.magnifierSizeSlider.setRange(*popplerview.MagnifierSettings.sizeRange) + self.magnifierSizeSpinBox = QSpinBox() + self.magnifierSizeSpinBox.setRange(*popplerview.MagnifierSettings.sizeRange) + self.magnifierSizeSpinBox.valueChanged.connect(self.magnifierSizeSlider.setValue) + self.magnifierSizeSlider.valueChanged.connect(self.magnifierSizeSpinBox.setValue) + layout.addWidget(self.magnifierSizeLabel, 0, 0) + layout.addWidget(self.magnifierSizeSlider, 0, 1) + layout.addWidget(self.magnifierSizeSpinBox, 0, 2) + + self.magnifierScaleLabel = QLabel() + self.magnifierScaleSlider = QSlider(Qt.Horizontal, valueChanged=self.changed) + self.magnifierScaleSlider.setSingleStep(50) + self.magnifierScaleSlider.setRange(*popplerview.MagnifierSettings.scaleRange) + self.magnifierScaleSpinBox = QSpinBox() + self.magnifierScaleSpinBox.setRange(*popplerview.MagnifierSettings.scaleRange) + self.magnifierScaleSpinBox.valueChanged.connect(self.magnifierScaleSlider.setValue) + self.magnifierScaleSlider.valueChanged.connect(self.magnifierScaleSpinBox.setValue) + layout.addWidget(self.magnifierScaleLabel, 1, 0) + layout.addWidget(self.magnifierScaleSlider, 1, 1) + layout.addWidget(self.magnifierScaleSpinBox, 1, 2) + + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Music View")) + self.magnifierSizeLabel.setText(_("Magnifier Size:")) + self.magnifierSizeLabel.setToolTip(_( + "Size of the magnifier glass (Ctrl+Click in the Music View).")) + # L10N: as in "400 pixels", appended after number in spinbox, note the leading space + self.magnifierSizeSpinBox.setSuffix(_(" pixels")) + self.magnifierScaleLabel.setText(_("Magnifier Scale:")) + self.magnifierScaleLabel.setToolTip(_( + "Magnification of the magnifier.")) + self.magnifierScaleSpinBox.setSuffix(_("percent unit sign", "%")) + + def loadSettings(self): + s = popplerview.MagnifierSettings.load() + self.magnifierSizeSlider.setValue(s.size) + self.magnifierScaleSlider.setValue(s.scale) + + def saveSettings(self): + s = popplerview.MagnifierSettings() + s.size = self.magnifierSizeSlider.value() + s.scale = self.magnifierScaleSlider.value() + s.save() + + +class CharMap(preferences.Group): + def __init__(self, page): + super(CharMap, self).__init__(page) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.fontLabel = QLabel() + self.fontChooser = QFontComboBox(currentFontChanged=self.changed) + self.fontSize = QDoubleSpinBox(valueChanged=self.changed) + self.fontSize.setRange(6.0, 32.0) + self.fontSize.setSingleStep(0.5) + self.fontSize.setDecimals(1) + + box = QHBoxLayout() + box.addWidget(self.fontLabel) + box.addWidget(self.fontChooser, 1) + box.addWidget(self.fontSize) + layout.addLayout(box) + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Special Characters")) + self.fontLabel.setText(_("Font:")) + + def loadSettings(self): + s = QSettings() + s.beginGroup("charmaptool") + font = self.font() + family = s.value("fontfamily", "") + if family: + font.setFamily(family) + font.setPointSizeF(float(s.value("fontsize", font.pointSizeF()))) + with util.signalsBlocked(self.fontChooser, self.fontSize): + self.fontChooser.setCurrentFont(font) + self.fontSize.setValue(font.pointSizeF()) + + def saveSettings(self): + s = QSettings() + s.beginGroup("charmaptool") + s.setValue("fontfamily", self.fontChooser.currentFont().family()) + s.setValue("fontsize", self.fontSize.value()) + + +class DocumentList(preferences.Group): + def __init__(self, page): + super(DocumentList, self).__init__(page) + + layout = QVBoxLayout() + self.setLayout(layout) + self.groupCheck = QCheckBox(toggled=self.changed) + layout.addWidget(self.groupCheck) + app.translateUI(self) + + def translateUI(self): + self.setTitle(_("Documents")) + self.groupCheck.setText(_("Group documents by directory")) + + def loadSettings(self): + s = QSettings() + s.beginGroup("document_list") + self.groupCheck.setChecked(s.value("group_by_folder", False) + in (True, "true")) + + def saveSettings(self): + s = QSettings() + s.beginGroup("document_list") + s.setValue("group_by_folder", self.groupCheck.isChecked()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/progress.py frescobaldi-2.0.0/frescobaldi_app/progress.py --- frescobaldi-1.2.0/frescobaldi_app/progress.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/progress.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,73 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages the progress bar in the status bar of ViewSpaces. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt, QTimeLine, QTimer +from PyQt4.QtGui import QProgressBar + +import app +import plugin +import jobmanager +import metainfo +import widgets.progressbar + +metainfo.define('buildtime', 0.0, float) + + +class ProgressBar(plugin.ViewSpacePlugin): + """A Simple progress bar to show a Job is running.""" + def __init__(self, viewSpace): + bar = self._bar = widgets.progressbar.TimedProgressBar() + bar.setMaximumHeight(14) + viewSpace.status.layout().addWidget(bar, 1) + bar.hide() + viewSpace.viewChanged.connect(self.viewChanged) + app.jobStarted.connect(self.jobStarted) + app.jobFinished.connect(self.jobFinished) + + def viewChanged(self, view): + self.showProgress(view.document()) + + def showProgress(self, document): + job = jobmanager.job(document) + if job and job.isRunning(): + buildtime = metainfo.info(document).buildtime + if not buildtime: + buildtime = 3.0 + document.blockCount() / 20 # very arbitrary estimate... + self._bar.start(buildtime, job.elapsed()) + else: + self._bar.stop(False) + + def jobStarted(self, document): + if document == self.viewSpace().document(): + self.showProgress(document) + + def jobFinished(self, document, job, success): + if document == self.viewSpace().document(): + self._bar.stop(success) + if success: + metainfo.info(document).buildtime = job.elapsed() + + +app.viewSpaceCreated.connect(ProgressBar.instance) diff -Nru frescobaldi-1.2.0/frescobaldi_app/qmidi/__init__.py frescobaldi-2.0.0/frescobaldi_app/qmidi/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/qmidi/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qmidi/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,24 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +MIDI stuff for Qt4. +""" + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qmidi/player.py frescobaldi-2.0.0/frescobaldi_app/qmidi/player.py --- frescobaldi-1.2.0/frescobaldi_app/qmidi/player.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qmidi/player.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,93 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A MIDI player for PyQt4. +""" + + +from __future__ import unicode_literals + + +from PyQt4.QtCore import pyqtSignal, Qt, QThread, QTimer + +import midifile.player + + +class Player(QThread, midifile.player.Player): + """An implementation of midifile.player.Player using a QThread and QTimer. + + emit signals: + + stateChanged(playing): + True or False if playing state changes + + time(msec): + The playing time, emit by default every 1000ms + + beat(measnum, beat, num, den): + the measure number, beat number, time signature numerator and denom., + where 0 = whole note, 1 = half note, 2 = quarter note, etc. + + """ + stateChanged = pyqtSignal(bool) + time = pyqtSignal(int) + beat = pyqtSignal(int, int, int, int) + + def __init__(self, parent=None): + QThread.__init__(self, parent) + midifile.player.Player.__init__(self) + self._timer = None + + def run(self): + self._timer = QTimer(singleShot=True) + self._timer.timeout.connect(self.timer_timeout, Qt.DirectConnection) + self.timer_start_playing() + self.stateChanged.emit(True) + if self.exec_(): + self.timer_stop_playing() + self._timer = None + self.stateChanged.emit(False) + + def start(self): + if self.has_events(): + QThread.start(self) + + def stop(self): + if self.isRunning(): + self.exit(1) + self.wait() + + def timer_start(self, msec): + """Starts the timer to fire once, the specified msec from now.""" + self._timer.start(int(msec)) + + def timer_stop(self): + self._timer.stop() + + def finish_event(self): + midifile.player.Player.finish_event(self) + self.exit(0) + + def time_event(self, time): + self.time.emit(time) + + def beat_event(self, measnum, beat, num, den): + self.beat.emit(measnum, beat, num, den) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/cache.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/cache.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/cache.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/cache.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,298 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +Caching of generated images. +""" + +import time +import weakref + +try: + import popplerqt4 +except ImportError: + from . import popplerqt4_dummy as popplerqt4 + +from PyQt4.QtCore import QThread + +from . import render +from . import rectangles +from .locking import lock + +__all__ = ['maxsize', 'setmaxsize', 'image', 'generate', 'clear', 'links', 'options'] + + +_cache = weakref.WeakKeyDictionary() +_schedulers = weakref.WeakKeyDictionary() +_options = weakref.WeakKeyDictionary() +_links = weakref.WeakKeyDictionary() + + +# cache size +_maxsize = 104857600 # 100M +_currentsize = 0 + +_globaloptions = None + + +def setmaxsize(maxsize): + """Sets the maximum cache size in Megabytes.""" + global _maxsize + _maxsize = maxsize * 1048576 + purge() + + +def maxsize(): + """Returns the maximum cache size in Megabytes.""" + return _maxsize / 1048576 + + +def clear(document=None): + """Clears the whole cache or the cache for the given Poppler.Document.""" + if document: + try: + del _cache[document] + except KeyError: + pass + else: + _cache.clear() + global _currentsize + _currentsize = 0 + + +def image(page, exact=True): + """Returns a rendered image for given Page if in cache. + + If exact is True (default), the function returns None if the exact size was + not in the cache. If exact is False, the function may return a temporary + rendering of the page scaled from a different size, if that was available. + + """ + document = page.document() + pageKey = (page.pageNumber(), page.rotation()) + sizeKey = (page.width(), page.height()) + + if exact: + try: + entry = _cache[document][pageKey][sizeKey] + except KeyError: + return + else: + entry[1] = time.time() + return entry[0] + try: + sizes = _cache[document][pageKey].keys() + except KeyError: + return + # find the closest size (assuming aspect ratio has not changed) + if sizes: + sizes.sort(key=lambda s: abs(1 - s[0] / float(page.width()))) + return _cache[document][pageKey][sizes[0]][0] + + +def generate(page): + """Schedule an image to be generated for the cache.""" + # Poppler-Qt4 crashes when different pages from a Document are rendered at the same time, + # so we schedule them to be run in sequence. + document = page.document() + try: + scheduler = _schedulers[document] + except KeyError: + scheduler = _schedulers[document] = Scheduler() + scheduler.schedulejob(page) + + +def add(image, document, pageNumber, rotation, width, height): + """(Internal) Adds an image to the cache.""" + pageKey = (pageNumber, rotation) + sizeKey = (width, height) + _cache.setdefault(document, {}).setdefault(pageKey, {})[sizeKey] = [image, time.time()] + + # maintain cache size + global _maxsize, _currentsize + _currentsize += image.byteCount() + if _currentsize > _maxsize: + purge() + + +def purge(): + """Removes old images from the cache to limit the space used. + + (Not necessary to call, as the cache will monitor its size automatically.) + + """ + # make a list of the images, sorted on time, newest first + images = iter(sorted(( + (time, document, pageKey, sizeKey, image.byteCount()) + for document, pageKeys in _cache.items() + for pageKey, sizeKeys in pageKeys.items() + for sizeKey, (image, time) in sizeKeys.items()), + reverse=True)) + + # sum the size of the newest images + global _maxsize, _currentsize + byteCount = 0 + for item in images: + byteCount += item[4] + if byteCount > _maxsize: + break + _currentsize = byteCount + # delete the other images + for time, document, pageKey, sizeKey, byteCount in images: + del _cache[document][pageKey][sizeKey] + + +def links(page): + """Returns a position-searchable list of the links in the page.""" + document, pageNumber = page.document(), page.pageNumber() + try: + return _links[document][pageNumber] + except KeyError: + with lock(document): + links = rectangles.Rectangles(document.page(pageNumber).links(), + lambda link: link.linkArea().normalized().getCoords()) + _links.setdefault(document, {})[pageNumber] = links + return links + + +def options(document=None): + """Returns a RenderOptions object for a document or the global one if no document is given.""" + global _globaloptions, _options + if document: + try: + return _options[document] + except KeyError: + result = _options[document] = render.RenderOptions() + return result + if not _globaloptions: + _globaloptions = render.RenderOptions() + # enable antialiasing by default + _globaloptions.setRenderHint(popplerqt4.Poppler.Document.Antialiasing | + popplerqt4.Poppler.Document.TextAntialiasing) + return _globaloptions + + +def setoptions(options, document=None): + """Sets a RenderOptions instance for the given document or as the global one if no document is given. + + Use None for the options to unset (delete) the options. + + """ + global _globaloptions, _options + if not document: + _globaloptions = options + elif options: + _options[document] = options + else: + try: + del _options[document] + except KeyError: + pass + + +class Scheduler(object): + """Manages running rendering jobs in sequence for a Document.""" + def __init__(self): + self._schedule = [] # order + self._jobs = {} # jobs on key + self._waiting = weakref.WeakKeyDictionary() # jobs on page + self._running = None + + def schedulejob(self, page): + """Creates or retriggers an existing Job. + + If a Job was already scheduled for the page, it is canceled. + The page's update() method will be called when the Job has completed. + + """ + # uniquely identify the image to be generated + key = (page.pageNumber(), page.rotation(), page.width(), page.height()) + try: + job = self._jobs[key] + except KeyError: + job = self._jobs[key] = Job(page) + job.key = key + else: + self._schedule.remove(job) + self._schedule.append(job) + self._waiting[page] = job + self.checkStart() + + def checkStart(self): + """Starts a job if none is running and at least one is waiting.""" + while self._schedule and not self._running: + job = self._schedule[-1] + document = job.document() + if document and job in self._waiting.values(): + self._running = Runner(self, document, job) + break + else: + self.done(job) + + def done(self, job): + """Called when the job has completed.""" + del self._jobs[job.key] + self._schedule.remove(job) + self._running = None + for page in list(self._waiting): + if self._waiting[page] is job: + page.update() + del self._waiting[page] + + +class Job(object): + """Simply contains data needed to create an image later.""" + def __init__(self, page): + self.document = weakref.ref(page.document()) + self.pageNumber = page.pageNumber() + self.rotation = page.rotation() + self.width = page.width() + self.height = page.height() + + +class Runner(QThread): + """Immediately runs a Job in a background thread.""" + def __init__(self, scheduler, document, job): + super(Runner, self).__init__() + self.scheduler = scheduler + self.job = job + self.document = document # keep reference now so that it does not die during this thread + self.finished.connect(self.slotFinished) + self.start() + + def run(self): + """Main method of this thread, called by Qt on start().""" + page = self.document.page(self.job.pageNumber) + pageSize = page.pageSize() + if self.job.rotation & 1: + pageSize.transpose() + xres = 72.0 * self.job.width / pageSize.width() + yres = 72.0 * self.job.height / pageSize.height() + with lock(self.document): + options().write(self.document) + options(self.document).write(self.document) + self.image = page.renderToImage(xres, yres, 0, 0, self.job.width, self.job.height, self.job.rotation) + + def slotFinished(self): + """Called when the thread has completed.""" + add(self.image, self.document, self.job.pageNumber, self.job.rotation, self.job.width, self.job.height) + self.scheduler.done(self.job) + self.scheduler.checkStart() + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/highlight.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/highlight.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/highlight.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/highlight.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,65 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +Highlight rectangular areas inside a Surface. +""" + +from PyQt4.QtGui import QApplication, QPainter, QPen + + +class Highlighter(object): + """A Highlighter can draw rectangles to highlight e.g. links in a Poppler.Document. + + An instance represents a certain type of highlighting, e.g. of a particular style. + The paintRects() method is called with a list of rectangles that need to be drawn. + + To implement different highlighting behaviour just inherit paintRects(). + The default implementation of paintRects() uses the color() method to get the + color to use and the lineWidth (default: 2) and radius (default: 3) class attributes. + + lineWidth specifies the thickness in pixels of the border drawn, + radius specifies the distance in pixels the border is drawn (by default with rounded corners) + around the area to be highlighted. + + """ + + lineWidth = 2 + radius = 3 + + def color(self): + """The default paintRects() method uses this method to return the color to use. + + By default the application's palette highlight color is returned. + + """ + return QApplication.palette().highlight().color() + + def paintRects(self, painter, rects): + """Override this method to implement different drawing behaviour.""" + pen = QPen(self.color()) + pen.setWidth(self.lineWidth) + painter.setPen(pen) + painter.setRenderHint(QPainter.Antialiasing, True) + rad = self.radius + for r in rects: + r.adjust(-rad, -rad, rad, rad) + painter.drawRoundedRect(r, rad, rad) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/__init__.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,107 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +This is a viewer widget for anything Poppler can display (PDF). + +It needs the Python binding to Poppler-Qt4: python-poppler-qt4 which provides +the popplerqt4 module. + +The View (see view.py) is a QScrollArea that uses a Surface (see surface.py) as +its widget. The Surface has a Layout (see layout.py) that positions Page +objects (see page.py). + +A Page represents a single page from a Poppler.Document. Its rect() method +contains the position and size to draw it. Its computeSize() method computes its +size, and the Layout is expected to set its position. A Page can be hidden from +the view using Page.setVisible(False). A Layout has no notion of a document, +only Pages. Every Page references the Poppler.Document it belongs to. + +So the long route to view a PDF document is: +- get a Poppler.Document instance (and set its rendering hints) +- create Page objects for every page you want to show +- add the Page objects to a Layout object (you can add pages from multiple PDF + documents in one layout) +- get a Surface object and use Surface.setPageLayout() to let the Surface use + our Layout +- create a View widget and use View.setSurface() to let it use our Surface. + +Of course there are some convenience shortcuts: +- View.load(document) loads all pages from a document in a default Layout +- Layout.load(document) also loads all page objects from a document + +The default Layout arranges all pages either vertically or horizontally, which +can be set using Layout.setOrientation(Qt.Vertical or Qt.Horizontal). + +The View supports four resizing modes: + +FixedScale = 0 (don't resize the pages if the View resizes) +FitWidth = 1 (fit pages in the width of the View) +FitHeight = 2 (fit pages in the height of the View) +FitBoth = 3 (fit the full page size in the View) + +The Layout.fit() method actually creates the layout described by the viewmode. +The default layout uses the largest Page to determine the "fit" size. +Specialized layouts can react in different ways to the view mode. + +View.setViewMode() is used to set the view mode, and View.setScale() automatically +sets the view mode to FixedScale. View emits viewModeChanged(mode) on mode change. + +View, Surface, (Abstract)Layout and Page can all be inherited from to build +more specialized Poppler viewers. + +The cache module implements in-memory caching for drawed Page images. +The images are rendered in a background thread. + +Furthermore, there is a printer module containing functions to create a PostScript +file of a Poppler.Document and a class to print a Poppler.Document to a QPrinter +using raster images. + +The Poppler library is not thread-safe, so when calling into Poppler for drawing +or getting other objects you can acuire a lock with lock(document) that blocks +till a possible running background job for that document has completed. +(Pending tasks will wait until the Qt eventloop is entered again.) + +""" + +# viewModes: +FixedScale = 0 +FitWidth = 1 +FitHeight = 2 +FitBoth = FitHeight | FitWidth + + +from .view import View +from .page import Page +from .layout import AbstractLayout, Layout +from .surface import Surface +from .render import RenderOptions +from .highlight import Highlighter +from .magnifier import Magnifier +from .locking import lock +from . import cache + + +__all__ = [ + 'FixedScale', 'FitWidth', 'FitHeight', 'FitBoth', + 'View', 'Page', 'AbstractLayout', 'Layout', 'Surface', + 'RenderOptions', 'Highlighter', 'Magnifier', + 'lock', 'cache', +] diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/layout.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/layout.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/layout.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/layout.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,361 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +Manages and positions a group of Page instances. +""" + +import weakref + +from PyQt4.QtCore import QObject, QPoint, QRect, QSize, Qt, pyqtSignal + +from . import page +from . import ( + # viewModes: + FixedScale, + FitWidth, + FitHeight, + FitBoth, +) + + +class AbstractLayout(QObject): + """Manages page.Page instances with a list-like api. + + You can iterate over the layout itself, which yields all Page instances. + You can also iterate over pages(), which only yields the Page instances + that are visible(). + + """ + + redraw = pyqtSignal(QRect) + changed = pyqtSignal() + scaleChanged = pyqtSignal(float) + + def __init__(self): + super(AbstractLayout, self).__init__() + self._pages = [] + self._size = QSize() + self._margin = 4 + self._spacing = 8 + self._scale = 1.0 + self._scaleChanged = False + self._dpi = (72, 72) + + def own(self, page): + """(Internal) Makes the page have ourselves as layout.""" + if page.layout(): + page.layout().remove(page) + page._layout = weakref.ref(self) + page.computeSize() + + def disown(self, page): + """(Internal) Removes ourselves as owner of the page.""" + page._layout = lambda: None + + def append(self, page): + self.own(page) + self._pages.append(page) + + def insert(self, position, page): + self.own(page) + self._pages.insert(position, page) + + def extend(self, pages): + for page in pages: + self.append(page) + + def remove(self, page): + self._pages.remove(page) + self.disown(page) + + def pop(self, index=None): + page = self._pages.pop(index) + self.disown(page) + return page + + def clear(self): + del self[:] + + def count(self): + return len(self._pages) + + def __len__(self): + return len(self._pages) + + def __nonzero__(self): + return True + + def __contains__(self, page): + return page in self._pages + + def __getitem__(self, item): + return self._pages[item] + + def __delitem__(self, item): + if isinstance(item, slice): + for page in self._pages[item]: + self.disown(page) + else: + self.disown(self._pages[item]) + del self._pages[item] + + def __setitem__(self, item, new): + if isinstance(item, slice): + old = self._pages[item] + self._pages[item] = new + for page in self._pages[item]: + self.own(page) + for page in old: + self.disown(page) + else: + self.disown(self._pages[item]) + self._pages[item] = new + self.own(new) + + def index(self, page): + """Returns the index at which the given Page can be found in our Layout.""" + return self._pages.index(page) + + def setSize(self, size): + """Sets our size. Mainly done after layouting.""" + self._size = size + + def size(self): + """Returns our size as QSize().""" + return self._size + + def width(self): + """Returns our width.""" + return self._size.width() + + def height(self): + """Returns our height.""" + return self._size.height() + + def setDPI(self, xdpi, ydpi=None): + """Sets our DPI in X and Y direction. If Y isn't given, uses the X value.""" + self._dpi = xdpi, ydpi or xdpi + for page in self: + page.computeSize() + + def dpi(self): + """Returns our DPI as a tuple(XDPI, YDPI).""" + return self._dpi + + def scale(self): + """Returns the scale (1.0 == 100%).""" + return self._scale + + def setScale(self, scale): + """Sets the scale (1.0 == 100%) of all our Pages.""" + if scale != self._scale: + self._scale = scale + for page in self: + page.setScale(scale) + self._scaleChanged = True + + def setPageWidth(self, width, sameScale=True): + """Sets the width of all pages. + + If sameScale is True (default), the largest page will be scaled to the given + width (minus margin). All pages will then be scaled to that scale. + If sameScale is False all pages will be scaled individually to the same width. + + """ + if sameScale and any(self.pages()): + self.setScale(self.widest().scaleForWidth(width)) + else: + for page in self: + page.setWidth(width) + + def setPageHeight(self, height, sameScale=True): + """Sets the height of all pages. + + If sameScale is True (default), the largest page will be scaled to the given + height (minus margin). All pages will then be scaled to that scale. + If sameScale is False all pages will be scaled individually to the same height. + + """ + if sameScale and any(self.pages()): + self.setScale(self.heighest().scaleForWidth(height)) + else: + for page in self: + page.setHeight(height) + + def setMargin(self, margin): + """Sets the margin around the pages in pixels.""" + self._margin = margin + + def margin(self): + """Returns the margin around the pages in pixels.""" + return self._margin + + def setSpacing(self, spacing): + """Sets the space between the pages in pixels.""" + self._spacing = spacing + + def spacing(self): + """Returns the space between the pages in pixels.""" + return self._spacing + + def fit(self, size, mode): + """Fits the layout in the given ViewMode.""" + if mode and any(self.pages()): + scales = [] + if mode & FitWidth: + scales.append(self.widest().scaleForWidth(size.width() - self.margin() * 2)) + if mode & FitHeight: + scales.append(self.heighest().scaleForHeight(size.height() - self.margin() * 2)) + self.setScale(min(scales)) + + def update(self): + """Performs the layouting (positions the Pages and adjusts our size).""" + self.reLayout() + if self._scaleChanged: + self.scaleChanged.emit(self._scale) + self._scaleChanged = False + self.changed.emit() + + def reLayout(self): + """This is called by update(). + + You must implement this method to position the Pages and adjust our size. + See Layout for a possible implementation. + + """ + pass + + def updatePage(self, page): + """Called by the Page when an image has been generated.""" + self.redraw.emit(page.rect()) + + def page(self, document, pageNumber): + """Returns the page (visible or not) from a Poppler.Document with page number. + + Returns None if that page is not available. + + """ + # Specific layouts may use faster algorithms to find the page. + try: + page = self[pageNumber] + except IndexError: + pass + else: + if page.document() == document: + return page + for page in self: + if page.document() == document and page.pageNumber() == pageNumber: + return page + + def pages(self): + """Yields our pages that are visible().""" + for page in self: + if page.visible(): + yield page + + def pageAt(self, point): + """Returns the page that contains the given QPoint.""" + # Specific layouts may use faster algorithms to find the page. + for page in self.pages(): + if page.rect().contains(point): + return page + + def pagesAt(self, rect): + """Yields the pages touched by the given QRect.""" + # Specific layouts may use faster algorithms to find the pages. + for page in self.pages(): + if page.rect().intersects(rect): + yield page + + def linkAt(self, point): + """Returns (page, link) if pos points to a Poppler.Link in a Page, else (None, None).""" + page = self.pageAt(point) + if page: + links = page.linksAt(point) + if links: + return page, links[0] + return None, None + + def widest(self): + """Returns the widest visible page (in its natural page size).""" + pages = list(self.pages()) + if pages: + return max(pages, key = lambda p: p.pageSize().width()) + + def heighest(self): + """Returns the heighest visible page (in its natural page size).""" + pages = list(self.pages()) + if pages: + return max(pages, key = lambda p: p.pageSize().height()) + + def maxWidth(self): + """Returns the width of the widest visible page.""" + page = self.widest() + return page.width() if page else 0 + + def maxHeight(self): + """Returns the height of the heighest visible page.""" + page = self.heighest() + return page.height() if page else 0 + + def load(self, document): + """Convenience mehod to load all the pages of the given Poppler.Document using page.Page().""" + self.clear() + for num in range(document.numPages()): + p = page.Page(document, num) + p.setScale(self._scale) + self.append(p) + + +class Layout(AbstractLayout): + """A basic layout that shows pages from right to left or top to bottom.""" + def __init__(self): + super(Layout, self).__init__() + self._orientation = Qt.Vertical + + def setOrientation(self, orientation): + """Sets our orientation to either Qt.Vertical or Qt.Horizontal.""" + self._orientation = orientation + + def orientation(self): + """Returns our orientation (either Qt.Vertical or Qt.Horizontal).""" + return self._orientation + + def reLayout(self): + """Orders our pages.""" + if self._orientation == Qt.Vertical: + width = self.maxWidth() + self._margin * 2 + top = self._margin + for page in self.pages(): + page.setPos(QPoint((width - page.width()) / 2, top)) + top += page.height() + self._spacing + top += self._margin - self._spacing + self.setSize(QSize(width, top)) + else: + height = self.maxHeight() + self._margin * 2 + left = self._margin + for page in self.pages(): + page.setPos(QPoint(left, (height - page.height()) / 2)) + left += page.width() + self._spacing + left += self._margin - self._spacing + self.setSize(QSize(left, height)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/locking.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/locking.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/locking.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/locking.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,47 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +Manages locking access (across threads) to Poppler.Document instances. +""" + +import threading +import weakref + +_locks = weakref.WeakKeyDictionary() +_lock = threading.RLock() + + +def lock(document): + """Returns a threading.RLock instance for the given Poppler.Document. + + Use: + + with lock(document): + do_something + + """ + with _lock: + try: + return _locks[document] + except KeyError: + res = _locks[document] = threading.RLock() + return res + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/magnifier.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/magnifier.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/magnifier.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/magnifier.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,150 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +The Magnifier magnifies a part of the displayed Poppler document. +""" + +import weakref + +from PyQt4.QtCore import QPoint, QRect +from PyQt4.QtGui import QPainter, QRegion, QWidget + +from . import cache + + +class Magnifier(QWidget): + """A Magnifier is added to a Surface with surface.setMagnifier(). + + It is shown when a mouse button is pressed together with a modifier + (by default Ctrl, see surface.py). + + Its size can be changed with resize() and the scale (defaulting to 4.0) + with setScale(). + + """ + def __init__(self, parent = None): + super(Magnifier, self).__init__(parent) + self._page= None + self.setScale(4.0) + self.resize(250, 250) + self.hide() + + def moveCenter(self, pos): + """Called by the surface, centers the widget on the given QPoint.""" + r = self.geometry() + r.moveCenter(pos) + self.setGeometry(r) + + def setScale(self, scale): + """Sets the scale, relative to the 100% size of a Page. + + Uses the dpi() from the layout (pageLayout()) of the surface. + + """ + self._scale = scale + self.update() + + def scale(self): + """Returns the scale, defaulting to 4.0 (=400%).""" + return self._scale + + def resizeEvent(self, ev): + """Called on resize, sets our circular mask.""" + self.setMask(QRegion(self.rect(), QRegion.Ellipse)) + + def paintEvent(self, ev): + """Called when paint is needed, finds out which page to magnify.""" + layout = self.parent().pageLayout() + pos = self.geometry().center() + page = layout.pageAt(pos) + if not page: + return + pagePos = pos - page.pos() + + newPage = Page(page, self._scale) + if newPage != self._page: + if self._page: + self._page.magnifier = None + self._page = newPage + self._page.magnifier = self + + relx = pagePos.x() / float(page.width()) + rely = pagePos.y() / float(page.height()) + + image = cache.image(self._page) + img_rect = QRect(self.rect()) + if not image: + cache.generate(self._page) + image = cache.image(self._page, False) + if image: + img_rect.setWidth(self.width() * image.width() / self._page.width()) + img_rect.setHeight(self.height() * image.height() / self._page.height()) + if image: + img_rect.moveCenter(QPoint(relx * image.width(), rely * image.height())) + QPainter(self).drawImage(self.rect(), image, img_rect) + + +class Page(object): + """A data structure describing a Page like page.Page. + + Has the methods the cache needs to create, store and find images + for our magnifier. + + """ + def __init__(self, page, scale): + """Creates Page, based on the page.Page object and the scale.""" + dpix, dpiy = page.layout().dpi() + size = page.pageSize() + self._document = weakref.ref(page.document()) + self._pageNumber = page.pageNumber() + self._width = size.width() * dpix * scale / 72.0 + self._height = size.height() * dpiy * scale / 72.0 + self._rotation = page.rotation() + self.magnifier = None + + def __eq__(self, other): + return ( + self._document() == other._document() and + self._pageNumber == other._pageNumber and + self._width == other._width and + self._height == other._height and + self._rotation == other._rotation + ) + + def document(self): + return self._document() + + def pageNumber(self): + return self._pageNumber + + def width(self): + return self._width + + def height(self): + return self._height + + def rotation(self): + return self._rotation + + def update(self): + if self.magnifier: + self.magnifier.update() + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/page.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/page.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/page.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/page.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,313 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +A Page is resposible for drawing a page of a Poppler document +inside a layout. +""" + +try: + import popplerqt4 +except ImportError: + from . import popplerqt4_dummy as popplerqt4 + +from PyQt4.QtCore import QRect, QRectF, QSize + +from . import cache +from .locking import lock + + +class Page(object): + """Represents a page from a Poppler.Document. + + It maintains its own size and can draw itself using the cache. + It also can maintain a list of links and return links at certain + points or rectangles. + + The visible attribute (setVisible and visible) defaults to True but + can be set to False to hide the page from a Surface (this is done by + the Layout). + + """ + def __init__(self, document, pageNumber): + self._document = document + self._pageNumber = pageNumber + self._pageSize = document.page(pageNumber).pageSize() + self._rotation = popplerqt4.Poppler.Page.Rotate0 + self._rect = QRect() + self._scale = 1.0 + self._visible = True + self._layout = lambda: None + self._waiting = True # whether image still needs to be generated + + def document(self): + """Returns the document.""" + return self._document + + def pageNumber(self): + """Returns the page number.""" + return self._pageNumber + + def pageSize(self): + """The page size in points (1/72 inch), taking rotation into account.""" + return self._pageSize + + def layout(self): + """Returns the Layout if we are part of one.""" + return self._layout() + + def visible(self): + """Returns True if this page is visible (will be displayed).""" + return self._visible + + def setVisible(self, visible): + """Sets whether this page is visible (will be displayed).""" + self._visible = visible + + def rect(self): + """Returns our QRect(), with position and size.""" + return self._rect + + def size(self): + """Returns our size.""" + return self._rect.size() + + def height(self): + """Returns our height.""" + return self._rect.height() + + def width(self): + """Returns our width.""" + return self._rect.width() + + def pos(self): + """Returns our position.""" + return self._rect.topLeft() + + def setPos(self, point): + """Sets our position (affects the Layout).""" + self._rect.moveTopLeft(point) + + def setRotation(self, rotation): + """Sets our Poppler.Page.Rotation.""" + old, self._rotation = self._rotation, rotation + if (old ^ rotation) & 1: + self._pageSize.transpose() + self.computeSize() + + def rotation(self): + """Returns our rotation.""" + return self._rotation + + def computeSize(self): + """Recomputes our size.""" + xdpi, ydpi = self.layout().dpi() if self.layout() else (72.0, 72.0) + x = round(self._pageSize.width() * xdpi / 72.0 * self._scale) + y = round(self._pageSize.height() * ydpi / 72.0 * self._scale) + self._rect.setSize(QSize(x, y)) + + def setScale(self, scale): + """Changes the display scale.""" + self._scale = scale + self.computeSize() + + def scale(self): + """Returns our display scale.""" + return self._scale + + def scaleForWidth(self, width): + """Returns the scale we need to display ourselves at the given width.""" + if self.layout(): + return width * 72.0 / self.layout().dpi()[0] / self._pageSize.width() + else: + return float(width) / self._pageSize.width() + + def scaleForHeight(self, height): + """Returns the scale we need to display ourselves at the given width.""" + if self.layout(): + return height * 72.0 / self.layout().dpi()[1] / self._pageSize.height() + else: + return float(height) / self._pageSize.height() + + def setWidth(self, width): + """Change our scale to force our width to the given value.""" + self.setScale(self.scaleForWidth(width)) + + def setHeight(self, height): + """Change our scale to force our height to the given value.""" + self.setScale(self.scaleForHeight(height)) + + def paint(self, painter, rect): + update_rect = rect & self.rect() + if not update_rect: + return + image_rect = QRect(update_rect.topLeft() - self.rect().topLeft(), update_rect.size()) + image = cache.image(self) + self._waiting = not image + if image: + painter.drawImage(update_rect, image, image_rect) + else: + # schedule an image to be generated, if done our update() method is called + cache.generate(self) + # find suitable image to be scaled from other size + image = cache.image(self, False) + if image: + hscale = float(image.width()) / self.width() + vscale = float(image.height()) / self.height() + image_rect = QRectF(image_rect.x() * hscale, image_rect.y() * vscale, + image_rect.width() * hscale, image_rect.height() * vscale) + painter.drawImage(QRectF(update_rect), image, image_rect) + else: + # draw blank paper, using the background color of the cache rendering (if set) + # or from the document itself. + color = (cache.options(self.document()).paperColor() + or cache.options().paperColor() or self.document().paperColor()) + painter.fillRect(update_rect, color) + + def update(self): + """Called when an image is drawn.""" + # only redraw when we were waiting for a correctly sized image. + if self._waiting and self.layout(): + self.layout().updatePage(self) + + def repaint(self): + """Call this to force a repaint (e.g. when the rendering options are changed).""" + self._waiting = True + cache.generate(self) + + def image(self, rect, xdpi=72.0, ydpi=None, options=None): + """Returns a QImage of the specified rectangle (relative to our layout). + + xdpi defaults to 72.0 and ydpi defaults to xdpi. + options may be a render.RenderOptions instance that will set some document + rendering options just before rendering the image. + """ + rect = rect.normalized().intersected(self.rect()) + if not rect: + return + rect.translate(-self.pos()) + if ydpi is None: + ydpi = xdpi + hscale = (xdpi * self.pageSize().width()) / (72.0 * self.width()) + vscale = (ydpi * self.pageSize().height()) / (72.0 * self.height()) + x = rect.x() * hscale + y = rect.y() * vscale + w = rect.width() * hscale + h = rect.height() * vscale + with lock(self.document()): + options and options.write(self.document()) + page = self.document().page(self._pageNumber) + return page.renderToImage(xdpi, ydpi, x, y, w, h, self._rotation) + + def linksAt(self, point): + """Returns a list() of zero or more links touched by point (relative to surface). + + The list is sorted with the smallest rectangle first. + + """ + # Poppler.Link objects have their linkArea() ranging in width and height + # from 0.0 to 1.0, so divide by resp. height and width of the Page. + point = point - self.pos() + x = float(point.x()) / self.width() + y = float(point.y()) / self.height() + # rotate + if self._rotation: + if self._rotation == popplerqt4.Poppler.Page.Rotate90: + x, y = y, 1-x + elif self._rotation == popplerqt4.Poppler.Page.Rotate180: + x, y = 1-x, 1-y + else: # 270 + x, y = 1-y, x + return list(sorted(cache.links(self).at(x, y), key=lambda link: link.linkArea().width())) + + def linksIn(self, rect): + """Returns an unordered set() of links enclosed in rectangle (relative to surface).""" + rect = rect.normalized() + rect.translate(-self.pos()) + left = float(rect.left()) / self.width() + top = float(rect.top()) / self.height() + right = float(rect.right()) / self.width() + bottom = float(rect.bottom()) / self.height() + # rotate + if self._rotation: + if self._rotation == popplerqt4.Poppler.Page.Rotate90: + left, top, right, bottom = top, 1-right, bottom, 1-left + elif self._rotation == popplerqt4.Poppler.Page.Rotate180: + left, top, right, bottom = 1-right, 1-bottom, 1-left, 1-top + else: # 270 + left, top, right, bottom = 1-bottom, left, 1-top, right + return cache.links(self).inside(left, top, right, bottom) + + def linkRect(self, linkarea): + """Returns a QRect encompassing the linkArea (of a link) in coordinates of our rect().""" + left, top, right, bottom = linkarea.normalized().getCoords() + # rotate + if self._rotation: + if self._rotation == popplerqt4.Poppler.Page.Rotate90: + left, top, right, bottom = 1-bottom, left, 1-top, right + elif self._rotation == popplerqt4.Poppler.Page.Rotate180: + left, top, right, bottom = 1-right, 1-bottom, 1-left, 1-top + else: # 270 + left, top, right, bottom = top, 1-right, bottom, 1-left + rect = QRect() + rect.setCoords(left * self.width(), top * self.height(), right * self.width(), bottom * self.height()) + rect.translate(self.pos()) + return rect + + def text(self, rect): + """Returns text inside rectangle (relative to surface).""" + rect = rect.normalized() + rect.translate(-self.pos()) + w, h = self.pageSize().width(), self.pageSize().height() + left = float(rect.left()) / self.width() * w + top = float(rect.top()) / self.height() * h + right = float(rect.right()) / self.width() * w + bottom = float(rect.bottom()) / self.height() * h + if self._rotation: + if self._rotation == popplerqt4.Poppler.Page.Rotate90: + left, top, right, bottom = top, w-right, bottom, w-left + elif self._rotation == popplerqt4.Poppler.Page.Rotate180: + left, top, right, bottom = w-right, h-bottom, w-left, h-top + else: # 270 + left, top, right, bottom = h-bottom, left, h-top, right + rect = QRectF() + rect.setCoords(left, top, right, bottom) + with lock(self.document()): + page = self.document().page(self._pageNumber) + return page.text(rect) + + def searchRect(self, rectF): + """Returns a QRect encompassing the given rect (in points) to our position, size and rotation.""" + rect = rectF.normalized() + left, top, right, bottom = rect.getCoords() + w, h = self.pageSize().width(), self.pageSize().height() + hscale = self.width() / float(w) + vscale = self.height() / float(h) + if self._rotation: + if self._rotation == popplerqt4.Poppler.Page.Rotate90: + left, top, right, bottom = w-bottom, left, w-top, right + elif self._rotation == popplerqt4.Poppler.Page.Rotate180: + left, top, right, bottom = w-right, h-bottom, w-left, h-top + else: # 270 + left, top, right, bottom = top, h-right, bottom, h-left + rect = QRect() + rect.setCoords(left * hscale, top * vscale, right * hscale, bottom * vscale) + return rect + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/popplerqt4_dummy.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/popplerqt4_dummy.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/popplerqt4_dummy.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/popplerqt4_dummy.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,95 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +A dummy module containing a few of the definitions in popplerqt4. + +This is imported if the real popplerqt4 is not available and makes it +possible to import qpopplerview, although it can't do anything useful. + +It only contains class definitions that define a namespace, enums or other +constants. Classes can't be instantiated and have no member functions. + +""" + + +__all__ = ["Poppler"] + + +class _noinst(object): + """A class that can't be instantiated.""" + def __new__(cls, *args, **kwargs): + raise TypeError, "can't instantiate %s" % cls.__name__ + + +class Poppler(_noinst): + class Document(_noinst): + def load(filename): pass + def loadFromData(data): pass + class RenderHint(int): pass + Antialiasing = RenderHint(1) + TextAntialiasing = RenderHint(2) + TextHinting = RenderHint(4) + + class Page(_noinst): + class Orientation(int): pass + Landscape = Orientation(0) + Portrait = Orientation(1) + Seascape = Orientation(2) + UpsideDown = Orientation(3) + + class PageAction(int): pass + Opening = PageAction(0) + Closing = PageAction(1) + + class PainterFlag(int): pass + DontSaveAndRestore = PainterFlag(1) + + class Rotation(int): pass + Rotate0 = Rotation(0) + Rotate90 = Rotation(1) + Rotate180 = Rotation(2) + Rotate270 = Rotation(3) + + class SearchDirection(int): pass + NextResult = SearchDirection(0) + PreviousResult = SearchDirection(1) + + class SearchMode(int): pass + CaseSensitive = SearchMode(0) + CaseInsensitive = SearchMode(1) + + class TextLayout(int): pass + PhysicalLayout = TextLayout(0) + RawOrderLayout = TextLayout(1) + + + class LinkDestination(_noinst): pass + + class Link(_noinst): pass + class LinkAction(Link): pass + class LinkAnnotation(Link):pass + class LinkBrowse(Link): pass + class LinkExecute(Link): pass + class LinkGoto(Link): pass + class LinkJavaScript(Link): pass + class LinkSound(Link): pass + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/printer.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/printer.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/printer.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/printer.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,204 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +Printing functionality. +""" + +from PyQt4.QtCore import QFile, QIODevice, Qt +from PyQt4.QtGui import QColor, QPainter, QPrinter + +from .locking import lock +from . import render + + +def psfile(doc, printer, output, pageList=None, margins=(0, 0, 0, 0)): + """Writes a PostScript rendering of a Poppler::Document to the output. + + doc: a Poppler::Document instance + printer: a QPrinter instance from which the papersize is read + output: a filename or opened QIODevice (will not be closed) + pageList: a list of page numbers. By default the pagerange is read + from the QPrinter instance. Page numbers start with 1. + margins: a sequence of four values describing the margins (left, top, right, + bottom) in Point (1/72 inch), all defaulting to 0. + + Returns True on success, False on error. + + """ + if pageList is None: + if (printer.printRange() == QPrinter.AllPages + or (printer.fromPage() == 0 and printer.toPage() == 0)): + pageList = list(range(1, doc.numPages() + 1)) + else: + pageList = list(range(max(printer.fromPage(), 1), min(printer.toPage(), doc.numPages()) + 1)) + else: + for num in pageList: + if num < 1 or num > doc.numPages(): + raise ValueError, "invalid page number: {0}".format(num) + + ps = doc.psConverter() + ps.setPageList(pageList) + + if isinstance(output, QIODevice): + ps.setOutputDevice(output) + else: + ps.setOutputFileName(output) + + paperSize = printer.paperSize(QPrinter.Point) + ps.setPaperHeight(paperSize.height()) + ps.setPaperWidth(paperSize.width()) + + left, top, right, bottom = margins + ps.setLeftMargin(left) + ps.setTopMargin(top) + ps.setRightMargin(right) + ps.setBottomMargin(bottom) + + with lock(doc): + return ps.convert() + + +class Printer(object): + """Prints a Poppler.Document to a QPrinter. + + This is currently done using raster images at (by default) 300 DPI, + because the Arthur backend of Poppler (that can render to a painter) + does not work correctly in all cases and is not well supported by + the Poppler developers at this time. + + """ + def __init__(self): + self._stop = False + self._resolution = 300 + self._document = None + self._printer = None + opts = render.RenderOptions() + opts.setRenderHint(0) + opts.setPaperColor(QColor(Qt.white)) + self.setRenderOptions(opts) + + def setDocument(self, document): + """Sets the Poppler.Document to print (mandatory).""" + self._document = document + + def document(self): + """Returns the previously set Poppler.Document.""" + return self._document + + def setPrinter(self, printer): + """Sets the QPrinter to print to (mandatory).""" + self._printer = printer + + def printer(self): + """Returns the previously set QPrinter.""" + return self._printer + + def setResolution(self, dpi): + """Sets the resolution in dots per inch.""" + self._resolution = dpi + + def resolution(self): + """Returns the resolution in dots per inch.""" + return self._resolution + + def setRenderOptions(self, options): + """Sets the render options (see render.py).""" + self._renderoptions = options + + def renderOptions(self): + """Returns the render options (see render.py). + + By default, all antialiasing is off and the papercolor is white. + + """ + return self._renderoptions + + def pageList(self): + """Should return a list of desired page numbers (starting with 1). + + The default implementation reads the pages from the QPrinter. + + """ + p = self.printer() + if (p.printRange() == QPrinter.AllPages + or (p.fromPage() == 0 and p.toPage() == 0)): + pages = range(1, self.document().numPages() + 1) + else: + pages = range(max(p.fromPage(), 1), min(p.toPage(), self.document().numPages()) + 1) + return list(pages) + + def print_(self): + """Prints the document.""" + self._stop = False + resolution = self.resolution() + p = self.printer() + p.setFullPage(True) + p.setResolution(resolution) + + center = p.paperRect().center() + painter = QPainter(p) + + pages = self.pageList() + if p.pageOrder() != QPrinter.FirstPageFirst: + pages.reverse() + + total = len(pages) + + opts = self.renderOptions() + document = self.document() + + for num, pageNum in enumerate(pages, 1): + if self._stop: + return p.abort() + self.progress(num, total, pageNum) + if num > 1: + p.newPage() + with lock(document): + opts.write(document) + page = document.page(pageNum - 1) + img = page.renderToImage(resolution, resolution) + rect = img.rect() + rect.moveCenter(center) + painter.drawImage(rect, img) + + return painter.end() + + def abort(self): + """Instructs the printer to cancel the job.""" + self._stop = True + + def aborted(self): + """Returns whether abort() was called.""" + return self._stop + + def progress(self, num, total, pageNumber): + """Called when printing a page. + + num: counts the pages (starts with 1) + total: the total number of pages + pageNumber: the page number in the document (starts also with 1) + + The default implementation does nothing. + + """ + pass + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/rectangles.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/rectangles.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/rectangles.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/rectangles.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,205 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +Manages lists of rectangular objects and quickly finds them. +""" + +import bisect + + +Left = 0 +Top = 1 +Right = 2 +Bottom = 3 + + +class Rectangles(object): + """ + Manages a list of rectangular objects and quickly finds objects at + some point, in some rectangle or intersecting some rectangle. + + The implementation uses four lists of the objects sorted on either + coordinate, so retrieval is fast. + + Bulk adding is done in the constructor or via the bulk_add() method (which + clears the indexes, that are recreated on first search). Single objects + can be added and deleted, keeping the indexes, but that's slower. + + """ + _func = lambda obj: obj.rect().normalized().getCoords() + + def __init__(self, objects=None, func=None): + """Initializes the Rectangles object. + + objects should be an iterable of rectangular objects. + + function(obj) should return a four-tuple (left, top, right, bottom) + of the coordinates of the rectangle. The coordinates should be normalized, + i.e. top <= bottom and left <= right. + + The default function is: lambda obj: obj.rect().normalized().getCoords() + + """ + self._items = {} # maps object to the result of func(object) + self._index = {} # maps side to indices, objects (index=coordinate of that side) + if func: + self._func = func + if objects: + self.bulk_add(objects) + + def add(self, obj): + """Adds an object to our list. Keeps the index intact.""" + if obj in self._items: + return + self._items[obj] = coords = self._func(obj) + for side, (indices, objects) in self._index.items(): + i = bisect.bisect_left(indices, coords[side]) + indices.insert(i, coords[side]) + objects.insert(i, obj) + + def bulk_add(self, objects): + """Adds many new items to the index using the function given in the constructor. + + After this, the index is cleared and recreated on the first search operation. + + """ + self._items.update((obj, self._func(obj)) for obj in objects) + self._index.clear() + + def remove(self, obj): + """Removes an object from our list. Keeps the index intact.""" + del self._items[obj] + for indices, objects in self._index.values(): + i = objects.index(obj) + del objects[i] + del indices[i] + + def clear(self): + """Empties the list of items.""" + self._items.clear() + self._index.clear() + + def at(self, x, y): + """Returns a set() of objects that are touched by the given point.""" + return self._test( + (self._smaller, Top, y), + (self._larger, Bottom, y), + (self._smaller, Left, x), + (self._larger, Right, x)) + + def inside(self, left, top, right, bottom): + """Returns a set() of objects that are fully in the given rectangle.""" + return self._test( + (self._larger, Top, top), + (self._smaller, Bottom, bottom), + (self._larger, Left, left), + (self._smaller, Right, right)) + + def intersecting(self, left, top, right, bottom): + """Returns a set() of objects intersecting the given rectangle.""" + return self._test( + (self._smaller, Top, bottom), + (self._larger, Bottom, top), + (self._smaller, Left, right), + (self._larger, Right, left)) + + def closest(self, obj, side): + """Returns the object closest to the given one, going to the given side.""" + coords = self._items[obj] + pos = coords[side^2] + lat = (coords[side^1|2] - coords[side^1&2]) / 2.0 + direction = -1 if side < Right else 1 + indices, objects = self._sorted(side^2) + i = objects.index(obj) + mindist = indices[-1] + result = [] + for other in objects[i+direction::direction]: + coords = self._items[other] + pos1 = coords[side^2] + d = abs(pos1 - pos) + if d > mindist: + break + lat1 = (coords[side^1|2] - coords[side^1&2]) / 2.0 + dlat = abs(lat1 - lat) + if dlat < d: + dist = dlat + d # manhattan dist + result.append((other, dist)) + mindist = min(mindist, dist) + if result: + result.sort(key=lambda r: r[1]) + return result[0][0] + + def __len__(self): + return len(self._items) + + def __contains__(self, obj): + return obj in self._items + + def __nonzero__(self): + return bool(self._items) + + # private helper methods + def _test(self, *tests): + """Performs tests and returns objects that fulfill all of them. + + Every test should be a three tuple(method, side, value). + Method is either self._smaller or self._larger. + Returns a (possibly empty) set. + + """ + result = None + for meth, side, value in tests: + objects = meth(side, value) + if not result: + result = set(objects) + else: + result &= set(objects) + if not result: + break + return result + + def _smaller(self, side, value): + """Returns objects for side below value.""" + indices, objects = self._sorted(side) + i = bisect.bisect_right(indices, value) + return objects[:i] + + def _larger(self, side, value): + """Returns objects for side above value.""" + indices, objects = self._sorted(side) + i = bisect.bisect_left(indices, value) + return objects[i:] + + def _sorted(self, side): + """Returns a two-tuple (indices, objects) sorted on index for the given side.""" + try: + return self._index[side] + except KeyError: + if self._items: + objects = [(coords[side], obj) for obj, coords in self._items.items()] + objects.sort() + result = tuple(map(list, zip(*objects))) + else: + result = [], [] + self._index[side] = result + return result + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/render.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/render.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/render.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/render.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,61 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +Rendering Poppler (PDF) documents helper stuff. +""" + + +class RenderOptions(object): + """Manages rendering options.""" + def __init__(self): + self._renderHint = None + self._paperColor = None + + def read(self, document): + """Reads rendering options from the given Poppler.Document.""" + self._renderHint = document.renderHints() + self._paperColor = document.paperColor() + + def write(self, document): + """Writes our rendering options to the given Poppler.Document.""" + if self._renderHint is not None: + document.setRenderHint(int(document.renderHints()), False) + document.setRenderHint(self._renderHint) + + if self._paperColor is not None: + document.setPaperColor(self._paperColor) + + def setRenderHint(self, hint): + """Sets the Poppler.Document.RenderHints. Use None to unset.""" + self._renderHint = hint + + def renderHint(self): + """Returns the currently set RenderHint(s).""" + return self._renderHint + + def setPaperColor(self, color): + """Sets the paper color for rendering. Use None to unset.""" + self._paperColor = color + + def paperColor(self): + """Returns the currently set paper color.""" + return self._paperColor + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/surface.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/surface.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/surface.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/surface.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,486 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +Surface is the widget everything is drawn on. +""" + +import itertools +import weakref + + +from PyQt4.QtCore import QEvent, QPoint, QRect, QSize, Qt, QTimer, pyqtSignal +from PyQt4.QtGui import ( + QApplication, QContextMenuEvent, QCursor, QHelpEvent, QPainter, QPalette, + QRegion, QRubberBand, QToolTip, QWidget) + +try: + import popplerqt4 +except ImportError: + from . import popplerqt4_dummy as popplerqt4 + +from . import layout +from . import page +from . import highlight +from . import magnifier + +# most used keyboard modifiers +_SCAM = (Qt.SHIFT | Qt.CTRL | Qt.ALT | Qt.META) + +# dragging/moving selection: +_OUTSIDE = 0 +_LEFT = 1 +_TOP = 2 +_RIGHT = 4 +_BOTTOM = 8 +_INSIDE = 15 + + +class Surface(QWidget): + + rightClicked = pyqtSignal(QPoint) + linkClicked = pyqtSignal(QEvent, page.Page, popplerqt4.Poppler.Link) + linkHovered = pyqtSignal(page.Page, popplerqt4.Poppler.Link) + linkLeft = pyqtSignal() + linkHelpRequested = pyqtSignal(QPoint, page.Page, popplerqt4.Poppler.Link) + selectionChanged = pyqtSignal(QRect) + + def __init__(self, view): + super(Surface, self).__init__(view) + self.setBackgroundRole(QPalette.Dark) + self._view = weakref.ref(view) + self._currentLinkId = None + self._dragging = False + self._selecting = False + self._magnifying = False + self._magnifier = None + self.setMagnifier(magnifier.Magnifier()) + self.setMagnifierModifiers(Qt.CTRL) + self._selection = QRect() + self._rubberBand = QRubberBand(QRubberBand.Rectangle, self) + self._scrolling = False + self._scrollTimer = QTimer(interval=100, timeout=self._scrollTimeout) + self._pageLayout = None + self._highlights = weakref.WeakKeyDictionary() + self.setPageLayout(layout.Layout()) + self.setMouseTracking(True) + self.setContextMenuPolicy(Qt.PreventContextMenu) + self.setLinksEnabled(True) + self.setSelectionEnabled(True) + self.setShowUrlTips(True) + + def pageLayout(self): + return self._pageLayout + + def setPageLayout(self, layout): + old, self._pageLayout = self._pageLayout, layout + if old: + old.redraw.disconnect(self.redraw) + old.changed.disconnect(self.updateLayout) + layout.redraw.connect(self.redraw) + layout.changed.connect(self.updateLayout) + + def view(self): + """Returns our associated View.""" + return self._view() + + def viewportRect(self): + """Returns the rectangle of us that is visible in the View.""" + return self.view().viewport().rect().translated(-self.pos()) + + def setSelectionEnabled(self, enabled): + """Enables or disables selecting rectangular regions.""" + self._selectionEnabled = enabled + if not enabled: + self.clearSelection() + self._rubberBand.hide() + self._selecting = False + + def selectionEnabled(self): + """Returns True if selecting rectangular regions is enabled.""" + return self._selectionEnabled + + def setLinksEnabled(self, enabled): + """Enables or disables the handling of Poppler.Links in the pages.""" + self._linksEnabled = enabled + + def linksEnabled(self): + """Returns True if the handling of Poppler.Links in the pages is enabled.""" + return self._linksEnabled + + def setShowUrlTips(self, enabled): + """Enables or disables showing the URL in a tooltip when hovering a link. + + (Of course also setLinksEnabled(True) if you want this.) + + """ + self._showUrlTips = enabled + + def showUrlTips(self): + """Returns True if URLs are shown in a tooltip when hovering a link.""" + return self._showUrlTips + + def setMagnifier(self, magnifier): + """Sets the Magnifier to use (or None to disable the magnifier). + + The Surface takes ownership of the Magnifier. + + """ + if self._magnifier: + self._magnifier.setParent(None) + magnifier.setParent(self) + self._magnifier = magnifier + + def magnifier(self): + """Returns the currently set magnifier.""" + return self._magnifier + + def setMagnifierModifiers(self, modifiers): + """Sets the modifiers (e.g. Qt.CTRL) to show the magnifier. + + Use None to show the magnifier always (instead of dragging). + + """ + self._magnifierModifiers = modifiers + + def magnifierModifiers(self): + """Returns the currently set keyboard modifiers (e.g. Qt.CTRL) to show the magnifier.""" + return self._magnifierModifiers + + def hasSelection(self): + """Returns True if there is a selection.""" + return bool(self._selection) + + def setSelection(self, rect): + """Sets the selection rectangle.""" + rect = rect.normalized() + old, self._selection = self._selection, rect + self._rubberBand.setGeometry(rect) + self._rubberBand.setVisible(bool(rect)) + if rect != old: + self.selectionChanged.emit(rect) + + def selection(self): + """Returns the selection rectangle (normalized) or an invalid QRect().""" + return QRect(self._selection) + + def clearSelection(self): + """Hides the selection rectangle.""" + self.setSelection(QRect()) + + def redraw(self, rect): + """Called when the Layout wants to redraw a rectangle.""" + self.update(rect) + + def updateLayout(self): + """Conforms ourselves to our layout (that must already be updated.)""" + self.clearSelection() + self.resize(self._pageLayout.size()) + self.update() + + def highlight(self, highlighter, areas, msec=0): + """Highlights the list of areas using the given highlighter. + + Every area is a two-tuple (page, rect), where rect is a rectangle inside (0, 0, 1, 1) like the + linkArea attribute of a Poppler.Link. + + """ + d = weakref.WeakKeyDictionary() + for page, areas in itertools.groupby(sorted(areas), lambda a: a[0]): + d[page] = list(area[1] for area in areas) + if msec: + def clear(selfref=weakref.ref(self)): + self = selfref() + if self: + self.clearHighlight(highlighter) + t = QTimer(singleShot = True, timeout = clear) + t.start(msec) + else: + t = None + self.clearHighlight(highlighter) + self._highlights[highlighter] = (d, t) + self.update(sum((page.rect() for page in d), QRegion())) + + def clearHighlight(self, highlighter): + """Removes the highlighted areas of the given highlighter.""" + try: + (d, t) = self._highlights[highlighter] + except KeyError: + return + del self._highlights[highlighter] + self.update(sum((page.rect() for page in d), QRegion())) + + def paintEvent(self, ev): + painter = QPainter(self) + pages = list(self.pageLayout().pagesAt(ev.rect())) + for page in pages: + page.paint(painter, ev.rect()) + + for highlighter, (d, t) in self._highlights.items(): + rects = [] + for page in pages: + try: + rects.extend(map(page.linkRect, d[page])) + except KeyError: + continue + if rects: + highlighter.paintRects(painter, rects) + + def mousePressEvent(self, ev): + # link? + if self._linksEnabled: + page, link = self.pageLayout().linkAt(ev.pos()) + if link: + self.linkClickEvent(ev, page, link) + return + # magnifier? + if (self._magnifier and + int(ev.modifiers()) & _SCAM == self._magnifierModifiers and + ev.button() == Qt.LeftButton): + self._magnifier.moveCenter(ev.pos()) + self._magnifier.show() + self._magnifier.raise_() + self._magnifying = True + self.setCursor(QCursor(Qt.BlankCursor)) + return + # selecting? + if self._selectionEnabled: + if self.hasSelection(): + edge = selectionEdge(ev.pos(), self.selection()) + if edge == _OUTSIDE: + self.clearSelection() + else: + if ev.button() != Qt.RightButton or edge != _INSIDE: + self._selecting = True + self._selectionEdge = edge + self._selectionRect = self.selection() + self._selectionPos = ev.pos() + if edge == _INSIDE: + self.setCursor(Qt.SizeAllCursor) + return + if not self._selecting: + if ev.button() == Qt.RightButton or int(ev.modifiers()) & _SCAM: + self._selecting = True + self._selectionEdge = _RIGHT | _BOTTOM + self._selectionRect = QRect(ev.pos(), QSize(0, 0)) + self._selectionPos = ev.pos() + return + if ev.button() == Qt.LeftButton: + self._dragging = True + self._dragPos = ev.globalPos() + + def mouseReleaseEvent(self, ev): + if self._dragging: + self._dragging = False + elif self._magnifying: + self._magnifier.hide() + self._magnifying = False + else: + if self._selecting: + self._selecting = False + selection = self._selectionRect.normalized() + if selection.width() < 8 and selection.height() < 8: + self.clearSelection() + else: + self.setSelection(selection) + if self._scrolling: + self.stopScrolling() + self.updateCursor(ev.pos()) + if ev.button() == Qt.RightButton: + self.rightClick(ev.pos()) + + def mouseMoveEvent(self, ev): + if self._dragging: + self.setCursor(Qt.SizeAllCursor) + diff = self._dragPos - ev.globalPos() + self._dragPos = ev.globalPos() + self.view().scrollSurface(diff) + elif self._magnifying: + self._magnifier.moveCenter(ev.pos()) + elif self._selecting: + self._moveSelection(ev.pos()) + self._rubberBand.show() + # check if we are dragging close to the edge of the view, scroll if needed + view = self.viewportRect() + dx = ev.x() - view.left() - 12 + if dx >= 0: + dx = ev.x() - view.right() + 12 + if dx < 0: + dx = 0 + dy = ev.y() - view.top() - 12 + if dy >= 0: + dy = ev.y() - view.bottom() + 12 + if dy < 0: + dy = 0 + if dx or dy: + self.startScrolling(dx, dy) + elif self._scrolling: + self.stopScrolling() + else: + self.updateCursor(ev.pos()) + + def moveEvent(self, ev): + pos = self.mapFromGlobal(QCursor.pos()) + if self._selecting: + self._moveSelection(pos) + elif self._magnifying: + self._magnifier.moveCenter(pos) + elif not self._dragging: + self.updateCursor(pos) + + def event(self, ev): + if isinstance(ev, QHelpEvent): + if self._linksEnabled: + page, link = self.pageLayout().linkAt(ev.pos()) + if link: + self.linkHelpEvent(ev.globalPos(), page, link) + return True + return super(Surface, self).event(ev) + + def updateCursor(self, pos): + cursor = None + if self._linksEnabled: + page, link = self.pageLayout().linkAt(pos) + if link: + cursor = Qt.PointingHandCursor + lid = id(link) + else: + lid = None + if lid != self._currentLinkId: + if self._currentLinkId is not None: + self.linkHoverLeave() + self._currentLinkId = lid + if link: + self.linkHoverEnter(page, link) + if self._selectionEnabled and cursor is None and self.hasSelection(): + edge = selectionEdge(pos, self.selection()) + if edge in (_TOP, _BOTTOM): + cursor = Qt.SizeVerCursor + elif edge in (_LEFT, _RIGHT): + cursor = Qt.SizeHorCursor + elif edge in (_LEFT | _TOP, _RIGHT | _BOTTOM): + cursor = Qt.SizeFDiagCursor + elif edge in (_TOP | _RIGHT, _BOTTOM | _LEFT): + cursor = Qt.SizeBDiagCursor + self.setCursor(cursor) if cursor else self.unsetCursor() + + def linkHelpEvent(self, globalPos, page, link): + """Called when a QHelpEvent occurs on a link. + + The default implementation shows a tooltip if showUrls() is True, + and emits the linkHelpRequested() signal. + + """ + if self._showUrlTips and isinstance(link, popplerqt4.Poppler.LinkBrowse): + QToolTip.showText(globalPos, link.url(), self, page.linkRect(link.linkArea())) + self.linkHelpRequested.emit(globalPos, page, link) + + def rightClick(self, pos): + """Called when the right mouse button is released. + + (Use this instead of the contextMenuEvent as that one also + fires when starting a right-button selection.) + The default implementation emite the rightClicked(pos) signal and also + sends a ContextMenu event to the View widget. + + """ + self.rightClicked.emit(pos) + QApplication.postEvent(self.view().viewport(), QContextMenuEvent(QContextMenuEvent.Mouse, pos + self.pos())) + + def linkClickEvent(self, ev, page, link): + """Called when a link is clicked. + + The default implementation emits the linkClicked(event, page, link) signal. + + """ + self.linkClicked.emit(ev, page, link) + + def linkHoverEnter(self, page, link): + """Called when the mouse hovers over a link. + + The default implementation emits the linkHovered(page, link) signal. + + """ + self.linkHovered.emit(page, link) + + def linkHoverLeave(self): + """Called when the mouse does not hover a link anymore. + + The default implementation emits the linkLeft() signal. + + """ + self.linkLeft.emit() + + def startScrolling(self, dx, dy): + """Starts scrolling dx, dy about 10 times a second. + + Stops automatically when the end is reached. + + """ + self._scrolling = QPoint(dx, dy) + self._scrollTimer.isActive() or self._scrollTimer.start() + + def stopScrolling(self): + """Stops scrolling.""" + self._scrolling = False + self._scrollTimer.stop() + + def _scrollTimeout(self): + """(Internal) Called by the _scrollTimer.""" + # change the scrollbars, but check how far they really moved. + pos = self.pos() + self.view().scrollSurface(self._scrolling) + diff = pos - self.pos() + if not diff: + self.stopScrolling() + + def _moveSelection(self, pos): + """(Internal) Moves the dragged selection edge or corner to the given pos (QPoint).""" + diff = pos - self._selectionPos + self._selectionPos = pos + edge = self._selectionEdge + self._selectionRect.adjust( + diff.x() if edge & _LEFT else 0, + diff.y() if edge & _TOP else 0, + diff.x() if edge & _RIGHT else 0, + diff.y() if edge & _BOTTOM else 0) + self._rubberBand.setGeometry(self._selectionRect.normalized()) + if self.cursor().shape() in (Qt.SizeBDiagCursor, Qt.SizeFDiagCursor): + # we're dragging a corner, use correct diagonal cursor + bdiag = (edge in (3, 12)) ^ (self._selectionRect.width() * self._selectionRect.height() >= 0) + self.setCursor(Qt.SizeBDiagCursor if bdiag else Qt.SizeFDiagCursor) + + + +def selectionEdge(point, rect): + """Returns the edge where the point touches the rect.""" + if point not in rect.adjusted(-2, -2, 2, 2): + return _OUTSIDE + edge = 0 + if point.x() <= rect.left() + 4: + edge |= _LEFT + elif point.x() >= rect.right() - 4: + edge |= _RIGHT + if point.y() <= rect.top() + 4: + edge |= _TOP + elif point.y() >= rect.bottom() - 4: + edge |= _BOTTOM + return edge or _INSIDE + diff -Nru frescobaldi-1.2.0/frescobaldi_app/qpopplerview/view.py frescobaldi-2.0.0/frescobaldi_app/qpopplerview/view.py --- frescobaldi-1.2.0/frescobaldi_app/qpopplerview/view.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/qpopplerview/view.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,371 @@ +# This file is part of the qpopplerview package. +# +# Copyright (c) 2010, 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + + +""" +View widget to display PDF documents. +""" + + +from PyQt4.QtCore import QPoint, QSize, QTimer, Qt, pyqtSignal +from PyQt4.QtGui import QPalette, QScrollArea, QStyle + +from . import surface +from . import cache + +from . import ( + # viewModes: + FixedScale, + FitWidth, + FitHeight, + FitBoth, +) + + +# most used keyboard modifiers +_SCAM = (Qt.SHIFT | Qt.CTRL | Qt.ALT | Qt.META) + + +class View(QScrollArea): + + viewModeChanged = pyqtSignal(int) + + def __init__(self, parent=None): + super(View, self).__init__(parent) + + self.setAlignment(Qt.AlignCenter) + self.setBackgroundRole(QPalette.Dark) + + self._viewMode = FixedScale + self._wheelZoomEnabled = True + self._wheelZoomModifier = Qt.CTRL + + # delayed resize + self._centerPos = False + self._resizeTimer = QTimer(singleShot = True, timeout = self._resizeTimeout) + + def surface(self): + """Returns our Surface, the widget drawing the page(s).""" + sf = self.widget() + if not sf: + sf = surface.Surface(self) + self.setSurface(sf) + return sf + + def setSurface(self, sf): + """Sets the given surface as our widget.""" + self.setWidget(sf) + + def viewMode(self): + """Returns the current ViewMode.""" + return self._viewMode + + def setViewMode(self, mode): + """Sets the current ViewMode.""" + if mode == self._viewMode: + return + self._viewMode = mode + if mode: + self.fit() + self.viewModeChanged.emit(mode) + + def wheelZoomEnabled(self): + """Returns whether wheel zoom is enabled.""" + return self._wheelZoomEnabled + + def setWheelZoomEnabled(self, enabled): + """Sets whether wheel zoom is enabled. + + Wheel zoom is zooming using the mouse wheel and a keyboard modifier key + (defaulting to Qt.CTRL). Use setWheelZoomModifier() to set a key (or + key combination). + + """ + self._wheelZoomEnabled = enabled + + def wheelZoomModifier(self): + """Returns the modifier key to wheel-zoom with (defaults to Qt.CTRL).""" + return self._wheelZoomModifier + + def setWheelZoomModifier(self, key): + """Sets the modifier key to wheel-zoom with (defaults to Qt.CTRL). + + Can also be set to a ORed value, e.g. Qt.SHIFT|Qt.ALT. + Only use Qt.ALT, Qt.CTRL, Qt.SHIFT and/or Qt.META. + + """ + self._wheelZoomModifier = key + + def load(self, document): + """Convenience method to load all the pages from the given Poppler.Document.""" + self.surface().pageLayout().load(document) + # dont do a fit() before the very first resize as the size is then bogus + if self.viewMode(): + self.fit() + self.surface().pageLayout().update() + + def clear(self): + """Convenience method to clear the current layout.""" + self.surface().pageLayout().clear() + self.surface().pageLayout().update() + + def scale(self): + """Returns the scale of the pages in the View.""" + return self.surface().pageLayout().scale() + + def setScale(self, scale): + """Sets the scale of all pages in the View.""" + self.surface().pageLayout().setScale(scale) + self.surface().pageLayout().update() + self.setViewMode(FixedScale) + + def visiblePages(self): + """Yields the visible pages.""" + rect = self.viewport().rect() + rect.translate(-self.surface().pos()) + rect.intersect(self.surface().rect()) + return self.surface().pageLayout().pagesAt(rect) + + def redraw(self): + """Redraws, e.g. when you changed rendering hints or papercolor on the document.""" + pages = list(self.visiblePages()) + documents = set(page.document() for page in pages) + for document in documents: + cache.clear(document) + for page in pages: + page.repaint() + + def scrollSurface(self, diff): + """Scrolls the surface() by the distance given in the QPoint diff.""" + v = self.verticalScrollBar() + h = self.horizontalScrollBar() + v.setValue(v.value() + diff.y()) + h.setValue(h.value() + diff.x()) + + def center(self, point): + """Centers the given QPoint of the surface.""" + diff = point - self.viewport().rect().center() + self.surface().pos() + self.scrollSurface(diff) + + def fit(self): + """(Internal). Fits the layout according to the view mode. + + Prevents scrollbar/resize loops by precalculating which scrollbars will appear. + + """ + mode = self.viewMode() + if mode == FixedScale: + return + + maxsize = self.maximumViewportSize() + + # can vertical or horizontal scrollbars appear? + vcan = self.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded + hcan = self.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded + + # width a scrollbar takes off the viewport size + framewidth = 0 + if self.style().styleHint(QStyle.SH_ScrollView_FrameOnlyAroundContents, None, self): + framewidth = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth) * 2 + scrollbarextent = self.style().pixelMetric(QStyle.PM_ScrollBarExtent, None, self) + framewidth + + # first try to fit full size + layout = self.surface().pageLayout() + layout.fit(maxsize, mode) + layout.reLayout() + + # minimal values + minwidth = maxsize.width() + minheight = maxsize.height() + if vcan: + minwidth -= scrollbarextent + if hcan: + minheight -= scrollbarextent + + # do width and/or height fit? + fitw = layout.width() <= maxsize.width() + fith = layout.height() <= maxsize.height() + + if not fitw and not fith: + if vcan or hcan: + layout.fit(QSize(minwidth, minheight), mode) + elif mode & FitWidth and fitw and not fith and vcan: + # a vertical scrollbar will appear + w = minwidth + layout.fit(QSize(w, maxsize.height()), mode) + layout.reLayout() + if layout.height() <= maxsize.height(): + # now the vert. scrollbar would disappear! + # enlarge it as long as the vertical scrollbar would not be needed + while True: + w += 1 + layout.fit(QSize(w, maxsize.height()), mode) + layout.reLayout() + if layout.height() > maxsize.height(): + layout.fit(QSize(w - 1, maxsize.height()), mode) + break + elif mode & FitHeight and fith and not fitw and hcan: + # a horizontal scrollbar will appear + h = minheight + layout.fit(QSize(maxsize.width(), h), mode) + layout.reLayout() + if layout.width() <= maxsize.width(): + # now the hor. scrollbar would disappear! + # enlarge it as long as the horizontal scrollbar would not be needed + while True: + h += 1 + layout.fit(QSize(maxsize.width(), h), mode) + layout.reLayout() + if layout.width() > maxsize.width(): + layout.fit(QSize(maxsize.width(), h - 1), mode) + break + layout.update() + + def resizeEvent(self, ev): + super(View, self).resizeEvent(ev) + # Adjust the size of the document if desired + if self.viewMode() and any(self.surface().pageLayout().pages()): + if self._centerPos is False: + self._centerPos = QPoint(0, 0) + elif self._centerPos is None: + # store the point currently in the center + self._centerPos = self.viewport().rect().center() - self.surface().pos() + if not self._resizeTimer.isActive(): + self._resizeTimeout() + self._resizeTimer.start(150) + + def _resizeTimeout(self): + if self._centerPos is None: + return + oldSize = self.surface().size() + # resize the layout + self.fit() + # restore our position + newSize = self.surface().size() + newx = self._centerPos.x() * newSize.width() / oldSize.width() + newy = self._centerPos.y() * newSize.height() / oldSize.height() + self.center(QPoint(newx, newy)) + self._centerPos = None + + def zoom(self, scale, pos=None): + """Changes the display scale (1.0 is 100%). + + If pos is given, keeps that point at the same place if possible. + Pos is a QPoint relative to ourselves. + + """ + scale = max(0.05, min(4.0, scale)) + if scale == self.scale(): + return + + if self.surface().pageLayout().count() == 0: + self.setScale(scale) + return + + if pos is None: + pos = self.viewport().rect().center() + + surfacePos = pos - self.surface().pos() + page = self.surface().pageLayout().pageAt(surfacePos) + if page: + pagePos = surfacePos - page.pos() + x = pagePos.x() / float(page.width()) + y = pagePos.y() / float(page.height()) + self.setScale(scale) + newPos = QPoint(round(x * page.width()), round(y * page.height())) + page.pos() + else: + x = surfacePos.x() / float(self.surface().width()) + y = surfacePos.y() / float(self.surface().height()) + self.setScale(scale) + newPos = QPoint(round(x * self.surface().width()), round(y * self.surface().height())) + + self.scrollSurface(newPos - surfacePos) + + def zoomIn(self, pos=None, factor=1.1): + self.zoom(self.scale() * factor, pos) + + def zoomOut(self, pos=None, factor=1.1): + self.zoom(self.scale() / factor, pos) + + def wheelEvent(self, ev): + if (self._wheelZoomEnabled and + int(ev.modifiers()) & _SCAM == self._wheelZoomModifier): + factor = 1.1 ** (ev.delta() / 120) + if ev.delta(): + self.zoom(self.scale() * factor, ev.pos()) + else: + super(View, self).wheelEvent(ev) + + def currentPage(self): + """Returns the Page currently mostly in the center, or None if there are no pages.""" + pos = self.viewport().rect().center() - self.surface().pos() + layout = self.surface().pageLayout() + if len(layout): + d = layout.spacing() * 2 + for dx, dy in ((0, 0), (-d, 0), (0, -d), (d, 0), (0, d)): + dist = QPoint(dx, dy) + page = layout.pageAt(pos + dist) + if page: + return page + + def currentPageNumber(self): + """Returns the number (index in the layout) of the currentPage(), or None if there are no pages.""" + page = self.currentPage() + if page: + return self.surface().pageLayout().index(page) + + def gotoPageNumber(self, num): + """Aligns the page at the given index in the layout to the topleft of our View.""" + layout = self.surface().pageLayout() + if num < len(layout) and num != self.currentPageNumber(): + self.scrollSurface(layout[num].pos() + self.surface().pos()) + + def position(self): + """Returns a three-tuple(num, x, y) describing the page currently in the center of the View. + + the number is the index of the Page in the Layout, and x and y are the coordinates in the + range 0.0 -> 1.0 of the point that is at the center of the View. + + This way a position can be retained even if the scale or the orientation of the Layout changed. + + Returns None, None, None if the layout is empty. + + """ + page = self.currentPage() + if page: + layout = self.surface().pageLayout() + pos = self.viewport().rect().center() - self.surface().pos() + pagePos = pos - page.pos() + x = pagePos.x() / float(page.width()) + y = pagePos.y() / float(page.height()) + return layout.index(page), x, y + return None, None, None + + def setPosition(self, position): + """Sets the position to a three-tuple as previously returned by position().""" + layout = self.surface().pageLayout() + pageNum, x, y = position + if pageNum is None or pageNum >= len(layout): + return + page = layout[pageNum] + # center this point + newPos = QPoint(round(x * page.width()), round(y * page.height())) + page.pos() + self.center(newPos) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/quickinsert/articulations.py frescobaldi-2.0.0/frescobaldi_app/quickinsert/articulations.py --- frescobaldi-1.2.0/frescobaldi_app/quickinsert/articulations.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/quickinsert/articulations.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,207 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Quick Insert panel Articulations Tool. +""" + +from __future__ import unicode_literals + +import itertools + +from PyQt4.QtGui import QCheckBox + +import app +import symbols +import cursortools +import tokeniter +import music +import ly.lex.lilypond + +from . import tool +from . import buttongroup + + +# a dict mapping long articulation names to their short sign +shorthands = { + 'marcato': '^', + 'stopped': '+', + 'tenuto': '-', + 'staccatissimo': '|', + 'accent': '>', + 'staccato': '.', + 'portato': '_', +} + + +class Articulations(tool.Tool): + """Articulations tool in the quick insert panel toolbox. + + """ + def __init__(self, panel): + super(Articulations, self).__init__(panel) + self.shorthands = QCheckBox(self) + self.shorthands.setChecked(True) + self.layout().addWidget(self.shorthands) + for cls in ( + ArticulationsGroup, + OrnamentsGroup, + SignsGroup, + OtherGroup, + ): + self.layout().addWidget(cls(self)) + self.layout().addStretch(1) + app.translateUI(self) + + def translateUI(self): + self.shorthands.setText(_("Allow shorthands")) + self.shorthands.setToolTip(_( + "Use short notation for some articulations like staccato.")) + + def icon(self): + """Should return an icon for our tab.""" + return symbols.icon("articulation_prall") + + def title(self): + """Should return a title for our tab.""" + return _("Articulations") + + def tooltip(self): + """Returns a tooltip""" + return _("Different kinds of articulations and other signs.") + + +class Group(buttongroup.ButtonGroup): + def actionData(self): + for name, title in self.actionTexts(): + yield name, symbols.icon('articulation_'+name), None + + def actionTriggered(self, name): + if self.tool().shorthands.isChecked() and name in shorthands: + text = '_-^'[self.direction()+1] + shorthands[name] + else: + text = ('_', '', '^')[self.direction()+1] + '\\' + name + cursor = self.mainwindow().textCursor() + selection = cursor.hasSelection() + cursors = articulation_positions(cursor) + if cursors: + with cursortools.editBlock(cursor): + for c in cursors: + c.insertText(text) + if not selection: + self.mainwindow().currentView().setTextCursor(c) + elif not selection: + cursor.insertText(text) + + +class ArticulationsGroup(Group): + def translateUI(self): + self.setTitle(_("Articulations")) + + def actionTexts(self): + yield 'accent', _("Accent") + yield 'marcato', _("Marcato") + yield 'staccatissimo', _("Staccatissimo") + yield 'staccato', _("Staccato") + yield 'portato', _("Portato") + yield 'tenuto', _("Tenuto") + yield 'espressivo', _("Espressivo") + + +class OrnamentsGroup(Group): + def translateUI(self): + self.setTitle(_("Ornaments")) + + def actionTexts(self): + yield 'trill', _("Trill") + yield 'prall', _("Prall") + yield 'mordent', _("Mordent") + yield 'turn', _("Turn") + yield 'prallprall', _("Prall prall") + yield 'prallmordent', _("Prall mordent") + yield 'upprall', _("Up prall") + yield 'downprall', _("Down prall") + yield 'upmordent', _("Up mordent") + yield 'downmordent', _("Down mordent") + yield 'prallup', _("Prall up") + yield 'pralldown', _("Prall down") + yield 'lineprall', _("Line prall") + yield 'reverseturn', _("Reverse turn") + + +class SignsGroup(Group): + def translateUI(self): + self.setTitle(_("Signs")) + + def actionTexts(self): + yield 'fermata', _("Fermata") + yield 'shortfermata', _("Short fermata") + yield 'longfermata', _("Long fermata") + yield 'verylongfermata', _("Very long fermata") + yield 'segno', _("Segno") + yield 'coda', _("Coda") + yield 'varcoda', _("Varcoda") + yield 'signumcongruentiae', _("Signumcongruentiae") + + +class OtherGroup(Group): + def translateUI(self): + self.setTitle(_("Other")) + + def actionTexts(self): + yield 'upbow', _("Upbow") + yield 'downbow', _("Downbow") + yield 'snappizzicato', _("Snappizzicato") + yield 'open', _("Open (e.g. brass)") + yield 'stopped', _("Stopped (e.g. brass)") + yield 'flageolet', _("Flageolet") + yield 'thumb', _("Thumb") + yield 'lheel', _("Left heel") + yield 'rheel', _("Right heel") + yield 'ltoe', _("Left toe") + yield 'rtoe', _("Right toe") + yield 'halfopen', _("Half open (e.g. hi-hat)") + + +def articulation_positions(cursor): + """Returns a list of positions where an articulation can be added. + + Every position is given as a QTextCursor instance. + If the cursor has a selection, all positions in the selection are returned. + + """ + if cursor.hasSelection(): + source = tokeniter.Source.selection(cursor, True) + tokens = None + rests = False + else: + source = tokeniter.Source.fromCursor(cursor, True, -1) + tokens = source.tokens # only current line + rests = True + + positions = [] + for p in music.music_items(source, tokens=tokens): + if not rests and isinstance(p[0], ly.lex.lilypond.Rest): + continue + positions.append(source.cursor(p[-1], start=len(p[-1]))) + if not cursor.hasSelection(): + break # leave if first found, that's enough + return positions + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/quickinsert/barlines.py frescobaldi-2.0.0/frescobaldi_app/quickinsert/barlines.py --- frescobaldi-1.2.0/frescobaldi_app/quickinsert/barlines.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/quickinsert/barlines.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,118 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Quick Insert panel barlines and breathing sings Tool. +""" + +from __future__ import unicode_literals + +import app +import symbols + +from . import tool +from . import buttongroup + + +class BarLines(tool.Tool): + """Barlines tool in the quick insert panel toolbox. + + """ + def __init__(self, panel): + super(BarLines, self).__init__(panel) + self.layout().addWidget(BarlinesGroup(self)) + self.layout().addWidget(BreatheGroup(self)) + self.layout().addStretch(1) + + def icon(self): + """Should return an icon for our tab.""" + return symbols.icon("bar_single") + + def title(self): + """Should return a title for our tab.""" + return _("Bar Lines") + + def tooltip(self): + """Returns a tooltip""" + return _("Bar lines, breathing signs, etcetera.") + + +class BarlinesGroup(buttongroup.ButtonGroup): + def translateUI(self): + self.setTitle(_("Bar Lines")) + + def barlines(self): + yield "bar_double", "||", _("Double bar line") + yield "bar_end", "|.", _("Ending bar line") + yield "bar_dotted", ":", _("Dotted bar line") + yield "bar_dashed", "dashed", _("Dashed bar line") + yield "bar_invisible", "", _("Invisible bar line") + yield "bar_repeat_start", "|:", _("Repeat start") + yield "bar_repeat_double", ":|:", _("Repeat both") + yield "bar_repeat_end", ":|", _("Repeat end") + yield "bar_cswc", ":|.:", _("Repeat both (old)") + yield "bar_cswsc", ":|.|:", _("Repeat both (classic)") + yield "bar_tick", "'", _("Tick bar line") + yield "bar_single", "|", _("Single bar line") + yield "bar_sws", "|.|", _("Small-Wide-Small bar line") + yield "bar_ws", ".|", _("Wide-Small bar line") + yield "bar_ww", ".|.", _("Double wide bar line") + yield "bar_segno", "S", _("Segno bar line") + + def actionData(self): + self._barlines = {} + for name, ly_text, title in self.barlines(): + yield name, symbols.icon(name), None + self._barlines[name] = ly_text + + def actionTexts(self): + for name, ly_text, title in self.barlines(): + yield name, title + + def actionTriggered(self, name): + text = '\\bar "{0}"'.format(self._barlines[name]) + self.insertText(text) + + +class BreatheGroup(buttongroup.ButtonGroup): + def translateUI(self): + self.setTitle(_("Breathing Signs")) + + def actionData(self): + for name, title in self.actionTexts(): + yield name, symbols.icon(name), None + + def actionTexts(self): + yield 'breathe_rcomma', _("Default Breathing Sign") + yield 'breathe_rvarcomma', _("Straight Breathing Sign") + yield 'breathe_caesura_curved', _("Curved Caesura") + yield 'breathe_caesura_straight', _("Straight Caesura") + + def actionTriggered(self, name): + if name == 'breathe_rcomma': + self.insertText('\\breathe') + else: + glyph = name[8:].replace('_', '.') + text = ("\\once \\override BreathingSign #'text = " + '#(make-musicglyph-markup "scripts.{0}")\n' + "\\breathe").format(glyph) + self.insertText(text, blankline=True) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/quickinsert/buttongroup.py frescobaldi-2.0.0/frescobaldi_app/quickinsert/buttongroup.py --- frescobaldi-1.2.0/frescobaldi_app/quickinsert/buttongroup.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/quickinsert/buttongroup.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,197 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A QGroupBox in the Quick Insert Panel that auto-layouts its buttons. +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import actioncollection +import actioncollectionmanager +import app +import cursortools +import widgets.shortcuteditdialog + + +class ButtonGroup(QGroupBox): + """Inherit this class to create a group of buttons. + + You should implement: + - translateUI() to set the title + - actionData() to yield name, icon, function for every button + - actionTexts() to yield name, text for every button + - actionTriggered() (if you don't supply a function) to implement the + handler for the action. + + """ + + def __init__(self, tool): + super(ButtonGroup, self).__init__(tool) + self._tool = weakref.ref(tool) + grid = QGridLayout() + grid.setSpacing(0) + grid.setContentsMargins(0, 0, 0, 0) + self.setLayout(grid) + self.createActions() + self.setActionTexts() + self.createButtons() + app.translateUI(self) + app.languageChanged.connect(self.setActionTexts) + + def translateUI(self): + """Should set our title.""" + pass + + def tool(self): + return self._tool() + + def mainwindow(self): + return self.tool().panel().parent().mainwindow() + + def actionDict(self): + """Returns the Quick Insert action dictionary.""" + return self.tool().panel().actionDict + + def direction(self): + """ The value of the generic direction widget. + + -1 == Down + 0 == Neutral + 1 == Up + + """ + return 1 - self.tool().panel().direction.currentIndex() + + def createActions(self): + actionDict = self.actionDict() + self._names = [] + for name, icon, function in self.actionData(): + a = actionDict[name] = QAction(self, icon=icon) + a.triggered.connect(self.focusView) + if function is None: + function = (lambda name: lambda: self.actionTriggered(name))(name) + a.triggered.connect(function) + self._names.append(name) + + def setActionTexts(self): + actionDict = self.actionDict() + for name, text in self.actionTexts(): + actionDict[name].setText(text) + actionDict[name].setToolTip(text) + + def createButtons(self): + actionDict = self.actionDict() + layout = self.layout() + row = layout.rowCount() + columns = 5 + for num, name in enumerate(self._names, row*columns): + b = Button(self, name, actionDict[name]) + layout.addWidget(b, *divmod(num, columns)) + + def focusView(self): + """Always called when an action is triggered; focuses the main view.""" + self.mainwindow().currentView().setFocus() + + def actionData(self): + """Should yield name, icon, function (may be None) for every action.""" + pass + + def actionTexts(self): + """Should yield name, text for very action.""" + pass + + def actionTriggered(self, name): + """Called by default when a button is activated.""" + print "Action triggered:", name # DEBUG + + def insertText(self, text, indent=True, blankline=False): + """Insert text in the current document and focuses the document again. + + Besides the text, the following keyword arguments may be used: + + indent (default: True): The text will be indented if there are one or + more newlines in it. + blankline (default: False): A newline will be prepended to text if the + cursor is currently not on a blank line. + + """ + cursor = self.mainwindow().textCursor() + if blankline and not cursortools.isBlankBefore(cursor): + text = '\n' + text + if indent and '\n' in text: + import indent + indent.insertText(cursor, text) + else: + cursor.insertText(text) + + +class Button(QToolButton): + def __init__(self, group, name, action): + super(Button, self).__init__(group) + self.setObjectName(name) + self.setDefaultAction(action) + self.setAutoRaise(True) + self.setIconSize(QSize(22, 22)) + + def actionCollection(self): + return self.parent().tool().panel().parent().actionCollection + + def key(self): + """Returns a textual representation of the configured shortcut if it exists.""" + shortcuts = self.actionCollection().shortcuts(self.objectName()) + if shortcuts: + key = shortcuts[0].toString(QKeySequence.NativeText) + if len(shortcuts) > 1: + key += "..." + return key + + def event(self, ev): + if ev.type() == QEvent.ToolTip: + text = self.defaultAction().text() + key = self.key() + if key: + text = _("{name} ({key})").format(name=text, key=key) + QToolTip.showText(ev.globalPos(), text) + return True + return super(Button, self).event(ev) + + def contextMenuEvent(self, ev): + m = QMenu(self) + a = m.addAction(_("Configure Keyboard Shortcut ({key})").format(key = self.key() or _("None"))) + a.triggered.connect(self.editShortcut) + m.exec_(ev.globalPos()) + m.deleteLater() + + def editShortcut(self): + """Edit our shortcut.""" + mainwindow = self.parent().mainwindow() + action = QAction(self.defaultAction().icon(), self.defaultAction().text(), None) + action.setShortcuts(self.actionCollection().shortcuts(self.objectName()) or []) + if actioncollectionmanager.manager(mainwindow).editAction(self, action, + self.actionCollection().defaults().get(self.objectName()), + self.defaultAction()): + self.actionCollection().setShortcuts(self.objectName(), action.shortcuts()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/quickinsert/dynamics.py frescobaldi-2.0.0/frescobaldi_app/quickinsert/dynamics.py --- frescobaldi-1.2.0/frescobaldi_app/quickinsert/dynamics.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/quickinsert/dynamics.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,176 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Quick Insert panel dynamics Tool. +""" + +from __future__ import unicode_literals + +import app +import symbols +import cursortools +import tokeniter +import music +import ly.lex.lilypond + +from . import tool +from . import buttongroup + + +class Dynamics(tool.Tool): + """Dynamics tool in the quick insert panel toolbox.""" + def __init__(self, panel): + super(Dynamics, self).__init__(panel) + self.layout().addWidget(DynamicGroup(self)) + self.layout().addWidget(SpannerGroup(self)) + self.layout().addStretch(1) + + def icon(self): + """Should return an icon for our tab.""" + return symbols.icon("dynamic_f") + + def title(self): + """Should return a title for our tab.""" + return _("Dynamics") + + def tooltip(self): + """Returns a tooltip""" + return _("Dynamic symbols.") + + +class Group(buttongroup.ButtonGroup): + """Base class for dynamic button groups with insert implementation.""" + def actionTriggered(self, name): + name = name[8:] + direction = ['_', '', '^'][self.direction() + 1] + isSpanner = name not in dynamic_marks + if isSpanner: + dynamic = dynamic_spanners[name] + else: + dynamic = '\\' + name + cursor = self.mainwindow().textCursor() + if not cursor.hasSelection(): + # dynamic right before the cursor? + left = tokeniter.partition(cursor).left + if not left or not isinstance(left[-1], ly.lex.lilypond.Dynamic): + # no, find the first pitch + source = tokeniter.Source.fromCursor(cursor, True, -1) + for p in music.music_items(source): + cursor = source.cursor(p[-1], start=len(p[-1])) + break + cursor.insertText(direction + dynamic) + self.mainwindow().currentView().setTextCursor(cursor) + else: + source = tokeniter.Source.selection(cursor, True) + cursors = [source.cursor(p[-1], start=len(p[-1])) + for p in music.music_items(source)] + if not cursors: + return + c1, c2 = cursors[0], cursors[-1] + # are there dynamics at the cursor? then skip them + d1 = dynamics(c1) + if d1: + c1 = tokeniter.cursor(c1.block(), d1[-1], start=len(d1[-1])) + with cursortools.editBlock(cursor): + if len(cursors) > 1: + # dynamics after the end cursor? + d2 = dynamics(c2) + if isSpanner and not d2: + # don't terminate the spanner if there's a dynamic there + c2.insertText('\\!') + elif set(d1).intersection(dynamic_spanners.values()): + # write the dynamic at the end if there's a spanner at start + # remove ending \! if there + terminator = tokeniter.find("\\!", d2) + if terminator: + c2 = tokeniter.cursor(c2.block(), terminator) + if direction in d1: + c2.insertText(dynamic) + else: + c2.insertText(direction + dynamic) + return + c1.insertText(direction + dynamic) + + +class DynamicGroup(Group): + def translateUI(self): + # L10N: dynamic signs + self.setTitle(_("Signs")) + + def actionData(self): + """Should yield name, icon, function (may be None) for every action.""" + for m in dynamic_marks: + name = 'dynamic_' + m + yield name, symbols.icon(name), None + + def actionTexts(self): + """Should yield name, text for very action.""" + for m in dynamic_marks: + name = 'dynamic_' + m + bold = "{0}".format + yield name, _("Dynamic sign {name}").format(name=bold(m)) + + +class SpannerGroup(Group): + def translateUI(self): + self.setTitle(_("Spanners")) + + def actionData(self): + """Should yield name, icon, function (may be None) for every action.""" + for name, title in self.actionTexts(): + yield name, symbols.icon(name), None + + def actionTexts(self): + """Should yield name, text for very action.""" + yield 'dynamic_hairpin_cresc', _("Hairpin crescendo") + yield 'dynamic_cresc', _("Crescendo") + yield 'dynamic_hairpin_dim', _("Hairpin diminuendo") + yield 'dynamic_dim', _("Diminuendo") + yield 'dynamic_decresc', _("Decrescendo") + + +def dynamics(cursor): + """Returns a tuple of dynamic tokens (including _ or ^) at the cursor.""" + right = tokeniter.partition(cursor).right + i = 0 + for j, t in enumerate(right, 1): + if isinstance(t, ly.lex.lilypond.Dynamic): + i = j + elif not isinstance(t, (ly.lex.Space, ly.lex.lilypond.Direction)): + break + return right[:i] + + +dynamic_marks = ( + 'f', 'ff', 'fff', 'ffff', 'fffff', + 'p', 'pp', 'ppp', 'pppp', 'ppppp', + 'mf', 'mp', 'fp', 'sfz', 'rfz', + 'sf', 'sff', 'sp', 'spp', +) + +dynamic_spanners = { + 'hairpin_cresc': '\\<', + 'hairpin_dim': '\\>', + 'cresc': '\\cresc', + 'decresc': '\\decresc', + 'dim': '\\dim', +} + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/quickinsert/__init__.py frescobaldi-2.0.0/frescobaldi_app/quickinsert/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/quickinsert/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/quickinsert/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,72 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Quick Insert panel. +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QKeySequence + +import actioncollection +import actioncollectionmanager +import panels + + +class QuickInsertPanel(panels.Panel): + def __init__(self, mainwindow): + super(QuickInsertPanel, self).__init__(mainwindow) + self.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) + self.hide() + self.toggleViewAction().setShortcut(QKeySequence("Meta+Alt+I")) + mainwindow.addDockWidget(Qt.LeftDockWidgetArea, self) + self.actionCollection = QuickInsertActions(self) + actioncollectionmanager.manager(mainwindow).addActionCollection(self.actionCollection) + + def translateUI(self): + self.setWindowTitle(_("Quick Insert")) + self.toggleViewAction().setText(_("Quick &Insert")) + + def createWidget(self): + import widget + return widget.QuickInsert(self) + + +class QuickInsertActions(actioncollection.ShortcutCollection): + """Manages keyboard shortcuts for the QuickInsert module.""" + name = "quickinsert" + def __init__(self, panel): + super(QuickInsertActions, self).__init__(panel.mainwindow()) + self.panel = weakref.ref(panel) + + def createDefaultShortcuts(self): + self.setDefaultShortcuts('staccato', [QKeySequence('Ctrl+.')]) + self.setDefaultShortcuts('spanner_slur', [QKeySequence('Ctrl+(')]) + + def realAction(self, name): + return self.panel().widget().actionForName(name) + + def title(self): + return _("Quick Insert") + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/quickinsert/spanners.py frescobaldi-2.0.0/frescobaldi_app/quickinsert/spanners.py --- frescobaldi-1.2.0/frescobaldi_app/quickinsert/spanners.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/quickinsert/spanners.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,199 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Quick Insert panel spanners Tool. +""" + +from __future__ import unicode_literals + +import app +import cursortools +import tokeniter +import music +import symbols + +from . import tool +from . import buttongroup + + +class Spanners(tool.Tool): + """Dynamics tool in the quick insert panel toolbox.""" + def __init__(self, panel): + super(Spanners, self).__init__(panel) + self.layout().addWidget(ArpeggioGroup(self)) + self.layout().addWidget(GlissandoGroup(self)) + self.layout().addWidget(SpannerGroup(self)) + self.layout().addStretch(1) + + def icon(self): + """Should return an icon for our tab.""" + return symbols.icon("spanner_phrasingslur") + + def title(self): + """Should return a title for our tab.""" + return _("Spanners") + + def tooltip(self): + """Returns a tooltip""" + return _("Slurs, spanners, etcetera.") + + +class ArpeggioGroup(buttongroup.ButtonGroup): + def translateUI(self): + self.setTitle(_("Arpeggios")) + + def actionData(self): + """Should yield name, icon, function (may be None) for every action.""" + for name, title in self.actionTexts(): + yield name, symbols.icon(name), None + + def actionTexts(self): + """Should yield name, text for very action.""" + yield 'arpeggio_normal', _("Arpeggio") + yield 'arpeggio_arrow_up', _("Arpeggio with Up Arrow") + yield 'arpeggio_arrow_down', _("Arpeggio with Down Arrow") + yield 'arpeggio_bracket', _("Bracket Arpeggio") + yield 'arpeggio_parenthesis', _("Parenthesis Arpeggio") + + def actionTriggered(self, name): + # convert arpeggio_normal to arpeggioNormal, etc. + name = _arpeggioTypes[name] + cursor = self.mainwindow().textCursor() + # which arpeggio type is last used? + lastused = '\\arpeggioNormal' + types = set(_arpeggioTypes.values()) + block = cursor.block() + while block.isValid(): + s = types.intersection(tokeniter.tokens(block)) + if s: + lastused = s.pop() + break + block = block.previous() + # where to insert + source = tokeniter.Source.fromCursor(cursor, True, -1) + with cursortools.editBlock(cursor): + for p in music.music_items(source, tokens=source.tokens): + c = source.cursor(p[-1], start=len(p[-1])) + c.insertText('\\arpeggio') + if name != lastused: + cursortools.stripIndent(c) + import indent + indent.insertText(c, name + '\n') + # just pick the first place + return + + +class GlissandoGroup(buttongroup.ButtonGroup): + def translateUI(self): + self.setTitle(_("Glissandos")) + + def actionData(self): + """Should yield name, icon, function (may be None) for every action.""" + for name, title in self.actionTexts(): + yield name, symbols.icon(name), None + + def actionTexts(self): + """Should yield name, text for very action.""" + yield 'glissando_normal', _("Glissando") + yield 'glissando_dashed', _("Dashed Glissando") + yield 'glissando_dotted', _("Dotted Glissando") + yield 'glissando_zigzag', _("Zigzag Glissando") + yield 'glissando_trill', _("Trill Glissando") + + def actionTriggered(self, name): + cursor = self.mainwindow().textCursor() + style = _glissandoStyles[name] + source = tokeniter.Source.fromCursor(cursor, True, -1) + for p in music.music_items(source, tokens=source.tokens): + c = source.cursor(p[-1], start=len(p[-1])) + if style: + text = "-\\tweak #'style #'{0} \\glissando".format(style) + else: + text = '\\glissando' + c.insertText(text) + return + + +class SpannerGroup(buttongroup.ButtonGroup): + def translateUI(self): + self.setTitle(_("Spanners")) + + def actionData(self): + for name, title in self.actionTexts(): + yield name, symbols.icon(name), None + + def actionTexts(self): + yield 'spanner_slur', _("Slur") + yield 'spanner_phrasingslur', _("Phrasing Slur") + yield 'spanner_beam16', _("Beam") + yield 'spanner_trill', _("Trill") + + def actionTriggered(self, name): + d = ['_', '', '^'][self.direction()+1] + if name == "spanner_slur": + spanner = d + '(', ')' + elif name == "spanner_phrasingslur": + spanner = d + '\\(', '\\)' + elif name == "spanner_beam16": + spanner = d + '[', ']' + elif name == "spanner_trill": + spanner = '\\startTrillSpan', '\\stopTrillSpan' + + cursor = self.mainwindow().textCursor() + with cursortools.editBlock(cursor): + for s, c in zip(spanner, spanner_positions(cursor)): + c.insertText(s) + + +def spanner_positions(cursor): + if cursor.hasSelection(): + source = tokeniter.Source.selection(cursor, True) + tokens = None + else: + source = tokeniter.Source.fromCursor(cursor, True, -1) + tokens = source.tokens # only current line + + positions = [source.cursor(p[-1], start=len(p[-1])) + for p in music.music_items(source, tokens=tokens)] + + if cursor.hasSelection(): + del positions[1:-1] + else: + del positions[2:] + return positions + + + +_arpeggioTypes = { + 'arpeggio_normal': '\\arpeggioNormal', + 'arpeggio_arrow_up': '\\arpeggioArrowUp', + 'arpeggio_arrow_down': '\\arpeggioArrowDown', + 'arpeggio_bracket': '\\arpeggioBracket', + 'arpeggio_parenthesis': '\\arpeggioParenthesis', +} + +_glissandoStyles = { + 'glissando_normal': '', + 'glissando_dashed': 'dashed-line', + 'glissando_dotted': 'dotted-line', + 'glissando_zigzag': 'zigzag', + 'glissando_trill': 'trill', +} + diff -Nru frescobaldi-1.2.0/frescobaldi_app/quickinsert/tool.py frescobaldi-2.0.0/frescobaldi_app/quickinsert/tool.py --- frescobaldi-1.2.0/frescobaldi_app/quickinsert/tool.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/quickinsert/tool.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,58 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Quick Insert panel widget. +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + + +class Tool(QWidget): + """Base class for a tool in the quick insert panel toolbox. + + """ + def __init__(self, panel): + super(Tool, self).__init__(panel) + self._panel = weakref.ref(panel) + layout = QVBoxLayout() + self.setLayout(layout) + layout.setContentsMargins(0, 0, 0, 0) + + def panel(self): + """Returns the panel.""" + return self._panel() + + def icon(self): + """Should return an icon for our tab.""" + pass + + def title(self): + """Should return a title for our tab.""" + pass + + def tooltip(self): + """Should return a tooltip for our tab.""" + pass + diff -Nru frescobaldi-1.2.0/frescobaldi_app/quickinsert/widget.py frescobaldi-2.0.0/frescobaldi_app/quickinsert/widget.py --- frescobaldi-1.2.0/frescobaldi_app/quickinsert/widget.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/quickinsert/widget.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,197 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Quick Insert panel widget. +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import help +import icons +import symbols +import widgets.toolboxwheeler + +from . import articulations +from . import barlines +from . import dynamics +from . import spanners + + +class QuickInsert(QWidget): + def __init__(self, dockwidget): + super(QuickInsert, self).__init__(dockwidget) + self._dockwidget = weakref.ref(dockwidget) + # filled in by ButtonGroup subclasses + self.actionDict = {} + + layout = QVBoxLayout() + self.setLayout(layout) + layout.setContentsMargins(0, 0, 0, 0) + + self.helpButton = QToolButton( + icon = icons.get("help-contents"), + autoRaise = True, + clicked = lambda: help.help(quickinsert_help)) + self.directionLabel = QLabel() + self.direction = QComboBox() + self.direction.addItems(['', '', '']) + self.direction.setItemIcon(0, icons.get("go-up")) + self.direction.setItemIcon(2, icons.get("go-down")) + self.direction.setCurrentIndex(1) + hor = QHBoxLayout() + hor.setContentsMargins(0, 0, 0, 0) + hor.addWidget(self.helpButton) + hor.addWidget(self.directionLabel) + hor.addWidget(self.direction) + layout.addLayout(hor) + + self.toolbox = QToolBox(self) + widgets.toolboxwheeler.ToolBoxWheeler(self.toolbox) + layout.addWidget(self.toolbox) + + for cls in ( + articulations.Articulations, + dynamics.Dynamics, + spanners.Spanners, + barlines.BarLines, + ): + widget = cls(self) + self.toolbox.addItem(widget, widget.icon(), '') + + app.translateUI(self) + help.openWhatsThis(self) + + # restore remembered current page + name = QSettings().value("quickinsert/current_tool", "") + if name: + for i in range(self.toolbox.count()): + if name == self.toolbox.widget(i).__class__.__name__.lower(): + self.toolbox.setCurrentIndex(i) + break + self.toolbox.currentChanged.connect(self.slotCurrentChanged) + + def slotCurrentChanged(self, index): + name = self.toolbox.widget(index).__class__.__name__.lower() + QSettings().setValue("quickinsert/current_tool", name) + + def translateUI(self): + self.setWhatsThis(_( + "

With the Quick Insert Panel you can add various music " + "elements to the current note or selected music.

\n" + "

See {link} for more information.

").format(link= + quickinsert_help.link())) + self.helpButton.setToolTip(_("Help")) + self.directionLabel.setText(_("Direction:")) + for item, text in enumerate((_("Up"), _("Neutral"), _("Down"))): + self.direction.setItemText(item, text) + for i in range(self.toolbox.count()): + self.toolbox.setItemText(i, self.toolbox.widget(i).title()) + self.toolbox.setItemToolTip(i, self.toolbox.widget(i).tooltip()) + + def actionForName(self, name): + """This is called by the ShortcutCollection of our dockwidget, e.g. if the user presses a key.""" + try: + return self.actionDict[name] + except KeyError: + pass + + def dockwidget(self): + return self._dockwidget() + + +class quickinsert_help(help.page): + def title(): + return _("The Quick Insert Panel") + + def body(): + return (_("""\ +

+With the tools in the Quick Insert Panel you can add various music elements +to the current note or selected music. +

+ +

+The Direction chooser specifies if articulations, dynamics or slurs +appear in a neutral position (e.g. determined by stem direction), or above +or below the staff by prepending a -, ^ or +_ character. +

+ +

+Click on a tab to select a tool. You can cycle through the tools with Ctrl +(or {command}) and the mouse wheel. +All buttons in the Quick Insert Panel have configurable keyboard shortcuts; +you can change them by right-clicking a button. +

+""").format(command="\u2318") + _("""\ +

Articulations

+ +

+These musical symbols can be added to a note or rest or a selected range +of music. +If you add them to a selection, rests will be skipped. +If there is no text selected, the cursor will automatically move to the next +pitch, rest, skip or chord. +

+ +

+If Allow shorthands is checked, Frescobaldi will use short signs +for articulations if they exist +(e.g. -. instead of -\staccato). +

+""") + _("""\ +

Dynamics

+ +

+Dynamics can also be added to a note or rest. +If you select a range of music, you can add spanners which will automatically +terminate at the last note, rest or chord in the selection. +If you then click a sign, it will replace the terminator. +

+""") + _("""\ +

Spanners

+ +

+This tool lets you add arpeggio, glissandos and other spanners like slurs, +phrasing slurs, manual beams or trills. +

+ +

+Arpeggios and glissandos apply to the current note; +they need no music to be selected. +The slurs, beams or trill apply to the current note and the next one +if no music is selected, +or to the first and the last note or chord in the selection. +

+""") + _("""\ +

Bar Lines

+ +

+Here you can insert bar lines or various breathing signs. +

+""")) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/recentfiles.py frescobaldi-2.0.0/frescobaldi_app/recentfiles.py --- frescobaldi-1.2.0/frescobaldi_app/recentfiles.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/recentfiles.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,72 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Recent files handling. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import QSettings, QUrl + +import app + +__all__ = ['urls', 'add', 'remove'] + + +_recentfiles = None + +# the maximum number of items remembered +MAXLEN = 10 + + +def load(): + global _recentfiles + if _recentfiles is not None: + return + _recentfiles = [] + + for url in QSettings().value("recent_files", []) or []: + if isinstance(url, QUrl): + if os.access(url.toLocalFile(), os.R_OK): + _recentfiles.append(url) + del _recentfiles[MAXLEN:] + app.aboutToQuit.connect(save) + +def save(): + QSettings().setValue("recent_files", _recentfiles) + +def urls(): + load() + return _recentfiles + +def add(url): + load() + if url in _recentfiles: + _recentfiles.remove(url) + _recentfiles.insert(0, url) + del _recentfiles[MAXLEN:] + +def remove(url): + load() + if url in _recentfiles: + _recentfiles.remove(url) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/reformat.py frescobaldi-2.0.0/frescobaldi_app/reformat.py --- frescobaldi-1.2.0/frescobaldi_app/reformat.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/reformat.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,117 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Reformat the selection or the whole document, only adjusting whitespace. + +What it does: + +- remove trialing whitespace + +- newline after all { or << in lilypond mode, unless terminated on same line +- same way newline before >> or } + +- newline before and after many non-postfix commands, such as \set, \override +- at least one blank line between multiline top-level blocks (unless comment) + +- wordwrap lines longer than 79 characters + +- remove indent for commented lines with more than two comment characters + +- Html, scheme, strings, etc are left alone +- Never removes existing newlines + +""" + +from __future__ import unicode_literals + +import cursortools +import tokeniter +import indent +import ly.lex.lilypond +import ly.lex.scheme + + +def get_blocks(cursor): + """Returns all or the selected blocks.""" + if cursor.hasSelection(): + return cursortools.selectedBlocks(cursor) + else: + return cursortools.allBlocks(cursor.document()) + + +def reformat(cursor): + """Reformats the selection or the whole document, adjusting the whitespace.""" + def newlinebefore(t): + editor.insertText(tokeniter.cursor(block, t, end=0), '\n') + + def newlineafter(t): + editor.insertText(tokeniter.cursor(block, t, start=len(t)), '\n') + + indent_vars = indent.indentVariables(cursor.document()) + + with cursortools.editBlock(cursor): + indent.reIndent(cursor) + with cursortools.Editor() as editor: + for block in get_blocks(cursor): + + denters = [] + tokens = tokeniter.tokens(block) + + nonspace_index = -1 + for i, t in enumerate(tokens): + if isinstance(t, ly.lex.Indent) and t in ('{', '<<'): + denters.append(i) + elif isinstance(t, ly.lex.Dedent) and t in ('}', '>>'): + if denters: + denters.pop() + elif nonspace_index != -1: + newlinebefore(t) + elif not isinstance(t, ly.lex.Space): + nonspace_index = i + for i in denters: + if i < nonspace_index: + newlineafter(tokens[i]) + + # TODO: wrap long lines + + indent.reIndent(cursor) + + with cursortools.Editor() as editor: + for block in get_blocks(cursor): + tokens = tokeniter.tokens(block) + if (len(tokens) == 2 + and isinstance(tokens[0], ly.lex.Space) + and isinstance(tokens[1], ( + ly.lex.lilypond.LineComment, + ly.lex.scheme.LineComment)) + and len(tokens[1]) > 2 + and len(set(tokens[1][:3])) == 1): + # move commented lines with more than 2 comment characters + # to column 0 + editor.removeSelectedText(tokeniter.cursor(block, tokens[0])) + else: + # remove trialing whitespace + for t in tokens[::-1]: + if isinstance(t, ly.lex.Space): + editor.removeSelectedText(tokeniter.cursor(block, t)) + else: + break + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/resultfiles.py frescobaldi-2.0.0/frescobaldi_app/resultfiles.py --- frescobaldi-1.2.0/frescobaldi_app/resultfiles.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/resultfiles.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,129 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Finds out which files are created by running the engraver. +""" + +from __future__ import unicode_literals + +import itertools +import glob +import os + +import app +import documentinfo +import jobmanager +import plugin +import util + + +def results(document): + return Results.instance(document) + + +# Set the basenames of the resulting documents to expect when a job starts +@app.jobStarted.connect +def _init_basenames(document): + results(document).saveDocumentInfo() + + + +class Results(plugin.DocumentPlugin): + """Can be queried to get the files created by running the engraver (LilyPond) on our document.""" + def __init__(self, document): + self._jobfile = None + self._basenames = None + document.saved.connect(self.forgetDocumentInfo) + + def saveDocumentInfo(self): + """Takes over some vital information from a DocumentInfo instance. + + The file a job is run on and the basenames expected to be created are saved. + When the user saves a Document after a Job has run, this information is 'forgotten' again. + + Otherwise the results of a Job would not be seen if the user starts a Job and then + saves the Document while the job is still running. The Job uses the scratcharea if the + document was modified but saving it would result in DocumentInfo.jobinfo()[0] pointing + to the real document instead. + + """ + info = documentinfo.info(self.document()) + self._jobfile = info.jobinfo()[0] + self._basenames = info.basenames() + + def forgetDocumentInfo(self): + """Called when the user saves a Document. + + 'Forgets' the basenames and job filename if set, but only if no job is currently running. + + """ + if not jobmanager.isRunning(self.document()): + self._jobfile = None + self._basenames = None + + def jobfile(self): + """Returns the file that is currently being, or will be, engraved.""" + if self._jobfile is None: + return documentinfo.info(self.document()).jobinfo()[0] + return self._jobfile + + def basenames(self): + """Returns the list of basenames the last or running Job is expected to create.""" + if self._basenames is None: + return documentinfo.info(self.document()).basenames() + return self._basenames + + def files(self, extension = '*', newer = True): + """Returns a list of existing files matching our basenames and the given extension. + + First the files basename + extension are returned, + then basename + '-[0-9]+' + extension, + then basename + '-.+' + extension. + + If newer is True (the default), only files that are newer than the jobfile() are returned. + + """ + jobfile = self.jobfile() + if jobfile: + files = util.files(self.basenames(), extension) + if newer: + try: + mtime = os.path.getmtime(jobfile) + files = filter(lambda fname: os.path.getmtime(fname) >= mtime, files) + except (OSError, IOError): + pass + return list(util.uniq(files)) + return [] + + def currentDirectory(self): + """Returns the directory the document resides in. + + Returns the temporary directory if that was used last and there is no master document set. + + """ + if documentinfo.info(self.document()).master(): + filename = self.document().url().toLocalfile() + else: + filename = self.jobfile() + directory = os.path.dirname(filename) + if os.path.isdir(directory): + return directory + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/rhythm/__init__.py frescobaldi-2.0.0/frescobaldi_app/rhythm/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/rhythm/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/rhythm/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,184 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Tools to edit durations of selected music. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QAction + +import app +import actioncollection +import actioncollectionmanager +import plugin + + +class Rhythm(plugin.MainWindowPlugin): + def __init__(self, mainwindow): + self.actionCollection = ac = Actions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + mainwindow.selectionStateChanged.connect(self.updateSelection) + self.updateSelection(mainwindow.hasSelection()) + ac.rhythm_double.triggered.connect(self.rhythm_double) + ac.rhythm_halve.triggered.connect(self.rhythm_halve) + ac.rhythm_dot.triggered.connect(self.rhythm_dot) + ac.rhythm_undot.triggered.connect(self.rhythm_undot) + ac.rhythm_remove_scaling.triggered.connect(self.rhythm_remove_scaling) + ac.rhythm_remove.triggered.connect(self.rhythm_remove) + ac.rhythm_implicit.triggered.connect(self.rhythm_implicit) + ac.rhythm_implicit_per_line.triggered.connect(self.rhythm_implicit_per_line) + ac.rhythm_explicit.triggered.connect(self.rhythm_explicit) + ac.rhythm_apply.triggered.connect(self.rhythm_apply) + ac.rhythm_copy.triggered.connect(self.rhythm_copy) + ac.rhythm_paste.triggered.connect(self.rhythm_paste) + + def updateSelection(self, selection): + ac = self.actionCollection + ac.rhythm_double.setEnabled(selection) + ac.rhythm_halve.setEnabled(selection) + ac.rhythm_dot.setEnabled(selection) + ac.rhythm_undot.setEnabled(selection) + ac.rhythm_remove_scaling.setEnabled(selection) + ac.rhythm_remove.setEnabled(selection) + ac.rhythm_implicit.setEnabled(selection) + ac.rhythm_implicit_per_line.setEnabled(selection) + ac.rhythm_explicit.setEnabled(selection) + ac.rhythm_apply.setEnabled(selection) + ac.rhythm_copy.setEnabled(selection) + ac.rhythm_paste.setEnabled(selection) + + def rhythm_double(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_double(cursor) + + def rhythm_halve(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_halve(cursor) + + def rhythm_dot(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_dot(cursor) + + def rhythm_undot(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_undot(cursor) + + def rhythm_remove_scaling(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_remove_scaling(cursor) + + def rhythm_remove(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_remove(cursor) + + def rhythm_implicit(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_implicit(cursor) + + def rhythm_implicit_per_line(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_implicit_per_line(cursor) + + def rhythm_explicit(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_explicit(cursor) + + def rhythm_apply(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_apply(cursor, self.mainwindow()) + + def rhythm_copy(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_copy(cursor) + + def rhythm_paste(self): + cursor = self.mainwindow().textCursor() + from . import rhythm + rhythm.rhythm_paste(cursor) + + +class Actions(actioncollection.ActionCollection): + name = "rhythm" + def createActions(self, parent): + self.rhythm_double = QAction(parent) + self.rhythm_halve = QAction(parent) + self.rhythm_dot = QAction(parent) + self.rhythm_undot = QAction(parent) + self.rhythm_remove_scaling = QAction(parent) + self.rhythm_remove = QAction(parent) + self.rhythm_implicit = QAction(parent) + self.rhythm_implicit_per_line = QAction(parent) + self.rhythm_explicit = QAction(parent) + self.rhythm_apply = QAction(parent) + self.rhythm_copy = QAction(parent) + self.rhythm_paste = QAction(parent) + + def translateUI(self): + self.rhythm_double.setText(_("&Double durations")) + self.rhythm_double.setToolTip(_( + "Double all the durations in the selection.")) + self.rhythm_halve.setText(_("&Halve durations")) + self.rhythm_halve.setToolTip(_( + "Halve all the durations in the selection.")) + self.rhythm_dot.setText(_("Do&t durations")) + self.rhythm_dot.setToolTip(_( + "Add a dot to all the durations in the selection.")) + self.rhythm_undot.setText(_("&Undot durations")) + self.rhythm_undot.setToolTip(_( + "Remove one dot from all the durations in the selection.")) + self.rhythm_remove_scaling.setText(_("Remove &scaling")) + self.rhythm_remove_scaling.setToolTip(_( + "Remove all scaling (*n/m) from the durations in the selection.")) + self.rhythm_remove.setText(_("&Remove durations")) + self.rhythm_remove.setToolTip(_( + "Remove all durations from the selection.")) + self.rhythm_implicit.setText(_("Make &implicit")) + self.rhythm_implicit.setToolTip(_( + "Make durations implicit (remove repeated durations).")) + self.rhythm_implicit_per_line.setText(_("Make implicit (per &line)")) + self.rhythm_implicit_per_line.setToolTip(_( + "Make durations implicit (remove repeated durations), " + "except for the first duration in a line.")) + self.rhythm_explicit.setText(_("Make &explicit")) + self.rhythm_explicit.setToolTip(_( + "Make durations explicit (add duration to every note, " + "even if it is the same as the preceding note).")) + self.rhythm_apply.setText(_("&Apply rhythm...")) + self.rhythm_apply.setToolTip(_( + "Apply an entered rhythm to the selected music.")) + self.rhythm_copy.setText(_("&Copy rhythm")) + self.rhythm_copy.setToolTip(_( + "Copy the rhythm of the selected music.")) + self.rhythm_paste.setText(_("&Paste rhythm")) + self.rhythm_paste.setToolTip(_("Paste a rhythm to the selected music.")) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/rhythm/rhythm.py frescobaldi-2.0.0/frescobaldi_app/rhythm/rhythm.py --- frescobaldi-1.2.0/frescobaldi_app/rhythm/rhythm.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/rhythm/rhythm.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,281 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Implementation of the tools to edit durations of selected music. + +Durations are represented simply by lists of ly.lex.lilypond.Duration tokens. +""" + +from __future__ import unicode_literals + +import itertools + +from PyQt4.QtGui import QTextCursor + +import app +import help +import icons +import inputdialog +import cursortools +import tokeniter +import ly.lex.lilypond +import music + + +durations = ['\\maxima', '\\longa', '\\breve', + '1', '2', '4', '8', '16', '32', '64', '128', '256', '512', '1024', '2048'] + + +_clipboard = [] # clipboard for rhythm copy and paste + +_history = set() # earlier rhythms typed in apply dialog + + +def rhythm_double(cursor): + with cursortools.Editor() as e: + for b, d in duration_items(cursor, ly.lex.lilypond.Length): + for t in d: + try: + i = durations.index(t) + except ValueError: + continue + if i > 0: + e.insertText(tokeniter.cursor(b, t), durations[i - 1]) + +def rhythm_halve(cursor): + with cursortools.Editor() as e: + for b, d in duration_items(cursor, ly.lex.lilypond.Length): + for t in d: + try: + i = durations.index(t) + except ValueError: + continue + if i < len(durations) - 1: + e.insertText(tokeniter.cursor(b, t), durations[i + 1]) + +def rhythm_dot(cursor): + with cursortools.Editor() as e: + for b, d in duration_items(cursor, ly.lex.lilypond.Length): + for t in d: + e.insertText(tokeniter.cursor(b, t, start=len(t)), ".") + +def rhythm_undot(cursor): + with cursortools.Editor() as e: + for b, d in duration_items(cursor, ly.lex.lilypond.Dot): + if d: + e.removeSelectedText(tokeniter.cursor(b, d[0])) + +def rhythm_remove_scaling(cursor): + with cursortools.editBlock(cursor): + for c in cursors(cursor, ly.lex.lilypond.Scaling): + c.removeSelectedText() + +def rhythm_remove(cursor): + with cursortools.editBlock(cursor): + for c in cursors(cursor, ly.lex.lilypond.Duration): + c.removeSelectedText() + +def rhythm_implicit(cursor): + items = duration_cursor_items(cursor) + for c, d in items: + break + else: + return + prev = d or preceding(cursor) + with cursortools.Editor() as e: + for c, d in items: + if d: + if d == prev: + e.removeSelectedText(c) + prev = d + +def rhythm_implicit_per_line(cursor): + items = duration_cursor_items(cursor) + for c, d in items: + break + else: + return + prevblock = c.block() + prev = d or preceding(cursor) + with cursortools.Editor() as e: + for c, d in items: + if c.block() != prevblock: + if not d: + e.insertText(c, ''.join(prev)) + else: + prev = d + prevblock = c.block() + elif d: + if d == prev: + e.removeSelectedText(c) + prev = d + +def rhythm_explicit(cursor): + items = duration_cursor_items(cursor) + for c, d in items: + break + else: + return + prev = d or preceding(cursor) + with cursortools.Editor() as e: + for c, d in items: + if d: + prev = d + else: + e.insertText(c, ''.join(prev)) + +def rhythm_apply(cursor, mainwindow): + durs = inputdialog.getText(mainwindow, + _("Apply Rhythm"), _("Enter a rhythm:"), + complete = sorted(_history), + regexp = r'([0-9./* ]|\\breve|\\longa|\\maxima)+', + help = rhythm_help, icon = icons.get('tools_rhythm')) + if durs and durs.split(): + _history.add(durs.strip()) + duration_source = remove_dups(itertools.cycle(durs.split())) + with cursortools.Editor() as e: + for c, d in duration_cursor_items(cursor): + e.insertText(c, next(duration_source)) + +def rhythm_copy(cursor): + del _clipboard[:] + for b, d in duration_items(cursor, ly.lex.lilypond.Duration): + _clipboard.append(''.join(d)) + if _clipboard and _clipboard[0] == '': + prec = preceding(cursor) + if prec: + _clipboard[0] = ''.join(prec) + +def rhythm_paste(cursor): + duration_source = itertools.cycle(_clipboard) + with cursortools.Editor() as e: + for c, d in duration_cursor_items(cursor): + e.insertText(c, next(duration_source)) + +def remove_dups(iterable): + old = None + for i in iterable: + yield '' if i == old else i + old = i + +def duration_items(cursor, *classes): + """Yields block, list where tokens in list are instance of *classes.""" + source = tokeniter.Source.selection(cursor, True) + for m in music.music_items(source): + yield source.block, [token for token in m if isinstance(token, classes)] + +def duration_cursor_items(cursor): + """Yields two-tuples (cursor, list of duration tokens). + + The list of duration tokens may be empty. This can be used to find + the places to insert or overwrite durations in the selected music. + + """ + source = tokeniter.Source.selection(cursor, True) + for m in music.music_items(source): + i = iter(m) + c = QTextCursor(source.block) + for t in i: + if isinstance(t, ly.lex.lilypond.Duration): + l = [t] + c.setPosition(source.block.position() + t.pos) + for t in i: + if isinstance(t, ly.lex.lilypond.Duration): + l.append(t) + elif not isinstance(t, ly.lex.Space): + break + c.setPosition(source.block.position() + l[-1].end, c.KeepAnchor) + break + else: + c.setPosition(source.block.position() + t.end) + l = [] + yield c, l + +def cursors(cursor, *classes): + """Returns a list of cursors for the duration_items() with same args.""" + return [tokeniter.cursor(b, t) + for b, d in duration_items(cursor, *classes) for t in d] + +def preceding(cursor): + """Returns a preceding duration before the cursor, or an empty list.""" + c = QTextCursor(cursor) + c.setPosition(cursor.selectionStart()) + for tokens in back(c): + for t in tokens: + if isinstance(t, ly.lex.lilypond.Duration): + l = [t] + for t in tokens: + if isinstance(t, ly.lex.lilypond.Duration): + l.append(t) + elif not isinstance(t, ly.lex.Space): + break + l.reverse() + return l + return [] + +def back(cursor): + """Yields per-block token iters in backward direction from the cursor.""" + yield reversed(tokeniter.partition(cursor).left) + block = cursor.block() + while block.previous().isValid(): + block = block.previous() + yield reversed(tokeniter.tokens(block)) + + +class rhythm_help(help.page): + def title(): + return _("Rhythm manipulation") + + def body(): + return _("""\ +

+The rhythm functions of Frescobaldi alter the durations written after notes, +chords, rests, etcetera. Using those functions, all in menu {menu}, it +is possible to double or halve the length of notes, to add or remove dots +and to remove scaling factors. +

+ +

+Also it is possible to change the way rhythm is specified: for every note +(explicit), or only when the duration changes (implicit). Some users may prefer +the option implicit per line, which always specifies the duration for the first +note, chord or rest on a line. +

+ +

+The last three menu commands can copy, paste or apply a rhythm that is entered +in a dialog. +

+ +

+In the "Apply Rhythm" dialog you can enter a series of durations, e.g.: +

+ +

+4. 8 4 16 16 8 2 +

+ +

+which will then, repetitively, be applied to a selection of notes. +

+""").format(menu=help.menu( + _("menu title", "Tools"), _("submenu title", "Rhythm"))) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/build.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/build.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/build.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/build.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,564 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Builds the LilyPond score from the settings in the Score Wizard. +""" + +from __future__ import unicode_literals + +import __builtin__ +import collections +import fractions +import re + +import ly.dom +import po.mofile + +from . import parts +import parts._base +import parts.containers + + +class PartNode(object): + """Represents an item with sub-items in the parts tree. + + Sub-items of this items are are split out in two lists: the 'parts' and + 'groups' attributes. + + Parts ('parts' attribute) are vertically stacked (instrumental parts or + staff groups). Groups ('groups' attribute) are horizontally added (score, + book, bookpart). + + The Part (containing the widgets) is in the 'part' attribute. + + """ + def __init__(self, item): + """item is a PartItem (QTreeWidgetItem).""" + self.part = getattr(item, 'part', None) + self.groups = [] + self.parts = [] + for i in range(item.childCount()): + node = PartNode(item.child(i)) + if isinstance(node.part, parts._base.Group): + self.groups.append(node) + else: + self.parts.append(node) + + +class PartData(object): + """Represents what a Part wants to add to the LilyPond score. + + A Part may append to the following instance attributes (which are lists): + + includes: (string) filename to be included + codeblocks: (ly.dom.Node) global blocks of code a part depends on + assignments: (ly.dom.Assignment) assignment of an expression to a + variable, most times the music stub for a part + nodes: (ly.dom.Node) the nodes a part adds to the parent \score + afterblocks: (ly.dom.Node) other blocks, appended ad the end + + The num instance attribute is set to 0 by default but can be increased by + the Builder, when there are more parts of the exact same type in the same + score. + + This is used by the builder afterwards to adjust identifiers and instrument + names to this. + + """ + def __init__(self, part, parent=None): + """part is a parts._base.Part instance, parent may be another PartData.""" + if parent: + parent.children.append(self) + self.isChild = bool(parent) + self._name = part.__class__.__name__ + self.children = [] + self.num = 0 + self.includes = [] + self.codeblocks = [] + self.assignments = [] + self.nodes = [] + self.afterblocks = [] + + def name(self): + """Returns a name for this part data. + + The name consists of the class name of the part with the value of the num + attribute appended as a roman number. + + """ + if self.num: + return self._name + ly.util.int2roman(self.num) + return self._name + + def assign(self, name=None): + """Creates a ly.dom.Assignment. + + name is a string name, if not given the class name is used with the + first letter lowered. + + A ly.dom.Reference is used as the name for the Assignment. + The assignment is appended to our assignments and returned. + + The Reference is in the name attribute of the assignment. + + """ + a = ly.dom.Assignment(ly.dom.Reference(name or ly.util.mkid(self.name()))) + self.assignments.append(a) + return a + + def assignMusic(self, name=None, octave=0, transposition=None): + """Creates a ly.dom.Assignment with a \\relative music stub.""" + a = self.assign(name) + stub = ly.dom.Relative(a) + ly.dom.Pitch(octave, 0, 0, stub) + s = ly.dom.Seq(stub) + ly.dom.Identifier(self.globalName, s).after = 1 + if transposition is not None: + toct, tnote, talter = transposition + ly.dom.Pitch(toct, tnote, fractions.Fraction(talter, 2), ly.dom.Transposition(s)) + ly.dom.LineComment(_("Music follows here."), s) + ly.dom.BlankLine(s) + return a + + +class BlockData(object): + """Represents the building blocks of a global section of a ly.dom.Document.""" + def __init__(self): + self.assignments = ly.dom.Block() + self.scores = ly.dom.Block() + self.backmatter = ly.dom.Block() + + +class Builder(object): + """Builds the LilyPond score from all user input in the score wizard. + + Reads settings and other input from the dialog on construction. + Does not need the dialog after that. + + """ + def __init__(self, dialog): + """Initializes ourselves from all user settings in the dialog.""" + self._includeFiles = [] + self.globalUsed = False + + scoreProperties = dialog.settings.widget().scoreProperties + generalPreferences = dialog.settings.widget().generalPreferences + lilyPondPreferences = dialog.settings.widget().lilyPondPreferences + instrumentNames = dialog.settings.widget().instrumentNames + + # attributes the Part and Container types may read and we need later as well + self.header = list(dialog.header.widget().headers()) + self.headerDict = dict(self.header) + self.lyVersionString = lilyPondPreferences.version.currentText().strip() + self.lyVersion = tuple(map(int, re.findall('\\d+', self.lyVersionString))) + self.midi = generalPreferences.midi.isChecked() + self.pitchLanguage = dialog.pitchLanguage() + self.suppressTagLine = generalPreferences.tagl.isChecked() + self.removeBarNumbers = generalPreferences.barnum.isChecked() + self.showMetronomeMark = generalPreferences.metro.isChecked() + self.paperSize = generalPreferences.getPaperSize() + self.paperLandscape = generalPreferences.paperLandscape.isChecked() + self.showInstrumentNames = instrumentNames.isChecked() + names = ['long', 'short', None] + self.firstInstrumentName = names[instrumentNames.firstSystem.currentIndex()] + self.otherInstrumentName = names[instrumentNames.otherSystems.currentIndex()] + + # translator for instrument names + self._ = __builtin__._ + if instrumentNames.isChecked(): + lang = instrumentNames.getLanguage() + if lang == 'C': + self._ = po.translator(None) + elif lang: + mofile = po.find(lang) + if mofile: + self._ = po.translator(po.mofile.MoFile(mofile)) + + # global score preferences + self.scoreProperties = scoreProperties + self.globalSection = scoreProperties.globalSection(self) + + # printer that converts the ly.dom tree to text + p = self._printer = ly.dom.Printer() + p.indentString = " " # will be re-indented anyway + p.typographicalQuotes = generalPreferences.typq.isChecked() + if self.pitchLanguage: + p.language = self.pitchLanguage + + # get the parts + globalGroup = PartNode(dialog.parts.widget().rootPartItem()) + + # move parts down the tree to subgroups that have no parts + assignparts(globalGroup) + + # now prepare the different blocks + self.usePrefix = needsPrefix(globalGroup) + self.currentScore = 0 + + # make a part of the document (assignments, scores, backmatter) for + # every group (book, bookpart or score) in the global group + if globalGroup.parts: + groups = [globalGroup] + else: + groups = globalGroup.groups + + self.blocks = [] + for group in groups: + block = BlockData() + self.makeBlock(group, block.scores, block) + self.blocks.append(block) + + def makeBlock(self, group, node, block): + """Recursively populates the Block with data from the group. + + The group can contain parts and/or subgroups. + ly.dom nodes representing the LilyPond document are added to the node. + + """ + if group.part: + node = group.part.makeNode(node) + if group.parts: + # prefix for this block, used if necessary + self.currentScore += 1 + prefix = 'score' + ly.util.int2letter(self.currentScore) + + # is this a score and has it its own score properties? + globalName = 'global' + scoreProperties = self.scoreProperties + if isinstance(group.part, parts.containers.Score): + globalSection = group.part.globalSection(self) + if globalSection: + scoreProperties = group.part + globalName = prefix + 'Global' + a = ly.dom.Assignment(globalName, block.assignments) + a.append(globalSection) + ly.dom.BlankLine(block.assignments) + if globalName == 'global': + self.globalUsed = True + + # add parts here, always in \score { } + score = node if isinstance(node,ly.dom.Score) else ly.dom.Score(node) + ly.dom.Layout(score) + if self.midi: + midi = ly.dom.Midi(score) + # set MIDI tempo if necessary + if not self.showMetronomeMark: + scoreProperties.lyMidiTempo(ly.dom.Context('Score', midi)) + music = ly.dom.Simr() + score.insert(0, music) + + # a PartData subclass "knowing" the globalName and scoreProperties + class _PartData(PartData): pass + _PartData.globalName = globalName + _PartData.scoreProperties = scoreProperties + + # make the parts + partData = self.makeParts(group.parts, _PartData) + + # collect all 'prefixable' assignments for this group + assignments = [] + for p in partData: + assignments.extend(p.assignments) + + # add the assignments to the block + for p in partData: + for a in p.assignments: + block.assignments.append(a) + ly.dom.BlankLine(block.assignments) + block.backmatter.extend(p.afterblocks) + + # make part assignments if there is more than one part that has assignments + if sum(1 for p in partData if p.assignments) > 1: + def make(part, music): + if part.assignments: + a = ly.dom.Assignment(ly.dom.Reference(ly.util.mkid(part.name() + "Part"))) + ly.dom.Simr(a).extend(part.nodes) + ly.dom.Identifier(a.name, music).after = 1 + block.assignments.append(a) + ly.dom.BlankLine(block.assignments) + assignments.append(a) + else: + music.extend(part.nodes) + else: + def make(part, music): + music.extend(part.nodes) + + def makeRecursive(parts, music): + for part in parts: + make(part, music) + if part.children: + makeRecursive(part.children, part.music) + + parents = [p for p in partData if not p.isChild] + makeRecursive(parents, music) + + # add the prefix to the assignments if necessary + if self.usePrefix: + for a in assignments: + a.name.name = ly.util.mkid(prefix, a.name.name) + + for g in group.groups: + self.makeBlock(g, node, block) + + def makeParts(self, parts, partDataClass): + """Lets the parts build the music stubs and assignments. + + parts is a list of PartNode instances. + partDataClass is a subclass or PartData containing some attributes: + - globalName is either 'global' (for the global time/key signature + section) or something like 'scoreAGlobal' (when a score has its + own properties). + - scoreProperties is the ScoreProperties instance currently in effect + (the global one or a particular Score part's one). + + Returns the list of PartData object for the parts. + + """ + # number instances of the same type (Choir I and Choir II, etc.) + data = {} + types = collections.defaultdict(list) + def _search(parts, parent=None): + for group in parts: + pd = data[group] = partDataClass(group.part, parent) + types[pd.name()].append(group) + _search(group.parts, pd) + _search(parts) + for t in types.values(): + if len(t) > 1: + for num, group in enumerate(t, 1): + data[group].num = num + + # now build all the parts + for group in allparts(parts): + group.part.build(data[group], self) + + # check for name collisions in assignment identifiers + # add the part class name and a roman number if necessary + refs = collections.defaultdict(list) + for group in allparts(parts): + for a in data[group].assignments: + ref = a.name + name = ref.name + refs[name].append((ref, group)) + for reflist in refs.values(): + if len(reflist) > 1: + for ref, group in reflist: + # append the class name and number + ref.name = ly.util.mkid(ref.name, data[group].name()) + + # return all PartData instances + return [data[group] for group in allparts(parts)] + + def text(self, doc=None): + """Return LilyPond formatted output. """ + return self.printer().indent(doc or self.document()) + + def printer(self): + """Returns a ly.dom.Printer, that converts the ly.dom structure to LilyPond text. """ + return self._printer + + def document(self): + """Creates and returns a ly.dom tree representing the full LilyPond document.""" + doc = ly.dom.Document() + + # version + ly.dom.Version(self.lyVersionString, doc) + + # language + if self.pitchLanguage: + if self.lyVersion >= (2, 13, 38): + ly.dom.Line('\\language "{0}"'.format(self.pitchLanguage), doc) + else: + ly.dom.Include("{0}.ly".format(self.pitchLanguage), doc) + ly.dom.BlankLine(doc) + + # other include files + if self._includeFiles: + for filename in self._includeFiles: + ly.dom.Include(filename, doc) + ly.dom.BlankLine(doc) + + # general header + h = ly.dom.Header() + for name, value in self.header: + h[name] = value + if 'tagline' not in h and self.suppressTagLine: + ly.dom.Comment(_("Remove default LilyPond tagline"), h) + h['tagline'] = ly.dom.Scheme('#f') + if len(h): + doc.append(h) + ly.dom.BlankLine(doc) + + # paper size + if self.paperSize: + ly.dom.Scheme( + '(set-paper-size "{0}"{1})'.format( + self.paperSize, " 'landscape" if self.paperLandscape else ""), + ly.dom.Paper(doc) + ).after = 1 + ly.dom.BlankLine(doc) + + # remove bar numbers + if self.removeBarNumbers: + ly.dom.Line('\\remove "Bar_number_engraver"', + ly.dom.Context('Score', + ly.dom.Layout(doc))) + ly.dom.BlankLine(doc) + + # global section + if self.globalUsed: + a = ly.dom.Assignment('global') + a.append(self.globalSection) + doc.append(a) + ly.dom.BlankLine(doc) + + # add the main scores + for block in self.blocks: + doc.append(block.assignments) + doc.append(block.scores) + ly.dom.BlankLine(doc) + if len(block.backmatter): + doc.append(block.backmatter) + ly.dom.BlankLine(doc) + return doc + + def setMidiInstrument(self, node, midiInstrument): + """Sets the MIDI instrument for the node, if the user wants MIDI output.""" + if self.midi: + node.getWith()['midiInstrument'] = midiInstrument + + def setInstrumentNames(self, staff, longName, shortName): + """Sets the instrument names to the staff (or group). + + longName and shortName may either be a string or a ly.dom.Node object (markup) + The settings in the score wizard are honored. + + """ + if self.showInstrumentNames: + staff.addInstrumentNameEngraverIfNecessary() + w = staff.getWith() + first = longName if self.firstInstrumentName == 'long' else shortName + w['instrumentName'] = first + if self.otherInstrumentName: + other = longName if self.otherInstrumentName == 'long' else shortName + # If these are markup objects, copy them otherwise the assignment + # to shortInstrumentName takes it away from the instrumentName. + if other is first and isinstance(first, ly.dom.Node): + other = other.copy() + w['shortInstrumentName'] = other + + def instrumentName(self, function, num=0): + """Returns an instrument name. + + The name is constructed by calling the 'function' with our translator as + argument, and appending the number 'num' in roman literals, if num > 0. + + """ + name = function(self._) + if num: + name += ' ' + ly.util.int2roman(num) + return name + + def setInstrumentNamesFromPart(self, node, part, data): + """Sets the long and short instrument names for the node. + + Calls part.title(translator) and part.short(translator) to get the + names, appends roman literals if data.num > 0, and sets them on the node. + + """ + longName = self.instrumentName(part.title, data.num) + shortName = self.instrumentName(part.short, data.num) + self.setInstrumentNames(node, longName, shortName) + + +def assignparts(group): + """Moves the parts to sub-groups that contain no parts. + + If at least one subgroup uses the parts, the parent's parts are removed. + This way a user can specify some parts and then multiple scores, and they will all + use the same parts again. + + """ + partsOfParentUsed = False + for g in group.groups: + if not g.parts: + g.parts = group.parts + partsOfParentUsed = True + assignparts(g) + if partsOfParentUsed: + group.parts = [] + + +def itergroups(group): + """Iterates over the group and its subgroups as an event list. + + When a group is yielded, it means the group starts. + When None is yielded, it means that the last started groups ends. + + """ + yield group + for g in group.groups: + for i in itergroups(g): + yield i + yield None # end a group + + +def descendants(group): + """Iterates over the descendants of a group (including the group itself). + + First the group, then its children, then the grandchildren, etc. + + """ + def _descendants(group): + children = group.groups + while children: + new = [] + for g in children: + yield g + new.extend(g.groups) + children = new + yield group + for g in _descendants(group): + yield g + + +def needsPrefix(globalGroup): + """Returns True if there are multiple scores in group with shared part types. + + This means the music assignments will need a prefix (e.g. scoreAsoprano, + scoreBsoprano, etc.) + + """ + counter = {} # collections.Counter() would be nice but requires Python 2.7 + for group in itergroups(globalGroup): + if group: + partTypes = set(type(g.part) for g in group.parts) + for partType in partTypes: + counter[partType] = counter.get(partType, 0) + 1 + return any(v for v in counter.values() if v > 1) + + +def allparts(parts): + """Yields all the parts and child parts.""" + for group in parts: + yield group + for group in allparts(group.parts): + yield group + \ No newline at end of file diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/dialog.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/dialog.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/dialog.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/dialog.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,253 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Score Wizard dialog. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import cursortools +import indent +import util +import help + + +class ScoreWizardDialog(QDialog): + + pitchLanguageChanged = pyqtSignal(type('')) + + def __init__(self, mainwindow): + super(ScoreWizardDialog, self).__init__(mainwindow) + self.addAction(mainwindow.actionCollection.help_whatsthis) + self._pitchLanguage = None + + layout = QVBoxLayout() + self.setLayout(layout) + + self.tabs = QTabWidget() + b = self.dialogButtons = QDialogButtonBox() + b.setStandardButtons( + QDialogButtonBox.Reset + | QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + b.accepted.connect(self.accept) + b.rejected.connect(self.reject) + help.addButton(b, scorewiz_help) + b.button(QDialogButtonBox.Reset).clicked.connect(self.reset) + self.previewButton = b.addButton('', QDialogButtonBox.ActionRole) + self.previewButton.clicked.connect(self.showPreview) + layout.addWidget(self.tabs) + layout.addWidget(b) + + self.header = Header(self) + self.tabs.addTab(self.header, '') + self.parts = Parts(self) + self.tabs.addTab(self.parts, '') + self.settings = Settings(self) + self.tabs.addTab(self.settings, '') + + self.tabs.setCurrentIndex(0) + self.tabs.widget(0).widget() # activate it + self.tabs.currentChanged.connect(self.slotCurrentChanged) + util.saveDialogSize(self, "scorewiz/dialog/size") + app.translateUI(self) + self.accepted.connect(self.slotAccepted) + + def translateUI(self): + self.setWindowTitle(app.caption(_("Score Setup Wizard"))) + for i in range(self.tabs.count()): + self.tabs.setTabText(i, self.tabs.widget(i).title()) + self.dialogButtons.button(QDialogButtonBox.Reset).setText(_("Clear")) + self.dialogButtons.button(QDialogButtonBox.Reset).setToolTip(_( + "Clears the current page of the Score Wizard.")) + self.previewButton.setText(_("Preview")) + + def slotCurrentChanged(self, i): + """Lazy-loads the tab's page if shown for the first time.""" + self.tabs.widget(i).widget() + + def reset(self): + self.tabs.currentWidget().widget().clear() + + def setPitchLanguage(self, language): + if language != self._pitchLanguage: + self._pitchLanguage = language + self.pitchLanguageChanged.emit(language) + + def pitchLanguage(self): + if self._pitchLanguage is None: + # load setting; saving occurs in .settings.py + lang = QSettings().value('scorewiz/lilypond/pitch_language', '') + from .scoreproperties import keyNames + if lang not in keyNames: + lang = '' + self._pitchLanguage = lang + return self._pitchLanguage + + def slotAccepted(self): + """Makes the score and puts it in the editor.""" + from . import build + builder = build.Builder(self) + cursor = self.parent().currentView().textCursor() + with cursortools.editBlock(cursor): + cursortools.insertText(cursor, builder.text()) + indent.reIndent(cursor) + + def showPreview(self): + """Shows a preview.""" + try: + dlg = self._previewDialog + except AttributeError: + import musicpreview + dlg = self._previewDialog = musicpreview.MusicPreviewDialog(self) + + # get the document and fill in some example music + from . import preview, build + builder = build.Builder(self) + doc = builder.document() + preview.examplify(doc) + # preview it + dlg.preview(builder.text(doc), _("Score Preview")) + dlg.exec_() + dlg.cleanup() + + +class Page(QWidget): + """A Page in the tab widget. + + Basically this is just a QWidget that loads the desired page + as soon as the widget() is called for the first time. + + """ + def __init__(self, dialog): + super(Page, self).__init__(dialog) + self._widget = None + + def title(self): + """Should return a title.""" + + def widget(self): + if self._widget is None: + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + w = self._widget = self.createWidget(self) + layout.addWidget(w) + return self._widget + + def createWidget(self, parent): + """Should return the widget for this tab.""" + + +class Header(Page): + def title(self): + return _("&Titles and Headers") + + def createWidget(self, parent): + from . import header + return header.HeaderWidget(parent) + + +class Parts(Page): + def title(self): + return _("&Parts") + + def createWidget(self, parent): + from . import score + return score.ScorePartsWidget(parent) + + +class Settings(Page): + def title(self): + return _("&Score settings") + + def createWidget(self, parent): + from . import settings + return settings.SettingsWidget(parent) + + +class scorewiz_help(help.page): + def title(): + return _("The Score Wizard") + + def body(): + from . import ScoreWizard + d = {} + action = ScoreWizard.instances()[0].actionCollection.scorewiz + d['key'] = help.shortcut(action) + d['menu'] = help.menu(_("menu title", "Tools"), _("Setup New Score...")) + return _("""\ +

+The Score Setup Wizard ({key}) in {menu} is designed +to quickly setup a LilyPond music score. +

+ +

+In the first tab, Titles and Headers, you can enter titling +information. +

+ +

+In the second tab, Parts, you can compose your score out of many +available part types. +Doubleclick a part type to add it to your score (or click Add). +Select the part in the score list to change some settings for the selected part, +if desired. +Many parts, especially Choir, have powerful options to set up the score the way +you want it. +

+ +

+In the third tab, Score settings, global score properties and +preferences can be set. +

+ +

+Click the Preview button to get a preview with some example music filled in. +Click OK to copy the generated LilyPond source text to the editor. +

+ +

Multiple pieces or mouvements

+ +

+A special and powerful feature of the Parts tab is hidden in the +"Containers" category in the part types list. +

+ +

+This category contains the Score, Book and Bookpart types, with which you +can setup a LilyPond document containing multiple scores or even books. +You may add Score, Bookpart or Book entries to the score view. +They can be nested: a Score can be added to a Bookpart or Book but you can't +add a Book to a Bookpart or a Score. +

+ +

+Then you can add musical parts. +If you want to create multiple scores with exact the same parts, you can just +add the parts to the top level of the score view, and then the scores, without +adding musical parts to the scores. +The scores will then use the parts in the top level of the score. +

+""").format(**d) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/header.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/header.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/header.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/header.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,183 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Header (titles) widget. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import util +import textformats +import completionmodel + +from . import __path__ + + +class HeaderWidget(QWidget): + def __init__(self, parent): + super(HeaderWidget, self).__init__(parent) + + layout = QHBoxLayout() + self.setLayout(layout) + + # The html view with the score layout example + t = self.htmlView = QTextBrowser() + t.setOpenLinks(False) + t.setOpenExternalLinks(False) + t.setSearchPaths(__path__) + t.setTextInteractionFlags(Qt.LinksAccessibleByMouse) + t.setFocusPolicy(Qt.NoFocus) + + # ensure that the full HTML example page is displayed + t.setContentsMargins(2, 2, 2, 2) + t.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + t.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + t.setMinimumSize(QSize(350, 350)) + layout.addWidget(t) + + t.anchorClicked.connect(self.slotAnchorClicked) + + grid = QGridLayout() + layout.addLayout(grid) + + grid.setVerticalSpacing(1) + grid.setColumnMinimumWidth(1, 200) + + self.labels = {} + self.edits = {} + for row, (name, desc) in enumerate(headers()): + l = QLabel() + e = QLineEdit() + l.setBuddy(e) + grid.addWidget(l, row, 0) + grid.addWidget(e, row, 1) + self.labels[name] = l + self.edits[name] = e + c = QCompleter(completionmodel.model("scorewiz/completion/header/"+name), e) + c.setCaseSensitivity(Qt.CaseInsensitive) + e.setCompleter(c) + + self.window().accepted.connect(self.saveCompletions) + app.settingsChanged.connect(self.readSettings) + self.readSettings() + app.translateUI(self) + + def translateUI(self): + msg = _("Click to enter a value.") + self.htmlView.setHtml(titles_html.format( + copyrightmsg = _("bottom of first page"), + taglinemsg = _("bottom of last page"), + **dict((name, "{2}".format(msg, name, desc)) + for name, desc in headers()))) + for name, desc in headers(): + self.labels[name].setText(desc + ":") + # add accelerators to names, avoiding the tab names + tabwidget = self.window().tabs + used = filter(None, (util.getAccelerator(tabwidget.widget(i).title()) + for i in range(tabwidget.count()))) + util.addAccelerators([self.labels[name] for name, desc in headers()], used) + + def saveCompletions(self): + for edit in self.edits.values(): + text = edit.text().strip() + if text: + edit.completer().model().addString(text) + + def readSettings(self): + p = self.htmlView.palette() + p.setColor(QPalette.Base, textformats.formatData('editor').baseColors['paper']) + self.htmlView.setPalette(p) + + def slotAnchorClicked(self, url): + try: + e = self.edits[url.toString()] + except KeyError: + return + e.setFocus() + + def clear(self): + """Empties all text entries.""" + for edit in self.edits.values(): + edit.clear() + + def headers(self): + """Yields two-tuples (headername, entered text) for the headers that are non-empty.""" + for name, desc in headers(): + text = self.edits[name].text().strip() + if text: + yield name, text + + + +def headers(): + """Yields two-tuples (headername, translated name) in a sensible order.""" + yield 'dedication', _("Dedication") + yield 'title', _("Title") + yield 'subtitle', _("Subtitle") + yield 'subsubtitle', _("Subsubtitle") + yield 'instrument', _("Instrument") + yield 'composer', _("Composer") + yield 'arranger', _("Arranger") + yield 'poet', _("Poet") + yield 'meter', _("Meter") + yield 'piece', _("Piece") + yield 'opus', _("Opus") + yield 'copyright', _("Copyright") + yield 'tagline', _("Tagline") + + +titles_html = r""" + + + + + + + + + + + + + + + + + + + + + + + +
{dedication}
{title}
{subtitle}
{subsubtitle}
{poet}{instrument}{composer}
{meter} {arranger}
{piece} {opus}
{copyright} ({copyrightmsg})
{tagline} ({taglinemsg})
+""" diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/__init__.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,60 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Score Wizard. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QAction, QKeySequence + +import actioncollection +import actioncollectionmanager +import icons +import plugin + + +class ScoreWizard(plugin.MainWindowPlugin): + def __init__(self, mainwindow): + self.actionCollection = ac = Actions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + ac.scorewiz.triggered.connect(self.showDialog) + self._dlg = None + + def showDialog(self): + if self._dlg is None: + from . import dialog + self._dlg = dialog.ScoreWizardDialog(self.mainwindow()) + self._dlg.show() + + + + + +class Actions(actioncollection.ActionCollection): + name = 'scorewiz' + def createActions(self, parent=None): + self.scorewiz = QAction(parent) + self.scorewiz.setIcon(icons.get("score_wizard")) + self.scorewiz.setShortcut(QKeySequence("Ctrl+Shift+N")) + + def translateUI(self): + self.scorewiz.setText(_("Setup New Score...")) + \ No newline at end of file diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/Makefile frescobaldi-2.0.0/frescobaldi_app/scorewiz/Makefile --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/Makefile 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +# Which LilyPond executable to use +LILYPOND=~/lilypond_bin/2.14.0-1/bin/lilypond + +scorewiz.png: scorewiz.ly + $(LILYPOND) --png -dresolution=100 -dpixmap-format="pngalpha" $< + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/_base.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/_base.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/_base.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/_base.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,220 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Base types for parts. +""" + +from __future__ import unicode_literals + +import __builtin__ +import collections + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import listmodel +import ly.dom + + +Category = collections.namedtuple("Category", "title items icon") + + +class Base(object): + """Base class for both Part and Container.""" + @staticmethod + def title(_=__builtin__._): + """Should return a title. + + If a translator is given, it is used instead of the builtin. + + """ + + @staticmethod + def short(_=__builtin__._): + """Should return an abbreviated title. + + If a translator is given, it is used instead of the builtin. + + """ + + def createWidgets(self, layout): + """Should create widgets to adjust settings.""" + self.noSettingsLabel = QLabel() + layout.addWidget(self.noSettingsLabel) + + def translateWidgets(self): + """Should set the text in the widgets when the language changes.""" + self.noSettingsLabel.setText('({0})'.format(_("No settings available."))) + + def accepts(self): + """Should return a tuple of classes this part item accepts as child items.""" + return () + + def build(self, data, builder): + """Should populate the PartData (see build.py).""" + data.nodes.append(ly.dom.Comment("Part {0}".format(self.__class__.__name__))) + + +class Part(Base): + """Base class for Parts (that can't contain other parts).""" + + + +class Container(Base): + """Base class for "part" types that can contain others, like a Staff Group or Score, Book etc.""" + def accepts(self): + return (Part, Container) + + +class Group(Container): + """Base class for "part" types that are a group such as Book, BookPart and Score.""" + + +# Mixin- or base classes with basic behaviour +class SingleVoicePart(Part): + """Base class for a part creating a single single-voice staff.""" + midiInstrument = '' + clef = None + octave = 1 + transposition = None # or a three tuple (octave, note, alteration) + + def build(self, data, builder): + a = data.assignMusic(None, self.octave, self.transposition) + staff = ly.dom.Staff() + builder.setInstrumentNamesFromPart(staff, self, data) + if self.midiInstrument: + builder.setMidiInstrument(staff, self.midiInstrument) + seq = ly.dom.Seqr(staff) + if self.clef: + ly.dom.Clef(self.clef, seq) + ly.dom.Identifier(a.name, seq) + data.nodes.append(staff) + + +class PianoStaffPart(Part): + """Base class for parts creating a piano staff.""" + def createWidgets(self, layout): + self.label = QLabel(wordWrap=True) + self.upperVoicesLabel = QLabel() + self.lowerVoicesLabel = QLabel() + self.upperVoices = QSpinBox(minimum=1, maximum=4, value=1) + self.lowerVoices = QSpinBox(minimum=1, maximum=4, value=1) + + self.upperVoicesLabel.setBuddy(self.upperVoices) + self.lowerVoicesLabel.setBuddy(self.lowerVoices) + + layout.addWidget(self.label) + grid = QGridLayout() + grid.addWidget(self.upperVoicesLabel, 0, 0) + grid.addWidget(self.upperVoices, 0, 1) + grid.addWidget(self.lowerVoicesLabel, 1, 0) + grid.addWidget(self.lowerVoices, 1, 1) + layout.addLayout(grid) + + def translateWidgets(self): + self.label.setText('{0} ({1})'.format( + _("Adjust how many separate voices you want on each staff."), + _("This is primarily useful when you write polyphonic music " + "like a fuge."))) + self.upperVoicesLabel.setText(_("Right hand:")) + self.lowerVoicesLabel.setText(_("Left hand:")) + + def buildStaff(self, data, builder, name, octave, numVoices=1, node=None, clef=None): + """Build a staff with the given number of voices and name.""" + staff = ly.dom.Staff(name, parent=node) + builder.setMidiInstrument(staff, self.midiInstrument) + c = ly.dom.Seqr(staff) + if clef: + ly.dom.Clef(clef, c) + if numVoices == 1: + a = data.assignMusic(name, octave) + ly.dom.Identifier(a.name, c) + else: + c = ly.dom.Sim(c) + for i in range(1, numVoices): + a = data.assignMusic(name + ly.util.int2text(i), octave) + ly.dom.Identifier(a.name, c) + ly.dom.VoiceSeparator(c) + a = data.assignMusic(name + ly.util.int2text(numVoices), octave) + ly.dom.Identifier(a.name, c) + return staff + + def build(self, data, builder): + """ Setup structure for a 2-staff PianoStaff. """ + p = ly.dom.PianoStaff() + builder.setInstrumentNamesFromPart(p, self, data) + s = ly.dom.Sim(p) + # add two staves, with a respective number of voices. + self.buildStaff(data, builder, 'right', 1, self.upperVoices.value(), s) + self.buildStaff(data, builder, 'left', 0, self.lowerVoices.value(), s, "bass") + data.nodes.append(p) + + +class ChordNames(object): + def createWidgets(self, layout): + self.chordStyleLabel = QLabel() + self.chordStyle = QComboBox() + self.chordStyleLabel.setBuddy(self.chordStyle) + self.chordStyle.setModel(listmodel.ListModel(chordNameStyles, self.chordStyle, + display=listmodel.translate)) + self.guitarFrets = QCheckBox() + + box = QHBoxLayout() + box.addWidget(self.chordStyleLabel) + box.addWidget(self.chordStyle) + layout.addLayout(box) + layout.addWidget(self.guitarFrets) + + def translateWidgets(self): + self.chordStyleLabel.setText(_("Chord style:")) + self.guitarFrets.setText(_("Guitar fret diagrams")) + self.guitarFrets.setToolTip(_( + "Show predefined guitar fret diagrams below the chord names " + "(LilyPond 2.12 and above).")) + self.chordStyle.model().update() + + def build(self, data, builder): + p = ly.dom.ChordNames() + a = data.assign('chordNames') + ly.dom.Identifier(a.name, p) + s = ly.dom.ChordMode(a) + ly.dom.Identifier(data.globalName, s).after = 1 + i = self.chordStyle.currentIndex() + if i > 0: + ly.dom.Line('\\{0}Chords'.format( + ('german', 'semiGerman', 'italian', 'french')[i-1]), s) + ly.dom.LineComment(_("Chords follow here."), s) + ly.dom.BlankLine(s) + data.nodes.append(p) + if self.guitarFrets.isChecked(): + f = ly.dom.FretBoards() + ly.dom.Identifier(a.name, f) + data.nodes.append(f) + data.includes.append("predefined-guitar-fretboards.ly") + + +chordNameStyles = ( + lambda: _("Default"), + lambda: _("German"), + lambda: _("Semi-German"), + lambda: _("Italian"), + lambda: _("French"), +) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/brass.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/brass.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/brass.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/brass.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,124 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Brass part types. +""" + +from __future__ import unicode_literals + +import __builtin__ + +from . import _base +from . import register + + +class BrassPart(_base.SingleVoicePart): + """Base class for brass types.""" + + +class HornF(BrassPart): + @staticmethod + def title(_=__builtin__._): + return _("Horn in F") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Horn in F", "Hn.F.") + + midiInstrument = 'french horn' + transposition = (-1, 3, 0) + + +class TrumpetC(BrassPart): + @staticmethod + def title(_=__builtin__._): + return _("Trumpet in C") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Trumpet in C", "Tr.C.") + + midiInstrument = 'trumpet' + + +class TrumpetBb(TrumpetC): + @staticmethod + def title(_=__builtin__._): + return _("Trumpet in Bb") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Trumpet in Bb", "Tr.Bb.") + + transposition = (-1, 6, -1) + + +class Trombone(BrassPart): + @staticmethod + def title(_=__builtin__._): + return _("Trombone") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Trombone", "Trb.") + + midiInstrument = 'trombone' + clef = 'bass' + octave = -1 + + +class Tuba(BrassPart): + @staticmethod + def title(_=__builtin__._): + return _("Tuba") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Tuba", "Tb.") + + midiInstrument = 'tuba' + transposition = (-2, 6, -1) + + +class BassTuba(BrassPart): + @staticmethod + def title(_=__builtin__._): + return _("Bass Tuba") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Bass Tuba", "B.Tb.") + + midiInstrument = 'tuba' + clef = 'bass' + octave = -1 + transposition = (-2, 0, 0) + + +register( + lambda: _("Brass"), + [ + HornF, + TrumpetC, + TrumpetBb, + Trombone, + Tuba, + BassTuba, + ]) diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/containers.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/containers.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/containers.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/containers.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,213 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Container part types. +""" + +from __future__ import unicode_literals + +import __builtin__ + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import ly.dom +import listmodel +import symbols +import widgets.lineedit +from scorewiz import scoreproperties + +from . import _base +from . import register + +class StaffGroup(_base.Container): + @staticmethod + def title(_=__builtin__._): + return _("Staff Group") + + def accepts(self): + return (StaffGroup, _base.Part) + + def createWidgets(self, layout): + self.systemStartLabel = QLabel() + self.systemStart = QComboBox() + self.systemStartLabel.setBuddy(self.systemStart) + self.systemStart.setModel(listmodel.ListModel(( + # L10N: Brace like a piano staff + (lambda: _("Brace"), 'system_start_brace'), + # L10N: Bracket like a choir staff + (lambda: _("Bracket"), 'system_start_bracket'), + # L10N: Square bracket like a sub-group + (lambda: _("Square"), 'system_start_square'), + ), self.systemStart, display=listmodel.translate_index(0), + icon=lambda item: symbols.icon(item[1]))) + self.systemStart.setIconSize(QSize(64, 64)) + self.connectBarLines = QCheckBox(checked=True) + + box = QHBoxLayout() + box.addWidget(self.systemStartLabel) + box.addWidget(self.systemStart) + layout.addLayout(box) + layout.addWidget(self.connectBarLines) + + def translateWidgets(self): + self.systemStartLabel.setText(_("Type:")) + self.connectBarLines.setText(_("Connect Barlines")) + self.connectBarLines.setToolTip(_("If checked, barlines are connected between the staves.")) + self.systemStart.model().update() + + def build(self, data, builder): + s = self.systemStart.currentIndex() + b = self.connectBarLines.isChecked() + if s == 0: + node = ly.dom.GrandStaff() + if not b: + ly.dom.Line("\\remove Span_bar_engraver", node.getWith()) + else: + node = ly.dom.StaffGroup() if b else ly.dom.ChoirStaff() + if s == 2: + node.getWith()['systemStartDelimiter'] = ly.dom.Scheme("'SystemStartSquare") + data.nodes.append(node) + data.music = ly.dom.Simr(node) + + +class Score(_base.Group, scoreproperties.ScoreProperties): + @staticmethod + def title(_=__builtin__._): + return _("Score") + + def createWidgets(self, layout): + self.pieceLabel = QLabel() + self.piece = QLineEdit() + self.pieceLabel.setBuddy(self.piece) + self.opusLabel = QLabel() + self.opus = QLineEdit() + self.opusLabel.setBuddy(self.opus) + self.scoreProps = QGroupBox(checkable=True, checked=False) + scoreproperties.ScoreProperties.createWidgets(self) + + grid = QGridLayout() + grid.addWidget(self.pieceLabel, 0 ,0) + grid.addWidget(self.piece, 0, 1) + grid.addWidget(self.opusLabel, 1, 0) + grid.addWidget(self.opus, 1, 1) + layout.addLayout(grid) + layout.addWidget(self.scoreProps) + layout = QVBoxLayout() + self.scoreProps.setLayout(layout) + scoreproperties.ScoreProperties.layoutWidgets(self, layout) + + scorewiz = self.scoreProps.window() + self.setPitchLanguage(scorewiz.pitchLanguage()) + scorewiz.pitchLanguageChanged.connect(self.setPitchLanguage) + scorewiz.accepted.connect(self.saveCompletions) + + def translateWidgets(self): + self.pieceLabel.setText(_("Piece:")) + self.opusLabel.setText(_("Opus:")) + self.scoreProps.setTitle(_("Properties")) + scoreproperties.ScoreProperties.translateWidgets(self) + + def accepts(self): + return (StaffGroup, _base.Part) + + def makeNode(self, node): + score = ly.dom.Score(node) + h = ly.dom.Header() + piece = self.piece.text().strip() + opus = self.opus.text().strip() + if piece: + h['piece'] = ly.dom.QuotedString(piece) + if opus: + h['opus'] = ly.dom.QuotedString(opus) + if len(h): + score.append(h) + return score + + def globalSection(self, builder): + if self.scoreProps.isChecked(): + return scoreproperties.ScoreProperties.globalSection(self, builder) + + + +class BookPart(_base.Group): + @staticmethod + def title(_=__builtin__._): + return _("Book Part") + + def accepts(self): + return (Score, StaffGroup, _base.Part) + + def makeNode(self, node): + bookpart = ly.dom.BookPart(node) + return bookpart + + +class Book(_base.Group): + @staticmethod + def title(_=__builtin__._): + return _("Book") + + def accepts(self): + return (BookPart, Score, StaffGroup, _base.Part) + + def createWidgets(self, layout): + self.bookOutputInfo = QLabel(wordWrap=True) + self.bookOutputLabel = QLabel() + self.bookOutput = widgets.lineedit.LineEdit() + self.bookOutputFileName = QRadioButton() + self.bookOutputSuffix = QRadioButton(checked=True) + + layout.addWidget(self.bookOutputInfo) + grid = QGridLayout(spacing=0) + grid.addWidget(self.bookOutputLabel, 0, 0) + grid.addWidget(self.bookOutput, 0, 1, 1, 2) + grid.addWidget(self.bookOutputFileName, 1, 1) + grid.addWidget(self.bookOutputSuffix, 1, 2) + layout.addLayout(grid) + + def translateWidgets(self): + self.bookOutputInfo.setText(_( + "

Here you can specify a filename or suffix (without extension) " + "to set the names of generated output files for this book.

\n" + "

If you choose \"Suffix\" the entered name will be appended " + "to the document's file name; if you choose \"Filename\", just " + "the entered name will be used.

")) + self.bookOutputLabel.setText(_("Output Filename:")) + self.bookOutputFileName.setText(_("Filename")) + self.bookOutputSuffix.setText(_("Suffix")) + + def makeNode(self, node): + book = ly.dom.Book(node) + name = self.bookOutput.text().strip() + if name: + cmd = 'bookOutputName' if self.bookOutputFileName.isChecked() else 'bookOutputSuffix' + ly.dom.Line(r'\{0} "{1}"'.format(cmd, name.replace('"', r'\"')), book) + return book + + +register( + lambda: _("Containers"), + [ + StaffGroup, + Score, + BookPart, + Book, + ]) diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/__init__.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,111 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +All available part types. +""" + +from __future__ import unicode_literals + +import collections + +from PyQt4.QtCore import QAbstractItemModel, QModelIndex, Qt +from PyQt4.QtGui import QApplication + +import icons + +from . import _base + +# categories is a global list holding Category instances. +# Each Category describes a related group of part types with a title +# (callable because translation is dynamic), a list of classes and +# an icon (defaulting to a 'folder-open' QIcon). +categories = [] + +def register(title, items, icon=None): + """Register a category.""" + categories.append(_base.Category(title, items, icon or icons.get("folder-open"))) + + + +# Import here the instrument / part type modules. +# Every module will call the register() function to register its part types. +from . import ( + strings, + plucked_strings, + woodwind, + brass, + vocal, + keyboard, + percussion, + special, + containers, +) + + + + +def model(): + """Returns all available part types as a hierarchical model.""" + m = Model(QApplication.instance()) + global model + model = lambda: m + return m + + +class Model(QAbstractItemModel): + """Provides the categories and the part types contained therein as a Model. + + Simply accesses the global 'categories' variable. + Don't instantiate directly but use the model() global function. + + """ + def index(self, row, column, parent): + if not parent.isValid(): + return self.createIndex(row, column) + elif parent.internalPointer() is None: + return self.createIndex(row, column, categories[parent.row()]) + return QModelIndex() + + def parent(self, index): + if index.internalPointer() is None: + return QModelIndex() + return self.createIndex(categories.index(index.internalPointer()), 0) + + def columnCount(self, parent): + return 1 + + def rowCount(self, parent): + if not parent.isValid(): + return len(categories) + elif parent.internalPointer() is None: + return len(categories[parent.row()].items) + return 0 + + def data(self, index, role): + if role == Qt.DisplayRole: + if index.internalPointer() is None: + return categories[index.row()].title() + return index.internalPointer().items[index.row()].title() + elif role == Qt.DecorationRole: + if index.internalPointer() is None: + return categories[index.row()].icon + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/keyboard.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/keyboard.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/keyboard.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/keyboard.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,133 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Keyboard part types. +""" + +from __future__ import unicode_literals + +import __builtin__ + +from PyQt4.QtGui import QGridLayout, QLabel, QSpinBox + +import ly.dom +import ly.util + +from . import _base +from . import register + + +class KeyboardPart(_base.PianoStaffPart): + pass + + +class Piano(KeyboardPart): + @staticmethod + def title(_=__builtin__._): + return _("Piano") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Piano", "Pno.") + + midiInstrument = 'acoustic grand' + + +class Harpsichord(KeyboardPart): + @staticmethod + def title(_=__builtin__._): + return _("Harpsichord") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Harpsichord", "Hs.") + + midiInstrument = 'harpsichord' + + +class Clavichord(KeyboardPart): + @staticmethod + def title(_=__builtin__._): + return _("Clavichord") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Clavichord", "Clv.") + + midiInstrument = 'clav' + + +class Organ(KeyboardPart): + @staticmethod + def title(_=__builtin__._): + return _("Organ") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Organ", "Org.") + + midiInstrument = 'church organ' + + def createWidgets(self, layout): + super(Organ, self).createWidgets(layout) + grid = layout.itemAt(layout.count() - 1).layout() + self.pedalVoices = QSpinBox(minimum=0, maximum=4, value=1) + self.pedalVoicesLabel = QLabel() + self.pedalVoicesLabel.setBuddy(self.pedalVoices) + grid.addWidget(self.pedalVoicesLabel, 2, 0) + grid.addWidget(self.pedalVoices) + + def translateWidgets(self): + super(Organ, self).translateWidgets() + self.pedalVoicesLabel.setText(_("Pedal:")) + self.pedalVoices.setToolTip(_( + "Set to 0 to disable the pedal altogether.")) + + def build(self, data, builder): + super(Organ, self).build(data, builder) + if self.pedalVoices.value(): + data.nodes.append(self.buildStaff(data, builder, + 'pedal', -1, self.pedalVoices.value(), clef="bass")) + + + +class Celesta(KeyboardPart): + @staticmethod + def title(_=__builtin__._): + return _("Celesta") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Celesta", "Cel.") + + midiInstrument = 'celesta' + + +register( + lambda: _("Keyboard instruments"), + [ + Piano, + Harpsichord, + Clavichord, + Organ, + Celesta, + ]) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/percussion.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/percussion.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/percussion.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/percussion.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,252 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Percussion part types. +""" + +from __future__ import unicode_literals + +import __builtin__ + +from PyQt4.QtGui import QCheckBox, QComboBox, QGridLayout, QHBoxLayout, QLabel, QSpinBox + +import listmodel +import ly.dom + +from . import _base +from . import register + + + +class PitchedPercussionPart(_base.SingleVoicePart): + """Base class for pitched percussion types.""" + + +class Timpani(PitchedPercussionPart): + @staticmethod + def title(_=__builtin__._): + return _("Timpani") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Timpani", "Tmp.") + + midiInstrument = 'timpani' + clef = 'bass' + octave = -1 + + +class Xylophone(PitchedPercussionPart): + @staticmethod + def title(_=__builtin__._): + return _("Xylophone") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Xylophone", "Xyl.") + + midiInstrument = 'xylophone' + + +class Marimba(_base.PianoStaffPart): + @staticmethod + def title(_=__builtin__._): + return _("Marimba") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Marimba", "Mar.") + + midiInstrument = 'marimba' + + def createWidgets(self, layout): + super(Marimba, self).createWidgets(layout) + self.lowerVoices.setMinimum(0) + + def translateWidgets(self): + self.upperVoicesLabel.setText(_("Upper staff:")) + self.lowerVoicesLabel.setText(_("Lower staff:")) + self.lowerVoices.setToolTip(_( + "Set the number of voices to 0 to disable the second staff.")) + + def build(self, data, builder): + if self.lowerVoices.value(): + super(Marimba, self).build(data, builder) + else: + data.nodes.append(self.buildStaff(data, builder, None, 1)) + + +class Vibraphone(Marimba): + @staticmethod + def title(_=__builtin__._): + return _("Vibraphone") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Vibraphone", "Vib.") + + midiInstrument = 'vibraphone' + + +class TubularBells(PitchedPercussionPart): + @staticmethod + def title(_=__builtin__._): + return _("Tubular bells") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Tubular bells", "Tub.") + + midiInstrument = 'tubular bells' + + +class Glockenspiel(PitchedPercussionPart): + @staticmethod + def title(_=__builtin__._): + return _("Glockenspiel") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Glockenspiel", "Gls.") + + midiInstrument = 'glockenspiel' + + +class Carillon(_base.PianoStaffPart): + @staticmethod + def title(_=__builtin__._): + return _("Carillon") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Carillon", "Car.") + + midiInstrument = 'tubular bells' # anyone knows better? + + def translateWidgets(self): + super(Carillon, self).translateWidgets() + self.upperVoicesLabel.setText(_("Manual staff:")) + self.lowerVoicesLabel.setText(_("Pedal staff:")) + + def build(self, data, builder): + p = ly.dom.PianoStaff() + builder.setInstrumentNamesFromPart(p, self, data) + s = ly.dom.Sim(p) + # add two staves, with a respective number of voices. + self.buildStaff(data, builder, 'manual', 1, self.upperVoices.value(), s) + self.buildStaff(data, builder, 'pedal', 0, self.lowerVoices.value(), s, "bass") + data.nodes.append(p) + + +class Drums(_base.Part): + @staticmethod + def title(_=__builtin__._): + return _("Drums") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Drums", "Dr.") + + def createWidgets(self, layout): + self.voicesLabel = QLabel() + self.voices = QSpinBox(minimum=1, maximum=4, value=1) + self.drumStyleLabel = QLabel() + self.drumStyle = QComboBox() + self.drumStyle.setModel(listmodel.ListModel(drumStyles, self.drumStyle, display=listmodel.translate)) + self.drumStems = QCheckBox() + + box = QHBoxLayout() + box.addWidget(self.voicesLabel) + box.addWidget(self.voices) + layout.addLayout(box) + box = QHBoxLayout() + box.addWidget(self.drumStyleLabel) + box.addWidget(self.drumStyle) + layout.addLayout(box) + layout.addWidget(self.drumStems) + + def translateWidgets(self): + self.voicesLabel.setText(_("Voices:")) + self.drumStyleLabel.setText(_("Style:")) + self.drumStems.setText(_("Remove stems")) + self.drumStems.setToolTip(_("Remove the stems from the drum notes.")) + self.drumStyle.model().update() + + def assignDrums(self, data, name = None): + """Creates an empty name = \drummode assignment. + + Returns the assignment. + + """ + a = data.assign(name) + s = ly.dom.DrumMode(a) + ly.dom.Identifier(data.globalName, s) + ly.dom.LineComment(_("Drums follow here."), s) + ly.dom.BlankLine(s) + return a + + def build(self, data, builder): + p = ly.dom.DrumStaff() + s = ly.dom.Simr(p) + if self.voices.value() > 1: + for i in range(1, self.voices.value() + 1): + q = ly.dom.Seq(ly.dom.DrumVoice(parent=s)) + ly.dom.Text('\\voice' + ly.util.int2text(i), q) + a = self.assignDrums(data, 'drum' + ly.util.int2text(i)) + ly.dom.Identifier(a.name, q) + else: + a = self.assignDrums(data, 'drum') + ly.dom.Identifier(a.name, s) + builder.setInstrumentNamesFromPart(p, self, data) + i = self.drumStyle.currentIndex() + if i > 0: + v = ('drums', 'timbales', 'congas', 'bongos', 'percussion')[i] + p.getWith()['drumStyleTable'] = ly.dom.Scheme(v + '-style') + v = (5, 2, 2, 2, 1)[i] + ly.dom.Line("\\override StaffSymbol #'line-count = #{0}".format(v), p.getWith()) + if self.drumStems.isChecked(): + ly.dom.Line("\\override Stem #'stencil = ##f", p.getWith()) + ly.dom.Line("\\override Stem #'length = #3 % " + _("keep some distance."), + p.getWith()) + data.nodes.append(p) + + +drumStyles = ( + lambda: _("Drums (5 lines, default)"), + lambda: _("Timbales-style (2 lines)"), + lambda: _("Congas-style (2 lines)"), + lambda: _("Bongos-style (2 lines)"), + lambda: _("Percussion-style (1 line)"), +) + + + +register( + lambda: _("Percussion"), + [ + Timpani, + Xylophone, + Marimba, + Vibraphone, + TubularBells, + Glockenspiel, + Carillon, + Drums, + ]) diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/plucked_strings.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/plucked_strings.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/plucked_strings.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/plucked_strings.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,345 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Plucked string part types. +""" + +from __future__ import unicode_literals + +import __builtin__ + +from PyQt4.QtGui import QCheckBox, QComboBox, QGridLayout, QHBoxLayout, QLabel, QSpinBox + +import listmodel +import ly.dom + +from . import _base +from . import register + + +class TablaturePart(_base.Part): + """Base class for tablature instrument part types.""" + + octave = 0 + clef = None + transposition = None + tunings = () # may contain a list of tunings. + tabFormat = '' # can contain a tablatureFormat value. + + def createWidgets(self, layout): + self.staffTypeLabel = QLabel() + self.staffType = QComboBox() + self.staffTypeLabel.setBuddy(self.staffType) + self.staffType.setModel(listmodel.ListModel(tablatureStaffTypes, + self.staffType, display=listmodel.translate)) + box = QHBoxLayout() + layout.addLayout(box) + box.addWidget(self.staffTypeLabel) + box.addWidget(self.staffType) + if self.tunings: + self.createTuningWidgets(layout) + self.staffType.activated.connect(self.slotTabEnable) + self.slotTabEnable(0) + + def createTuningWidgets(self, layout): + self.tuningLabel = QLabel() + self.tuning = QComboBox() + self.tuningLabel.setBuddy(self.tuning) + tunings = [('', lambda: _("Default"))] + tunings.extend(self.tunings) + self.tuning.setModel(listmodel.ListModel(tunings, self.tuning, + display=listmodel.translate_index(1))) + self.tuning.setCurrentIndex(1) + box = QHBoxLayout() + layout.addLayout(box) + box.addWidget(self.tuningLabel) + box.addWidget(self.tuning) + + def translateWidgets(self): + self.staffTypeLabel.setText(_("Staff type:")) + self.staffType.model().update() + if self.tunings: + self.translateTuningWidgets() + + def translateTuningWidgets(self): + self.tuningLabel.setText(_("Tuning:")) + self.tuning.model().update() + + def slotTabEnable(self, enable): + """Called when the user changes the staff type. + + Non-zero if the user wants a TabStaff. + + """ + self.tuning.setEnabled(bool(enable)) + + def voiceCount(self): + """Returns the number of voices. + + Inherit to make this user-settable. + + """ + return 1 + + def build(self, data, builder): + # First make assignments for the voices we want to create + numVoices = self.voiceCount() + if numVoices == 1: + voices = (ly.util.mkid(data.name()),) + elif numVoices == 2: + order = 1, 2 + voices = 'upper', 'lower' + elif numVoices == 3: + order = 1, 3, 2 + voices = 'upper', 'middle', 'lower' + else: + order = 1, 2, 3, 4 + voices = [ly.util.mkid(data.name(), "voice") + ly.util.int2text(i) for i in order] + + assignments = [data.assignMusic(name, self.octave, self.transposition) + for name in voices] + + staffType = self.staffType.currentIndex() + if staffType in (0, 2): + # create a normal staff + staff = ly.dom.Staff() + seq = ly.dom.Seqr(staff) + if self.clef: + ly.dom.Clef(self.clef, seq) + mus = ly.dom.Simr(seq) + for a in assignments[:-1]: + ly.dom.Identifier(a.name, mus) + ly.dom.VoiceSeparator(mus) + ly.dom.Identifier(assignments[-1].name, mus) + builder.setMidiInstrument(staff, self.midiInstrument) + + if staffType in (1, 2): + # create a tab staff + tabstaff = ly.dom.TabStaff() + if self.tabFormat: + tabstaff.getWith()['tablatureFormat'] = ly.dom.Scheme(self.tabFormat) + self.setTunings(tabstaff) + sim = ly.dom.Simr(tabstaff) + if numVoices == 1: + ly.dom.Identifier(assignments[0].name, sim) + else: + for num, a in zip(order, assignments): + s = ly.dom.Seq(ly.dom.TabVoice(parent=sim)) + ly.dom.Text('\\voice' + ly.util.int2text(num), s) + ly.dom.Identifier(a.name, s) + + if staffType == 0: + # only a normal staff + p = staff + elif staffType == 1: + # only a TabStaff + builder.setMidiInstrument(tabstaff, self.midiInstrument) + p = tabstaff + else: + # both TabStaff and normal staff + p = ly.dom.StaffGroup() + s = ly.dom.Sim(p) + s.append(staff) + s.append(tabstaff) + + builder.setInstrumentNamesFromPart(p, self, data) + data.nodes.append(p) + + def setTunings(self, tab): + if self.tunings and self.tuning.currentIndex() > 0: + tuning = self.tunings[self.tuning.currentIndex() - 1][0] + tab.getWith()['stringTunings'] = ly.dom.Scheme(tuning) + + +tablatureStaffTypes = ( + lambda: _("Normal staff"), + lambda: _("Tablature"), + #L10N: Both a Normal and a Tablature staff + lambda: _("Both"), +) + + +class Mandolin(TablaturePart): + @staticmethod + def title(_=__builtin__._): + return _("Mandolin") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Mandolin", "Mdl.") + + midiInstrument = 'acoustic guitar (steel)' + tunings = ( + ('mandolin-tuning', lambda: _("Mandolin tuning")), + ) + + +class Banjo(TablaturePart): + @staticmethod + def title(_=__builtin__._): + return _("Banjo") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Banjo", "Bj.") + + midiInstrument = 'banjo' + tabFormat = 'fret-number-tablature-format-banjo' + tunings = ( + ('banjo-open-g-tuning', lambda: _("Open G-tuning (aDGBD)")), + ('banjo-c-tuning', lambda: _("C-tuning (gCGBD)")), + ('banjo-modal-tuning', lambda: _("Modal tuning (gDGCD)")), + ('banjo-open-d-tuning', lambda: _("Open D-tuning (aDF#AD)")), + ('banjo-open-dm-tuning', lambda: _("Open Dm-tuning (aDFAD)")), + ) + + def createTuningWidgets(self, layout): + super(Banjo, self).createTuningWidgets(layout) + self.fourStrings = QCheckBox() + layout.addWidget(self.fourStrings) + + def translateTuningWidgets(self): + super(Banjo, self).translateTuningWidgets() + self.fourStrings.setText(_("Four strings (instead of five)")) + + def setTunings(self, tab): + if not self.fourStrings.isChecked(): + super(Banjo, self).setTunings(tab) + else: + tab.getWith()['stringTunings'] = ly.dom.Scheme( + '(four-string-banjo {0})'.format( + self.tunings[self.tuning.currentIndex()][0])) + + +class ClassicalGuitar(TablaturePart): + @staticmethod + def title(_=__builtin__._): + return _("Classical guitar") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Classical guitar", "Gt.") + + midiInstrument = 'acoustic guitar (nylon)' + clef = "treble_8" + tunings = ( + ('guitar-tuning', lambda: _("Guitar tuning")), + ('guitar-open-g-tuning', lambda: _("Open G-tuning")), + ) + + def createWidgets(self, layout): + super(ClassicalGuitar, self).createWidgets(layout) + self.voicesLabel = QLabel() + self.voices = QSpinBox(minimum=1, maximum=4, value=1) + box = QHBoxLayout() + box.addWidget(self.voicesLabel) + box.addWidget(self.voices) + layout.addLayout(box) + + def translateWidgets(self): + super(ClassicalGuitar, self).translateWidgets() + self.voicesLabel.setText(_("Voices:")) + + def voiceCount(self): + return self.voices.value() + + +class JazzGuitar(ClassicalGuitar): + @staticmethod + def title(_=__builtin__._): + return _("Jazz guitar") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Jazz guitar", "J.Gt.") + + midiInstrument = 'electric guitar (jazz)' + + +class Bass(TablaturePart): + @staticmethod + def title(_=__builtin__._): + return _("Bass") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Bass", "Bs.") #FIXME + + midiInstrument = 'acoustic bass' + clef = 'bass_8' + octave = -2 + tunings = ( + ('bass-tuning', lambda: _("Bass tuning")), + ) + + +class ElectricBass(Bass): + @staticmethod + def title(_=__builtin__._): + return _("Electric bass") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Electric bass", "E.Bs.") + + midiInstrument = 'electric bass (finger)' + + +class Harp(_base.PianoStaffPart): + @staticmethod + def title(_=__builtin__._): + return _("Harp") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Harp", "Hp.") + + midiInstrument = 'harp' + + def translateWidgets(self): + super(Harp, self).translateWidgets() + self.upperVoicesLabel.setText(_("Upper staff:")) + self.lowerVoicesLabel.setText(_("Lower staff:")) + + def build(self, data, builder): + p = ly.dom.PianoStaff() + builder.setInstrumentNamesFromPart(p, self, data) + s = ly.dom.Sim(p) + # add two staves, with a respective number of voices. + self.buildStaff(data, builder, 'upper', 1, self.upperVoices.value(), s) + self.buildStaff(data, builder, 'lower', 0, self.lowerVoices.value(), s, "bass") + data.nodes.append(p) + + + + + +register( + lambda: _("Plucked strings"), + [ + Mandolin, + Banjo, + ClassicalGuitar, + JazzGuitar, + Bass, + ElectricBass, + Harp, + ]) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/special.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/special.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/special.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/special.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,81 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Some special part types. +""" + +from __future__ import unicode_literals + +import __builtin__ + +from PyQt4.QtGui import QCheckBox + +import ly.dom + +from . import _base +from . import register + + +class Chords(_base.ChordNames, _base.Part): + @staticmethod + def title(_=__builtin__._): + return _("Chord names") + + +class BassFigures(_base.Part): + @staticmethod + def title(_=__builtin__._): + return _("Figured Bass") + + def createWidgets(self, layout): + self.extenderLines = QCheckBox() + layout.addWidget(self.extenderLines) + + def translateWidgets(self): + self.extenderLines.setText(_("Use extender lines")) + + def build(self, data, builder): + a = data.assign('figBass') + s = ly.dom.FigureMode(a) + p = ly.dom.FiguredBass() + ly.dom.Identifier(a.name, p) + ly.dom.Identifier(data.globalName, s) + ly.dom.LineComment(_("Figures follow here."), s) + ly.dom.BlankLine(s) + if self.extenderLines.isChecked(): + p.getWith()['useBassFigureExtenders'] = ly.dom.Scheme('#t') + data.nodes.append(p) + + +class Staff(_base.Part): + @staticmethod + def title(_=__builtin__._): + return _("Staff") + + + + +register( + lambda: _("Special"), + [ + Chords, + BassFigures, + #Staff, + ]) diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/strings.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/strings.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/strings.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/strings.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,128 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +String part types. +""" + +from __future__ import unicode_literals + +import __builtin__ + +import ly.dom + +from . import _base +from . import register + + +class StringPart(_base.SingleVoicePart): + """Base class for string part types.""" + + +class Violin(StringPart): + @staticmethod + def title(_=__builtin__._): + return _("Violin") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Violin", "Vl.") + + midiInstrument = 'violin' + + +class Viola(StringPart): + @staticmethod + def title(_=__builtin__._): + return _("Viola") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Viola", "Vla.") + + midiInstrument = 'viola' + clef = 'alto' + octave = 0 + + +class Cello(StringPart): + @staticmethod + def title(_=__builtin__._): + return _("Cello") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Cello", "Cl.") + + midiInstrument = 'cello' + clef = 'bass' + octave = -1 + + +class Contrabass(StringPart): + @staticmethod + def title(_=__builtin__._): + return _("Contrabass") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Contrabass", "Cb.") + + midiInstrument = 'contrabass' + clef = 'bass' + octave = -1 + + +class BassoContinuo(Cello): + @staticmethod + def title(_=__builtin__._): + return _("Basso Continuo") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Basso Continuo", "B.c.") + + def build(self, data, builder): + super(BassoContinuo, self).build(data, builder) + data.assignments[0].name.name = 'bcMusic' + a = data.assign('bcFigures') + b = ly.dom.FigureMode(a) + ly.dom.Identifier(data.globalName, b) + ly.dom.Line("\\override Staff.BassFigureAlignmentPositioning " + "#'direction = #DOWN", b) + ly.dom.LineComment(_("Figures follow here."), b) + ly.dom.BlankLine(b) + s = ly.dom.Sim(data.nodes[0][-1]) + s.append(data.nodes[0][-1][-2]) + ly.dom.Identifier(a.name, s) + + +register( + lambda: _("Strings"), + [ + Violin, + Viola, + Cello, + Contrabass, + BassoContinuo, + ]) + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/vocal.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/vocal.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/vocal.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/vocal.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,701 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Vocal part types. +""" + +from __future__ import unicode_literals + +import __builtin__ +import collections +import itertools +import re + +from PyQt4.QtCore import QRegExp, Qt +from PyQt4.QtGui import ( + QCheckBox, QComboBox, QGroupBox, QHBoxLayout, QLabel, QRegExpValidator, + QSpinBox, QVBoxLayout) + +import listmodel +import ly.dom + +from . import _base +from . import register + + +class VocalPart(_base.Part): + """Base class for vocal parts.""" + midiInstrument = 'choir aahs' + + def createWidgets(self, layout): + self.createStanzaWidget(layout) + self.createAmbitusWidget(layout) + + def translateWidgets(self): + self.translateStanzaWidget() + self.translateAmbitusWidget() + + def createStanzaWidget(self, layout): + self.stanzas = QSpinBox(minimum=1, maximum=99, value=1) + self.stanzasLabel = QLabel() + self.stanzasLabel.setBuddy(self.stanzas) + box = QHBoxLayout(spacing=0) + box.addWidget(self.stanzasLabel) + box.addWidget(self.stanzas) + layout.addLayout(box) + + def translateStanzaWidget(self): + self.stanzasLabel.setText(_("Stanzas:")) + self.stanzas.setToolTip(_("The number of stanzas.")) + + def createAmbitusWidget(self, layout): + self.ambitus = QCheckBox() + layout.addWidget(self.ambitus) + + def translateAmbitusWidget(self): + self.ambitus.setText(_("Ambitus")) + self.ambitus.setToolTip(_( + "Show the pitch range of the voice at the beginning of the staff.")) + + def assignLyrics(self, data, name, verse=0): + """Creates an empty assignment for lyrics. + + Returns the assignment. + + """ + l = ly.dom.LyricMode() + if verse: + name = name + ly.util.int2text(verse) + ly.dom.Line('\\set stanza = "{0}."'.format(verse), l) + a = data.assign(name) + a.append(l) + ly.dom.LineComment(_("Lyrics follow here."), l) + ly.dom.BlankLine(l) + return a + + def addStanzas(self, data, node): + """Add stanzas to the given (Voice) node. + + The stanzas (as configured in self.stanzas.value()) are added + using \\addlyrics. + + """ + if self.stanzas.value() == 1: + ly.dom.Identifier(self.assignLyrics(data, 'verse').name, ly.dom.AddLyrics(node)) + else: + for i in range(self.stanzas.value()): + ly.dom.Identifier(self.assignLyrics(data, 'verse', i + 1).name, ly.dom.AddLyrics(node)) + + +class VocalSoloPart(VocalPart, _base.SingleVoicePart): + """Base class for vocal solo parts.""" + octave = 1 + clef = None + + def build(self, data, builder): + super(VocalSoloPart, self).build(data, builder) + stub = data.assignments[-1][0][-1] + stub.insert(1, ly.dom.Line('\\dynamicUp')) # just after the \global + staff = data.nodes[-1] + staff[-1].may_remove_brackets = False + self.addStanzas(data, staff) + if self.ambitus.isChecked(): + ly.dom.Line('\\consists "Ambitus_engraver"', staff.getWith()) + + +class SopranoVoice(VocalSoloPart): + @staticmethod + def title(_=__builtin__._): + return _("Soprano") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Soprano", "S.") + + +class MezzoSopranoVoice(VocalSoloPart): + @staticmethod + def title(_=__builtin__._): + return _("Mezzo-soprano") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Mezzo-soprano", "Ms.") + + +class AltoVoice(VocalSoloPart): + @staticmethod + def title(_=__builtin__._): + return _("Alto") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Alto", "A.") + + octave = 0 + + +class TenorVoice(VocalSoloPart): + @staticmethod + def title(_=__builtin__._): + return _("Tenor") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Tenor", "T.") + + octave = 0 + clef = 'treble_8' + + +class BassVoice(VocalSoloPart): + @staticmethod + def title(_=__builtin__._): + return _("Bass") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Bass", "B.") + + octave = -1 + clef = 'bass' + + +class LeadSheet(VocalPart, _base.ChordNames): + @staticmethod + def title(_=__builtin__._): + return _("Lead sheet") + + def createWidgets(self, layout): + self.label = QLabel(wordWrap=True) + self.chords = QGroupBox(checkable=True, checked=True) + layout.addWidget(self.label) + layout.addWidget(self.chords) + box = QVBoxLayout() + self.chords.setLayout(box) + _base.ChordNames.createWidgets(self, box) + self.accomp = QCheckBox() + layout.addWidget(self.accomp) + VocalPart.createWidgets(self, layout) + + def translateWidgets(self): + VocalPart.translateWidgets(self) + _base.ChordNames.translateWidgets(self) + self.label.setText('{0}'.format(_( + "The Lead Sheet provides a staff with chord names above " + "and lyrics below it. A second staff is optional."))) + self.chords.setTitle(_("Chord names")) + self.accomp.setText(_("Add accompaniment staff")) + self.accomp.setToolTip(_( + "Adds an accompaniment staff and also puts an accompaniment " + "voice in the upper staff.")) + + def build(self, data, builder): + """Create chord names, song and lyrics. + + Optionally a second staff with a piano accompaniment. + + """ + if self.chords.isChecked(): + _base.ChordNames.build(self, data, builder) + if self.accomp.isChecked(): + p = ly.dom.ChoirStaff() + #TODO: instrument names ? + #TODO: different midi instrument for voice and accompaniment ? + s = ly.dom.Sim(p) + mel = ly.dom.Sim(ly.dom.Staff(parent=s)) + v1 = ly.dom.Voice(parent=mel) + s1 = ly.dom.Seq(v1) + ly.dom.Text('\\voiceOne', s1) + a = data.assignMusic('melody', 1) + ly.dom.Identifier(a.name, s1) + s2 = ly.dom.Seq(ly.dom.Voice(parent=mel)) + ly.dom.Text('\\voiceTwo', s2) + a = data.assignMusic('accRight', 0) + ly.dom.Identifier(a.name, s2) + acc = ly.dom.Seq(ly.dom.Staff(parent=s)) + ly.dom.Clef('bass', acc) + a = data.assignMusic('accLeft', -1) + ly.dom.Identifier(a.name, acc) + if self.ambitus.isChecked(): + # We can't use \addlyrics when the voice has a \with {} + # section, because it creates a nested Voice context. + # So if the ambitus engraver should be added to the Voice, + # we don't use \addlyrics but create a new Lyrics context. + # So in that case we don't use addStanzas, but insert the + # Lyrics contexts manually inside our ChoirStaff. + v1.cid = ly.dom.Reference('melody') + ly.dom.Line('\\consists "Ambitus_engraver"', v1.getWith()) + count = self.stanzas.value() # number of stanzas + if count == 1: + l = ly.dom.Lyrics() + s.insert(acc.parent(), l) + a = self.assignLyrics(data, 'verse') + ly.dom.Identifier(a.name, ly.dom.LyricsTo(v1.cid, l)) + else: + for i in range(count): + l = ly.dom.Lyrics() + s.insert(acc.parent(), l) + a = self.assignLyrics(data, 'verse', i + 1) + ly.dom.Identifier(a.name, ly.dom.LyricsTo(v1.cid, l)) + else: + self.addStanzas(data, v1) + else: + a = data.assignMusic('melody', 1) + p = ly.dom.Staff() + ly.dom.Identifier(a.name, ly.dom.Seq(p)) + self.addStanzas(data, p) + if self.ambitus.isChecked(): + ly.dom.Line('\\consists "Ambitus_engraver"', p.getWith()) + data.nodes.append(p) + + +class Choir(VocalPart): + @staticmethod + def title(_=__builtin__._): + return _("Choir") + + def createWidgets(self, layout): + self.label = QLabel(wordWrap=True) + self.voicingLabel = QLabel() + self.voicing = QComboBox(editable=True) + self.voicingLabel.setBuddy(self.voicing) + self.voicing.setCompleter(None) + self.voicing.setValidator(QRegExpValidator( + QRegExp("[SATB]+(-[SATB]+)*", Qt.CaseInsensitive), self.voicing)) + self.voicing.addItems(( + 'SA-TB', 'S-A-T-B', + 'SA', 'S-A', 'SS-A', 'S-S-A', + 'TB', 'T-B', 'TT-B', 'T-T-B', + 'SS-A-T-B', 'S-A-TT-B', 'SS-A-TT-B', + 'S-S-A-T-T-B', 'S-S-A-A-T-T-B-B', + )) + self.lyricsLabel = QLabel() + self.lyrics = QComboBox() + self.lyricsLabel.setBuddy(self.lyrics) + self.lyrics.setModel(listmodel.ListModel(lyricStyles, self.lyrics, + display=listmodel.translate_index(0), + tooltip=listmodel.translate_index(1))) + self.lyrics.setCurrentIndex(0) + self.pianoReduction = QCheckBox() + self.rehearsalMidi = QCheckBox() + + layout.addWidget(self.label) + box = QHBoxLayout() + layout.addLayout(box) + box.addWidget(self.voicingLabel) + box.addWidget(self.voicing) + self.createStanzaWidget(layout) + box = QHBoxLayout() + layout.addLayout(box) + box.addWidget(self.lyricsLabel) + box.addWidget(self.lyrics) + self.createAmbitusWidget(layout) + layout.addWidget(self.pianoReduction) + layout.addWidget(self.rehearsalMidi) + + def translateWidgets(self): + self.translateStanzaWidget() + self.translateAmbitusWidget() + self.lyrics.model().update() + self.label.setText('

{0} ({1})

'.format( + _("Please select the voices for the choir. " + "Use the letters S, A, T, or B. A hyphen denotes a new staff."), + _("Hint: For a double choir you can use two choir parts."))) + self.voicingLabel.setText(_("Voicing:")) + self.lyricsLabel.setText(_("Lyrics:")) + self.pianoReduction.setText(_("Piano reduction")) + self.pianoReduction.setToolTip(_( + "Adds an automatically generated piano reduction.")) + self.rehearsalMidi.setText(_("Rehearsal MIDI files")) + self.rehearsalMidi.setToolTip(_( + "Creates a rehearsal MIDI file for every voice, " + "even if no MIDI output is generated for the main score.")) + + def build(self, data, builder): + # normalize voicing + staves = self.voicing.currentText().upper() + # remove unwanted characters + staves = re.sub(r'[^SATB-]+', '', staves) + # remove double hyphens, and from begin and end + staves = re.sub('-+', '-', staves).strip('-') + if not staves: + return + + splitStaves = staves.split('-') + numStaves = len(splitStaves) + staffCIDs = collections.defaultdict(int) # number same-name staff Context-IDs + voiceCounter = collections.defaultdict(int) # dict to number same voice types + maxNumVoices = max(map(len, splitStaves)) # largest number of voices + numStanzas = self.stanzas.value() + lyrics = collections.defaultdict(list) # lyrics grouped by stanza number + pianoReduction = collections.defaultdict(list) + rehearsalMidis = [] + + p = ly.dom.ChoirStaff() + choir = ly.dom.Sim(p) + data.nodes.append(p) + + # print main instrumentName if there are more choirs, and we + # have more than one staff. + if numStaves > 1 and data.num: + builder.setInstrumentNames(p, + builder.instrumentName(lambda _: _("Choir"), data.num), + builder.instrumentName(lambda _: _("abbreviation for Choir", "Ch."), data.num)) + + # get the preferred way of adding lyrics + lyrAllSame, lyrEachSame, lyrEachDiff, lyrSpread = ( + self.lyrics.currentIndex() == i for i in range(4)) + lyrEach = lyrEachSame or lyrEachDiff + + # stanzas to print (0 = don't print stanza number): + if numStanzas == 1: + allStanzas = [0] + else: + allStanzas = list(range(1, numStanzas + 1)) + + # Which stanzas to print where: + if lyrSpread and numStanzas > 1 and numStaves > 2: + spaces = numStaves - 1 + count, rest = divmod(max(numStanzas, spaces), spaces) + stanzaSource = itertools.cycle(allStanzas) + stanzaGroups = (itertools.islice(stanzaSource, num) + for num in itertools.chain( + itertools.repeat(count + 1, rest), + itertools.repeat(count, numStaves - rest))) + else: + stanzaGroups = itertools.repeat(allStanzas, numStaves) + + # a function to set staff affinity (in LilyPond 2.13.4 and above): + if builder.lyVersion >= (2, 13, 4): + def setStaffAffinity(context, affinity): + ly.dom.Line("\\override VerticalAxisGroup " + "#'staff-affinity = #" + affinity, context.getWith()) + else: + def setStaffAffinity(lyricsContext, affinity): + pass + + # a function to make a column markup: + if builder.lyVersion >= (2, 11, 57): + columnCommand = 'center-column' + else: + columnCommand = 'center-align' + def makeColumnMarkup(names): + node = ly.dom.Markup() + column = ly.dom.MarkupEnclosed(columnCommand, node) + for name in names: + ly.dom.QuotedString(name, column) + return node + + stavesLeft = numStaves + for staff, stanzas in zip(splitStaves, stanzaGroups): + # are we in the last staff? + stavesLeft -= 1 + # the number of voices in this staff + numVoices = len(staff) + # sort the letters in order SATB + staff = ''.join(i * staff.count(i) for i in 'SATB') + # Create the staff for the voices + s = ly.dom.Staff(parent=choir) + builder.setMidiInstrument(s, self.midiInstrument) + + # Build a list of the voices in this staff. + # Each entry is a tuple(name, num). + # name is one of 'S', 'A', 'T', or 'B' + # num is an integer: 0 when a voice occurs only once, or >= 1 when + # there are more voices of the same type (e.g. Soprano I and II) + voices = [] + for voice in staff: + if staves.count(voice) > 1: + voiceCounter[voice] += 1 + voices.append((voice, voiceCounter[voice])) + + # Add the instrument names to the staff: + if numVoices == 1: + voice, num = voices[0] + longName = builder.instrumentName(voice2Voice[voice].title, num) + shortName = builder.instrumentName(voice2Voice[voice].short, num) + builder.setInstrumentNames(s, longName, shortName) + else: + # stack instrument names (long and short) in a markup column. + # long names + longNames = makeColumnMarkup( + builder.instrumentName(voice2Voice[voice].title, num) for voice, num in voices) + shortNames = makeColumnMarkup( + builder.instrumentName(voice2Voice[voice].short, num) for voice, num in voices) + builder.setInstrumentNames(s, longNames, shortNames) + + # Make the { } or << >> holder for this staff's children. + # If *all* staves have only one voice, addlyrics is used. + # In that case, don't remove the braces. + staffMusic = (ly.dom.Seq if lyrEach and maxNumVoices == 1 else + ly.dom.Seqr if numVoices == 1 else ly.dom.Simr)(s) + + # Set the clef for this staff: + if 'B' in staff: + ly.dom.Clef('bass', staffMusic) + elif 'T' in staff: + ly.dom.Clef('treble_8', staffMusic) + + # Determine voice order (\voiceOne, \voiceTwo etc.) + if numVoices == 1: + order = (0,) + elif numVoices == 2: + order = 1, 2 + elif staff in ('SSA', 'TTB'): + order = 1, 3, 2 + elif staff in ('SAA', 'TBB'): + order = 1, 2, 4 + elif staff in ('SSAA', 'TTBB'): + order = 1, 3, 2, 4 + else: + order = range(1, numVoices + 1) + + # What name would the staff get if we need to refer to it? + # If a name (like 's' or 'sa') is already in use in this part, + # just add a number ('ss2' or 'sa2', etc.) + staffCIDs[staff] += 1 + cid = ly.dom.Reference(staff.lower() + + str(staffCIDs[staff] if staffCIDs[staff] > 1 else "")) + + # Create voices and their lyrics: + for (voice, num), voiceNum in zip(voices, order): + name = voice2id[voice] + if num: + name += ly.util.int2text(num) + a = data.assignMusic(name, voice2Voice[voice].octave) + lyrName = name + 'Verse' if lyrEachDiff else 'verse' + + # Use \addlyrics if all staves have exactly one voice. + if lyrEach and maxNumVoices == 1: + for verse in stanzas: + lyrics[verse].append((ly.dom.AddLyrics(s), lyrName)) + ly.dom.Identifier(a.name, staffMusic) + else: + voiceName = voice2id[voice] + str(num or '') + v = ly.dom.Voice(voiceName, parent=staffMusic) + voiceMusic = ly.dom.Seqr(v) + if voiceNum: + ly.dom.Text('\\voice' + ly.util.int2text(voiceNum), voiceMusic) + ly.dom.Identifier(a.name, voiceMusic) + + if stanzas and (lyrEach or (voiceNum <= 1 and + (stavesLeft or numStaves == 1))): + # Create the lyrics. If they should be above the staff, + # give the staff a suitable name, and use alignAbove- + # Context to align the Lyrics above the staff. + above = voiceNum & 1 if lyrEach else False + if above and s.cid is None: + s.cid = cid + + for verse in stanzas: + l = ly.dom.Lyrics(parent=choir) + if above: + l.getWith()['alignAboveContext'] = cid + setStaffAffinity(l, "DOWN") + elif not lyrEach and stavesLeft: + setStaffAffinity(l, "CENTER") + lyrics[verse].append((ly.dom.LyricsTo(voiceName, l), lyrName)) + + # Add ambitus: + if self.ambitus.isChecked(): + ambitusContext = (s if numVoices == 1 else v).getWith() + ly.dom.Line('\\consists "Ambitus_engraver"', ambitusContext) + if voiceNum > 1: + ly.dom.Line("\\override Ambitus #'X-offset = #{0}".format( + (voiceNum - 1) * 2.0), ambitusContext) + + pianoReduction[voice].append(a.name) + rehearsalMidis.append((voice, num, a.name, lyrName)) + + # Assign the lyrics, so their definitions come after the note defs. + # (These refs are used again below in the midi rehearsal routine.) + refs = {} + for verse in allStanzas: + for node, name in lyrics[verse]: + if (name, verse) not in refs: + refs[(name, verse)] = self.assignLyrics(data, name, verse).name + ly.dom.Identifier(refs[(name, verse)], node) + + # Create the piano reduction if desired + if self.pianoReduction.isChecked(): + a = data.assign('pianoReduction') + data.nodes.append(ly.dom.Identifier(a.name)) + piano = ly.dom.PianoStaff(parent=a) + + sim = ly.dom.Sim(piano) + rightStaff = ly.dom.Staff(parent=sim) + leftStaff = ly.dom.Staff(parent=sim) + right = ly.dom.Seq(rightStaff) + left = ly.dom.Seq(leftStaff) + + # Determine the ordering of voices in the staves + upper = pianoReduction['S'] + pianoReduction['A'] + lower = pianoReduction['T'] + pianoReduction['B'] + + preferUpper = 1 + if not upper: + # Male choir + upper = pianoReduction['T'] + lower = pianoReduction['B'] + ly.dom.Clef("treble_8", right) + ly.dom.Clef("bass", left) + preferUpper = 0 + elif not lower: + # Female choir + upper = pianoReduction['S'] + lower = pianoReduction['A'] + else: + ly.dom.Clef("bass", left) + + # Otherwise accidentals can be confusing + ly.dom.Line("#(set-accidental-style 'piano)", right) + ly.dom.Line("#(set-accidental-style 'piano)", left) + + # Move voices if unevenly spread + if abs(len(upper) - len(lower)) > 1: + voices = upper + lower + half = (len(voices) + preferUpper) / 2 + upper = voices[:half] + lower = voices[half:] + + for staff, voices in (ly.dom.Simr(right), upper), (ly.dom.Simr(left), lower): + if voices: + for v in voices[:-1]: + ly.dom.Identifier(v, staff) + ly.dom.VoiceSeparator(staff).after = 1 + ly.dom.Identifier(voices[-1], staff) + + # Make the piano part somewhat smaller + ly.dom.Line("fontSize = #-1", piano.getWith()) + ly.dom.Line("\\override StaffSymbol #'staff-space = #(magstep -1)", + piano.getWith()) + + # Nice to add Mark engravers + ly.dom.Line('\\consists "Mark_engraver"', rightStaff.getWith()) + ly.dom.Line('\\consists "Metronome_mark_engraver"', rightStaff.getWith()) + + # Keep piano reduction out of the MIDI output + if builder.midi: + ly.dom.Line('\\remove "Staff_performer"', rightStaff.getWith()) + ly.dom.Line('\\remove "Staff_performer"', leftStaff.getWith()) + + # Create MIDI files if desired + if self.rehearsalMidi.isChecked(): + a = data.assign('rehearsalMidi') + rehearsalMidi = a.name + + func = ly.dom.SchemeList(a) + func.pre = '#\n(' # hack + ly.dom.Text('define-music-function', func) + ly.dom.Line('(parser location name midiInstrument lyrics) ' + '(string? string? ly:music?)', func) + choir = ly.dom.Sim(ly.dom.Command('unfoldRepeats', ly.dom.SchemeLily(func))) + + data.afterblocks.append(ly.dom.Comment(_("Rehearsal MIDI files:"))) + + for voice, num, ref, lyrName in rehearsalMidis: + # Append voice to the rehearsalMidi function + name = voice2id[voice] + str(num or '') + seq = ly.dom.Seq(ly.dom.Voice(name, parent=ly.dom.Staff(name, parent=choir))) + ly.dom.Text('s1*0\\f', seq) # add one dynamic + ly.dom.Identifier(ref, seq) # add the reference to the voice + + book = ly.dom.Book() + + # Append score to the aftermath (stuff put below the main score) + suffix = "choir{0}-{1}".format(data.num, name) if data.num else name + if builder.lyVersion < (2, 12, 0): + data.afterblocks.append( + ly.dom.Line('#(define output-suffix "{0}")'.format(suffix))) + else: + ly.dom.Line('\\bookOutputSuffix "{0}"'.format(suffix), book) + data.afterblocks.append(book) + data.afterblocks.append(ly.dom.BlankLine()) + score = ly.dom.Score(book) + + # TODO: make configurable + midiInstrument = voice2Midi[voice] + + cmd = ly.dom.Command(rehearsalMidi, score) + ly.dom.QuotedString(name, cmd) + ly.dom.QuotedString(midiInstrument, cmd) + ly.dom.Identifier(refs[(lyrName, allStanzas[0])], cmd) + ly.dom.Midi(score) + + ly.dom.Text("\\context Staff = $name", choir) + seq = ly.dom.Seq(choir) + ly.dom.Line("\\set Score.midiMinimumVolume = #0.5", seq) + ly.dom.Line("\\set Score.midiMaximumVolume = #0.5", seq) + ly.dom.Line("\\set Score.tempoWholesPerMinute = #" + data.scoreProperties.schemeMidiTempo(), seq) + ly.dom.Line("\\set Staff.midiMinimumVolume = #0.8", seq) + ly.dom.Line("\\set Staff.midiMaximumVolume = #1.0", seq) + ly.dom.Line("\\set Staff.midiInstrument = $midiInstrument", seq) + lyr = ly.dom.Lyrics(parent=choir) + lyr.getWith()['alignBelowContext'] = ly.dom.Text('$name') + ly.dom.Text("\\lyricsto $name $lyrics", lyr) + + + +lyricStyles = ( + (lambda: _("All voices same lyrics"), + lambda: _("A set of the same lyrics is placed between all staves.")), + (lambda: _("Every voice same lyrics"), + lambda: _("Every voice gets its own lyrics, using the same text as the" + " other voices.")), + (lambda: _("Every voice different lyrics"), + lambda: _("Every voice gets a different set of lyrics.")), + (lambda: _("Distribute stanzas"), + lambda: _("One set of stanzas is distributed across the staves.")), +) + +voice2Voice = { + 'S': SopranoVoice, + 'A': AltoVoice, + 'T': TenorVoice, + 'B': BassVoice, +} + +voice2id = { + 'S': 'soprano', + 'A': 'alto', + 'T': 'tenor', + 'B': 'bass', +} + +voice2Midi = { + 'S': 'soprano sax', + 'A': 'soprano sax', + 'T': 'tenor sax', + 'B': 'tenor sax', +} + +register( + lambda: _("Vocal"), + [ + LeadSheet, + SopranoVoice, + MezzoSopranoVoice, + AltoVoice, + TenorVoice, + BassVoice, + Choir, + ]) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/woodwind.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/woodwind.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/parts/woodwind.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/parts/woodwind.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,306 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Wood wind part types. +""" + +from __future__ import unicode_literals + +import __builtin__ + +from . import _base +from . import register + + +class WoodWindPart(_base.SingleVoicePart): + """Base class for wood wind part types.""" + + +class Flute(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Flute") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Flute", "Fl.") + + midiInstrument = 'flute' + + +class Piccolo(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Piccolo") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Piccolo", "Pic.") + + midiInstrument = 'piccolo' + transposition = (1, 0, 0) + + +class BassFlute(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Bass flute") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Bass flute", "Bfl.") + + midiInstrument = 'flute' + transposition = (-1, 4, 0) + + +class Oboe(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Oboe") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Oboe", "Ob.") + + midiInstrument = 'oboe' + + +class OboeDAmore(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Oboe d'amore") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Oboe d'amore", "Ob.d'am.") + + midiInstrument = 'oboe' + transposition = (-1, 5, 0) + + +class EnglishHorn(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("English horn") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for English horn", "Eng.h.") + + midiInstrument = 'english horn' + transposition = (-1, 3, 0) + + +class Bassoon(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Bassoon") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Bassoon", "Bn.") + + midiInstrument = 'bassoon' + clef = 'bass' + octave = -1 + + +class ContraBassoon(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Contrabassoon") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Contrabassoon", "C.Bn.") + + midiInstrument = 'bassoon' + transposition = (-1, 0, 0) + clef = 'bass' + octave = -1 + + +class Clarinet(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Clarinet") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Clarinet", "Cl.") + + midiInstrument = 'clarinet' + transposition = (-1, 6, -1) + + +class SopraninoSax(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Sopranino Sax") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Sopranino Sax", "SiSx.") + + midiInstrument = 'soprano sax' + transposition = (0, 2, -1) # es' + + +class SopranoSax(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Soprano Sax") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Soprano Sax", "SoSx.") + + midiInstrument = 'soprano sax' + transposition = (-1, 6, -1) # bes + + +class AltoSax(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Alto Sax") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Alto Sax", "ASx.") + + midiInstrument = 'alto sax' + transposition = (-1, 2, -1) # es + + +class TenorSax(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Tenor Sax") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Tenor Sax", "TSx.") + + midiInstrument = 'tenor sax' + transposition = (-2, 6, -1) # bes, + + +class BaritoneSax(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Baritone Sax") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Baritone Sax", "BSx.") + + midiInstrument = 'baritone sax' + transposition = (-2, 2, -1) # es, + + +class BassSax(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Bass Sax") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Bass Sax", "BsSx.") + + midiInstrument = 'baritone sax' + transposition = (-3, 6, -1) # bes,, + + +class SopranoRecorder(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Soprano recorder") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Soprano recorder", "S.rec.") + + midiInstrument = 'recorder' + transposition = (1, 0, 0) + + +class AltoRecorder(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Alto recorder") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Alto recorder", "A.rec.") + + midiInstrument = 'recorder' + + +class TenorRecorder(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Tenor recorder") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Tenor recorder", "T.rec.") + + midiInstrument = 'recorder' + + +class BassRecorder(WoodWindPart): + @staticmethod + def title(_=__builtin__._): + return _("Bass recorder") + + @staticmethod + def short(_=__builtin__._): + return _("abbreviation for Bass recorder", "B.rec.") + + midiInstrument = 'recorder' + clef = 'bass' + octave = -1 + + + +register( + lambda: _("Woodwinds"), + [ + Flute, + Piccolo, + BassFlute, + Oboe, + OboeDAmore, + EnglishHorn, + Bassoon, + ContraBassoon, + Clarinet, + SopraninoSax, + SopranoSax, + AltoSax, + TenorSax, + BaritoneSax, + BassSax, + SopranoRecorder, + AltoRecorder, + TenorRecorder, + BassRecorder, + ]) diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/preview.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/preview.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/preview.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/preview.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,122 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Fill in a ly.dom Document with example music for previewing. +""" + +from __future__ import unicode_literals + +import itertools +import math + +import ly.dom + + +def examplify(doc): + """Fills in some example music in the given ly.dom.Document.""" + stubs = [] + globals = {} + for a in doc.findChildren(ly.dom.Assignment, 2): + if isinstance(a.name, ly.dom.Reference): + g = None + for i in a.findChildren(ly.dom.Identifier): + if not isinstance(i.name, ly.dom.Reference): + g = i.name + break + stubs.append((g, a[-1])) + else: + keysig = a.findChild(ly.dom.KeySignature) + timesig = a.findChild(ly.dom.TimeSignature) + partial = a.findChild(ly.dom.Partial) + + # create a list of durations for the example notes. + durations = [] + if partial: + durations.append((partial.dur, partial.dots)) + if timesig: + dur = int(math.log(int(timesig.beat), 2)) + num = min(int(timesig.num)*2, 10) + else: + dur, num = 2, 4 + durations += [(dur, 0)] * num + + globals[a.name] = (keysig, durations) + + # other lyrics on each request + lyrics = itertools.cycle('ha hi he ho hu'.split()) + + # fill assignment stubs with suitable example music input + num = 10 + for g, stub in stubs: + try: + keysig, durations = globals[g] + num = len(durations) + except KeyError: + pass + + def addItems(stub, generator): + for dur, dots in durations: + node = next(generator) + node.append(ly.dom.Duration(dur, dots)) + stub.append(node) + + if isinstance(stub, ly.dom.LyricMode): + stub.append(ly.dom.Text(' '.join(itertools.repeat(next(lyrics), num)))) + elif isinstance(stub, ly.dom.Relative): + addItems(stub[-1], pitchGen(keysig)) + elif isinstance(stub, ly.dom.ChordMode): + addItems(stub, chordGen(keysig)) + elif isinstance(stub, ly.dom.FigureMode): + addItems(stub, figureGen()) + elif isinstance(stub, ly.dom.DrumMode): + addItems(stub, drumGen()) + + +# Generators for different kinds of example input +def pitchGen(startPitch): + note = startPitch.note + while True: + for n in (note, note, (note + 9 ) % 7, (note + 8) % 7, + note, (note + 11) % 7, note): + chord = ly.dom.Chord() + ly.dom.Pitch(-1, n, startPitch.alter, parent=chord) + yield chord + + +def chordGen(startPitch): + for n in pitchGen(startPitch): + yield n + for i in 1, 2, 3: + yield ly.dom.TextDur("\\skip") + + +def figureGen(): + while True: + for i in 5, 6, 3, 8, 7: + for s in "<{0}>".format(i), "\\skip", "\\skip": + yield ly.dom.TextDur(s) + + +def drumGen(): + while True: + for s in "bd", "hh", "sn", "hh": + yield ly.dom.TextDur(s) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/scoreproperties.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/scoreproperties.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/scoreproperties.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/scoreproperties.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,395 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Properties of a score: +- key signature +- time signature +- pickup beat +- metronome value [note]=[time][tap] +- tempo indication +""" + +from __future__ import unicode_literals + +import fractions +import re + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import ly.dom +import completionmodel +import listmodel +import symbols +import widgets.lineedit +import widgets.tempobutton + + +class ScoreProperties(object): + """This is only the base class, it should be mixed in with a widget or a different way.""" + + def createWidgets(self): + """Creates all widgets.""" + self.createKeySignatureWidget() + self.createTimeSignatureWidget() + self.createPickupWidget() + self.createMetronomeWidget() + self.createTempoWidget() + + def layoutWidgets(self, layout): + """Adds all widgets to a vertical layout.""" + self.layoutKeySignatureWidget(layout) + self.layoutTimeSignatureWidget(layout) + self.layoutPickupWidget(layout) + self.layoutMetronomeWidget(layout) + self.layoutTempoWidget(layout) + + def translateWidgets(self): + self.translateKeySignatureWidget() + self.translateTimeSignatureWidget() + self.translatePickupWidget() + self.tranlateMetronomeWidget() + self.translateTempoWidget() + + def ly(self, node, builder): + """Adds appropriate LilyPond command nodes to the parent node. + + Settings from the builder are used where that makes sense. + All widgets must be present. + + """ + self.lyKeySignature(node, builder) + self.lyTimeSignature(node, builder) + self.lyPickup(node, builder) + self.lyTempo(node, builder) + + def globalSection(self, builder): + """Returns a sequential expression between { } containing the output of ly().""" + seq = ly.dom.Seq() + self.ly(seq, builder) + return seq + + # Key signature + def createKeySignatureWidget(self): + self.keySignatureLabel = QLabel() + self.keyNote = QComboBox() + self.keyNote.setModel(listmodel.ListModel(keyNames['nederlands'], self.keyNote)) + self.keyMode = QComboBox() + self.keyMode.setModel(listmodel.ListModel(modes, self.keyMode, display=listmodel.translate_index(1))) + self.keySignatureLabel.setBuddy(self.keyNote) + + def translateKeySignatureWidget(self): + self.keySignatureLabel.setText(_("Key signature:")) + self.keyMode.model().update() + + def layoutKeySignatureWidget(self, layout): + """Adds our widgets to a layout, assuming it is a QVBoxLayout.""" + box = QHBoxLayout() + box.addWidget(self.keySignatureLabel) + box.addWidget(self.keyNote) + box.addWidget(self.keyMode) + layout.addLayout(box) + + def setPitchLanguage(self, language='nederlands'): + self.keyNote.model()._data = keyNames[language or 'nederlands'] + self.keyNote.model().update() + + def lyKeySignature(self, node, builder): + """Adds the key signature to the ly.dom node parent.""" + note, alter = keys[self.keyNote.currentIndex()] + alter = fractions.Fraction(alter, 2) + mode = modes[self.keyMode.currentIndex()][0] + ly.dom.KeySignature(note, alter, mode, node).after = 1 + + # Time signature + def createTimeSignatureWidget(self): + self.timeSignatureLabel = QLabel() + self.timeSignature = QComboBox(editable=True) + icons = { + '(4/4)': symbols.icon('time_c44'), + '(2/2)': symbols.icon('time_c22'), + } + self.timeSignature.setModel(listmodel.ListModel(timeSignaturePresets, self.timeSignature, + icon=icons.get)) + self.timeSignature.setCompleter(None) + self.timeSignatureLabel.setBuddy(self.timeSignature) + + def translateTimeSignatureWidget(self): + self.timeSignatureLabel.setText(_("Time signature:")) + + def layoutTimeSignatureWidget(self, layout): + """Adds our widgets to a layout, assuming it is a QVBoxLayout.""" + box = QHBoxLayout() + box.addWidget(self.timeSignatureLabel) + box.addWidget(self.timeSignature) + layout.addLayout(box) + + def lyTimeSignature(self, node, builder): + """Adds the time signature to the ly.dom node parent.""" + sig = self.timeSignature.currentText().strip() + if '+' in sig: + pass # TODO: implement support for \compoundMeter + else: + if sig == '(2/2)': + ly.dom.TimeSignature(2, 2, node).after = 1 + elif sig == '(4/4)': + ly.dom.TimeSignature(4, 4, node).after = 1 + else: + match = re.search(r'(\d+).*?(\d+)', sig) + if match: + if builder.lyVersion >= (2, 11, 44): + ly.dom.Line(r"\numericTimeSignature", node) + else: + ly.dom.Line(r"\override Staff.TimeSignature #'style = #'()", node) + num, beat = map(int, match.group(1, 2)) + ly.dom.TimeSignature(num, beat, node).after = 1 + + # Pickup bar + def createPickupWidget(self): + self.pickupLabel = QLabel() + self.pickup = QComboBox() + pickups = [''] + pickups.extend(durations) + self.pickup.setModel(listmodel.ListModel(pickups, self.pickup, + display = lambda item: item or _("None"), + icon = lambda item: symbols.icon('note_{0}'.format(item.replace('.', 'd'))) if item else None)) + self.pickup.view().setIconSize(QSize(22, 22)) + self.pickupLabel.setBuddy(self.pickup) + + def translatePickupWidget(self): + self.pickupLabel.setText(_("Pickup measure:")) + self.pickup.model().update() + + def layoutPickupWidget(self, layout): + box = QHBoxLayout() + box.addWidget(self.pickupLabel) + box.addWidget(self.pickup) + layout.addLayout(box) + + def lyPickup(self, node, builder): + if self.pickup.currentIndex() > 0: + dur, dots = partialDurations[self.pickup.currentIndex() - 1] + ly.dom.Partial(dur, dots, parent=node) + + # Metronome value + def createMetronomeWidget(self): + self.metronomeLabel = QLabel() + self.metronomeNote = QComboBox() + self.metronomeNote.setModel(listmodel.ListModel(durations, display=None, + icon = lambda item: symbols.icon('note_{0}'.format(item.replace('.', 'd'))))) + self.metronomeNote.setCurrentIndex(durations.index('4')) + self.metronomeNote.view().setIconSize(QSize(22, 22)) + self.metronomeEqualSign = QLabel('=') + self.metronomeEqualSign.setFixedWidth(self.metronomeEqualSign.minimumSizeHint().width()) + self.metronomeValue = QComboBox(editable=True) + self.metronomeValue.setModel(listmodel.ListModel(metronomeValues, self.metronomeValue, + display=format)) + self.metronomeValue.setCompleter(None) + self.metronomeValue.setValidator(QIntValidator(0, 999, self.metronomeValue)) + self.metronomeValue.setCurrentIndex(metronomeValues.index(100)) + self.metronomeTempo = widgets.tempobutton.TempoButton() + self.metronomeTempo.tempo.connect(self.setMetronomeValue) + self.metronomeLabel.setBuddy(self.metronomeNote) + + def layoutMetronomeWidget(self, layout): + box = QHBoxLayout(spacing=0) + box.addWidget(self.metronomeLabel) + box.addWidget(self.metronomeNote) + box.addWidget(self.metronomeEqualSign) + box.addWidget(self.metronomeValue) + box.addWidget(self.metronomeTempo) + layout.addLayout(box) + + def tranlateMetronomeWidget(self): + self.metronomeLabel.setText(_("Metronome mark:")) + + def setMetronomeValue(self, bpm): + """ Tap the tempo tap button """ + l = [abs(t - bpm) for t in metronomeValues] + m = min(l) + if m < 6: + self.metronomeValue.setCurrentIndex(l.index(m)) + + # Tempo indication + def createTempoWidget(self): + self.tempoLabel = QLabel() + self.tempo = widgets.lineedit.LineEdit() + c = QCompleter(completionmodel.model("scorewiz/completion/scoreproperties/tempo"), self.tempo) + c.setCaseSensitivity(Qt.CaseInsensitive) + self.tempo.setCompleter(c) + self.tempoLabel.setBuddy(self.tempo) + + def layoutTempoWidget(self, layout): + box = QHBoxLayout() + box.addWidget(self.tempoLabel) + box.addWidget(self.tempo) + layout.addLayout(box) + + def translateTempoWidget(self): + self.tempoLabel.setText(_("Tempo indication:")) + + def saveCompletions(self): + """Saves the completions in the tempo line edit.""" + text = self.tempo.text().strip() + if text: + self.tempo.completer().model().addString(text) + + def lyTempo(self, node, builder): + """Returns an appropriate tempo indication.""" + text = self.tempo.text().strip() + if builder.showMetronomeMark: + dur = durations[self.metronomeNote.currentIndex()] + val = self.metronomeValue.currentText() + elif text: + dur = None + val = None + else: + return + tempo = ly.dom.Tempo(dur, val, node) + if text: + ly.dom.QuotedString(text, tempo) + + def lyMidiTempo(self, node): + """Sets the configured tempo in the tempoWholesPerMinute variable.""" + node['tempoWholesPerMinute'] = ly.dom.Scheme(self.schemeMidiTempo()) + + def schemeMidiTempo(self): + """Returns a string with the tempo like '(ly:make-moment 100 4)' from the settings.""" + base, mul = midiDurations[self.metronomeNote.currentIndex()] + val = int(self.metronomeValue.currentText()) * mul + return "(ly:make-moment {0} {1})".format(val, base) + + +def metronomeValues(): + v, start = [], 40 + for end, step in (60, 2), (72, 3), (120, 4), (144, 6), (210, 8): + v.extend(range(start, end, step)) + start = end + return v +metronomeValues = metronomeValues() + + +timeSignaturePresets = ( + '(4/4)', '(2/2)', # with symbols + '2/4', '3/4', '4/4', '5/4', '6/4', '7/4', + '2/2', '3/2', '4/2', + '3/8', '5/8', '6/8', '7/8', '8/8', '9/8', '12/8', + '3/16', '6/16', '12/16', + '3+2/8', '3/4+3/8', +) + +# durations for pickup and metronome +durations = ('16', '16.', '8', '8.', '4', '4.', '2', '2.', '1', '1.') +midiDurations = ((16,1),(32,3),(8,1),(16,3),(4,1),(8,3),(2,1),(4,3),(1,1),(2,3)) +partialDurations = ((4,0),(4,1),(3,0),(3,1),(2,0),(2,1),(1,0),(1,1),(0,0),(0,1)) + + +keyNames = { + 'nederlands': ( + 'C', 'Cis', + 'Des', 'D', 'Dis', + 'Es', 'E', + 'F', 'Fis', + 'Ges', 'G', 'Gis', + 'As', 'A', 'Ais', + 'Bes', 'B', + ), + 'english': ( + 'C', 'C#', + 'Db', 'D', 'D#', + 'Eb', 'E', + 'F', 'F#', + 'Gb', 'G', 'G#', + 'Ab', 'A', 'A#', + 'Bb', 'B', + ), + 'deutsch': ( + 'C', 'Cis', + 'Des', 'D', 'Dis', + 'Es', 'E', + 'F', 'Fis', + 'Ges', 'G', 'Gis', + 'As', 'A', 'Ais', + 'B', 'H', + ), + 'norsk': ( + 'C', 'Ciss', + 'Dess', 'D', 'Diss', + 'Ess', 'E', + 'F', 'Fiss', + 'Gess', 'G', 'Giss', + 'Ass', 'A', 'Aiss', + 'B', 'H', + ), + 'italiano': ( + 'Do', 'Do diesis', + 'Re bemolle', 'Re', 'Re diesis', + 'Mi bemolle', 'Mi', + 'Fa', 'Fa diesis', + 'Sol bemolle', 'Sol', 'Sol diesis', + 'La bemolle', 'La', 'La diesis', + 'Si bemolle', 'Si', + ), + 'espanol': ( + 'Do', 'Do sostenido', + 'Re bemol', 'Re', 'Re sostenido', + 'Mi bemol', 'Mi', + 'Fa', 'Fa sostenido', + 'Sol bemol', 'Sol', 'Sol sostenido', + 'La bemol', 'La', 'La sostenido', + 'Si bemol', 'Si', + ), + 'vlaams': ( + 'Do', 'Do kruis', + 'Re mol', 'Re', 'Re kruis', + 'Mi mol', 'Mi', + 'Fa', 'Fa kruis', + 'Sol mol', 'Sol', 'Sol kruis', + 'La mol', 'La', 'La kruis', + 'Si mol', 'Si', + ), +} +keyNames['svenska'] = keyNames['norsk'] +keyNames['suomi'] = keyNames['deutsch'] +keyNames['catalan'] = keyNames['italiano'] +keyNames['portugues'] = keyNames['espanol'] + +keys = ( + (0, 0), (0, 1), + (1, -1), (1, 0), (1, 1), + (2, -1), (2, 0), + (3, 0), (3, 1), + (4, -1), (4, 0), (4, 1), + (5, -1), (5, 0), (5, 1), + (6, -1), (6, 0), +) + +modes = ( + ('major', lambda: _("Major")), + ('minor', lambda: _("Minor")), + ('ionian', lambda: _("Ionian")), + ('dorian', lambda: _("Dorian")), + ('phrygian', lambda: _("Phrygian")), + ('lydian', lambda: _("Lydian")), + ('mixolydian', lambda: _("Mixolydian")), + ('aeolian', lambda: _("Aeolian")), + ('locrian', lambda: _("Locrian")), +) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/score.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/score.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/score.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/score.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,184 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The Parts widget. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import icons +import widgets.treewidget + +from . import parts +import parts._base +import parts.containers + + +class ScorePartsWidget(QSplitter): + def __init__(self, parent): + super(ScorePartsWidget, self).__init__(parent) + + self.typesLabel = QLabel() + self.typesView = QTreeView( + selectionMode=QTreeView.ExtendedSelection, + selectionBehavior=QTreeView.SelectRows, + animated=True, + headerHidden=True) + self.scoreLabel = QLabel() + self.scoreView = widgets.treewidget.TreeWidget( + selectionMode=QTreeView.ExtendedSelection, + selectionBehavior=QTreeView.SelectRows, + headerHidden=True, + animated=True, + dragDropMode=QTreeView.InternalMove) + self.addButton = QPushButton(icon = icons.get("list-add")) + self.removeButton = QPushButton(icon = icons.get("list-remove")) + self.upButton = QToolButton(icon = icons.get("go-up")) + self.downButton = QToolButton(icon = icons.get("go-down")) + self.partSettings = QStackedWidget() + + w = QWidget() + self.addWidget(w) + layout = QVBoxLayout(spacing=0) + w.setLayout(layout) + + layout.addWidget(self.typesLabel) + layout.addWidget(self.typesView) + layout.addWidget(self.addButton) + + w = QWidget() + self.addWidget(w) + layout = QVBoxLayout(spacing=0) + w.setLayout(layout) + + layout.addWidget(self.scoreLabel) + layout.addWidget(self.scoreView) + + box = QHBoxLayout(spacing=0) + layout.addLayout(box) + + box.addWidget(self.removeButton) + box.addWidget(self.upButton) + box.addWidget(self.downButton) + + self.addWidget(self.partSettings) + + self.typesView.setModel(parts.model()) + app.translateUI(self) + + # signal connections + self.addButton.clicked.connect(self.slotAddButtonClicked) + self.removeButton.clicked.connect(self.slotRemoveButtonClicked) + self.typesView.doubleClicked.connect(self.slotDoubleClicked) + self.scoreView.currentItemChanged.connect(self.slotCurrentItemChanged) + self.upButton.clicked.connect(self.scoreView.moveSelectedChildrenUp) + self.downButton.clicked.connect(self.scoreView.moveSelectedChildrenDown) + + def translateUI(self): + bold = "{0}".format + self.typesLabel.setText(bold(_("Available parts:"))) + self.scoreLabel.setText(bold(_("Score:"))) + self.addButton.setText(_("&Add")) + self.removeButton.setText(_("&Remove")) + self.upButton.setToolTip(_("Move up")) + self.downButton.setToolTip(_("Move down")) + + def slotDoubleClicked(self, index): + self.addParts([index]) + + def slotAddButtonClicked(self): + self.addParts(self.typesView.selectedIndexes()) + + def addParts(self, indexes): + """Adds the parts for the given indexes.""" + # add to current if that is a container type + currentItem = self.scoreView.currentItem() + for index in indexes: + category = index.internalPointer() + if category: + part = category.items[index.row()] + box = QGroupBox(self.partSettings) + self.partSettings.addWidget(box) + # determine the parent: current or root + if currentItem and issubclass(part, currentItem.part.accepts()): + parent = currentItem + parent.setExpanded(True) + else: + parent = self.scoreView.invisibleRootItem() + item = PartItem(parent, part, box) + parent.addChild(item) + + def slotCurrentItemChanged(self, item): + if isinstance(item, PartItem): + self.partSettings.setCurrentWidget(item.box) + + def slotRemoveButtonClicked(self): + self.scoreView.removeSelectedItems() + + def clear(self): + """Called when the user clicks the clear button on this page.""" + self.scoreView.clear() + + def rootPartItem(self): + """Returns the invisibleRootItem(), representing the tree of parts in the score view.""" + return self.scoreView.invisibleRootItem() + + +class PartItem(widgets.treewidget.TreeWidgetItem): + """An item in the score tree widget.""" + def __init__(self, tree, part, box): + """Initializes the item. + + tree: is the score tree widget, + part: is the Part instance that creates the widgets + box: the QGroupBox that is created for this item in the stacked widget. + + """ + super(PartItem, self).__init__(tree) + self.part = part() + self.box = box + layout = QVBoxLayout() + box.setLayout(layout) + self.part.createWidgets(layout) + layout.addStretch(1) + app.translateUI(self) + + flags = ( + Qt.ItemIsSelectable | + Qt.ItemIsDragEnabled | + Qt.ItemIsEnabled + ) + if issubclass(part, parts._base.Container): + flags |= Qt.ItemIsDropEnabled + self.setFlags(flags) + + def translateUI(self): + self.setText(0, self.part.title()) + self.box.setTitle(self.part.title()) + self.part.translateWidgets() + + def cleanup(self): + self.box.deleteLater() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/scorewiz.ly frescobaldi-2.0.0/frescobaldi_app/scorewiz/scorewiz.ly --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/scorewiz.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/scorewiz.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,22 @@ +\version "2.14.0" + +\paper { + paper-height = 1\in + paper-width = 3\in + evenHeaderMarkup = ##f + oddHeaderMarkup = ##f + evenFooterMarkup = ##f + oddFooterMarkup = ##f + + ragged-right = ##f + indent = #0 + + left-margin = #0 + top-margin = #1 + right-margin = #0 + bottom-margin = #0 +} + +\relative c' { + c d e f g a b c +} Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi_app/scorewiz/scorewiz.png and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi_app/scorewiz/scorewiz.png differ diff -Nru frescobaldi-1.2.0/frescobaldi_app/scorewiz/settings.py frescobaldi-2.0.0/frescobaldi_app/scorewiz/settings.py --- frescobaldi-1.2.0/frescobaldi_app/scorewiz/settings.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scorewiz/settings.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,315 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The score settings widget. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import po +import language_names +import listmodel +import lilypondinfo + +from . import scoreproperties + +class SettingsWidget(QWidget): + def __init__(self, parent): + super(SettingsWidget, self).__init__(parent) + grid = QGridLayout() + self.setLayout(grid) + + self.scoreProperties = ScoreProperties(self) + self.generalPreferences = GeneralPreferences(self) + self.lilyPondPreferences = LilyPondPreferences(self) + self.instrumentNames = InstrumentNames(self) + + grid.addWidget(self.scoreProperties, 0, 0) + grid.addWidget(self.generalPreferences, 0, 1) + grid.addWidget(self.lilyPondPreferences, 1, 0) + grid.addWidget(self.instrumentNames, 1, 1) + + +class ScoreProperties(QGroupBox, scoreproperties.ScoreProperties): + def __init__(self, parent): + super(ScoreProperties, self).__init__(parent) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.createWidgets() + self.layoutWidgets(layout) + + app.translateUI(self) + + scorewiz = self.window() + scorewiz.pitchLanguageChanged.connect(self.setPitchLanguage) + self.setPitchLanguage(scorewiz.pitchLanguage()) + scorewiz.accepted.connect(self.saveCompletions) + + def translateUI(self): + self.translateWidgets() + self.setTitle(_("Score properties")) + + + +class GeneralPreferences(QGroupBox): + def __init__(self, parent): + super(GeneralPreferences, self).__init__(parent) + + layout = QVBoxLayout() + self.setLayout(layout) + + self.typq = QCheckBox() + self.tagl = QCheckBox() + self.barnum = QCheckBox() + self.midi = QCheckBox() + self.metro = QCheckBox() + self.paperSizeLabel = QLabel() + self.paper = QComboBox() + self.paper.addItems(paperSizes) + self.paperLandscape = QCheckBox(enabled=False) + self.paper.activated.connect(self.slotPaperChanged) + + layout.addWidget(self.typq) + layout.addWidget(self.tagl) + layout.addWidget(self.barnum) + layout.addWidget(self.midi) + layout.addWidget(self.metro) + + box = QHBoxLayout(spacing=2) + box.addWidget(self.paperSizeLabel) + box.addWidget(self.paper) + box.addWidget(self.paperLandscape) + layout.addLayout(box) + app.translateUI(self) + + self.loadSettings() + self.window().finished.connect(self.saveSettings) + + def translateUI(self): + self.setTitle(_("General preferences")) + self.typq.setText(_("Use typographical quotes")) + self.typq.setToolTip(_( + "Replace normal quotes in titles with nice typographical quotes.")) + self.tagl.setText(_("Remove default tagline")) + self.tagl.setToolTip(_( + "Suppress the default tagline output by LilyPond.")) + self.barnum.setText(_("Remove bar numbers")) + self.barnum.setToolTip(_( + "Suppress the display of measure numbers at the beginning of " + "every system.")) + self.midi.setText(_("Create MIDI output")) + self.midi.setToolTip(_( + "Create a MIDI file in addition to the PDF file.")) + self.metro.setText(_("Show metronome mark")) + self.metro.setToolTip(_( + "If checked, show the metronome mark at the beginning of the " + "score. The MIDI output also uses the metronome setting.")) + # paper size: + self.paperSizeLabel.setText(_("Paper size:")) + self.paper.setItemText(0, _("Default")) + self.paperLandscape.setText(_("Landscape")) + + def slotPaperChanged(self, index): + self.paperLandscape.setEnabled(bool(index)) + + def getPaperSize(self): + """Returns the configured papersize or the empty string for default.""" + return paperSizes[self.paper.currentIndex()] + + def loadSettings(self): + s = QSettings() + s.beginGroup('scorewiz/preferences') + self.typq.setChecked(s.value('typographical_quotes', True) not in (False, 'false')) + self.tagl.setChecked(s.value('remove_tagline', False) in (True, 'true')) + self.barnum.setChecked(s.value('remove_barnumbers', False) in (True, 'true')) + self.midi.setChecked(s.value('midi', True) not in (False, 'false')) + self.metro.setChecked(s.value('metronome_mark', False) in (True, 'true')) + psize = s.value('paper_size', '') + enable = bool(psize and psize in paperSizes) + self.paper.setCurrentIndex(paperSizes.index(psize) if enable else 0) + self.paperLandscape.setChecked(s.value('paper_landscape', False) in (True, 'true')) + self.paperLandscape.setEnabled(enable) + + def saveSettings(self): + s = QSettings() + s.beginGroup('scorewiz/preferences') + s.setValue('typographical_quotes', self.typq.isChecked()) + s.setValue('remove_tagline', self.tagl.isChecked()) + s.setValue('remove_barnumbers', self.barnum.isChecked()) + s.setValue('midi', self.midi.isChecked()) + s.setValue('metronome_mark', self.metro.isChecked()) + s.setValue('paper_size', paperSizes[self.paper.currentIndex()]) + s.setValue('paper_landscape', self.paperLandscape.isChecked()) + + +class InstrumentNames(QGroupBox): + def __init__(self, parent): + super(InstrumentNames, self).__init__(parent, checkable=True, checked=True) + + grid = QGridLayout() + self.setLayout(grid) + + self.firstSystemLabel = QLabel() + self.firstSystem = QComboBox() + self.firstSystemLabel.setBuddy(self.firstSystem) + self.otherSystemsLabel = QLabel() + self.otherSystems = QComboBox() + self.otherSystemsLabel.setBuddy(self.otherSystems) + self.languageLabel = QLabel() + self.language = QComboBox() + self.languageLabel.setBuddy(self.language) + + self.firstSystem.setModel(listmodel.ListModel( + (lambda: _("Long"), lambda: _("Short")), self.firstSystem, + display = listmodel.translate)) + self.otherSystems.setModel(listmodel.ListModel( + (lambda: _("Long"), lambda: _("Short"), lambda: _("None")), self.otherSystems, + display = listmodel.translate)) + + self._langs = l = ['','C'] + l.extend(sorted(po.available())) + def display(lang): + if lang == 'C': + return _("English (untranslated)") + elif not lang: + return _("Default") + return language_names.languageName(lang) + self.language.setModel(listmodel.ListModel(l, self.language, display=display)) + + grid.addWidget(self.firstSystemLabel, 0, 0) + grid.addWidget(self.firstSystem, 0, 1) + grid.addWidget(self.otherSystemsLabel, 1, 0) + grid.addWidget(self.otherSystems, 1, 1) + grid.addWidget(self.languageLabel, 2, 0) + grid.addWidget(self.language, 2, 1) + app.translateUI(self) + self.loadSettings() + self.window().finished.connect(self.saveSettings) + + def translateUI(self): + self.setTitle(_("Instrument names")) + self.firstSystemLabel.setText(_("First system:")) + self.otherSystemsLabel.setText(_("Other systems:")) + self.languageLabel.setText(_("Language:")) + self.firstSystem.setToolTip(_( + "Use long or short instrument names before the first system.")) + self.otherSystems.setToolTip(_( + "Use short, long or no instrument names before the next systems.")) + self.language.setToolTip(_( + "Which language to use for the instrument names.")) + self.firstSystem.model().update() + self.otherSystems.model().update() + self.language.model().update() + + def getLanguage(self): + """Returns the language the user has set. + + '' means: default (use same translation as system) + 'C' means: English (untranslated) + or a languagecode that is available in Frescobaldi's translation. + + """ + return self._langs[self.language.currentIndex()] + + def loadSettings(self): + s = QSettings() + s.beginGroup('scorewiz/instrumentnames') + self.setChecked(s.value('enabled', True) not in (False, 'false')) + allow = ['long', 'short'] + first = s.value('first', '') + self.firstSystem.setCurrentIndex(allow.index(first) if first in allow else 0) + allow = ['long', 'short', 'none'] + other = s.value('other', '') + self.otherSystems.setCurrentIndex(allow.index(other) if other in allow else 2) + language = s.value('language', '') + self.language.setCurrentIndex(self._langs.index(language) if language in self._langs else 0) + + def saveSettings(self): + s = QSettings() + s.beginGroup('scorewiz/instrumentnames') + s.setValue('enable', self.isChecked()) + s.setValue('first', ('long', 'short')[self.firstSystem.currentIndex()]) + s.setValue('other', ('long', 'short', 'none')[self.otherSystems.currentIndex()]) + s.setValue('language', self._langs[self.language.currentIndex()]) + + +class LilyPondPreferences(QGroupBox): + def __init__(self, parent): + super(LilyPondPreferences, self).__init__(parent) + + grid = QGridLayout() + self.setLayout(grid) + + self.pitchLanguageLabel = QLabel() + self.pitchLanguage = QComboBox() + self.versionLabel = QLabel() + self.version = QComboBox(editable=True) + + self.pitchLanguage.addItem('') + self.pitchLanguage.addItems([lang.title() for lang in sorted(scoreproperties.keyNames)]) + self.version.addItem(lilypondinfo.preferred().versionString) + for v in ("2.14.0", "2.12.0"): + if v != lilypondinfo.preferred().versionString: + self.version.addItem(v) + + grid.addWidget(self.pitchLanguageLabel, 0, 0) + grid.addWidget(self.pitchLanguage, 0, 1) + grid.addWidget(self.versionLabel, 1, 0) + grid.addWidget(self.version, 1, 1) + + self.pitchLanguage.activated.connect(self.slotPitchLanguageChanged) + app.translateUI(self) + self.loadSettings() + self.window().finished.connect(self.saveSettings) + + def translateUI(self): + self.setTitle(_("LilyPond")) + self.pitchLanguageLabel.setText(_("Pitch name language:")) + self.pitchLanguage.setToolTip(_( + "The LilyPond language you want to use for the pitch names.")) + self.pitchLanguage.setItemText(0, _("Default")) + self.versionLabel.setText(_("Version:")) + self.version.setToolTip(_( + "The LilyPond version you will be using for this document.")) + + def slotPitchLanguageChanged(self, index): + if index == 0: + language = '' + else: + language = self.pitchLanguage.currentText().lower() + self.window().setPitchLanguage(language) + + def loadSettings(self): + language = self.window().pitchLanguage() + languages = list(sorted(scoreproperties.keyNames)) + index = languages.index(language) + 1 if language in languages else 0 + self.pitchLanguage.setCurrentIndex(index) + + def saveSettings(self): + QSettings().setValue('scorewiz/lilypond/pitch_language', self.window().pitchLanguage()) + + +paperSizes = ['', 'a3', 'a4', 'a5', 'a6', 'a7', 'legal', 'letter', '11x17'] diff -Nru frescobaldi-1.2.0/frescobaldi_app/scratchdir.py frescobaldi-2.0.0/frescobaldi_app/scratchdir.py --- frescobaldi-1.2.0/frescobaldi_app/scratchdir.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/scratchdir.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,70 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages a local temporary directory for a Document (e.g. unnamed or remote). +""" + +from __future__ import unicode_literals + +import os + +import util +import ly.lex +import documentinfo +import plugin + + +def scratchdir(document): + return ScratchDir.instance(document) + + +class ScratchDir(plugin.DocumentPlugin): + + def __init__(self, document): + self._directory = None + + def create(self): + """Creates the local temporary directory.""" + if not self._directory: + self._directory = util.tempdir() + + def directory(self): + """Returns the directory if a temporary area was created, else None.""" + return self._directory + + def path(self): + """Returns the path the saved document text would have if a temporary area was created, else None.""" + if self._directory: + basename = None + if not self.document().url().isEmpty(): + basename = os.path.basename(self.document().url().path()) + if not basename: + basename = 'document' + ly.lex.extensions[documentinfo.mode(self.document())] + return os.path.join(self._directory, basename) + + def saveDocument(self): + """Writes the text of the document to our path().""" + if not self._directory: + self.create() + with open(self.path(), 'w') as f: + f.write(self.document().encodedText()) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/search.py frescobaldi-2.0.0/frescobaldi_app/search.py --- frescobaldi-1.2.0/frescobaldi_app/search.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/search.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,312 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Widget for search and replace. +""" + +from __future__ import unicode_literals + +import bisect +import re +import weakref + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import ( + QAction, QApplication, QCheckBox, QGridLayout, QKeySequence, QLabel, + QLineEdit, QPalette, QPushButton, QStyle, QTextCursor, QToolButton, QWidget) + +import app +import util +import plugin +import textformats +import viewhighlighter + + +class Search(QWidget, plugin.MainWindowPlugin): + def __init__(self, mainwindow): + super(Search, self).__init__(mainwindow) + self._currentView = None + self._positions = None + self._replace = False # are we in replace mode? + + mainwindow.currentViewChanged.connect(self.viewChanged) + mainwindow.actionCollection.edit_find_next.triggered.connect(self.findNext) + mainwindow.actionCollection.edit_find_previous.triggered.connect(self.findPrevious) + + # dont inherit looks from view + self.setFont(QApplication.font()) + self.setPalette(QApplication.palette()) + + grid = QGridLayout() + grid.setContentsMargins(4, 0, 4, 0) + grid.setVerticalSpacing(0) + self.setLayout(grid) + + self.searchEntry = QLineEdit(textChanged=self.slotSearchChanged) + self.searchLabel = QLabel() + self.caseCheck = QCheckBox(checked=True, focusPolicy=Qt.NoFocus) + self.regexCheck = QCheckBox(focusPolicy=Qt.NoFocus) + self.countLabel = QLabel(alignment=Qt.AlignRight | Qt.AlignVCenter) + self.countLabel.setMinimumWidth(QApplication.fontMetrics().width("9999")) + self.closeButton = QToolButton(autoRaise=True, focusPolicy=Qt.NoFocus) + self.hideAction = QAction(self, triggered=self.slotHide) + self.hideAction.setShortcut(QKeySequence(Qt.Key_Escape)) + self.hideAction.setIcon(self.style().standardIcon(QStyle.SP_DialogCloseButton)) + self.closeButton.setDefaultAction(self.hideAction) + + grid.addWidget(self.searchLabel, 0, 0) + grid.addWidget(self.searchEntry, 0, 1) + grid.addWidget(self.caseCheck, 0, 2) + grid.addWidget(self.regexCheck, 0, 3) + grid.addWidget(self.countLabel, 0, 4) + grid.addWidget(self.closeButton, 0, 5) + + self.caseCheck.toggled.connect(self.slotSearchChanged) + self.regexCheck.toggled.connect(self.slotSearchChanged) + + self.replaceEntry = QLineEdit() + self.replaceLabel = QLabel() + self.replaceButton = QPushButton(clicked=self.slotReplace) + self.replaceAllButton = QPushButton(clicked=self.slotReplaceAll) + + grid.addWidget(self.replaceLabel, 1, 0) + grid.addWidget(self.replaceEntry, 1, 1) + grid.addWidget(self.replaceButton, 1, 2) + grid.addWidget(self.replaceAllButton, 1, 3) + + app.settingsChanged.connect(self.readSettings) + self.readSettings() + app.translateUI(self) + + def translateUI(self): + self.searchLabel.setText(_("Search:")) + self.caseCheck.setText(_("&Case")) + self.caseCheck.setToolTip(_("Case Sensitive")) + self.regexCheck.setText(_("&Regex")) + self.regexCheck.setToolTip(_("Regular Expression")) + self.countLabel.setToolTip(_("The total number of matches")) + self.hideAction.setToolTip(_("Close")) + self.replaceLabel.setText(_("Replace:")) + self.replaceButton.setText(_("Re&place")) + self.replaceButton.setToolTip(_("Replaces the next occurrence of the search term.")) + self.replaceAllButton.setText(_("&All")) + self.replaceAllButton.setToolTip(_("Replaces all occurrences of the search term in the document or selection.")) + + def readSettings(self): + data = textformats.formatData('editor') + self.searchEntry.setFont(data.font) + self.replaceEntry.setFont(data.font) + p = data.palette() + self.searchEntry.setPalette(p) + self.replaceEntry.setPalette(p) + + def currentView(self): + return self._currentView and self._currentView() + + def setCurrentView(self, view): + self._currentView = weakref.ref(view) if view else None + + def showWidget(self): + if self.isVisible(): + self.hideWidget() + view = self.window().currentView() + self.setFixedHeight(self.sizeHint().height()) + view.showWidget(self) + self.setCurrentView(view) + self.show() + + def hideWidget(self): + view = self.currentView() + if view: + viewhighlighter.highlighter(view).clear("search") + view.hideWidget(self) + self.hide() + + def viewChanged(self, new): + self.setParent(None) + self.hideWidget() + self.setCurrentView(new) + self.updatePositions() + + def slotHide(self): + view = self.currentView() + if view: + self.hideWidget() + view.setFocus() + + def find(self): + # hide replace stuff + self.replaceLabel.hide() + self.replaceEntry.hide() + self.replaceButton.hide() + self.replaceAllButton.hide() + self._replace = False # we are not in replace mode + visible = self.isVisible() + if not visible: + with util.signalsBlocked(self.searchEntry): + self.searchEntry.clear() + self.showWidget() + if not visible and self.currentView(): + # pick current word + cursor = self.currentView().textCursor() + cursor.movePosition(QTextCursor.StartOfWord) + cursor.movePosition(QTextCursor.EndOfWord, QTextCursor.KeepAnchor) + word = cursor.selection().toPlainText() + if not re.search(r'\w', word): + word = "" + self.searchEntry.setText(word) + self.searchEntry.selectAll() + else: + self.slotSearchChanged() + self.searchEntry.setFocus() + + def replace(self): + # show replace stuff + self.replaceLabel.show() + self.replaceEntry.show() + self.replaceButton.show() + self.replaceAllButton.show() + focus = self.replaceEntry if self.isVisible() and self.searchEntry.text() else self.searchEntry + self._replace = True # we are in replace mode + self.showWidget() + self.slotSearchChanged() + focus.setFocus() + + def slotSearchChanged(self): + self.updatePositions() + viewhighlighter.highlighter(self.currentView()).highlight("search", self._positions, 1) + + def updatePositions(self): + search = self.searchEntry.text() + view = self.currentView() + document = view.document() + self._positions = [] + if search: + text = document.toPlainText() + flags = re.MULTILINE | re.DOTALL + if not self.caseCheck.isChecked(): + flags |= re.IGNORECASE + if not self.regexCheck.isChecked(): + search = re.escape(search) + try: + matches = re.finditer(search, text, flags) + except re.error: + pass + else: + for m in matches: + c = QTextCursor(document) + c.setPosition(m.end()) + c.setPosition(m.start(), QTextCursor.KeepAnchor) + self._positions.append(c) + self.countLabel.setText(unicode(len(self._positions))) + + def findNext(self): + view = self.currentView() + if view and self._positions: + positions = [c.position() for c in self._positions] + index = bisect.bisect_right(positions, view.textCursor().position()) + if index < len(positions): + view.setTextCursor(self._positions[index]) + else: + view.setTextCursor(self._positions[0]) + view.ensureCursorVisible() + + def findPrevious(self): + view = self.currentView() + positions = [c.position() for c in self._positions] + if view and positions: + index = bisect.bisect_left(positions, view.textCursor().position()) - 1 + view.setTextCursor(self._positions[index]) + view.ensureCursorVisible() + + def keyPressEvent(self, ev): + if ev.key() == Qt.Key_Tab: + # prevent Tab from reaching the View widget + self.window().focusNextChild() + return + # if in search mode, Up and Down jump between search results + if not self._replace and self._positions and self.searchEntry.text() and not ev.modifiers(): + if ev.key() == Qt.Key_Up: + self.findPrevious() + return + elif ev.key() == Qt.Key_Down: + self.findNext() + return + # use enter or return for search next + if ev.key() in (Qt.Key_Enter, Qt.Key_Return): + self.findNext() + return + super(Search, self).keyPressEvent(ev) + + def doReplace(self, cursor): + text = cursor.selection().toPlainText() + search = self.searchEntry.text() + replace = self.replaceEntry.text() + ok = text == self.searchEntry.text() + if self.regexCheck.isChecked(): + m = re.match(search, text) + ok = False + if m: + try: + replace = m.expand(replace) + ok = True + except re.error: + pass + if ok: + pos = cursor.position() + cursor.insertText(replace) + cursor.setPosition(pos, QTextCursor.KeepAnchor) + return ok + + def slotReplace(self): + view = self.currentView() + if view and self._positions: + positions = [c.position() for c in self._positions] + index = bisect.bisect_left(positions, view.textCursor().position()) + if index >= len(positions): + index = 0 + if self.doReplace(self._positions[index]): + viewhighlighter.highlighter(view).highlight("search", self._positions, 1) + if index < len(positions) - 1: + view.setTextCursor(self._positions[index+1]) + else: + view.setTextCursor(self._positions[0]) + view.ensureCursorVisible() + + def slotReplaceAll(self): + view = self.currentView() + if view: + replaced = False + cursors = self._positions + if view.textCursor().hasSelection(): + cursors = [cursor for cursor in cursors if cursorContains(view.textCursor(), cursor)] + view.textCursor().beginEditBlock() + for cursor in cursors: + if self.doReplace(cursor): + replaced = True + view.textCursor().endEditBlock() + if replaced: + viewhighlighter.highlighter(view).highlight("search", self._positions, 1) + + +def cursorContains(c1, c2): + """Returns True if the selection of cursor2 entirely falls inside the selection of cursor1.""" + return c1.selectionStart() <= c2.selectionStart() and c1.selectionEnd() >= c2.selectionEnd() + diff -Nru frescobaldi-1.2.0/frescobaldi_app/session.py frescobaldi-2.0.0/frescobaldi_app/session.py --- frescobaldi-1.2.0/frescobaldi_app/session.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/session.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,102 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Stuff dealing with the QSessionManager. + +If this script is called directly instead of imported, +it discards the session information given as the argument. + +If this script is imported, it connects the saveState and commitData functions +to the QApplication signals. + +""" + +from __future__ import unicode_literals + +import os +import sys + +from PyQt4.QtCore import QObject, QSettings, Qt, SIGNAL +from PyQt4.QtGui import QApplication, QSessionManager + +import info + +def sessionSettings(): + """Returns the QSettings object for sessiondata.""" + return QSettings(info.name, 'sessiondata') + + +if __name__ == '__main__': + settings = sessionSettings() + settings.remove(sys.argv[-1]) + sys.exit(0) + + +### Continued here if normally imported + +import app +import mainwindow + +def sessionKey(): + """ Returns the full session key. """ + return '{0}_{1}'.format(app.qApp.sessionId(), app.qApp.sessionKey()) + +def saveState(sm): + """Save session state on behalf of the session manager.""" + sm.setRestartHint(QSessionManager.RestartIfRunning) + + key = sessionKey() + restartCommand = [sys.executable, os.path.abspath(sys.argv[0]), '-session', key] + sm.setRestartCommand(restartCommand) + + discardCommand = [sys.executable, __file__, key] + sm.setDiscardCommand(discardCommand) + +def commitData(sm): + """Save a session on behalf of the session manager.""" + if not sm.allowsInteraction(): + pass # TODO: can implement saving unsaved/unnamed docs to cache buffers + sm.release() + saveState(sm) + settings = sessionSettings() + settings.beginGroup(sessionKey()) + settings.setValue('numwindows', len(app.windows)) + for index, win in enumerate(app.windows): + settings.beginGroup("mainwindow{0}".format(index)) + win.writeSessionSettings(settings) + settings.endGroup() + settings.endGroup() + settings.sync() + +def restoreSession(): + """Restore a session saved by the session manager.""" + settings = sessionSettings() + settings.beginGroup(sessionKey()) + for index in range(int(settings.value('numwindows', 0))): + settings.beginGroup("mainwindow{0}".format(index)) + win = mainwindow.MainWindow() + win.readSessionSettings(settings) + win.show() + settings.endGroup() + settings.endGroup() + +# the new-style way of connecting fails on PyQt4 4.8.x... +QObject.connect(app.qApp, SIGNAL("saveStateRequest(QSessionManager&)"), saveState) +QObject.connect(app.qApp, SIGNAL("commitDataRequest(QSessionManager&)"), commitData) diff -Nru frescobaldi-1.2.0/frescobaldi_app/sessions/dialog.py frescobaldi-2.0.0/frescobaldi_app/sessions/dialog.py --- frescobaldi-1.2.0/frescobaldi_app/sessions/dialog.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/sessions/dialog.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,189 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Session dialog for named session stuff. +""" + +from __future__ import unicode_literals + + +from PyQt4.QtGui import ( + QCheckBox, QDialog, QDialogButtonBox, QGridLayout, QLabel, QLineEdit, + QMessageBox, QVBoxLayout) + +import app +import widgets.listedit +import widgets.urlrequester +import sessions + + +class SessionManagerDialog(QDialog): + def __init__(self, mainwindow): + super(SessionManagerDialog, self).__init__(mainwindow) + self.setWindowTitle(app.caption(_("Manage Sessions"))) + layout = QVBoxLayout() + self.setLayout(layout) + + self.sessions = SessionList(self) + layout.addWidget(self.sessions) + layout.addWidget(widgets.Separator()) + + self.buttons = b = QDialogButtonBox(self) + layout.addWidget(b) + b.setStandardButtons(QDialogButtonBox.Help | QDialogButtonBox.Close) + b.rejected.connect(self.accept) + self.sessions.load() + + +class SessionList(widgets.listedit.ListEdit): + """Manage the list of sessions.""" + def load(self): + names = sessions.sessionNames() + current = sessions.currentSession() + self.setValue(names) + if current in names: + self.setCurrentRow(names.index(current)) + + def removeItem(self, item): + sessions.deleteSession(item.text()) + super(SessionList, self).removeItem(item) + + def openEditor(self, item): + name = SessionEditor(self).edit(item.text()) + if name: + item.setText(name) + return True + + +class SessionEditor(QDialog): + def __init__(self, parent=None): + super(SessionEditor, self).__init__(parent) + + layout = QVBoxLayout() + self.setLayout(layout) + + grid = QGridLayout() + layout.addLayout(grid) + + self.name = QLineEdit() + self.nameLabel = l = QLabel() + l.setBuddy(self.name) + grid.addWidget(l, 0, 0) + grid.addWidget(self.name, 0, 1) + + self.autosave = QCheckBox() + grid.addWidget(self.autosave, 1, 1) + + self.basedir = widgets.urlrequester.UrlRequester() + self.basedirLabel = l = QLabel() + l.setBuddy(self.basedir) + grid.addWidget(l, 2, 0) + grid.addWidget(self.basedir, 2, 1) + + layout.addWidget(widgets.Separator()) + self.buttons = b = QDialogButtonBox(self) + layout.addWidget(b) + b.setStandardButtons(QDialogButtonBox.Help | QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + b.accepted.connect(self.accept) + b.rejected.connect(self.reject) + app.translateUI(self) + + def translateUI(self): + self.nameLabel.setText(_("Name:")) + self.autosave.setText(_("Always save the list of documents in this session")) + self.basedirLabel.setText(_("Base directory:")) + + def load(self, name): + settings = sessions.sessionGroup(name) + self.autosave.setChecked(settings.value("autosave", True) not in (False, 'false')) + self.basedir.setPath(settings.value("basedir", "")) + # more settings here + + def save(self, name): + settings = sessions.sessionGroup(name) + settings.setValue("autosave", self.autosave.isChecked()) + settings.setValue("basedir", self.basedir.path()) + # more settings here + + def defaults(self): + self.autosave.setChecked(True) + self.basedir.setPath('') + # more defaults here + + def edit(self, name=None): + self._originalName = name + if name: + caption = _("Edit session: {name}").format(name=name) + self.name.setText(name) + self.load(name) + else: + caption = _("Edit new session") + self.name.clear() + self.name.setFocus() + self.defaults() + self.setWindowTitle(app.caption(caption)) + if self.exec_(): + # name changed? + name = self.name.text() + if self._originalName and name != self._originalName: + sessions.renameSession(self._originalName, name) + self.save(name) + return name + + def done(self, result): + if not result or self.validate(): + super(SessionEditor, self).done(result) + + def validate(self): + """Checks if the input is acceptable. + + If this method returns True, the dialog is accepted when OK is clicked. + Otherwise a messagebox could be displayed, and the dialog will remain + visible. + """ + name = self.name.text().strip() + self.name.setText(name) + if not name: + self.name.setFocus() + QMessageBox.warning(self, app.caption(_("Warning")), + _("Please enter a session name.")) + if self._originalName: + self.name.setText(self._originalName) + return False + + elif name == 'none': + self.name.setFocus() + QMessageBox.warning(self, app.caption(_("Warning")), + _("Please do not use the name '{name}'.".format(name="none"))) + return False + + elif self._originalName != name and name in sessions.sessionNames(): + self.name.setFocus() + box = QMessageBox(QMessageBox.Warning, app.caption(_("Warning")), + _("Another session with the name {name} already exists.\n\n" + "Do you want to overwrite it?").format(name=name), + QMessageBox.Discard | QMessageBox.Cancel, self) + box.button(QMessageBox.Discard).setText(_("Overwrite")) + result = box.exec_() + if result != QMessageBox.Discard: + return False + + return True + diff -Nru frescobaldi-1.2.0/frescobaldi_app/sessions/__init__.py frescobaldi-2.0.0/frescobaldi_app/sessions/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/sessions/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/sessions/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,159 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Named session support (not to be confused with the QSessionManager support +in session.py) + +A session is a global list of open documents, with some additional preferences set. + +""" + +from __future__ import unicode_literals + +import itertools + +from PyQt4.QtCore import QSettings, QUrl + +import app +import util + + +_currentSession = None + + +@app.aboutToQuit.connect +def _saveLastUsedSession(): + s = QSettings() + s.beginGroup("session") + s.setValue("lastused", _currentSession or "") + +def loadDefaultSession(): + """Load the session which should be started by default. + + This can be: + - no session, + - last used session, + - a specific session. + + Returns the document that should be set active (if any). + """ + s = QSettings() + s.beginGroup("session") + start = s.value("startup", "none") + name = None + if start == "lastused": + name = s.value("lastused", "") + elif start == "custom": + name = s.value("custom", "") + if name not in sessionNames(): + s.setValue("startup", "none") + if name and name in sessionNames(): + return loadSession(name) + +def sessionGroup(name): + """Returns the session settings group where settings can be stored for the named session. + + If the group doesn't exist, it is created. + + """ + session = app.settings("sessions") + childGroups = session.childGroups() + for group in childGroups: + if session.value(group + "/name") == name: + break + else: + for count in itertools.count(1): + group = "session{0}".format(count) + if group not in childGroups: + session.setValue(group + "/name", name) + break + session.beginGroup(group) + return session + +def sessionNames(): + session = app.settings("sessions") + names = [session.value(group + "/name", "") for group in session.childGroups()] + names.sort(key=util.naturalsort) + return names + +def loadSession(name): + """Loads the given session (without closing other docs first).""" + session = sessionGroup(name) + + urls = [] + for url in session.value("urls", []) or []: + if isinstance(url, QUrl): + urls.append(url) + active = int(session.value("active", -1)) + result = None + if urls: + docs = [app.openUrl(url) for url in urls] + if active not in range(len(docs)): + active = 0 + result = docs[active] + setCurrentSession(name) + return result + +def saveSession(name, documents, activeDocument=None): + """Saves the list of documents and which one is active.""" + session = sessionGroup(name) + session.setValue("urls", [doc.url() for doc in documents if not doc.url().isEmpty()]) + if activeDocument in documents: + session.setValue("active", documents.index(activeDocument)) + else: + session.remove("active") + app.saveSessionData(name) + +def deleteSession(name): + session = app.settings("sessions") + for group in session.childGroups(): + if session.value(group + "/name", "") == name: + session.remove(group) + break + if name == _currentSession: + setCurrentSession(None) + +def renameSession(old, new): + """Renames a session.""" + session = sessionGroup(old) + session.setValue("name", new) + if old == currentSession(): + setCurrentSession(new) + +def currentSession(): + return _currentSession + +def setCurrentSession(name): + global _currentSession + if name != _currentSession: + name and sessionGroup(name) # just select it, so its name is written in case it doesn't exist + _currentSession = name + app.sessionChanged(name) + +def currentSessionGroup(): + """Returns the session settings at the current group is there is a current session. + + If there is no current session, returns None. + + """ + if _currentSession: + return sessionGroup(_currentSession) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/sessions/manager.py frescobaldi-2.0.0/frescobaldi_app/sessions/manager.py --- frescobaldi-1.2.0/frescobaldi_app/sessions/manager.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/sessions/manager.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,132 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Per-MainWindow session manager +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QAction, QActionGroup + +import actioncollection +import actioncollectionmanager +import plugin +import document +import icons +import util +import sessions +import signals + + +def get(mainwindow): + """Returns the SessionManager for the specified MainWindow.""" + return SessionManager.instance(mainwindow) + + +class SessionManager(plugin.MainWindowPlugin): + """Per-MainWindow session manager. + + Emits the saveSessionData(name) signal when a session wants to be saved. + Connect to this if you only want the notification for the current MainWindow + (the one the user initated the action from). + + Use app.saveSessionData(name) if you want to get the global notification. + + """ + + # This signal is emitted when a session wants to save its data. + saveSessionData = signals.Signal() # Session name + + def __init__(self, mainwindow): + self.actionCollection = ac = SessionActions() + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + ac.session_new.triggered.connect(self.newSession) + ac.session_save.triggered.connect(self.saveSession) + ac.session_manage.triggered.connect(self.manageSessions) + ac.session_none.triggered.connect(self.noSession) + + def newSession(self): + from . import dialog + name = dialog.SessionEditor(self.mainwindow()).edit() + if name: + sessions.setCurrentSession(name) + self.saveCurrentSession() + + def saveSession(self): + if not sessions.currentSession(): + return self.newSession() + self.saveCurrentSession() + + def manageSessions(self): + from . import dialog + dialog.SessionManagerDialog(self.mainwindow()).exec_() + + def noSession(self): + if sessions.currentSession(): + self.saveCurrentSessionIfDesired() + sessions.setCurrentSession(None) + + def startSession(self, name): + """Switches to the given session.""" + if name == sessions.currentSession(): + return + self.saveCurrentSessionIfDesired() + if self.mainwindow().queryClose(): + active = sessions.loadSession(name) or document.Document() + self.mainwindow().setCurrentDocument(active) + + def saveCurrentSessionIfDesired(self): + """Saves the current session if it is configured to save itself on exit.""" + cur = sessions.currentSession() + if cur: + s = sessions.sessionGroup(cur) + if s.value("autosave", True) not in (False, 'false'): + self.saveCurrentSession() + + def saveCurrentSession(self): + """Saves the current session.""" + cur = sessions.currentSession() + if cur: + documents = self.mainwindow().documents() + active = self.mainwindow().currentDocument() + sessions.saveSession(cur, documents, active) + self.saveSessionData(cur) + + +class SessionActions(actioncollection.ActionCollection): + name = "session" + def createActions(self, parent=None): + self.session_new = QAction(parent) + self.session_save = QAction(parent) + self.session_manage = QAction(parent) + self.session_none = QAction(parent) + self.session_none.setCheckable(True) + + self.session_new.setIcon(icons.get('document-new')) + self.session_save.setIcon(icons.get('document-save')) + self.session_manage.setIcon(icons.get('view-choose')) + + def translateUI(self): + self.session_new.setText(_("New Session", "&New...")) + self.session_save.setText(_("&Save")) + self.session_manage.setText(_("&Manage...")) + self.session_none.setText(_("No Session")) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/sessions/menu.py frescobaldi-2.0.0/frescobaldi_app/sessions/menu.py --- frescobaldi-1.2.0/frescobaldi_app/sessions/menu.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/sessions/menu.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,78 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Session menu. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QActionGroup, QMenu + +import app +import util +import sessions + +from . import manager + + +class SessionMenu(QMenu): + def __init__(self, mainwindow): + super(SessionMenu, self).__init__(mainwindow) + app.translateUI(self) + mgr = manager.get(mainwindow) + ac = mgr.actionCollection + ag = self._actionGroup = QActionGroup(self) + ag.setExclusive(True) + ag.addAction(ac.session_none) + ag.triggered.connect(self.slotSessionsAction) + self.addAction(ac.session_new) + self.addAction(ac.session_save) + self.addSeparator() + self.addAction(ac.session_manage) + self.addSeparator() + self.addAction(ac.session_none) + self.addSeparator() + self.aboutToShow.connect(self.populate) + + def translateUI(self): + self.setTitle(_('menu title', '&Session')) + + def populate(self): + ac = manager.get(self.parentWidget()).actionCollection + ag = self._actionGroup + for a in ag.actions(): + if a is not ac.session_none: + self.removeAction(a) + ag.removeAction(a) + ac.session_none.setChecked(not sessions.currentSession()) + for name in sessions.sessionNames(): + a = self.addAction(name.replace('&', '&&')) + a.setCheckable(True) + if name == sessions.currentSession(): + a.setChecked(True) + a.setObjectName(name) + ag.addAction(a) + util.addAccelerators(self.actions()) + + def slotSessionsAction(self, action): + if action.objectName() in sessions.sessionNames(): + manager.get(self.parentWidget()).startSession(action.objectName()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/signals.py frescobaldi-2.0.0/frescobaldi_app/signals.py --- frescobaldi-1.2.0/frescobaldi_app/signals.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/signals.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,242 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A simple signal/slot implementation. +""" + +import bisect +import contextlib +import types +import weakref + + +__all__ = ["Signal"] + + +class Signal(object): + """A Signal can be emitted and receivers (slots) can be connected to it. + + An example: + + class MyObject(object): + + somethingChanged = Signal() + + def __init__(self): + pass # etc + + def doSomething(self): + ... do things ... + self.somethingChanged("Hi there!") # emit the signal + + def receiver(arg): + print "Received message:", arg + + + >>> o = MyObject() + >>> o.somethingChanged.connect(receiver) + >>> o.doSomething() + Hi there! + + A Signal() can be used directly or as a class attribute, but can also be + accessed as an attribute of an instance, in which case it creates a Signal + instance for that instance. + + The signal is emitted by the emit() method or by simply invoking it. + + It is currently not possible to enforce argument types that should be used + when emitting the signal. But if called methods or functions expect fewer + arguments than were given on emit(), the superfluous arguments are left out. + + Methods or functions are connected using connect() and disconnected using + disconnect(). It is no problem to call connect() or disconnect() more than + once for the same function or method. Only one connection to the same method + or function can exist. + + """ + + def __init__(self, owner=None): + """Creates the Signal. + + If owner is given (must be a keyword argument) a weak reference to it is + kept, and this allows a Signal to be connected to another Signal. When + the owner dies, the connection is removed. + + """ + self.listeners = [] + self._blocked = False + self._owner = weakref.ref(owner) if owner else lambda: None + + def __get__(self, instance, cls): + """Called when accessing as a descriptor: returns another instance.""" + if instance is None: + return self + try: + return self._instances[instance] + except AttributeError: + self._instances = weakref.WeakKeyDictionary() + except KeyError: + pass + ret = self._instances[instance] = Signal(owner=instance) + return ret + + def owner(self): + """Returns the owner of this Signal, if any.""" + return self._owner() + + def connect(self, slot, priority=0, owner=None): + """Connects a method or function ('slot') to this Signal. + + The priority argument determines the order the connected slots are + called. A lower value calls the slot earlier. + If owner is given, the connection will be removed if owner is garbage + collected. + + A slot that is already connected will not be connected twice. + + If slot is an instance method (bound method), the Signal keeps no + reference to the object the method belongs to. So if the object is + garbage collected, the signal is automatically disconnected. + + If slot is a (normal or lambda) function, the Signal will keep a + reference to the function. If you want to have the function disconnected + automatically when some object dies, you should provide that object + through the owner argument. Be sure that the connected function does not + keep a reference to that object in that case! + + """ + key = makeListener(slot, owner) + if key not in self.listeners: + key.add(self, priority) + + def disconnect(self, func): + """Disconnects the method or function. + + No exception is raised if there wasn't a connection. + + """ + key = makeListener(func) + try: + self.listeners.remove(key) + except ValueError: + pass + + def clear(self): + """Removes all connected slots.""" + del self.listeners[:] + + @contextlib.contextmanager + def blocked(self): + """Returns a contextmanager that suppresses the signal. + + An example (continued from the class documentation): + + >>> o = MyObject() + >>> o.somethingChanged.connect(receiver) + >>> with o.somethingChanged.blocked(): + ... o.doSomething() + (no output) + + The doSomething() method will emit the signal but the connected slots + will not be called. + + """ + blocked, self._blocked = self._blocked, True + try: + yield + finally: + self._blocked = blocked + + def emit(self, *args, **kwargs): + """Emits the signal. + + Unless blocked, all slots will be called with the supplied arguments. + + """ + if not self._blocked: + for l in self.listeners[:]: + l.call(args, kwargs) + + __call__ = emit + + +def makeListener(func, owner=None): + if isinstance(func, (types.MethodType, types.BuiltinMethodType)): + return MethodListener(func) + elif isinstance(func, Signal): + return FunctionListener(func, owner or func.owner()) + else: + return FunctionListener(func, owner) + + +class ListenerBase(object): + def __lt__(self, other): + return self.priority < other.priority + + def add(self, signal, priority): + self.priority = priority + bisect.insort_right(signal.listeners, self) + if self.obj is not None: + def remove(wr, selfref=weakref.ref(self), sigref=weakref.ref(signal)): + self, signal = selfref(), sigref() + if self and signal: + signal.listeners.remove(self) + self.obj = weakref.ref(self.obj, remove) + try: + nargs = self.func.func_code.co_argcount + except AttributeError: + self.argslice = slice(0, None) + else: + self.argslice = slice(0, nargs - self.removeargs) + + +class MethodListener(ListenerBase): + removeargs = 1 + def __init__(self, meth): + self.obj = meth.__self__ + self.objid = id(meth.__self__) + try: + self.func = meth.__func__ + except AttributeError: + # c++ methods from PyQt4 object sometimes do not have the __func__ attribute + self.func = getattr(meth.__self__.__class__, meth.__name__) + + def __eq__(self, other): + return self.__class__ is other.__class__ and self.objid == other.objid and self.func is other.func + + def call(self, args, kwargs): + obj = self.obj() + if obj is not None: + self.func(obj, *args[self.argslice], **kwargs) + + +class FunctionListener(ListenerBase): + removeargs = 0 + def __init__(self, func, owner=None): + self.obj = owner + self.func = func + + def __eq__(self, other): + return self.__class__ is other.__class__ and self.func is other.func + + def call(self, args, kwargs): + self.func(*args[self.argslice], **kwargs) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/simplestate.py frescobaldi-2.0.0/frescobaldi_app/simplestate.py --- frescobaldi-1.2.0/frescobaldi_app/simplestate.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/simplestate.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,118 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +r""" +Represents a ly.lex.State as a simplified list of strings. + + \book { + \header { + title = \markup { #" + +e.g. yields: + + ['lilypond', 'book', 'header', 'markup', 'scheme', 'string'] + +This is done by examining the state's parsers. +It can be used in snippets or plugin scripts. + +The first word is always the mode of the file (e.g. 'lilypond', 'html', etc.). + +""" + +from __future__ import unicode_literals + +import ly.lex.lilypond +import ly.lex.scheme +import ly.lex.html + + +def state(state): + names = [] + def append(name): + if not names or names[-1] != name: + names.append(name) + + for p in state.state: + name = parserClasses.get(p.__class__) + if name: + append(name) + elif p.mode: + append(p.mode) + else: + for c, name in parserTypes: + if isinstance(p, c): + append(name) + break + + return names + + +parserClasses = { + # lilypond + ly.lex.lilypond.ParseMusic: "music", + ly.lex.lilypond.ParseChord: "chord", + ly.lex.lilypond.ParseLyricMode: "lyricmode", + ly.lex.lilypond.ParseChordMode: "chordmode", + ly.lex.lilypond.ParseFigureMode: "figuremode", + ly.lex.lilypond.ParseDrumMode: "drummode", + ly.lex.lilypond.ParsePaper: "paper", + ly.lex.lilypond.ParseHeader: "header", + ly.lex.lilypond.ParseLayout: "layout", + ly.lex.lilypond.ParseBook: "book", + ly.lex.lilypond.ParseBookPart: "bookpart", + ly.lex.lilypond.ParseScore: "score", + ly.lex.lilypond.ParseMidi: "midi", + ly.lex.lilypond.ParseContext: "context", + ly.lex.lilypond.ParseWith: "with", + ly.lex.lilypond.ParseNewContext: "new", + ly.lex.lilypond.ParseMarkup: "markup", + ly.lex.lilypond.ParseOverride: "override", + ly.lex.lilypond.ParseString: "string", + + # scheme + ly.lex.scheme.ParseScheme: "scheme", + ly.lex.scheme.ParseString: "string", + + # html + ly.lex.html.ParseAttr: "htmlattribute", + ly.lex.html.ParseStringSQ: "single-quoted-string", + ly.lex.html.ParseStringDQ: "double-quoted-string", + ly.lex.html.ParseComment: "comment", +} + +parserTypes = ( + +) + + +if __name__ == "__main__": + # test + text = r""" + @title bla + @lilypond + \relative c' { + c d e-\markup { + + """ + s = ly.lex.guessState(text) + list(s.tokens(text)) + print state(s) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/slexer.py frescobaldi-2.0.0/frescobaldi_app/slexer.py --- frescobaldi-1.2.0/frescobaldi_app/slexer.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/slexer.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,478 @@ +# === Python slexer (Stateful Lexer) module === +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +slexer -- Stateful Lexer + +parses text, searching for tokens represented by a regular expression. + +Only depends on the standard Python re module. + +Different contexts can be parsed by creating Parser subclasses. +A Parser searches for tokens using a list of Token classes. (Token is a subclass +of str in Python 3 and of unicode in Python 2). Every Token class has a class +attribute containing the regular expression to search for. + +The parser yields Token instances. A token may cause a different Parser to be +enterend, of the current Parser to be left, etc. This is done by implementing +the updateState() method of the Token subclass. + +The State maintains the parsing state (the list of active Parser instances). + +A State can be frozen to be thawn later to resume parsing text starting +in a particular context. A Fridge can be used to store and recover a state under +a simple integer number. + +How to use slexer: + +from slexer import Token, Parser, State + +# create token classes: +class Word(Token): + rx = r'\w+' + +class Number(Token): + rx = r'\d+' + +class String(Token): + pass + +class StringStart(String): + rx = '"' + def updateState(self, state): + state.enter(PString()) + +class StringEnd(String): + rx = '"' + def updateState(self, state): + state.leave() + +# create parsers: +class PTest(Parser): + '''Looks for numbers, words and the double quote.''' + items = ( + Number, + Word, + StringStart, + ) + +class PString(Parser): + '''Returns String by default, quits at double quote.''' + default = String + items = ( + StringEnd, + ) + +s = State(PTest) +for t in s.tokens( + 'een tekst met 7 woorden, ' + 'een "tekst met 2 aanhalingstekens" ' + 'en 2 of 3 nummers'): + print t.__class__, t + +# results in: + een + tekst + met + 7 + woorden + een + " + tekst met 2 aanhalingstekens + " + en + 2 + of + 3 + nummers + +""" + +# remove the following 5 lines if sure Python 3.x is used +from __future__ import unicode_literals +import sys +if sys.version_info[0] < 3: + str = unicode +del sys + + +import re + + +__all__ = ['Token', 'Parser', 'FallthroughParser', 'State', 'Fridge'] + + +class State(object): + """Maintains state while parsing text. + + You instantiate a State object with an initial parser class. + Then you use tokens(text) to start parsing for tokens. + + The state is simply a list of Parser instances; the last one is the active + one. The enter() and leave() methods respectively enter a new parser or + leave the current parser (although the initial parser can never be left). + + """ + def __init__(self, initialParserClass): + """Construct the State with an initial Parser instance.""" + self.state = [initialParserClass()] + + def parser(self): + """Returns the current Parser instance.""" + return self.state[-1] + + def parsers(self): + """Returns all active parsers in reverse order, most current first.""" + return self.state[::-1] + + def tokens(self, text, pos=0): + """Parses a text string using our state info. + + Yields Token instances. All tokens are a subclass of str (or unicode in + Python 2.x) and have a pos and an end attribute, describing their + position in the original string. If the current parser defines a + 'default' class attribute, it is the Token subclass to use for otherwise + unparsed pieces of text. + + """ + while True: + parser = self.parser() + m = parser.parse(text, pos) + if m: + if parser.default and pos < m.start(): + token = parser.default(text[pos:m.start()], pos) + token.updateState(self) + yield token + token = parser.token(m) + token.updateState(self) + yield token + pos = m.end() + elif pos == len(text) or parser.fallthrough(self): + break + if parser.default and pos < len(text): + token = parser.default(text[pos:], pos) + token.updateState(self) + yield token + + def enter(self, parser): + """Enter a new parser.""" + self.state.append(parser) + + def leave(self): + """Leave the current parser and pop back to the previous.""" + if len(self.state) > 1: + self.state.pop() + + def replace(self, parser): + """Replaces the current parser with a new one.""" + self.state[-1] = parser + + def depth(self): + """Returns the number of parsers currenly active (1 or more).""" + return len(self.state) + + def follow(self, token): + """Act as if the token has been instantiated with the current state. + + Changes state according to the token. + + """ + while self.parser()._follow(token, self): + pass + token.updateState(self) + + def freeze(self): + """Returns the current state as a tuple (hashable object).""" + return tuple((p.__class__, p.freeze()) for p in self.state) + + @classmethod + def thaw(cls, frozen): + """Reproduces a State object from the frozen state argument.""" + state = cls.__new__(cls) + state.state = [cls.thaw(attrs) for cls, attrs in frozen] + return state + + +class Token(str): + """Represents a parsed piece of text. + + The subclass determines the type. + + You should put the regular expression string in the rx class attribute. + In the rx string, you may not use named groups starting with "g_". + + To add token types to a Parser class, list the token class in the items + attribute of the Parser class. + + """ + __slots__ = ['pos', 'end'] + + rx = None + + def __new__(cls, string, pos): + token = str.__new__(cls, string) + token.pos = pos + token.end = pos + len(token) + return token + + def updateState(self, state): + """Lets the token update the state, e.g. enter a different parser. + + This method is called by the State upon instantiation of the tokens. + + Don't use it later on to have a State follow already instantiated Tokens + because the FallthroughParser type can also change the state without + generating a Token. Use State.follow() to have a State follow + instantiated Tokens. + + The default implementation lets the Parser decide on state change. + + """ + state.parser().updateState(state, self) + + +class PatternProperty(object): + """A descriptor that lazily generates a regular expression. + + The expression is based on the list of Token subclasses in the items + attribute of a Parser class. Also creates an index attribute for the parser + class that maps the lastindex property of a match object to the token class. + + When the pattern is requested for the first time, it is created and also + written in the class, overwriting this descriptor. + + """ + def __get__(self, instance, owner): + try: + owner.pattern = self.pattern + owner.index = self.index + except AttributeError: + clss = list(uniq(owner.items)) + # make the pattern + owner.pattern = self.pattern = pattern = re.compile("|".join( + "(?P{1})".format(i, cls.rx) for i, cls in enumerate(clss))) + # make a fast mapping list from matchObj.lastindex to the token class + indices = sorted(v for k, v in pattern.groupindex.items() if k.startswith('g_')) + owner.index = self.index = index = [None] * (indices[-1] + 1) + for i, cls in zip(indices, clss): + index[i] = cls + return owner.pattern + + +class ParserMeta(type): + """Metaclass for Parser subclasses. + + Adds a 'pattern' attribute with a PatternProperty() when the class also + defines 'items'. + + """ + def __new__(cls, name, bases, attrd): + if attrd.get('items'): + attrd['pattern'] = PatternProperty() + return type.__new__(cls, name, bases, attrd) + + +class Parser(object): + """Abstract base class for Parsers. + + When creating Parser subclasses, you should set the 'items' attribute to a + tuple of Token subclasses. + + Additionally, you may implement the updateState() method which is called + by the default implementation of updateState() in Token. + + """ + default = None # if not None, the default class for unparsed pieces of text + + # tuple of Token classes to look for in text + items = () + + def parse(self, text, pos): + """Parses text from position pos and returns a Match Object or None.""" + return self.pattern.search(text, pos) + + def token(self, matchObj): + """Returns a Token instance of the correct class. + + The matchObj is returned by the parse() method. + + """ + tokenClass = self.index[matchObj.lastindex] + return tokenClass(matchObj.group(), matchObj.start()) + + def _follow(self, token, state): + """(Internal) Called by State.follow().""" + pass + + def freeze(self): + """Should return our instance values as a hashable tuple.""" + return () + + @classmethod + def thaw(cls, attrs): + return cls(*attrs) + + def fallthrough(self, state): + """Called when no match is returned by parse(). + + If this function returns True, the tokenizer stops parsing, assuming all + text has been consumed. If this function returns False or None, it + should alter the state (switch parsers) and parsing continues using the + new Parser. + + The default implementation simply returns True. + + """ + return True + + def updateState(self, state, token): + """Called by the default implementation of Token.updateState(). + + Does nothing by default. + + """ + pass + + +# This syntax to make Parser use the metaclass works in both Python2 and 3 +Parser = ParserMeta(Parser.__name__, Parser.__bases__, dict(Parser.__dict__)) + + +class FallthroughParser(Parser): + """Base class for parsers that 'match' instead of 'search' for a pattern. + + You can also implement the fallthrough() method to do something with + the state if there is no match. The default is to leave the current parser. + See Parser(). + + """ + def parse(self, text, pos): + """Matches text at position pos and returns a Match Object or None.""" + return self.pattern.match(text, pos) + + def _follow(self, token, state): + """(Internal) Called by State.follow().""" + if type(token) not in self.items: + self.fallthrough(state) + return True + + def fallthrough(self, state): + """Called when no match is returned by parse(). + + This implementation leaves the current parser and returns None + (causing the State to continue parsing). + + """ + state.leave() + + +class Fridge(object): + """Stores frozen States under an integer number.""" + def __init__(self, stateClass = State): + self._stateClass = stateClass + self._states = [] + + def freeze(self, state): + """Stores a state and return an identifying integer.""" + frozen = state.freeze() + try: + return self._states.index(frozen) + except ValueError: + i = len(self._states) + self._states.append(frozen) + return i + + def thaw(self, num): + """Returns the state stored under the specified number.""" + if 0 <= num < len(self._states): + return self._stateClass.thaw(self._states[num]) + + def count(self): + """Returns the number of stored frozen states.""" + return len(self._states) + + +def uniq(iterable): + """Yields unique items from iterable.""" + seen, l = set(), 0 + for i in iterable: + seen.add(i) + if len(seen) > l: + yield i + l = len(seen) + + +if __name__ == "__main__": + # test + class Word(Token): + rx = r'\w+' + + class Number(Token): + rx = r'\d+' + + class String(Token): + pass + + class StringStart(String): + rx = '"' + def updateState(self, state): + state.enter(PString()) + + class StringEnd(String): + rx = '"' + def updateState(self, state): + state.leave() + + class PTest(Parser): + items = ( + Number, + Word, + StringStart, + ) + + class PString(Parser): + default = String + items = ( + StringEnd, + ) + + s = State(PTest) + print('test:') + for t in s.tokens( + 'een tekst met 7 woorden, ' + 'een "tekst met 2 aanhalingstekens" ' + 'en 2 of 3 nummers'): + print(t.__class__, t) + + print('test the Fridge:') + s = State(PTest) + f = Fridge() + + for t in s.tokens('text with "part of a '): + print(t.__class__, t) + + n = f.freeze(s) + + # recover + print('freeze and recover:') + s = f.thaw(n) + for t in s.tokens('quoted string" in the middle'): + print(t.__class__, t) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/actions.py frescobaldi-2.0.0/frescobaldi_app/snippet/actions.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/actions.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/actions.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,52 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Functions to access the built-in and user defined templates. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QAction + +from . import snippets + + +def action(name, parent=None, collection=None): + """Returns a QAction with text and icon for the given snippet name. + + Returns None is no such snippet is available. + If collection is provided, it is used to set shortcuts to the action. + """ + title = snippets.title(name) + if not title: + return + a = QAction(parent) + a.setObjectName(name) + a.setText(title.replace('&', '&&')) + icon = snippets.icon(name) + if icon: + a.setIcon(icon) + if collection: + shortcuts = collection.shortcuts(name) + if shortcuts: + a.setShortcuts(shortcuts) + return a + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/builtin.py frescobaldi-2.0.0/frescobaldi_app/snippet/builtin.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/builtin.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/builtin.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,598 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Builtin snippets. +""" + +from __future__ import unicode_literals + +import __builtin__ +import collections + +# postpone translation +_ = lambda *args: lambda: __builtin__._(*args) + + +T = collections.namedtuple("Template", "title text") + + +builtin_snippets = { + +'blankline': T(_("Blank Line"), +r""" +$CURSOR +"""), + + +'quotes_s': T(_("Single Typographical Quotes"), +"""-*- menu: text; +\u2018$SELECTION\u2019"""), + + +'quotes_d': T(_("Double Typographical Quotes"), +"""-*- menu: text; +\u201C$SELECTION\u201D"""), + + +'voice1': T(None, +r"""-*- name: v1; +\voiceOne"""), + + +'voice2': T(None, +r"""-*- name: v2; +\voiceTwo"""), + + +'voice3': T(None, +r"""-*- name: v3; +\voiceThree"""), + + +'voice4': T(None, +r"""-*- name: v4; +\voiceFour"""), + + +'1voice': T(None, +r"""-*- name: 1v; +\oneVoice"""), + + +'stanza1': T(None, +r"""-*- name: s1; +\set stanza = "1." +"""), + + +'stanza2': T(None, +r"""-*- name: s2; +\set stanza = "2." +"""), + + +'stanza3': T(None, +r"""-*- name: s3; +\set stanza = "3." +"""), + + +'stanza4': T(None, +r"""-*- name: s4; +\set stanza = "4." +"""), + + +'stanza5': T(None, +r"""-*- name: s5; +\set stanza = "5." +"""), + + +'stanza6': T(None, +r"""-*- name: s6; +\set stanza = "6." +"""), + + +'times23': T(_("Tuplets"), +r"""-*- menu: blocks; selection: strip; +\times 2/3 { $SELECTION }"""), + + +'onceoverride': T(None, +r"""-*- name: oo; +\once \override """), + + +'m22': T(_("Modern 2/2 Time Signature"), +r"""-*- name: 22; +\numericTimeSignature +\time 2/2"""), + + +'m44': T(_("Modern 4/4 Time Signature"), +r"""-*- name: 44; +\numericTimeSignature +\time 4/4"""), + + +'tactus': T(_("Tactus Time Signature (number with note)"), +r"""-*- name: tac; +\once \override Staff.TimeSignature #'style = #'() +\once \override Staff.TimeSignature #'stencil = #ly:text-interface::print +\once \override Staff.TimeSignature #'text = \markup { + \override #'(baseline-skip . 0.5) + \column { \number $CURSOR1$ANCHOR \tiny \note #"2" #-.6 } +} +"""), + + +'ly_version': T(_("LilyPond Version"), +r"""-*- menu; +\version "$LILYPOND_VERSION" +"""), + + +'repeat': T(_("Repeat"), +r"""-*- menu: blocks; name: rep; selection: strip; symbol: bar_repeat_start; +\repeat volta 2 { $SELECTION }"""), + + +'relative': T(_("Relative Music"), +r"""-*- name: rel; +\relative c$CURSOR'$ANCHOR { +""" ' ' r""" +}"""), + + +'uppercase': T(_("Upper case selection"), +r"""-*- python; selection: yes, keep; +text = text.upper() +"""), + + +'lowercase': T(_("Lower case selection"), +r"""-*- python; selection: yes, keep; +text = text.lower() +"""), + + +'titlecase': T(_("Title case selection"), +r"""-*- python; selection: yes, keep; +text = text.title() +"""), + + +'markup': T(_("Markup"), +r"""-*- name: m; selection: strip; +\markup { $SELECTION }"""), + + +'markup_lines_selection': T(_("Markup lines"), +r"""-*- name: l; python; selection: yes, keep, strip; +text = '\n'.join(r'\line { %s }' % l for l in text.splitlines()) +if state[-1] != 'markup': + text = '\\markup {\n%s\n}' % text +"""), + + +'markup_column': T(_("Markup column"), +r"""-*- name: c; selection: yes, keep, strip; +\column { $SELECTION }"""), + + +'tagline_date_version': T(_("Tagline with date and LilyPond version"), +r"""tagline = \markup { + Engraved at + \simple #(strftime "%Y-%m-%d" (localtime (current-time))) + with \with-url #"http://lilypond.org/" + \line { LilyPond \simple #(lilypond-version) (http://lilypond.org/) } +} +"""), + + +'header': T(_("Header Template"), +r"""-*- name: h; +\header { + title = "$CURSOR" + composer = "" + tagline = \markup { + Engraved at + \simple #(strftime "%Y-%m-%d" (localtime (current-time))) + with \with-url #"http://lilypond.org/" + \line { LilyPond \simple #(lilypond-version) (http://lilypond.org/) } + } +} +"""), + + +'no_tagline': T(_("No Tagline"), +r"""-*- name: nt; python; +text = 'tagline = ##f' +if state[-1] != 'header': + text = '\\header {\n%s\n}' % text +"""), + + +'no_barnumbers': T(_("No Barnumbers"), +r"""-*- name: nb; python; +text = r'\remove "Bar_number_engraver"' +if state[-1] not in ('context', 'with'): + text = '\\context {\n\\Score\n%s\n}' % text + if state[-1] != 'layout': + text = '\\layout {\n%s\n}' % text +"""), + + +'midi_tempo': T(_("Midi Tempo"), +r"""-*- name: mt; python; +text = ['tempoWholesPerMinute = #(ly:make-moment ', CURSOR, '100 4)'] +if state[-1] not in ('context', 'with'): + text = ['\\context {\n\\Score\n'] + text + ['\n}'] + if state[-1] != 'midi': + text = ['\\midi {\n'] + text + ['\n}'] +"""), + + +'staff_size': T(_("Staff Size"), +r"""-*- name: ss; python; +if state[-1] == 'music': + text = ( + "\\set Staff.fontSize = #-1\n" + "\\override Staff.StaffSymbol #'staff-space = #(magstep -1)\n") +else: + text = ( + "fontSize = #-1\n" + "\\override StaffSymbol #'staff-space = #(magstep -1)") + if state[-1] == 'new': + text = '\\with {\n%s\n}' % text + elif state[-1] not in ('context', 'with'): + text = '\\context {\n\\Staff\n%s\n}' % text + if state[-1] != 'layout': + text = '\\layout {\n%s\n}' % text +"""), + + +'comment': T(_("Comment"), +r"""-*- python; indent: no; +# determine state +for s in state[::-1]: + if s in ('lilypond', 'html', 'scheme'): + break +else: + s = 'lilypond' + +def html(): + if text: + return '' + else: + return [''] + +def lilypond(): + if text: + return '%{ ' + text + '%}' + else: + return '% ' + +def scheme(): + if text: + return '; ' + text.replace('\n', '\n; ') + else: + return '; ' + +if s == 'lilypond': + text = lilypond() +elif s == 'html': + text = html() +elif s == 'scheme': + text = scheme() +"""), + + +'paper_a5': T(_("A5 Paper"), +r"""-*- name: a5; python; +text = r'#(set-paper-size "a5")' +if state[-1] != 'paper': + text = '\\paper {\n%s\n}' % text +"""), + + +'document_fonts': T(_("Document Fonts..."), +r"""-*- menu: paper; name: fo; python; icon: preferences-desktop-font; +snippet = '''\ +myStaffSize = #{staffsize} +fonts = #(make-pango-font-tree + "{roman}" + "{sans}" + "{typewriter}" + (/ myStaffSize 20)) +''' + +import documentinfo +import globalfontdialog +size = documentinfo.info(cursor.document()).globalStaffSize() +dlg = globalfontdialog.GlobalFontDialog(view) +dlg.setStaffSize(size) +if dlg.exec_(): + text = snippet.format( + staffsize = dlg.staffSize(), + roman = dlg.romanFont(), + sans = dlg.sansFont(), + typewriter = dlg.typewriterFont()) + if state[-1] != "paper": + text = "\\paper{\n%s}\n" % text + +"""), + + +'last_note': T(_("Last note or chord"), +r"""-*- python; menu: music; symbol: note_4d; +# This snippet reads back the last entered note or chord and +# inserts it again. It removes the octave mark from a note of the first +# note of a chord if the music is in relative mode. + +from PyQt4.QtGui import QTextCursor +import cursortools +import tokeniter +import ly.lex.lilypond as lp + +# look back +block = cursortools.block(cursor) +tokens = tokeniter.partition(cursor).left + +# space needed before cursor? +beforecursor = block.text()[:cursor.selectionStart()-block.position()] +spaceneeded = bool(beforecursor and beforecursor[-1] not in "\t ") + +chordstart, chordend = None, None +notestart = None +relative = False +found = False + +while True: + pos = block.position() + for t in tokens[::-1]: + if t == '\\relative': + relative = True + break + elif isinstance(t, (lp.Score, lp.Book, lp.BookPart, lp.Name)): + break + if found: + continue + if chordend is not None: + if isinstance(t, lp.ChordStart): + chordstart = pos + t.pos + found = True + continue + if isinstance(t, lp.ChordEnd): + chordend = pos + t.pos + len(t) + elif isinstance(t, lp.Note) and t not in ('R' ,'q', 's', 'r'): + notestart = pos + t.pos + found = True + block = block.previous() + if block.isValid(): + tokens = tokeniter.tokens(block) + continue + break + +if found: + c = QTextCursor(block) + if chordstart is not None: + text = [] + removeOctave = 1 if relative else 0 + c.setPosition(chordstart) + c.setPosition(chordend, c.KeepAnchor) + for t in tokeniter.Source.selection(c): + # remove octave from first pitch in relative + if isinstance(t, lp.Note): + removeOctave -= 1 + elif isinstance(t, lp.Octave) and removeOctave == 0: + continue + text.append(t) + text = ''.join(text) + elif notestart is not None: + text = [] + c.setPosition(notestart) + for t in tokeniter.Source.fromCursor(c): + if isinstance(t, lp.Note): + text.append(t) + elif not relative and isinstance(t, lp.Octave): + text.append(t) + else: + break + text = ''.join(text) + if spaceneeded: + text = " " + text +"""), + + +'color_dialog': T(_("Color"), +r"""-*- name: col; python; icon: applications-graphics; + +# Insert a color from a dialog + + +import inputdialog +colors = { + (0, 0, 0): "black", + (255, 255, 255): "white", + (255, 0, 0): "red", + (0, 255, 0): "green", + (0, 0, 255): "blue", + (0, 255, 255): "cyan", + (255, 0, 255): "magenta", + (255, 255, 0): "yellow", + (128, 128, 128): "grey", + (128, 0, 0): "darkred", + (0, 128, 0): "darkgreen", + (0, 0, 128): "darkblue", + (0, 128, 128): "darkcyan", + (128, 0, 128): "darkmagenta", + (128, 128, 0): "darkyellow", +} + +color = inputdialog.getColor(view) +if color is not None: + rgb = color.getRgb()[:-1] + + if rgb in colors: + text = '#' + colors[rgb] + else: + rgb = tuple(map(lambda v: format(v / 255.0, ".4"), rgb)) + text = "#(rgb-color {0} {1} {2})".format(*rgb) +"""), + + +'template_leadsheet': T(_("Basic Leadsheet"), +r"""-*- template; template-run; +\version "$LILYPOND_VERSION" + +\header { + title = "" +} + +global = { + \time 4/4 + \key c \major + \tempo 4=100 +} + +chordNames = \chordmode { + \global + c1 + +} + +melody = \relative c'' { + \global + c4 d e f + $CURSOR +} + +words = \lyricmode { + + +} + +\score { + << + \new ChordNames \chordNames + \new FretBoards \chordNames + \new Staff { \melody } + \addlyrics { \words } + >> + \layout { } + \midi { } +} +"""), + + +'template_choir_hymn': T(_("Choir Hymn"), +r"""-*- template; template-run; +\version "$LILYPOND_VERSION" + +\header { + title = "" +} + +global = { + \time 4/4 + \key c \major + \tempo 4=100 +} + +soprano = \relative c'' { + \global + $CURSORc4 + +} + +alto = \relative c' { + \global + c4 + +} + +tenor = \relative c' { + \global + c4 + +} + +bass = \relative c { + \global + c4 + +} + +verseOne = \lyricmode { + \set stanza = "1." + hi + +} + +verseTwo = \lyricmode { + \set stanza = "2." + ha + +} + +verseThree = \lyricmode { + \set stanza = "3." + ho + +} + +\score { + \new ChoirStaff << + \new Staff \with { + midiInstrument = "choir aahs" + instrumentName = \markup \center-column { S A } + } << + \new Voice = "soprano" { \voiceOne \soprano } + \new Voice = "alto" { \voiceTwo \alto } + >> + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #CENTER + } \lyricsto "soprano" \verseOne + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #CENTER + } \lyricsto "soprano" \verseTwo + \new Lyrics \with { + \override VerticalAxisGroup #'staff-affinity = #CENTER + } \lyricsto "soprano" \verseThree + \new Staff \with { + midiInstrument = "choir aahs" + instrumentName = \markup \center-column { T B } + } << + \clef bass + \new Voice = "tenor" { \voiceOne \tenor } + \new Voice = "bass" { \voiceTwo \bass } + >> + >> + \layout { } + \midi { } +} +"""), + + +} + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/edit.py frescobaldi-2.0.0/frescobaldi_app/snippet/edit.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/edit.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/edit.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,295 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The dialog for editing a snippet +""" + + +from __future__ import unicode_literals + +import re + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import actioncollectionmanager +import app +import util +import help +import icons +import textformats +import widgets.indenter +import widgets.matcher + +from . import model +from . import snippets +from . import builtin +from . import expand +from . import highlight + + +class Edit(QDialog): + """Dialog for editing a snippet. It is used for one edit. + + Use None as the name to create a new snippet. In that case, text + is set as a default in the text edit. + + + """ + def __init__(self, widget, name, text=""): + super(Edit, self).__init__(widget) + self._name = name + + layout = QVBoxLayout() + self.setLayout(layout) + + self.topLabel = QLabel() + self.text = QTextEdit(cursorWidth=2, acceptRichText=False) + self.titleLabel = QLabel() + self.titleEntry = QLineEdit() + self.shortcutLabel = QLabel() + self.shortcutButton = QPushButton(icon=icons.get("configure-shortcuts"), + clicked=self.editShortcuts) + + layout.addWidget(self.topLabel) + layout.addWidget(self.text) + + grid = QGridLayout() + layout.addLayout(grid) + + grid.addWidget(self.titleLabel, 0, 0) + grid.addWidget(self.titleEntry, 0, 1) + grid.addWidget(self.shortcutLabel, 1, 0) + grid.addWidget(self.shortcutButton, 1, 1) + + layout.addWidget(widgets.Separator()) + + b = QDialogButtonBox(accepted=self.accept, rejected=self.reject) + layout.addWidget(b) + + buttons = QDialogButtonBox.Ok | QDialogButtonBox.Cancel + if name and name in builtin.builtin_snippets: + b.setStandardButtons(buttons | QDialogButtonBox.RestoreDefaults) + b.button(QDialogButtonBox.RestoreDefaults).clicked.connect(self.slotDefaults) + else: + b.setStandardButtons(buttons) + help.addButton(b, snippet_edit_help) + + highlight.Highlighter(self.text.document()) + Matcher(self.text) + widgets.indenter.Indenter(self.text) + + if name: + self.titleEntry.setText(snippets.title(name, False) or '') + self.text.setPlainText(snippets.text(name)) + ac = self.parent().parent().snippetActions + self.setShortcuts(ac.shortcuts(name)) + else: + self.text.setPlainText(text) + self.setShortcuts(None) + + app.translateUI(self) + + self.readSettings() + app.settingsChanged.connect(self.readSettings) + util.saveDialogSize(self, "snippettool/editor/size", QSize(400, 300)) + self.show() + + def translateUI(self): + title = _("Edit Snippet") if self._name else _("New Snippet") + self.setWindowTitle(app.caption(title)) + self.topLabel.setText(_("Snippet Text:")) + self.titleLabel.setText(_("Title:")) + self.shortcutLabel.setText(_("Shortcut:")) + self.updateShortcutText() + + def updateShortcutText(self): + if not self._shortcuts: + self.shortcutButton.setText(_("None")) + else: + key = self._shortcuts[0].toString(QKeySequence.NativeText) + if len(self._shortcuts) > 1: + key += "..." + self.shortcutButton.setText(key.replace('&', '&&')) + self.shortcutButton.setToolTip(_("Click to change the keyboard shortcut.")) + + def done(self, result): + if result: + if not self.text.toPlainText(): + QMessageBox.warning(self, _("Empty Snippet"), _("A snippet can't be empty.")) + return + self.saveSnippet() + super(Edit, self).done(result) + self.deleteLater() + + def readSettings(self): + data = textformats.formatData('editor') + self.text.setFont(data.font) + self.text.setPalette(data.palette()) + + def setShortcuts(self, shortcuts): + self._shortcuts = shortcuts + self.updateShortcutText() + + def editShortcuts(self): + mainwindow = self.parent().parent().mainwindow() + ac = self.parent().parent().snippetActions + action = QAction(None) + if self._name: + action.setShortcuts(ac.shortcuts(self._name) or []) + skip = (ac, self._name) + default = ac.defaults().get(self._name) + text = snippets.title(self._name) + else: + skip = None + default = None + text = self.titleEntry.text() or _("Untitled") + action.setText(text.replace('&', '&&')) + if actioncollectionmanager.manager(mainwindow).editAction(self, action, default, skip): + self.setShortcuts(action.shortcuts()) + + def saveSnippet(self): + index = model.model().saveSnippet(self._name, + self.text.toPlainText(), self.titleEntry.text()) + # set snippet current in the editor that called us + self.parent().treeView.selectionModel().setCurrentIndex( + index, QItemSelectionModel.SelectCurrent | QItemSelectionModel.Rows) + # get the name that was used + name = model.model().name(index) + self.parent().parent().snippetActions.setShortcuts(name, self._shortcuts) + + def slotDefaults(self): + t = builtin.builtin_snippets[self._name] + self.text.setPlainText(t.text) + self.titleEntry.setText(t.title() if t.title else '') + self.setShortcuts(self.parent().parent().snippetActions.defaults().get(self._name)) + + +class Matcher(widgets.matcher.Matcher): + def __init__(self, edit): + super(Matcher, self).__init__(edit) + self.readSettings() + app.settingsChanged.connect(self.readSettings) + + def readSettings(self): + self.format = QTextCharFormat() + self.format.setBackground(textformats.formatData('editor').baseColors['match']) + + +class snippet_edit_help(help.page): + def title(): + return _("Snippet editor") + + def body(): + text = [] + text.append(_( + "

Here you can edit the text of the snippet.

" + "

If you start the first line(s) with '-*- ' (note the space), " + "the remainder of that line(s) defines variables like name: value; or " + "simply name; which influence the behaviour of the snippet. " + "The following variables can be used:

")) + + text.append("
") + text.extend(map("
{0[0]}
{0[1]}
".format, ( + ('menu', + _("Place the snippet in the insert menu, grouped by the (optional) value.")), + ('template', + _("Place the snippet in the menu {file_new_from_template}, " + "grouped by the (optional) value. " + "When triggered via the menu, the snippet is inserted into a " + "new document.").format(file_new_from_template = help.menu( + _("menu title", "File"), + _("menu subtitle", "New from Template")))), + ('name', + _("The mnemonic to type to select the snippet.")), + ('indent: no;', + _("Do not auto-indent the snippet after inserting.")), + ('icon', + _("The icon to show in menu and snippet list.")), + ('symbol', + _("The symbol to show in menu and snippet list. Symbols are " + "icons that use the default text color and can be found in " + "{directory}.").format(directory="'frescobaldi_app/symbols'")), + ('python', + _("Execute the snippet as a Python script. See {link}.").format( + link=python_snippets_help.link())), + ('selection', + _("One of more of the following words (separated with spaces or commas):") + " " + + "\n".join(map("{0[0]}: {0[1]}".format, ( + ('yes', + _("Requires text to be selected.")), + ('strip', + _("Adjusts the selection to not include starting and trialing whitespace.")), + ('keep', + _("Selects all inserted text.")), + )))), + ))) + text.append("
") + + text.append(_( + "

The other lines of the snippet define the text to be inserted in the editor. " + "Here, you can insert variables prefixed with a $. A double $ will be replaced with " + "a single one. The following variables are recognized:

")) + + text.append("
") + text.extend(map("
${0[0]}
{0[1]}
".format, + expand.documentation(expand.Expander))) + text.append("
") + return ''.join(text) + + def children(): + return (python_snippets_help,) + + +class python_snippets_help(help.page): + def title(): + return _("Python Snippets") + + def body(): + text = [] + text.append(_( + "

Python snippets can read and should set the variable {text}. " + "The variable {text} contains the currently selected text (which may be an " + "empty string).

\n" + "

You may set {text} to a string or a list of strings.

\n" + "

Other variables that may be referenced:

").format(text="text")) + text.append("
") + text.extend(map("
{0[0]}
{0[1]}
".format, ( + ('state', + _("A list of strings describing the type of text the cursor is at.")), + ('cursor', + _("The current QTextCursor, giving access to the document. " + "Don't change the document through the cursor, however.")), + ('CURSOR', + _("When setting {text} to a list instead of a string, you can " + "use this value to specify the place the text cursor will be " + "placed after inserting the snippet.").format(text="text")), + ('ANCHOR', + _("When setting {text} to a list instead of a string, " + "this value can be used together with {cursor} to select text " + "when inserting the string parts of the list.").format( + text="text", cursor="CURSOR")), + ))) + text.append("
") + return ''.join(text) + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/expand.py frescobaldi-2.0.0/frescobaldi_app/snippet/expand.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/expand.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/expand.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,112 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Expand variables like $DATE, $LILYPOND_VERSION etc. in snippets. +""" + +from __future__ import unicode_literals + +import __builtin__ +import time + +import info +import lilypondinfo + + +def _(docstring): + """Returns a decorator. + + The decorator gives a function a doc() method, returning the translated docstring. + The untranslated docstring will be added as __doc__ to the function. + + __builtin__._ is expected to be the translation function. + + We use the underscore as function name so xgettext picks up the strings + to be translated. + + """ + def deco(f): + f.__doc__ = docstring + f.doc = lambda: __builtin__._(docstring) + return f + return deco + + +def documentation(cls): + """Yields tuples documenting the methods of the specified class. + + The tuples are: (function_name, docstring). The docstrings are translated. + The tuples are sorted on function_name. + + """ + for name, meth in sorted(cls.__dict__.items()): + if name.startswith('_'): + return + yield name, meth.doc() + + +ANCHOR, CURSOR, SELECTION = constants = 1, 2, 3 # just some constants + +class Expander(object): + """Expands variables. + + The methods return text or other events (currently simply integer constants). + + """ + def __init__(self, cursor): + self.cursor = cursor + + @_("The current date in YYYY-MM-DD format.") + def DATE(self): + return time.strftime('%Y-%m-%d') + + @_("The version of the default LilyPond program.") + def LILYPOND_VERSION(self): + return lilypondinfo.preferred().versionString + + @_("The version of Frescobaldi.") + def FRESCOBALDI_VERSION(self): + return info.version + + @_("The URL of the current document.") + def URL(self): + return self.cursor.document().url().toString() + + @_("The full local filename of the current document.") + def FILE_NAME(self): + return self.cursor.document().url().toLocalFile() + + @_("The name of the current document.") + def DOCUMENT_NAME(self): + return self.cursor.document().documentName() + + @_("Moves the text cursor here after insert.") + def CURSOR(self): + return CURSOR + + @_("Selects text from here to the position given using the $CURSOR variable") + def ANCHOR(self): + return ANCHOR + + @_("The selected text if available. If not, the text cursor is moved here.") + def SELECTION(self): + return SELECTION if self.cursor.hasSelection() else CURSOR + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/highlight.py frescobaldi-2.0.0/frescobaldi_app/snippet/highlight.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/highlight.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/highlight.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,352 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Highlighter for the snippet editor and view. +""" + +from __future__ import unicode_literals + +import __builtin__ +import keyword + +from PyQt4.QtGui import QSyntaxHighlighter + +import slexer + +import app +import textformats + +from . import snippets + + +class Highlighter(QSyntaxHighlighter): + + def __init__(self, document): + super(Highlighter, self).__init__(document) + self.python = None + self._fridge = slexer.Fridge() + self.readSettings() + app.settingsChanged.connect(self.readSettingsAgain) + + def readSettings(self): + self._styles = textformats.formatData('editor').defaultStyles + + def readSettingsAgain(self): + self.readSettings() + self.rehighlight() + + def setPython(self, python): + """Force Python or generic snippet highlighting. + + Use True for Python, False for Snippet, or None to let the highlighter + decide based on the variable lines. + + """ + if self.python is not python: + self.python = python + self.rehighlight() + + def highlightBlock(self, text): + prev = self.previousBlockState() + python = self.python if self.python is not None else prev == -2 + if text.startswith('-*- '): + # the line defines variables, highlight them and check if 'python' is defined + self.setFormat(0, 3, self._styles['keyword']) + for m in snippets._variables_re.finditer(text): + self.setFormat(m.start(1), m.end(1)-m.start(1), self._styles['variable']) + if m.group(2): + self.setFormat(m.start(2), m.end(2)-m.start(2), self._styles['value']) + python = python or m.group(1) == 'python' + self.setCurrentBlockState(-2 if python else -1) + else: + # we are in the snippet text + state = self._fridge.thaw(prev) or slexer.State(Python if python else Snippet) + for t in state.tokens(text): + if isinstance(t, Stylable): + self.setFormat(t.pos, len(t), self._styles[t.style]) + self.setCurrentBlockState(self._fridge.freeze(state)) + + +# Basic types: +class Stylable(slexer.Token): + """A token type with style ;-) to highlight.""" + style = '' + +class String(Stylable): + style = 'string' + +class Comment(Stylable): + style = 'comment' + +class Escape(Stylable): + style = 'escape' + +class Function(Stylable): + style = 'function' + +class Keyword(Stylable): + style = 'keyword' + +class Variable(Stylable): + style = 'variable' + +class Value(Stylable): + style = 'value' + + +# Snippet types: + +class StringStart(String): + rx = '"' + def updateState(self, state): + state.enter(StringParser()) + +class StringEnd(StringStart): + def updateState(self, state): + state.leave() + +class StringEscape(Escape): + rx = r'\\["\\]' + +class Expansion(Escape): + rx = snippets._expansions_re.pattern + +# Python types: + +class PyKeyword(Keyword): + rx = r"\b({0})\b".format('|'.join(keyword.kwlist)) + +class PyBuiltin(Function): + rx = r"\b({0})\b".format('|'.join(__builtin__.__dict__.keys())) + +class PyStringStartDQ1(String): + rx = '[uUbB]?"' + def updateState(self, state): + state.enter(PyStringParserDQ1()) + +class PyStringStartDQ3(String): + rx = '[uUbB]?"""' + def updateState(self, state): + state.enter(PyStringParserDQ3()) + +class PyStringStartSQ1(String): + rx = "[uUbB]?'" + def updateState(self, state): + state.enter(PyStringParserSQ1()) + +class PyStringStartSQ3(String): + rx = "[uUbB]?'''" + def updateState(self, state): + state.enter(PyStringParserSQ3()) + +class PyStringStartDQ1R(String): + rx = '[uUbB]?[rR]"' + def updateState(self, state): + state.enter(PyStringParserDQ1R()) + +class PyStringStartDQ3R(String): + rx = '[uUbB]?[rR]"""' + def updateState(self, state): + state.enter(PyStringParserDQ3R()) + +class PyStringStartSQ1R(String): + rx = "[uUbB]?[rR]'" + def updateState(self, state): + state.enter(PyStringParserSQ1R()) + +class PyStringStartSQ3R(String): + rx = "[uUbB]?[rR]'''" + def updateState(self, state): + state.enter(PyStringParserSQ3R()) + +class PyStringEndDQ1(StringEnd): + rx = '"' + +class PyStringEndDQ3(StringEnd): + rx = '"""' + +class PyStringEndSQ1(StringEnd): + rx = "'" + +class PyStringEndSQ3(StringEnd): + rx = "'''" + +class PyStringEscape(Escape): + rx = ( + r"""\\([\\'"abfnrtv]""" + r'|[0-7]{3}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}' + r'|N\{[A-Z]+( [A-Z]+)*\})' + ) + +class PyStringEscapedNewline(Escape): + """Highlights escaped newline.""" + rx = r'\\$' + +class PyStringDoubleBackslashAtLineEnd(PyStringEscape): + """Use this to leave a string at line end. Prevents staying in PyStringEOL.""" + rx = r'\\\\$' + def updateState(self, state): + state.leave() + +class PyStringDoubleBackslashAtLineEndR(String): + """Use this to leave a string at line end in raw. Prevents staying in PyStringEOL.""" + rx = r'\\\\$' + def updateState(self, state): + state.leave() + +class PyStringEOL(slexer.Token): + """Leaves a string at unescaped Newline.""" + rx = r'(?Here the snippets from {filename} are displayed.

\n" + "

If there are new or updated snippets, you can select or deselect " + "them one by one, or all at once, using the checkbox of the group. " + "Then click OK to import all the selected snippets.

\n" + "

Existing, unchanged snippets can't be imported.

\n" + ).format(filename=os.path.basename(filename))) + + util.saveDialogSize(dlg, "snippettool/import/size", QSize(400, 300)) + if not dlg.exec_() or not items: + return + ac = model.collection() + m = model.model() + with util.busyCursor(): + for i in items: + if i.checkState(0) == Qt.Checked: + index = m.saveSnippet(i.name, i.body, i.title) + if i.shortcuts and importShortcuts.checkState(0): + shortcuts = list(map(QKeySequence.fromString, i.shortcuts)) + ac.setShortcuts(m.name(index), shortcuts) + widget.updateColumnSizes() + + +_comment = """ + Created by {info.appname} {info.version}. + + Every snippet is represented by: + title: title text + shortcuts: list of shortcut elements, every shortcut is a key sequence + body: the snippet text + + The snippet id attribute can be the name of a builtin snippet or a random + name like 'n123456'. In the latter case, the title is used to determine + whether a snippet is new or updated. +""" + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/__init__.py frescobaldi-2.0.0/frescobaldi_app/snippet/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,23 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Everything regarding snippets (pieces of text). +""" + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/insert.py frescobaldi-2.0.0/frescobaldi_app/snippet/insert.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/insert.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/insert.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,250 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Insert snippets into a Document. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings +from PyQt4.QtGui import QTextCursor, QMessageBox + +import cursortools +import indent +import tokeniter + +from . import snippets +from . import expand + + +def insert(name, view): + """Insert named snippet into the view.""" + text, variables = snippets.get(name) + cursor = view.textCursor() + + selection = variables.get('selection', '') + if 'yes' in selection and not cursor.hasSelection(): + return + if 'strip' in selection: + cursortools.stripSelection(cursor) + + pos = cursor.selectionStart() + line = cursor.document().findBlock(pos).blockNumber() + with cursortools.editBlock(cursor): + + # insert the snippet, might return a new cursor + if 'python' in variables: + new = insert_python(text, cursor, name, view) + else: + new = insert_snippet(text, cursor, variables) + + # QTextBlocks the snippet starts and ends + block = cursor.document().findBlockByNumber(line) + last = cursor.block() + + # re-indent if not explicitly suppressed by a 'indent: no' variable + if last != block and 'no' not in variables.get('indent', ''): + tokeniter.update(block) # tokenize inserted lines + while True: + block = block.next() + if indent.setIndent(block, indent.computeIndent(block)): + tokeniter.update(block) + if block == last: + break + + if not new and 'keep' in selection: + end = cursor.position() + cursor.setPosition(pos) + cursor.setPosition(end, QTextCursor.KeepAnchor) + view.setTextCursor(new or cursor) + + +def insert_snippet(text, cursor, variables): + """Inserts a normal text snippet. + + After the insert, the cursor points to the end of the inserted snippet. + + If this function returns a cursor it must be set as the cursor for the view + after the snippet has been inserted. + + """ + exp_base = expand.Expander(cursor) + + evs = [] # make a list of events, either text or a constant + for text, key in snippets.expand(text): + if text: + evs.append(text) + if key == '$': + evs.append('$') + elif key: + # basic variables + func = getattr(exp_base, key, None) + if func: + evs.append(func()) + + selectionUsed = expand.SELECTION in evs + # do the padding if 'selection: strip;' is used + if selectionUsed and 'strip' in variables.get('selection', ''): + space = '\n' if '\n' in cursor.selection().toPlainText() else ' ' + # change whitespace in previous and next piece of text + i = evs.index(expand.SELECTION) + for j in range(i-1, -i, -1): + if evs[j] not in expand.constants: + evs[j] = evs[j].rstrip() + space + break + for j in range(i+1, len(evs)): + if evs[j] not in expand.constants: + evs[j] = space + evs[j].lstrip() + break + # now insert the text + ins = QTextCursor(cursor) + selectionUsed and ins.setPosition(cursor.selectionStart()) + a, c = -1, -1 + for e in evs: + if e == expand.ANCHOR: + a = ins.position() + elif e == expand.CURSOR: + c = ins.position() + elif e == expand.SELECTION: + ins.setPosition(cursor.selectionEnd()) + else: + ins.insertText(e) + cursor.setPosition(ins.position()) + # return a new cursor if requested + if (a, c) != (-1, -1): + new = QTextCursor(cursor) + if a != -1: + new.setPosition(a) + if c != -1: + new.setPosition(c, QTextCursor.KeepAnchor if a != -1 else QTextCursor.MoveAnchor) + return new + + +def insert_python(text, cursor, name, view): + """Regards the text as Python code, and exec it. + + name and view are given in case an exception occurs. + + The following variables are available: + + - text: contains selection or '', set it to insert new text + - state: contains simplestate for the cursor position + - cursor: the QTextCursor + + After the insert, the cursor points to the end of the inserted snippet. + + """ + namespace = { + 'cursor': QTextCursor(cursor), + 'state': state(cursor), + 'text': cursor.selection().toPlainText(), + 'view': view, + 'ANCHOR': 1, + 'CURSOR': 2, + } + try: + code = compile(text, "", "exec") + exec code in namespace + except Exception: + handle_exception(name, view) + else: + text = namespace.get('text', '') + if isinstance(text, (tuple, list)): + ANCHOR = namespace.get('ANCHOR', 1) + CURSOR = namespace.get('CURSOR', 2) + a, c = -1, -1 + for t in text: + if t == ANCHOR: + a = cursor.selectionStart() + elif t == CURSOR: + c = cursor.selectionStart() + else: + cursor.insertText(t) + if (a, c) != (-1, -1): + new = QTextCursor(cursor) + if a != -1: + new.setPosition(a) + if c != -1: + new.setPosition(c, QTextCursor.KeepAnchor if a != -1 else QTextCursor.MoveAnchor) + return new + else: + cursor.insertText(namespace['text']) + + +def state(cursor): + """Returns the simplestate string for the position of the cursor.""" + import simplestate + pos = cursor.selectionStart() + block = cursor.document().findBlock(pos) + tokens = tokeniter.tokens(block) + state = tokeniter.state(block) + column = pos - block.position() + for t in tokens: + if t.end > column: + break + state.follow(t) + return simplestate.state(state) + + +def handle_exception(name, view): + """Called when a snippet raises a Python exception. + + Shows the error message and offers the option to edit the offending snippet. + + """ + import sys, traceback + exc_type, exc_value, exc_traceback = sys.exc_info() + tb = traceback.extract_tb(exc_traceback) + while tb and tb[0][0] != "": + del tb[0] + msg = ''.join(traceback.format_list(tb) + + traceback.format_exception_only(exc_type, exc_value)) + dlg = QMessageBox(QMessageBox.Critical, _("Snippet error"), msg, + QMessageBox.Ok | QMessageBox.Cancel) + dlg.button(QMessageBox.Ok).setText(_("Edit Snippet")) + dlg.setDefaultButton(QMessageBox.Cancel) + dlg.setEscapeButton(QMessageBox.Cancel) + if dlg.exec_() != QMessageBox.Ok: + return + + # determine line number + if exc_type is SyntaxError: + lineno = exc_value.lineno + elif tb: + lineno = tb[0][1] + else: + lineno = None + + import panels + from . import edit + widget = panels.manager(view.window()).snippettool.widget() + textedit = edit.Edit(widget, name).text + if lineno is not None: + # convert to line number in full snippet text + for block in cursortools.allBlocks(textedit.document()): + if block.text().startswith('-*- '): + lineno += 1 + else: + break + block = textedit.document().findBlockByNumber(lineno-1) + if block.isValid(): + textedit.setTextCursor(QTextCursor(block)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/menu.py frescobaldi-2.0.0/frescobaldi_app/snippet/menu.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/menu.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/menu.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,155 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Place snippets in menu. + +If a snippet defines the variable 'menu' it is placed in the menu, sorted +on its internal action name and grouped by the value of the 'menu' variable. + +If a snippet defines the variable 'template' it is placed in File->New from +template, sorted on its action name and grouped by the value of the 'template' +variable. + +TODO: +- provide submenus +- caching (keep actions alive?) + +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt, QUrl +from PyQt4.QtGui import QMenu + +import app +import document +import util +import panels + + +class SnippetMenu(QMenu): + def __init__(self, parent=None): + super(SnippetMenu, self).__init__(parent) + self.aboutToShow.connect(self.populate) + self.aboutToHide.connect(self.clearMenu, Qt.QueuedConnection) + self.triggered.connect(self.slotTriggered) + app.translateUI(self) + + def mainwindow(self): + return self.parent().window() + + def tool(self): + """Returns the snippets tool.""" + return panels.manager(self.mainwindow()).snippettool + + def populate(self): + """Populates the menu with snippet actions.""" + from . import model, snippets, actions + last = self.insertBeforeAction() + shortcuts = self.tool().snippetActions + groups = {} + for name in sorted(model.model().names()): + variables = snippets.get(name).variables + group = self.snippetGroup(variables) + if group: + action = actions.action(name, self.mainwindow(), shortcuts) + self.visitAction(action, variables) + groups.setdefault(group, []).append(action) + for group in sorted(groups): + for action in groups[group]: + self.insertAction(last, action) + self.insertSeparator(last) + util.addAccelerators(self.actions()) + + def insertBeforeAction(self): + """Should return an action to insert out stuff before, or None.""" + return None + + def snippetGroup(self, variables): + """Should a group name if the snippet is to appear in the menu.""" + + def visitAction(self, action, variables): + """May change the action depending on variables.""" + + def clearMenu(self): + """Should delete the inserted actions.""" + for a in self.actions(): + self.removeAction(a) + a.deleteLater() + + def slotTriggered(self, action): + """Called when an action is triggered.""" + name = action.objectName() + if name: + self.applySnippet(name) + + def applySnippet(self, name): + """Applies the named snippet.""" + from . import insert + view = self.mainwindow().currentView() + view.setFocus() + insert.insert(name, view) + + +class InsertMenu(SnippetMenu): + def __init__(self, parent=None): + super(InsertMenu, self).__init__(parent) + self.addAction(self.tool().actionCollection.snippettool_activate) + + def translateUI(self): + self.setTitle(_("&Insert")) + + def insertBeforeAction(self): + return self.actions()[-1] + + def snippetGroup(self, variables): + return variables.get('menu') + + def visitAction(self, action, variables): + if 'yes' in variables.get('selection', ''): + action.setEnabled(self.mainwindow().hasSelection()) + + def clearMenu(self): + """Deletes the actions on menu hide, excepts the "Snippets..." action.""" + for a in self.actions()[:-1]: + self.removeAction(a) + a.deleteLater() + + +class TemplateMenu(SnippetMenu): + def translateUI(self): + self.setTitle(_("New from &Template")) + + def snippetGroup(self, variables): + return variables.get('template') + + def applySnippet(self, name): + d = app.openUrl(QUrl()) + self.mainwindow().setCurrentDocument(d) + super(TemplateMenu, self).applySnippet(name) + d.setUndoRedoEnabled(False) + d.setUndoRedoEnabled(True) # d.clearUndoRedoStacks() only in Qt >= 4.7 + d.setModified(False) + from . import snippets + if 'template-run' in snippets.get(name).variables: + import engrave + engrave.engraver(self.mainwindow()).engrave(True, d) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/model.py frescobaldi-2.0.0/frescobaldi_app/snippet/model.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/model.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/model.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,198 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The model containing the snippets data. +""" + + +from __future__ import unicode_literals + +import bisect + +from PyQt4.QtCore import QAbstractItemModel, QModelIndex, Qt +from PyQt4.QtGui import QKeySequence + +import app +import actioncollection + +from . import snippets + + +def model(): + """Returns the global model containing snippets.""" + m = SnippetModel(app.qApp) + global model + model = lambda: m + return m + + +class SnippetModel(QAbstractItemModel): + """Presents the snippets as a Qt Model.""" + def __init__(self, parent = None): + super(SnippetModel, self).__init__(parent) + self._names = [] + self.load() + app.settingsChanged.connect(self.slotSettingsChanged) + app.languageChanged.connect(self.slotLanguageChanged) + + # methods needed to be a well-behaved model + def headerData(self, section, orientation, role=Qt.DisplayRole): + if role == Qt.DisplayRole and orientation == Qt.Horizontal: + if section == 0: + return _("Name") + elif section == 1: + return _("Description") + else: + return _("Shortcut") + + def index(self, row, column, parent=None): + return self.createIndex(row, column) + + def parent(self, index): + return QModelIndex() + + def columnCount(self, parent=QModelIndex()): + return 3 if not parent.isValid() else 0 + + def rowCount(self, parent=QModelIndex()): + return len(self._names) if not parent.isValid() else 0 + + def data(self, index, role=Qt.DisplayRole): + name = self.name(index) + if role == Qt.DisplayRole: + if index.column() == 0: + return snippets.get(name).variables.get('name') + elif index.column() == 1: + return snippets.title(name) + else: + return shortcut(name) + elif role == Qt.DecorationRole and index.column() == 1: + return snippets.icon(name) + + # slots + def slotSettingsChanged(self): + """Called when settings change, e.g. when keyboard shortcuts are altered.""" + self.load() + + def slotLanguageChanged(self): + """Called when the user changes the language.""" + self.headerDataChanged.emit(Qt.Horizontal, 0, 2) + + def load(self): + self.beginResetModel() + self._names = sorted(snippets.names(), key=snippets.title) + self.endResetModel() + + # interface for getting/altering snippets + def names(self): + """Returns the internal list of snippet names in title order. Do not alter!""" + return self._names + + def name(self, index): + """The internal snippet id for the given QModelIndex.""" + return self._names[index.row()] + + def removeRows(self, row, count, parent=QModelIndex()): + end = row + count + self.beginRemoveRows(parent, row, end) + try: + for name in self._names[row:end]: + snippets.delete(name) + del self._names[row:end] + finally: + self.endRemoveRows() + return True + + def saveSnippet(self, name, text, title): + """Store a snippet. + + If name is None or does not exist in names(), a new snippet is created. + Returns the QModelIndex the snippet was stored at. + + Title may be None. + + """ + # first, get the old titles list + titles = list(snippets.title(n) for n in self._names) + + oldrow = None + if name is None: + name = snippets.name(self._names) + else: + try: + oldrow = self._names.index(name) + except ValueError: + pass + snippets.save(name, text, title) + # sort the new snippet in + # if oldrow is not None, it is the row to be removed. + title = snippets.title(name) + i = bisect.bisect_right(titles, title) + + if oldrow is None: + # just insert new snippet + self.beginInsertRows(QModelIndex(), i, i ) + self._names.insert(i, name) + self.endInsertRows() + return self.createIndex(i, 0) + elif i in (oldrow, oldrow+1): + # just replace + self._names[oldrow] = name + self.dataChanged.emit(self.createIndex(oldrow, 0), self.createIndex(oldrow, 2)) + return self.createIndex(oldrow, 0) + else: + # move the old row to the new place + if self.beginMoveRows(QModelIndex(), oldrow, oldrow, QModelIndex(), i): + del self._names[oldrow] + if i > oldrow: + i -= 1 + self._names.insert(i, name) + self.endMoveRows() + self.dataChanged.emit(self.createIndex(i, 0), self.createIndex(i, 2)) + return self.createIndex(i, 0) + raise RuntimeError("wrong row move offset") + + +def shortcut(name): + """Returns a shortcut text for the named snippets, if any, else None.""" + s = shortcuts(name) + if s: + text = s[0].toString(QKeySequence.NativeText) + if len(s) > 1: + text += "..." + return text + + +def shortcuts(name): + """Returns a (maybe empty) list of QKeySequences for the named snippet.""" + ac = collection() + return ac and ac.shortcuts(name) or [] + + +def collection(): + """Returns an instance of the 'snippets' ShortcutCollection, if existing.""" + try: + # HACK alert :-) access an instance of the ShortcutCollection named 'snippets' + ref = actioncollection.ShortcutCollection.others['snippets'][0] + except (KeyError, IndexError): + return + return ref() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/snippets.py frescobaldi-2.0.0/frescobaldi_app/snippet/snippets.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/snippets.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/snippets.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,260 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Acessing the snippets data. +""" + +from __future__ import unicode_literals + + +import collections +import functools +import itertools +import random +import re + +import app +import icons +import symbols + +textvars = collections.namedtuple('textvars', 'text variables') + +# cache parsed snippets +_cache = {} + +# match variables in a '-*- ' line +_variables_re = re.compile(br'\s*?([a-z]+(?:-[a-z]+)*)(?::[ \t]*(.*?))?;') + +# match expansions $$, $NAME or ${text} (the latter may contain escaped right brace: '\}') +_expansions_re = re.compile(r'\$(?P<_bracket_>\{)?((?(_bracket_)(?:\\\}|[^\}])*|(?:\$|[A-Z]+(?:_[A-Z]+)*)))(?(_bracket_)\})') + + +# builtin snippets +from .builtin import builtin_snippets + + +def memoize(f): + """Decorator memoizing stuff for a name.""" + @functools.wraps(f) + def func(name): + try: + result = _cache[name][f] + except KeyError: + result = _cache.setdefault(name, {})[f] = f(name) + return result + return func + + +def unmemoize(f): + """Decorator forgetting memoized information for a name.""" + @functools.wraps(f) + def func(name, *args, **kwargs): + try: + del _cache[name] + except KeyError: + pass + return f(name, *args, **kwargs) + return func + + +def settings(): + return app.settings("snippets") + + +def names(): + """Yields the names of available builtin snippets.""" + s = settings() + return set(filter(lambda name: not s.value(name+"/deleted"), + itertools.chain(builtin_snippets, s.childGroups()))) + + +def title(name, fallback=True): + """Returns the title of the specified snippet or the empty string. + + If fallback, returns a shortened display of the text if no title is + available. + + """ + s = settings() + title = s.value(name+"/title") + if title: + return title + try: + t = builtin_snippets[name] + except KeyError: + pass + else: + if t.title: + return t.title() # call to translate + if fallback: + # no title found, send shorttext instead + return shorttext(name) + + +def text(name): + """Returns the full snippet text for the name, or the empty string.""" + text = settings().value(name+"/text") + if text: + return text + try: + t = builtin_snippets[name] + except KeyError: + return "" + return t.text + + +@memoize +def shorttext(name): + """Returns the abridged text, in most cases usable for display or matching.""" + return maketitle(get(name).text) + + +def maketitle(text): + """Returns the text abridged, usable as a title.""" + lines = _expansions_re.sub(' ... ', text).splitlines() + if not lines: + return '' + start, end = 0, len(lines) - 1 + while start < end and (not lines[start] or lines[start].isspace()): + start += 1 + while end > start and (not lines[end] or lines[end].isspace()): + end -= 1 + if end == start: + return lines[start] + else: + return lines[start] + " ... " + lines[end] + + +@memoize +def get(name): + """Returns a tuple (text, variables) for the specified name. + + Equivalent to parse(text(name)). See parse(). + + """ + return parse(text(name)) + + +def parse(text): + """Parses a piece of text and returns a named tuple (text, variables). + + text is the template text, with lines starting with '-*- ' removed. + variables is a dictionary containing variables read from lines starting + with '-*- '. + + The syntax is as follows: + + -*- name: value; name1: value2; (etc) + + Names without value are also possible: + + -*- name; + + In that case the value is set to True. + + """ + lines = text.split('\n') + start = 0 + while start < len(lines) and lines[start].startswith('-*- '): + start += 1 + t = '\n'.join(lines[start:]) + d = dict(m.groups(True) for l in lines[:start] for m in _variables_re.finditer(l)) + return textvars(t, d) + + +def icon(name): + """Returns an icon if defined.""" + d = get(name).variables + icon = d.get('icon') + if icon: + return icons.get(icon) + icon = d.get('symbol') + if icon: + return symbols.icon(icon) + + +@unmemoize +def delete(name): + """Deletes a snippet. For builtins, name/deleted is set to true.""" + s = settings() + s.remove(name) + if name in builtin_snippets: + s.setValue(name+"/deleted", True) + + +def name(names): + """Returns a name to be used for a new snippet.. + + names is a list of strings for which the newly returned name will be unique. + + """ + while True: + u = "n{0:06.0f}".format(random.random()*1000000) + if u not in names: + break + return u + + +@unmemoize +def save(name, text, title=None): + """Stores a snippet.""" + try: + t = builtin_snippets[name] + except KeyError: + # not builtin + pass + else: + # builtin + if not title or (t.title and title == t.title()): + title = None + if text == t.text: + text = None + s = settings() + if title or text: + s.beginGroup(name) + s.setValue("text", text) if text else s.remove("text") + s.setValue("title", title) if title else s.remove("title") + else: + # the snippet exactly matches the builtin, no saving needed + s.remove(name) + + +def expand(text): + """Yields tuples (text, expansion) for text. + + Parses text for expressions like '$VAR_NAME', '${other text}' or '$$'. + + An expansion starts with a '$' and is an uppercase word (which can have + single underscores in the middle), or other text between braces (which may + contain a right brace espaced: '\}', those are already unescaped by this + function). + + One of (text, expansion) may be an empty string. + + """ + pos = 0 + for m in _expansions_re.finditer(text): + expansion = m.group(2) if not m.group(1) else m.group(2).replace('\\}', '}') + yield text[pos:m.start()], expansion + pos = m.end() + if pos < len(text): + yield text[pos:], '' + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/template.py frescobaldi-2.0.0/frescobaldi_app/snippet/template.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/template.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/template.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,65 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Save the current document as a snippet that appears in File->New from Template. +""" + +from __future__ import unicode_literals + +import documentinfo +import inputdialog + +from . import model + +def save(mainwindow): + title = inputdialog.getText(mainwindow, + _("Save as Template"), + _("Please enter a template name:"), regexp=r"\w(.*\w)?") + if not title: + return + + # get the text and insert cursor position or selection + cursor = mainwindow.textCursor() + text = cursor.document().toPlainText() + + repls = [(cursor.position(), '${CURSOR}')] + if cursor.hasSelection(): + repls.append((cursor.anchor(), '${ANCHOR}')) + repls.sort() + + result = [] + prev = 0 + for pos, what in repls: + result.append(text[prev:pos].replace('$', '$$')) + result.append(what) + prev = pos + result.append(text[prev:].replace('$', '$$')) + text = ''.join(result) + + # add header line, if it is lilypond, enable autorun + headerline = '-*- template; indent: no;' + if documentinfo.mode(cursor.document()) == 'lilypond': + headerline += ' template-run;' + text = headerline + '\n' + text + + # save the new snippet + model.model().saveSnippet(None, text, title) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/tool.py frescobaldi-2.0.0/frescobaldi_app/snippet/tool.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/tool.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/tool.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,123 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The snippets dockwindow. +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QAction, QKeySequence + +import actioncollection +import actioncollectionmanager +import app +import panels + + +class SnippetTool(panels.Panel): + """A dockwidget for selecting, applying and editing the list of snippets.""" + def __init__(self, mainwindow): + super(SnippetTool, self).__init__(mainwindow) + self.hide() + self.snippetActions = SnippetActions(self) + actioncollectionmanager.manager(mainwindow).addActionCollection(self.snippetActions) + self.toggleViewAction().setShortcut(QKeySequence("Meta+Alt+S")) + ac = self.actionCollection = Actions() + mainwindow.addAction(ac.snippettool_activate) + ac.snippettool_activate.triggered.connect(self.activate) + ac.file_save_as_template.triggered.connect(self.saveAsTemplate) + actioncollectionmanager.manager(mainwindow).addActionCollection(ac) + mainwindow.addDockWidget(Qt.BottomDockWidgetArea, self) + + def translateUI(self): + self.setWindowTitle(_("Snippets")) + self.toggleViewAction().setText(_("&Snippets")) + + def createWidget(self): + from . import widget + return widget.Widget(self) + + def activate(self): + super(SnippetTool, self).activate() + if self.isFloating(): + self.activateWindow() + self.mainwindow().currentView().ensureCursorVisible() + self.widget().searchEntry.setFocus() + self.widget().searchEntry.selectAll() + + def saveAsTemplate(self): + from . import template + template.save(self.mainwindow()) + + +class Actions(actioncollection.ActionCollection): + name = "snippettool" + def createActions(self, parent=None): + self.file_save_as_template = QAction(parent) + self.snippettool_activate = QAction(parent) + self.snippettool_activate.setShortcut(QKeySequence("Ctrl+T")) + + def translateUI(self): + self.file_save_as_template.setText(_("Save as Template...")) + self.snippettool_activate.setText(_("&Snippets...")) + + +class SnippetActions(actioncollection.ShortcutCollection): + """Manages keyboard shortcuts for the snippets.""" + name = "snippets" + def __init__(self, tool): + super(SnippetActions, self).__init__(tool.mainwindow().centralWidget()) + self.tool = weakref.ref(tool) + + def createDefaultShortcuts(self): + self.setDefaultShortcuts('voice1', [QKeySequence('Alt+1')]) + self.setDefaultShortcuts('voice2', [QKeySequence('Alt+2')]) + self.setDefaultShortcuts('voice3', [QKeySequence('Alt+3')]) + self.setDefaultShortcuts('voice4', [QKeySequence('Alt+4')]) + self.setDefaultShortcuts('1voice', [QKeySequence('Alt+0')]) + self.setDefaultShortcuts('times23', [QKeySequence('Ctrl+3')]) + self.setDefaultShortcuts('ly_version', [QKeySequence('Ctrl+Shift+V')]) + self.setDefaultShortcuts('blankline', [QKeySequence('Ctrl+Shift+Return')]) + self.setDefaultShortcuts('repeat', [QKeySequence('Ctrl+Shift+R')]) + self.setDefaultShortcuts('quotes_s', [QKeySequence("Ctrl+'")]) + self.setDefaultShortcuts('quotes_d', [QKeySequence('Ctrl+"')]) + self.setDefaultShortcuts('uppercase', [QKeySequence('Ctrl+U')]) + self.setDefaultShortcuts('lowercase', [QKeySequence('Ctrl+Shift+U')]) + self.setDefaultShortcuts('last_note', [QKeySequence('Ctrl+;')]) + + def realAction(self, name): + from . import actions, model + if name in model.model().names(): + return actions.action(name) + + def triggerAction(self, name): + from . import insert, model + if name in model.model().names(): + view = self.tool().mainwindow().currentView() + if view.hasFocus() or self.tool().widget().searchEntry.hasFocus(): + insert.insert(name, view) + + def title(self): + return _("Snippets") + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/snippet/widget.py frescobaldi-2.0.0/frescobaldi_app/snippet/widget.py --- frescobaldi-1.2.0/frescobaldi_app/snippet/widget.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/snippet/widget.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,410 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The snippets widget. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +import app +import help +import icons +import widgets.lineedit +import textformats + +from . import model +from . import snippets +from . import edit +from . import insert +from . import highlight + + +class Widget(QWidget): + def __init__(self, panel): + super(Widget, self).__init__(panel) + + layout = QVBoxLayout() + self.setLayout(layout) + layout.setSpacing(0) + + self.searchEntry = SearchLineEdit() + self.treeView = QTreeView() + self.textView = QTextBrowser() + + applyButton = QToolButton(autoRaise=True) + editButton = QToolButton(autoRaise=True) + addButton = QToolButton(autoRaise=True) + self.menuButton = QPushButton(flat=True) + menu = QMenu(self.menuButton) + self.menuButton.setMenu(menu) + + splitter = QSplitter(Qt.Vertical) + top = QHBoxLayout() + layout.addLayout(top) + splitter.addWidget(self.treeView) + splitter.addWidget(self.textView) + layout.addWidget(splitter) + splitter.setSizes([200, 100]) + splitter.setCollapsible(0, False) + + top.addWidget(self.searchEntry) + top.addWidget(applyButton) + top.addSpacing(10) + top.addWidget(addButton) + top.addWidget(editButton) + top.addWidget(self.menuButton) + + # action generator for actions added to search entry + def act(slot, icon=None): + a = QAction(self, triggered=slot) + self.addAction(a) + a.setShortcutContext(Qt.WidgetWithChildrenShortcut) + icon and a.setIcon(icons.get(icon)) + return a + + # hide if ESC pressed in lineedit + a = act(self.slotEscapePressed) + a.setShortcut(QKeySequence(Qt.Key_Escape)) + + # import action + a = self.importAction = act(self.slotImport, 'document-open') + menu.addAction(a) + + # export action + a = self.exportAction = act(self.slotExport, 'document-save-as') + menu.addAction(a) + + # apply button + a = self.applyAction = act(self.slotApply, 'edit-paste') + applyButton.setDefaultAction(a) + menu.addSeparator() + menu.addAction(a) + + # add button + a = self.addAction_ = act(self.slotAdd, 'list-add') + a.setShortcut(QKeySequence(Qt.Key_Insert)) + addButton.setDefaultAction(a) + menu.addSeparator() + menu.addAction(a) + + # edit button + a = self.editAction = act(self.slotEdit, 'document-edit') + a.setShortcut(QKeySequence(Qt.Key_F2)) + editButton.setDefaultAction(a) + menu.addAction(a) + + # delete action + a = self.deleteAction = act(self.slotDelete, 'list-remove') + a.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_Delete)) + menu.addAction(a) + + # help button + a = self.helpAction = act(self.slotHelp, 'help-contents') + menu.addSeparator() + menu.addAction(a) + + self.treeView.setSelectionBehavior(QTreeView.SelectRows) + self.treeView.setSelectionMode(QTreeView.ExtendedSelection) + self.treeView.setRootIsDecorated(False) + self.treeView.setAllColumnsShowFocus(True) + self.treeView.setModel(model.model()) + self.treeView.setCurrentIndex(QModelIndex()) + + # signals + self.searchEntry.returnPressed.connect(self.slotReturnPressed) + self.searchEntry.textChanged.connect(self.updateFilter) + self.treeView.doubleClicked.connect(self.slotDoubleClicked) + self.treeView.selectionModel().currentChanged.connect(self.updateText) + self.treeView.model().dataChanged.connect(self.updateFilter) + + # highlight text + self.highlighter = highlight.Highlighter(self.textView.document()) + + # complete on snippet variables + self.searchEntry.setCompleter(QCompleter([ + ':icon', ':indent', ':menu', ':name', ':python', ':selection', + ':set', ':symbol', ':template', ':template-run'], self.searchEntry)) + self.readSettings() + app.settingsChanged.connect(self.readSettings) + app.translateUI(self) + self.updateColumnSizes() + self.setAcceptDrops(True) + + def dropEvent(self, ev): + if not ev.source() and ev.mimeData().hasUrls(): + filename = ev.mimeData().urls()[0].toLocalFile() + if filename: + ev.accept() + from . import import_export + import_export.load(filename, self) + + def dragEnterEvent(self, ev): + if not ev.source() and ev.mimeData().hasUrls(): + ev.accept() + + def translateUI(self): + try: + self.searchEntry.setPlaceHolderText(_("Search...")) + except AttributeError: + pass # not in Qt 4.6 + shortcut = lambda a: a.shortcut().toString(QKeySequence.NativeText) + self.menuButton.setText(_("&Menu")) + self.addAction_.setText(_("&Add...")) + self.addAction_.setToolTip( + _("Add a new snippet. ({key})").format(key=shortcut(self.addAction_))) + self.editAction.setText(_("&Edit...")) + self.editAction.setToolTip( + _("Edit the current snippet. ({key})").format(key=shortcut(self.editAction))) + self.deleteAction.setText(_("&Remove")) + self.deleteAction.setToolTip(_("Remove the selected snippets.")) + self.applyAction.setText(_("A&pply")) + self.applyAction.setToolTip(_("Apply the current snippet.")) + self.importAction.setText(_("&Import...")) + self.importAction.setToolTip(_("Import snippets from a file.")) + self.exportAction.setText(_("E&xport...")) + self.exportAction.setToolTip(_("Export snippets to a file.")) + self.helpAction.setText(_("&Help")) + self.searchEntry.setToolTip(_( + "Enter text to search in the snippets list.\n" + "See \"What's This\" for more information.")) + self.searchEntry.setWhatsThis(''.join(map("

{0}

\n".format, ( + _("Enter text to search in the snippets list, and " + "press Enter to apply the currently selected snippet."), + _("If the search text fully matches the value of the '{name}' variable " + "of a snippet, that snippet is selected.").format(name="name"), + _("If the search text starts with a colon ':', the rest of the " + "search text filters snippets that define the given variable. " + "After a space a value can also be entered, snippets will then " + "match if the value of the given variable contains the text after " + "the space."), + _("E.g. entering {menu} will show all snippets that are displayed " + "in the insert menu.").format(menu=":menu"), + )))) + + def sizeHint(self): + return self.parent().mainwindow().size() / 4 + + def readSettings(self): + data = textformats.formatData('editor') + self.textView.setFont(data.font) + self.textView.setPalette(data.palette()) + + def slotReturnPressed(self): + """Called when the user presses Return in the search entry. Applies current snippet.""" + name = self.currentSnippet() + if name: + view = self.parent().mainwindow().currentView() + insert.insert(name, view) + self.parent().hide() # make configurable? + view.setFocus() + + def slotEscapePressed(self): + """Called when the user presses ESC in the search entry. Hides the panel.""" + self.parent().hide() + self.parent().mainwindow().currentView().setFocus() + + def slotDoubleClicked(self, index): + name = self.treeView.model().name(index) + view = self.parent().mainwindow().currentView() + insert.insert(name, view) + + def slotAdd(self): + """Called when the user wants to add a new snippet.""" + edit.Edit(self, None) + + def slotEdit(self): + """Called when the user wants to edit a snippet.""" + name = self.currentSnippet() + if name: + edit.Edit(self, name) + + def slotDelete(self): + """Called when the user wants to delete the selected rows.""" + rows = sorted(set(i.row() for i in self.treeView.selectedIndexes()), reverse=True) + if rows: + for row in rows: + name = self.treeView.model().names()[row] + self.parent().snippetActions.setShortcuts(name, []) + self.treeView.model().removeRow(row) + self.updateFilter() + + def slotApply(self): + """Called when the user clicks the apply button. Applies current snippet.""" + name = self.currentSnippet() + if name: + view = self.parent().mainwindow().currentView() + insert.insert(name, view) + + def slotImport(self): + """Called when the user activates the import action.""" + filetypes = "{0} (*.xml);;{1} (*)".format(_("XML Files"), _("All Files")) + caption = app.caption(_("dialog title", "Import Snippets")) + filename = None + filename = QFileDialog.getOpenFileName(self, caption, filename, filetypes) + if filename: + from . import import_export + import_export.load(filename, self) + + def slotExport(self): + """Called when the user activates the export action.""" + allrows = [row for row in range(model.model().rowCount()) + if not self.treeView.isRowHidden(row, QModelIndex())] + selectedrows = [i.row() for i in self.treeView.selectedIndexes() + if i.column() == 0 and i.row() in allrows] + names = self.treeView.model().names() + names = [names[row] for row in selectedrows or allrows] + + filetypes = "{0} (*.xml);;{1} (*)".format(_("XML Files"), _("All Files")) + n = len(names) + caption = app.caption(_("dialog title", + "Export {num} Snippet", "Export {num} Snippets", n).format(num=n)) + filename = QFileDialog.getSaveFileName(self, caption, None, filetypes) + if filename: + from . import import_export + try: + import_export.save(names, filename) + except (IOError, OSError) as e: + QMessageBox.critical(self, _("Error"), _( + "Can't write to destination:\n\n{url}\n\n{error}").format( + url=filename, error=e.strerror)) + + def slotHelp(self): + """Called when the user clicks the small help button.""" + help.help(snippet_help) + + def currentSnippet(self): + """Returns the name of the current snippet if it is visible.""" + row = self.treeView.currentIndex().row() + if row != -1 and not self.treeView.isRowHidden(row, QModelIndex()): + return self.treeView.model().names()[row] + + def updateFilter(self): + """Called when the text in the entry changes, updates search results.""" + text = self.searchEntry.text() + ltext = text.lower() + filterVars = text.startswith(':') + if filterVars: + try: + fvar, fval = text[1:].split(None, 1) + fhide = lambda v: v.get(fvar) in (True, None) or fval not in v.get(fvar) + except ValueError: + fvar = text[1:].strip() + fhide = lambda v: not v.get(fvar) + for row in range(self.treeView.model().rowCount()): + name = self.treeView.model().names()[row] + nameid = snippets.get(name).variables.get('name', '') + if filterVars: + hide = fhide(snippets.get(name).variables) + elif nameid == text: + i = self.treeView.model().createIndex(row, 0) + self.treeView.selectionModel().setCurrentIndex(i, QItemSelectionModel.SelectCurrent | QItemSelectionModel.Rows) + hide = False + elif nameid.lower().startswith(ltext): + hide = False + elif ltext in snippets.title(name).lower(): + hide = False + else: + hide = True + self.treeView.setRowHidden(row, QModelIndex(), hide) + self.updateText() + + def updateText(self): + """Called when the current snippet changes.""" + name = self.currentSnippet() + self.textView.clear() + if name: + s = snippets.get(name) + self.highlighter.setPython('python' in s.variables) + self.textView.setPlainText(s.text) + + def updateColumnSizes(self): + self.treeView.resizeColumnToContents(0) + self.treeView.resizeColumnToContents(1) + + +class SearchLineEdit(widgets.lineedit.LineEdit): + def __init__(self, *args): + super(SearchLineEdit, self).__init__(*args) + + def event(self, ev): + if ev.type() == QEvent.KeyPress and any(ev.matches(key) for key in ( + QKeySequence.MoveToNextLine, QKeySequence.SelectNextLine, + QKeySequence.MoveToPreviousLine, QKeySequence.SelectPreviousLine, + QKeySequence.MoveToNextPage, QKeySequence.SelectNextPage, + QKeySequence.MoveToPreviousPage, QKeySequence.SelectPreviousPage)): + QApplication.sendEvent(self.parent().treeView, ev) + return True + return super(SearchLineEdit, self).event(ev) + + +class snippet_help(help.page): + def title(): + return _("Snippets") + + def body(): + import panels + ac = panels.PanelManager.instances()[0].snippettool.actionCollection + key_snippets = help.shortcut(ac.snippettool_activate) + return _("""\ +

+With the snippets manager you can store often used pieces of text called +"snippets", and easily paste them into the text editor. +

+ +

+The snippets manager can be activated via the menu {menu_snippets} or +by pressing {key_snippets}. +

+ +

+Snippets can be searched by browsing the list or by typing some characters +in the search entry. +Snippets can also have a keyboard shortcut which directly applies them. +Some snippets have a special mnemonic (short name) which you can also type +in the search entry to select the snippet. Pressing the Return key will then +apply the snippet to the text editor and hide the snippets manager. +

+ +

+Add new snippets using {key_add}. Edit the selected snippet with {key_edit}. +Remove selected snippets using {key_delete}. Warning: there's no undo! +

+ +

+Snippets can also be put in the menu (see {link}). +And finally there are snippets which can include or alter selected text. +Some snippets do this by using special variables, while others are small +scripts written in Python. +

+""").format(link = edit.snippet_edit_help.link(), + menu_snippets = help.menu(_("menu title", "Insert"), _("Snippets...")), + key_snippets = key_snippets, + key_add = help.shortcut(QKeySequence(Qt.Key_Insert)), + key_edit = help.shortcut(QKeySequence(Qt.Key_F2)), + key_delete = help.shortcut(QKeySequence(Qt.CTRL + Qt.Key_Delete))) + + def children(): + return (edit.snippet_edit_help,) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_arrow_down.ly frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_arrow_down.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_arrow_down.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_arrow_down.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ +\version "2.14.0" +\include "arpeggio_defaults.ily" +\relative c' { + \centerArpeggio + \arpeggioArrowDown + 4\arpeggio +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_arrow_down.svg frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_arrow_down.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_arrow_down.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_arrow_down.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_arrow_up.ly frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_arrow_up.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_arrow_up.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_arrow_up.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ +\version "2.14.0" +\include "arpeggio_defaults.ily" +\relative c' { + \centerArpeggio + \arpeggioArrowUp + 4\arpeggio +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_arrow_up.svg frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_arrow_up.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_arrow_up.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_arrow_up.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_bracket.ly frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_bracket.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_bracket.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_bracket.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ +\version "2.14.0" +\include "arpeggio_defaults.ily" +\relative c' { + \centerArpeggio + \arpeggioBracket + 4\arpeggio +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_bracket.svg frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_bracket.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_bracket.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_bracket.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,36 @@ +\version "2.14.0" + +\include "icon_defaults.ily" + +\paper { + paper-height = 24\pt + paper-width = 24\pt + indent = #0 + left-margin = 2\pt + top-system-spacing = #' + ( + (basic-distance . 0) + (minimum-distance . 2.4) + (padding . 0) + (stretchability . 0)) +} + +\layout { + \context { + \Staff + \override StaffSymbol #'transparent = ##t + \override StaffSymbol #'width = #4 + \remove "Clef_engraver" + \remove "Time_signature_engraver" + } + \context { + \Voice + \override NoteHead #'no-ledgers = ##t + \override NoteHead #'stencil = #empty-stencil + \override Stem #'stencil =#empty-stencil + } +} + +centerArpeggio = { + \alignGrob #"Staff.Arpeggio" #'StaffSymbol #0 #0 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_normal.ly frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_normal.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_normal.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_normal.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "arpeggio_defaults.ily" +\relative c' { + \centerArpeggio + 4\arpeggio +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_normal.svg frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_normal.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_normal.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_parenthesis.ly frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_parenthesis.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_parenthesis.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_parenthesis.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ +\version "2.14.0" +\include "arpeggio_defaults.ily" +\relative c' { + \centerArpeggio + \arpeggioParenthesis + 4\arpeggio +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_parenthesis.svg frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_parenthesis.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/arpeggio_parenthesis.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/arpeggio_parenthesis.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_accent.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_accent.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_accent.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_accent.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.sforzato" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_accent.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_accent.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_accent.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_accent.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_coda.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_coda.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_coda.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_coda.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.coda" +} + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_coda.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_coda.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_coda.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_coda.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ +\version "2.14.0" +\include "icon_defaults.ily" + +\paper { + paper-height = 16\pt + paper-width = 16\pt + top-markup-spacing = #' + ((basic-distance . 1.6) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0)) +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downbow.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downbow.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downbow.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downbow.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \translate #'(0 . -0.5) + \musicglyph #"scripts.downbow" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downbow.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downbow.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downbow.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downbow.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downmordent.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downmordent.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downmordent.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downmordent.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.downmordent" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downmordent.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downmordent.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downmordent.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downmordent.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downprall.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downprall.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downprall.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downprall.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line{ + \musicglyph #"scripts.downprall" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downprall.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downprall.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_downprall.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_downprall.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_espressivo.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_espressivo.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_espressivo.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_espressivo.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line{ + \fontsize #-1.6 + \musicglyph #"scripts.espr" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_espressivo.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_espressivo.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_espressivo.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_espressivo.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_fermata.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_fermata.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_fermata.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_fermata.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \translate #'(0 . -0.4) + \musicglyph #"scripts.ufermata" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_fermata.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_fermata.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_fermata.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_fermata.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_flageolet.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_flageolet.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_flageolet.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_flageolet.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.flageolet" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_flageolet.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_flageolet.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_flageolet.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_flageolet.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_halfopen.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_halfopen.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_halfopen.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_halfopen.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line{ + \musicglyph #"scripts.halfopen" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_halfopen.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_halfopen.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_halfopen.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_halfopen.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_lheel.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_lheel.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_lheel.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_lheel.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.upedalheel" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_lheel.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_lheel.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_lheel.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_lheel.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_lineprall.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_lineprall.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_lineprall.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_lineprall.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line{ + \musicglyph #"scripts.lineprall" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_lineprall.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_lineprall.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_lineprall.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_lineprall.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_longfermata.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_longfermata.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_longfermata.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_longfermata.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line{ + \translate #'(0 . -0.4) + \musicglyph #"scripts.ulongfermata" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_longfermata.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_longfermata.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_longfermata.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_longfermata.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_ltoe.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_ltoe.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_ltoe.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_ltoe.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \translate #'(0 . -0.8) + \musicglyph #"scripts.upedaltoe" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_ltoe.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_ltoe.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_ltoe.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_ltoe.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_marcato.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_marcato.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_marcato.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_marcato.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \translate #'(0 . -0.5) + \musicglyph #"scripts.umarcato" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_marcato.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_marcato.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_marcato.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_marcato.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_mordent.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_mordent.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_mordent.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_mordent.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.mordent" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_mordent.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_mordent.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_mordent.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_mordent.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_open.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_open.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_open.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_open.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.open" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_open.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_open.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_open.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_open.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_portato.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_portato.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_portato.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_portato.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \translate #'(0 . 0.3) + \musicglyph #"scripts.dportato" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_portato.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_portato.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_portato.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_portato.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_pralldown.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_pralldown.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_pralldown.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_pralldown.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.pralldown" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_pralldown.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_pralldown.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_pralldown.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_pralldown.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prall.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prall.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prall.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prall.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.prall" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallmordent.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallmordent.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallmordent.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallmordent.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.prallmordent" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallmordent.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallmordent.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallmordent.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallmordent.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallprall.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallprall.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallprall.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallprall.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.prallprall" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallprall.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallprall.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallprall.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallprall.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prall.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prall.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prall.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prall.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallup.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallup.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallup.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallup.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.prallup" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallup.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallup.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_prallup.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_prallup.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_reverseturn.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_reverseturn.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_reverseturn.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_reverseturn.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.reverseturn" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_reverseturn.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_reverseturn.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_reverseturn.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_reverseturn.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_rheel.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_rheel.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_rheel.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_rheel.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.dpedalheel" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_rheel.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_rheel.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_rheel.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_rheel.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_rtoe.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_rtoe.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_rtoe.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_rtoe.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \translate #'(0 . 0.65) + \musicglyph #"scripts.dpedaltoe" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_rtoe.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_rtoe.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_rtoe.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_rtoe.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_segno.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_segno.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_segno.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_segno.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.segno" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_segno.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_segno.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_segno.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_segno.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_shortfermata.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_shortfermata.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_shortfermata.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_shortfermata.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \translate #'(0 . -1) + \musicglyph #"scripts.ushortfermata" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_shortfermata.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_shortfermata.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_shortfermata.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_shortfermata.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_signumcongruentiae.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_signumcongruentiae.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_signumcongruentiae.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_signumcongruentiae.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \translate #'(0 . -1) + \musicglyph #"scripts.usignumcongruentiae" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_signumcongruentiae.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_signumcongruentiae.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_signumcongruentiae.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_signumcongruentiae.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_snappizzicato.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_snappizzicato.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_snappizzicato.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_snappizzicato.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.snappizzicato" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_snappizzicato.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_snappizzicato.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_snappizzicato.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_snappizzicato.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_staccatissimo.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_staccatissimo.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_staccatissimo.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_staccatissimo.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.ustaccatissimo" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_staccatissimo.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_staccatissimo.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_staccatissimo.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_staccatissimo.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_staccato.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_staccato.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_staccato.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_staccato.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.staccato" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_staccato.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_staccato.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_staccato.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_staccato.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_stopped.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_stopped.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_stopped.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_stopped.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.stopped" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_stopped.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_stopped.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_stopped.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_stopped.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_tenuto.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_tenuto.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_tenuto.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_tenuto.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.tenuto" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_tenuto.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_tenuto.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_tenuto.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_tenuto.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_thumb.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_thumb.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_thumb.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_thumb.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.thumb" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_thumb.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_thumb.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_thumb.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_thumb.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_trill.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_trill.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_trill.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_trill.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \translate #'(0 . -1) + \musicglyph #"scripts.trill" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_trill.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_trill.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_trill.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_trill.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_turn.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_turn.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_turn.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_turn.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.turn" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_turn.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_turn.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_turn.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_turn.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upbow.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upbow.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upbow.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upbow.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line{ + \translate #'(0 . -1) + \musicglyph #"scripts.upbow" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upbow.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upbow.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upbow.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upbow.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upmordent.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upmordent.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upmordent.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upmordent.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.upmordent" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upmordent.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upmordent.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upmordent.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upmordent.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upprall.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upprall.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upprall.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upprall.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.upprall" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upprall.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upprall.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_upprall.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_upprall.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_varcoda.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_varcoda.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_varcoda.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_varcoda.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.varcoda" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_varcoda.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_varcoda.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_varcoda.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_varcoda.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_verylongfermata.ly frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_verylongfermata.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_verylongfermata.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_verylongfermata.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "articulation_defaults.ily" +\markup \fill-line{ + \translate #'(0 . -0.45) + \musicglyph #"scripts.uverylongfermata" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_verylongfermata.svg frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_verylongfermata.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/articulation_verylongfermata.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/articulation_verylongfermata.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_cswc.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_cswc.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_cswc.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_cswc.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar ":|.:" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_cswc.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_cswc.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_cswc.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_cswc.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_cswsc.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_cswsc.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_cswsc.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_cswsc.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ + \makeBar ":|.|:" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_cswsc.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_cswsc.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_cswsc.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_cswsc.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_dashed.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_dashed.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_dashed.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_dashed.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar "dashed" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_dashed.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_dashed.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_dashed.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_dashed.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,9 @@ + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/bar_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,38 @@ +\version "2.14.0" +\include "icon_defaults.ily" + +\paper { + paper-height = 22\pt + paper-width = 22\pt + left-margin = 1\pt + right-margin = 1\pt + top-system-spacing = #' + ((basic-distance . 0) + (minimum-distance . 2.3) + (padding . 0) + (stretchability . 0)) +} + +\layout { + system-count = #1 + \context { + \Score + \override StaffSymbol #'width = #'4 + \override StaffSymbol #'thickness = #1.2 + } + \context { + \Staff + \remove "Clef_engraver" + \remove "Time_signature_engraver" + } +} + +makeBar = # +(define-music-function (parser location bar) (string?) + #{ + s + \alignGrob "Staff.BarLine" #'StaffSymbol #0 #0 + \bar $bar + s + #}) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_dotted.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_dotted.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_dotted.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_dotted.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar ":" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_dotted.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_dotted.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_dotted.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_dotted.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_double.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_double.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_double.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_double.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar "||" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_double.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_double.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_double.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_double.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_end.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_end.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_end.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_end.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar "|." } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_end.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_end.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_end.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_end.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_invisible.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_invisible.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_invisible.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_invisible.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ +\version "2.14.0" +\include "bar_defaults.ily" + +{ s } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_invisible.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_invisible.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_invisible.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_invisible.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,8 @@ + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_double.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_double.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_double.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_double.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar ":|:" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_double.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_double.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_double.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_double.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_end.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_end.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_end.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_end.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar ":|" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_end.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_end.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_end.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_end.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_start.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_start.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_start.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_start.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar "|:" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_start.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_start.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_repeat_start.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_repeat_start.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_segno.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_segno.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_segno.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_segno.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,15 @@ +\version "2.14.0" +\include "bar_defaults.ily" +\paper { + paper-height = 40\pt + paper-width = 40\pt + left-margin = 2.5\pt + right-margin = 2.5\pt +} +\layout { + \context { + \Staff + \override StaffSymbol #'width = #7 + } +} +{ \makeBar "S" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_segno.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_segno.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_segno.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_segno.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,16 @@ + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_single.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_single.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_single.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_single.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar "|" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_single.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_single.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_single.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_single.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,9 @@ + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_sws.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_sws.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_sws.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_sws.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar "|.|" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_sws.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_sws.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_sws.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_sws.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_tick.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_tick.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_tick.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_tick.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,15 @@ +\version "2.14.0" +\include "bar_defaults.ily" +\paper { + top-system-spacing = # + '((basic-distance . 0) + (minimum-distance . 2.25) + (padding . 0)) +} +\layout { + \context { + \Staff + \override StaffSymbol #'staff-space = #(/ 7 8) + } +} +{ \makeBar "'" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_tick.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_tick.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_tick.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_tick.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,9 @@ + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_ws.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_ws.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_ws.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_ws.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar ".|" } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_ws.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_ws.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_ws.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_ws.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_ww.ly frescobaldi-2.0.0/frescobaldi_app/symbols/bar_ww.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_ww.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_ww.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "bar_defaults.ily" +{ \makeBar ".|." } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/bar_ww.svg frescobaldi-2.0.0/frescobaldi_app/symbols/bar_ww.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/bar_ww.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/bar_ww.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_caesura_curved.ly frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_caesura_curved.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_caesura_curved.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_caesura_curved.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,15 @@ +\version "2.14.0" +\include "breathe_defaults.ily" +\paper { + top-markup-spacing = # + '( + (basic-distance . 1.8) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0) + ) +} + +\markup \fill-line { + \concat { \hspace #0.7 \musicglyph #"scripts.caesura.curved" } +} \ No newline at end of file diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_caesura_curved.svg frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_caesura_curved.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_caesura_curved.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_caesura_curved.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_caesura_straight.ly frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_caesura_straight.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_caesura_straight.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_caesura_straight.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,15 @@ +\version "2.14.0" +\include "breathe_defaults.ily" +\paper { + top-markup-spacing = # + '( + (basic-distance . 1.8) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0) + ) +} + +\markup \fill-line { + \concat { \hspace #0.1 \musicglyph #"scripts.caesura.straight" } +} \ No newline at end of file diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_caesura_straight.svg frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_caesura_straight.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_caesura_straight.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_caesura_straight.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ +\version "2.14.0" +\include "icon_defaults.ily" +\paper { + paper-height = 16\pt + paper-width = 16\pt + top-markup-spacing = #' + ((basic-distance . 1.6) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0)) +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_rcomma.ly frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_rcomma.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_rcomma.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_rcomma.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "breathe_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.rcomma" +} + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_rcomma.svg frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_rcomma.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_rcomma.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_rcomma.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_rvarcomma.ly frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_rvarcomma.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_rvarcomma.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_rvarcomma.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "breathe_defaults.ily" +\markup \fill-line { + \musicglyph #"scripts.rvarcomma" +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_rvarcomma.svg frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_rvarcomma.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/breathe_rvarcomma.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/breathe_rvarcomma.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_alto.ly frescobaldi-2.0.0/frescobaldi_app/symbols/clef_alto.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_alto.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_alto.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "clef_defaults.ily" +{ \clef alto s4 } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_alto.svg frescobaldi-2.0.0/frescobaldi_app/symbols/clef_alto.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_alto.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_alto.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_bass.ly frescobaldi-2.0.0/frescobaldi_app/symbols/clef_bass.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_bass.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_bass.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "clef_defaults.ily" +{ \clef bass s} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_bass.svg frescobaldi-2.0.0/frescobaldi_app/symbols/clef_bass.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_bass.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_bass.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/clef_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,24 @@ +\version "2.14.0" + +\include "icon_defaults.ily" + +\paper { + paper-height = 40\pt + paper-width = 40\pt + left-margin = 10\pt + right-margin = 10\pt + top-system-spacing = #' + ((basic-distance . 0) + (minimum-distance . 4) + (padding . 0) + (stretchability . 0)) +} + +\layout { + indent = #0 + \context { + \Staff + \remove "Time_signature_engraver" + \override StaffSymbol #'width = #4 + } +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_none.ly frescobaldi-2.0.0/frescobaldi_app/symbols/clef_none.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_none.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_none.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,9 @@ +\version "2.14.0" +\include "clef_defaults.ily" +\layout { + \context { + \Staff + \remove "Clef_engraver" + } +} +{ s4 } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_none.svg frescobaldi-2.0.0/frescobaldi_app/symbols/clef_none.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_none.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_none.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,8 @@ + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_percussion.ly frescobaldi-2.0.0/frescobaldi_app/symbols/clef_percussion.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_percussion.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_percussion.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "clef_defaults.ily" +{ \clef percussion s4 } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_percussion.svg frescobaldi-2.0.0/frescobaldi_app/symbols/clef_percussion.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_percussion.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_percussion.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,9 @@ + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_tab.ly frescobaldi-2.0.0/frescobaldi_app/symbols/clef_tab.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_tab.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_tab.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,20 @@ +\version "2.14.0" +\include "clef_defaults.ily" + +\paper { + top-system-spacing = # + '((basic-distance . 0) + (minimum-distance . 4) + (padding . 0)) +} + +\layout { + \context { + \TabStaff + \remove "Time_signature_engraver" + \override StaffSymbol #'width = #4 + \override StaffSymbol #'staff-space = #1 + \override Clef #'font-size = #-3.5 + } +} +\new TabStaff { s4 } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_tab.svg frescobaldi-2.0.0/frescobaldi_app/symbols/clef_tab.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_tab.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_tab.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_tenor.ly frescobaldi-2.0.0/frescobaldi_app/symbols/clef_tenor.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_tenor.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_tenor.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "clef_defaults.ily" +{ \clef tenor s4 } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_tenor.svg frescobaldi-2.0.0/frescobaldi_app/symbols/clef_tenor.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_tenor.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_tenor.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_treble_8.ly frescobaldi-2.0.0/frescobaldi_app/symbols/clef_treble_8.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_treble_8.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_treble_8.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ +\version "2.14.0" +\include "clef_defaults.ily" + +\layout { + \context { + \Staff + \override OctavateEight + #'extra-offset = #'(0.6 . 0.6) + } +} + +{ \clef "treble_8" s} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_treble_8.svg frescobaldi-2.0.0/frescobaldi_app/symbols/clef_treble_8.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_treble_8.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_treble_8.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + + + + +8 + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_treble.ly frescobaldi-2.0.0/frescobaldi_app/symbols/clef_treble.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_treble.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_treble.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "clef_defaults.ily" +{ \clef treble s} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/clef_treble.svg frescobaldi-2.0.0/frescobaldi_app/symbols/clef_treble.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/clef_treble.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/clef_treble.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,13 @@ + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_cresc.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_cresc.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_cresc.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_cresc.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \italic cresc diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_cresc.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_cresc.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_cresc.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_cresc.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ + + + + +cresc + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_decresc.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_decresc.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_decresc.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_decresc.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \italic decr diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_decresc.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_decresc.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_decresc.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_decresc.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ + + + + +decr + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,29 @@ +\version "2.14.0" + +\include "icon_defaults.ily" + +\paper { + paper-height = 24\pt + paper-width = 24\pt + top-markup-spacing = #' + ((basic-distance . 3.2) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0)) +} + +#(define-markup-command + (icon layout props size text) + (number? markup?) + (interpret-markup layout props + (markup + #:override (cons 'word-space 0) + (#:translate '(2.4 . 0) + (#:center-align + (#:fontsize size text)))))) + +#(define size1 2.8) +#(define size2 0) +#(define size3 -3.5) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_dim.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_dim.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_dim.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_dim.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \italic dim diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_dim.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_dim.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_dim.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_dim.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ + + + + +dim + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fffff.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fffff.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fffff.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fffff.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size3 \dynamic fffff diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fffff.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fffff.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fffff.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fffff.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ffff.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ffff.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ffff.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ffff.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size3 \dynamic ffff diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ffff.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ffff.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ffff.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ffff.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fff.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fff.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fff.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fff.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \dynamic fff diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fff.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fff.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fff.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fff.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,13 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ff.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ff.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ff.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ff.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size1 \dynamic ff diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ff.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ff.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ff.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ff.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_f.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_f.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_f.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_f.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size1 \dynamic f diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fp.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fp.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fp.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fp.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \dynamic fp diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fp.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fp.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_fp.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_fp.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_f.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_f.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_f.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_f.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_hairpin_cresc.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_hairpin_cresc.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_hairpin_cresc.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_hairpin_cresc.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" + +\paper { + top-markup-spacing = #'((basic-distance . 2.5)) +} + +\markup { + \combine + \draw-line #'(4.8 . 1) + \draw-line #'(4.8 . -1) +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_hairpin_cresc.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_hairpin_cresc.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_hairpin_cresc.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_hairpin_cresc.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_hairpin_dim.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_hairpin_dim.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_hairpin_dim.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_hairpin_dim.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" + +\paper { + top-markup-spacing = #'((basic-distance . 2.5)) +} +\markup { + \left-align + \combine + \draw-line #'(-4.8 . 1) + \draw-line #'(-4.8 . -1) +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_hairpin_dim.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_hairpin_dim.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_hairpin_dim.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_hairpin_dim.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_mf.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_mf.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_mf.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_mf.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \dynamic mf diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_mf.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_mf.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_mf.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_mf.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_mp.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_mp.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_mp.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_mp.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \dynamic mp diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_mp.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_mp.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_mp.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_mp.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_p.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_p.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_p.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_p.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size1 \dynamic p diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_pp.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_pp.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_pp.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_pp.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \translate #'(0.3 . 0) \icon #size1 \dynamic pp diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ppp.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ppp.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ppp.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ppp.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \translate #'(0.25 . 0) \icon #size2 \dynamic ppp diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_pppp.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_pppp.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_pppp.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_pppp.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \translate #'(0.2 . 0) \icon #size3 \dynamic pppp diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ppppp.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ppppp.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ppppp.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ppppp.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size3 \dynamic ppppp diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ppppp.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ppppp.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ppppp.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ppppp.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_pppp.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_pppp.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_pppp.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_pppp.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ppp.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ppp.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_ppp.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_ppp.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,16 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_pp.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_pp.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_pp.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_pp.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_p.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_p.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_p.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_p.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_rfz.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_rfz.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_rfz.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_rfz.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \dynamic rfz diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_rfz.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_rfz.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_rfz.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_rfz.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,13 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sff.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sff.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sff.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sff.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \dynamic sff diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sff.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sff.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sff.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sff.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,13 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sf.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sf.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sf.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sf.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size1 \dynamic sf diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sf.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sf.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sf.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sf.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sfz.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sfz.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sfz.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sfz.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \dynamic sfz diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sfz.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sfz.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sfz.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sfz.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,13 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sp.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sp.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sp.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sp.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \dynamic sp diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_spp.ly frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_spp.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_spp.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_spp.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "dynamic_defaults.ily" +\markup \icon #size2 \dynamic spp diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_spp.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_spp.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_spp.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_spp.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sp.svg frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sp.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/dynamic_sp.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/dynamic_sp.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_dashed.ly frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_dashed.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_dashed.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_dashed.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "glissando_defaults.ily" +\makeGlissando #'dashed-line diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_dashed.svg frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_dashed.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_dashed.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_dashed.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,53 @@ +\version "2.14.0" + +\include "icon_defaults.ily" +\paper { + paper-height = 22\pt + paper-width = 22\pt + left-margin = 1\pt + right-margin = 1\pt + top-system-spacing = # + '((minimum-distance . 0) + (padding . 0) + (basic-distance . 2.2) + (stretchability . 0)) + +} + +\layout { + indent = #0 + \context { + \Staff + \remove "Clef_engraver" + \remove "Time_signature_engraver" + \override StaffSymbol #'transparent = ##t + \override StaffSymbol #'width = #4 + } + \context { + \Voice + \override NoteHead #'stencil = #empty-stencil + \override Stem #'stencil = #empty-stencil + \override Stem #'length = #0 + \override Glissando #'bound-details = # + '((right + (attach-dir . 0) + (padding . 0) + (Y . 2) + (X . 4)) + (left + (attach-dir . 0) + (padding . 0) + (X . 0) + (Y . -2))) + } +} + +makeGlissando = # +(define-music-function (parser location style) (symbol?) + #{ + \relative c'' { + \override Glissando #'style = $style + b\glissando b + } + #}) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_dotted.ly frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_dotted.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_dotted.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_dotted.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,9 @@ +\version "2.14.0" +\include "glissando_defaults.ily" +\layout { + \context { + \Voice + \override Glissando #'thickness = #1.5 + } +} +\makeGlissando #'dotted-line diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_dotted.svg frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_dotted.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_dotted.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_dotted.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_normal.ly frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_normal.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_normal.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_normal.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "glissando_defaults.ily" +\makeGlissando #'line diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_normal.svg frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_normal.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_normal.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_trill.ly frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_trill.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_trill.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_trill.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "glissando_defaults.ily" +\makeGlissando #'trill diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_trill.svg frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_trill.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_trill.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_trill.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_zigzag.ly frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_zigzag.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_zigzag.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_zigzag.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "glissando_defaults.ily" +\makeGlissando #'zigzag diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_zigzag.svg frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_zigzag.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/glissando_zigzag.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/glissando_zigzag.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/icon_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/icon_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/icon_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/icon_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,81 @@ +\version "2.14.0" + +\paper { + oddFooterMarkup = ##f + evenFooterMarkup = ##f + oddHeaderMarkup = ##f + evenHeaderMarkup = ##f + + top-margin = 0 + bottom-margin = 0 + left-margin = 0 + right-margin = 0 + + top-markup-spacing = # + '((minimum-distance . 0) + (basic-distance . 0) + (padding . 0) + (stretchability . 0)) + + last-bottom-spacing = # + '((minimum-distance . 0) + (basic-distance . 0) + (padding . 0) + (stretchability . 0)) + +} + +\layout { + indent = #0 +} + +%%% Thanks to: http://lists.gnu.org/archive/html/lilypond-user/2011-03/msg00270.html +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +alignGrob = +#(define-music-function (parser location grob-to-align reference-grob dir corr) (string? symbol? integer? number?) + #{ + \overrideProperty $grob-to-align #'after-line-breaking + #(lambda (grob) + (let* ((sys (ly:grob-system grob)) + (array (ly:grob-object sys 'all-elements)) + (len (ly:grob-array-length array)) + (current-grob-in-search (lambda (q) + (assq-ref (ly:grob-property (ly:grob-array-ref array q) 'meta) 'name))) + (default-coord (ly:grob-relative-coordinate grob sys X)) + (lst '())) + + ;; find all instances in a system of the grob we want to use for alignment + (let lp ((x 0)) + (if (< x len) + (begin + (if (eq? $reference-grob (current-grob-in-search x)) + (set! lst + (cons (ly:grob-array-ref array x) lst))) + (lp (1+ x))))) + + ;; find the grob with the X-coordinate closest to object to be aligned + (let ((ref (car lst))) + (define closest (lambda (x) + (if (< (abs (- default-coord + (ly:grob-relative-coordinate (car x) sys X))) + (abs (- default-coord + (ly:grob-relative-coordinate ref sys X)))) + (set! ref (car x))) + (if (not (null? (cdr x))) + (closest (cdr x))))) + + (closest lst) + ;; calculate offset to X based on choice of alignment + (ly:grob-set-property! grob 'extra-offset + `(,(cond ((eq? $dir -1) (- (ly:grob-relative-coordinate ref sys X) + default-coord)) + ((eq? $dir 0) (- (interval-center (ly:grob-extent ref sys X)) + (interval-center (ly:grob-extent grob sys X)))) + ((eq? $dir 1) (- (cdr (ly:grob-extent ref sys X)) + (cdr (ly:grob-extent grob sys X))))) + + . ,$corr))))) + #} + ) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/__init__.py frescobaldi-2.0.0/frescobaldi_app/symbols/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/symbols/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,88 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Code to use LilyPond-generated SVGs as icons. +The default black color will be adjusted to the default Text color. +""" + +from __future__ import unicode_literals + +import os + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QApplication, QIcon, QIconEngineV2, QImage, QPainter, QPixmap, QStyleOption +from PyQt4.QtSvg import QSvgRenderer + +__all__ = ["icon"] + + +_icons = {} +_pixmaps = {} + + +def icon(name): + """Returns a QIcon that shows a LilyPond-generated SVG in the default text color.""" + try: + return _icons[name] + except KeyError: + icon = _icons[name] = QIcon(Engine(name)) + return icon + + +def pixmap(name, size, mode, state): + """Returns a (possibly cached) pixmap of the name and size with the default text color. + + The state argument is ignored for now. + + """ + color = QApplication.palette().foreground().color() + key = (name, size.width(), size.height(), color.rgb(), mode) + try: + return _pixmaps[key] + except KeyError: + i = QImage(size, QImage.Format_ARGB32_Premultiplied) + i.fill(0) + painter = QPainter(i) + # render SVG symbol + QSvgRenderer(os.path.join(__path__[0], name + ".svg")).render(painter) + # recolor to text color + painter.setCompositionMode(QPainter.CompositionMode_SourceIn) + painter.fillRect(i.rect(), color) + painter.end() + # let style alter the drawing based on mode, and create QPixmap + pixmap = QApplication.style().generatedIconPixmap(mode, QPixmap.fromImage(i), QStyleOption()) + _pixmaps[key] = pixmap + return pixmap + + +class Engine(QIconEngineV2): + """Engine to provide renderings of SVG icons in the default text color.""" + def __init__(self, name): + super(Engine, self).__init__() + self._name = name + + def pixmap(self, size, mode, state): + return pixmap(self._name, size, mode, state) + + def paint(self, painter, rect, mode, state): + p = self.pixmap(rect.size(), mode, state) + painter.drawPixmap(rect, p) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/Makefile frescobaldi-2.0.0/frescobaldi_app/symbols/Makefile --- frescobaldi-1.2.0/frescobaldi_app/symbols/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/Makefile 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,41 @@ +# Makefile + +# Which LilyPond executable to use +LILYPOND=~/lilypond_bin/2.14.0-1/bin/lilypond + +# Make .svg files from .ly files +lys = $(wildcard *.ly) +svgs = $(patsubst %.ly,%.svg,$(lys)) + +all: $(svgs) + +$(svgs): %.svg: %.ly + $(LILYPOND) -dbackend=svg -ddelete-intermediate-files $< + +# Make some lilypond images also depend on the files they include +$(patsubst %.ly,%.svg,$(wildcard arpeggio_*.ly)): arpeggio_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard articulation_*.ly)): articulation_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard bar_*.ly)): bar_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard breathe_*.ly)): breathe_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard clef_*.ly)): clef_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard dynamic_*.ly)): dynamic_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard glissando_*.ly)): glissando_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard note_*.ly)): note_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard spanner_*.ly)): spanner_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard system_start_*.ly)): system_start_defaults.ily +$(patsubst %.ly,%.svg,$(wildcard time_*.ly)): time_defaults.ily + +# Other dependencies +arpeggio_defaults.ily: icon_defaults.ily +articulation_defaults.ily: icon_defaults.ily +bar_defaults.ily: icon_defaults.ily +breathe_defaults.ily: icon_defaults.ily +clef_defaults.ily: icon_defaults.ily +dynamic_defaults.ily: icon_defaults.ily +glissando_defaults.ily: icon_defaults.ily +note_defaults.ily: icon_defaults.ily +spanner_defaults.ily: icon_defaults.ily +system_start_defaults.ily: icon_defaults.ily +time_defaults.ily: icon_defaults.ily + +.PHONY: all diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_16d.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_16d.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_16d.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_16d.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ +\version "2.14.0" +\include "note_defaults.ily" +\paper { + left-margin = #0.5 + top-markup-spacing #'basic-distance = #0 + +} +\markup \line { + \fontsize #-1 + \note #"16." #.98 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_16d.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_16d.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_16d.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_16d.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,8 @@ + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_16.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_16.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_16.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_16.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,11 @@ +\version "2.14.0" +\include "note_defaults.ily" +\paper { + left-margin = #0.5 + top-markup-spacing #'basic-distance = #0 + +} +\markup \line { + \fontsize #-1 + \note #"16" #.98 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_16.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_16.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_16.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_16.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_1d.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_1d.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_1d.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_1d.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,8 @@ +\version "2.14.0" +\include "note_defaults.ily" +\paper { + left-margin = #0.5 +} +\markup \line { + \note #"1." #.5 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_1d.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_1d.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_1d.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_1d.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_1.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_1.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_1.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_1.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,8 @@ +\version "2.14.0" +\include "note_defaults.ily" +\paper { + left-margin = #0.5 +} +\markup \line { + \note #"1" #.5 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_1.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_1.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_1.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_1.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_2d.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_2d.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_2d.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_2d.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "note_defaults.ily" +\markup \line { + \note #"2." #.8 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_2d.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_2d.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_2d.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_2d.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_2.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_2.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_2.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_2.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "note_defaults.ily" +\markup \line { + \note #"2" #.8 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_2.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_2.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_2.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_2.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_4d.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_4d.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_4d.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_4d.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "note_defaults.ily" +\markup \line { + \note #"4." #.8 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_4d.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_4d.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_4d.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_4d.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_4.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_4.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_4.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_4.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ +\version "2.14.0" +\include "note_defaults.ily" +\markup \line { + \note #"4" #.8 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_4.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_4.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_4.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_4.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_8d.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_8d.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_8d.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_8d.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,8 @@ +\version "2.14.0" +\include "note_defaults.ily" +\paper { + left-margin = #0.5 +} +\markup \line { + \note #"8." #.8 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_8d.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_8d.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_8d.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_8d.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_8.ly frescobaldi-2.0.0/frescobaldi_app/symbols/note_8.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_8.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_8.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,8 @@ +\version "2.14.0" +\include "note_defaults.ily" +\paper { + left-margin = #0.5 +} +\markup \line { + \note #"8" #.8 +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_8.svg frescobaldi-2.0.0/frescobaldi_app/symbols/note_8.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_8.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_8.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/note_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/note_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/note_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/note_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,13 @@ +\version "2.14.0" +\include "icon_defaults.ily" + +\paper { + paper-height = 16\pt + paper-width = 16\pt + left-margin = 1 + top-markup-spacing = #' + ((basic-distance . 2.6) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0)) +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_beam16.ly frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_beam16.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_beam16.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_beam16.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,7 @@ +\version "2.14.0" +\include "spanner_defaults.ily" + +{ + \override NoteHead #'extra-spacing-width = #'(0 . 1.3) + f'16[ g'] +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_beam16.svg frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_beam16.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_beam16.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_beam16.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,9 @@ + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,23 @@ +\version "2.14.0" + +\include "icon_defaults.ily" + +\paper { + paper-width = 22\pt + paper-height = 22\pt + top-system-spacing = # + '((basic-distance . 2.2) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0)) +} + +\layout { + \context { + \Staff + \remove "Clef_engraver" + \remove "Time_signature_engraver" + \override StaffSymbol #'width = #4.4 + \override StaffSymbol #'transparent = ##t + } +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_phrasingslur.ly frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_phrasingslur.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_phrasingslur.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_phrasingslur.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,19 @@ +\version "2.14.0" + +\include "spanner_defaults.ily" + +\layout { + \context { + \Voice + \override Stem #'length = #0 + \override Stem #'direction = #DOWN + \override Stem #'transparent = ##t + \override Tie #'minimum-length = #4.4 + \override Tie #'extra-offset = #'(0 . -.2) + \override Tie #'thickness = #2 + \override NoteHead #'X-extent = #'(0 . 0) + \override NoteHead #'stencil = #empty-stencil + } +} + +{ a'~ a' } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_phrasingslur.svg frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_phrasingslur.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_phrasingslur.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_phrasingslur.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_slur.ly frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_slur.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_slur.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_slur.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,21 @@ +\version "2.14.0" + +\include "spanner_defaults.ily" +\paper { + left-margin = 2\pt +} +\layout { + \context { + \Voice + \override Stem #'length = #0 + \override Stem #'direction = #DOWN + \override Stem #'transparent = ##t + \override Tie #'minimum-length = #3.6 + \override Tie #'extra-offset = #'(0 . -.2) + \override Tie #'thickness = #2 + \override NoteHead #'X-extent = #'(0 . 0) + \override NoteHead #'stencil = #empty-stencil + } +} + +{ a'~ a' } diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_slur.svg frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_slur.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_slur.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_slur.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_trill.ly frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_trill.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_trill.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_trill.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,20 @@ +\version "2.14.0" +\include "spanner_defaults.ily" + +\paper { + top-markup-spacing = # + '((basic-distance . 3) + (minimum-distance . 0) + (padding . 0) + (stretchability . 0)) +} + +\markup { + \fontsize #0 + \translate #'(1.3 . 0) + \concat { + \musicglyph #"scripts.trill" + \musicglyph #"scripts.trill_element" + \musicglyph #"scripts.trill_element" + } +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_trill.svg frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_trill.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/spanner_trill.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/spanner_trill.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_brace.ly frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_brace.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_brace.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_brace.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "system_start_defaults.ily" +\new GrandStaff \music diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_brace.svg frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_brace.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_brace.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_brace.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_bracket.ly frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_bracket.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_bracket.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_bracket.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,3 @@ +\version "2.14.0" +\include "system_start_defaults.ily" +\new StaffGroup \music diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_bracket.svg frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_bracket.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_bracket.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_bracket.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,36 @@ +\version "2.14.0" +#(set-global-staff-size 10) +\include "icon_defaults.ily" +\paper { + paper-height = 40\pt + paper-width = 40\pt + top-system-spacing = #'( + (basic-distance . 3.9) + (minimum-distance . 3.9) + (padding . 0) + (stretchability . 0)) +} + +\layout { + indent = 7.5\pt + system-count = #1 + \context { + \Staff + \remove "Clef_engraver" + \remove "Time_signature_engraver" + \override StaffSymbol #'width = #14 + } + \context { + \Score + \override StaffGrouper #'staff-staff-spacing = #'( + (basic-distance . 8) + (minimum-distance . 8) + (padding . 0) + (stretchability . 8)) + } +} + +music = << + \new Staff s4 + \new Staff s4 +>> diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_square.ly frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_square.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_square.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_square.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,9 @@ +\version "2.14.0" +\include "system_start_defaults.ily" +\layout { + \context { + \StaffGroup + systemStartDelimiter = #'SystemStartSquare + } +} +\new StaffGroup \music diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_square.svg frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_square.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/system_start_square.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/system_start_square.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/time_c22.ly frescobaldi-2.0.0/frescobaldi_app/symbols/time_c22.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/time_c22.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/time_c22.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "time_defaults.ily" +\markup \fill-line { + \musicglyph #"timesig.C22" +} + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/time_c22.svg frescobaldi-2.0.0/frescobaldi_app/symbols/time_c22.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/time_c22.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/time_c22.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/time_c44.ly frescobaldi-2.0.0/frescobaldi_app/symbols/time_c44.ly --- frescobaldi-1.2.0/frescobaldi_app/symbols/time_c44.ly 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/time_c44.ly 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +\version "2.14.0" +\include "time_defaults.ily" +\markup \fill-line { + \musicglyph #"timesig.C44" +} + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/time_c44.svg frescobaldi-2.0.0/frescobaldi_app/symbols/time_c44.svg --- frescobaldi-1.2.0/frescobaldi_app/symbols/time_c44.svg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/time_c44.svg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5 @@ + + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/symbols/time_defaults.ily frescobaldi-2.0.0/frescobaldi_app/symbols/time_defaults.ily --- frescobaldi-1.2.0/frescobaldi_app/symbols/time_defaults.ily 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/symbols/time_defaults.ily 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,12 @@ +\version "2.14.0" +\include "icon_defaults.ily" + +\paper { + paper-height = 16\pt + paper-width = 16\pt + top-markup-spacing = #' + ((minimum-distance . 0) + (basic-distance . 1.6) + (padding . 0) + (stretchability . 0)) +} diff -Nru frescobaldi-1.2.0/frescobaldi_app/tabbar.py frescobaldi-2.0.0/frescobaldi_app/tabbar.py --- frescobaldi-1.2.0/frescobaldi_app/tabbar.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/tabbar.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,155 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +The tab bar with the documents. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt, QUrl, pyqtSignal +from PyQt4.QtGui import QMenu, QTabBar + +import app +import icons +import document +import documentcontextmenu +import jobmanager +import util + + +class TabBar(QTabBar): + """The tabbar above the editor window.""" + + currentDocumentChanged = pyqtSignal(document.Document) + + def __init__(self, parent=None): + super(TabBar, self).__init__(parent) + + self.setFocusPolicy(Qt.NoFocus) + self.setTabsClosable(True) # TODO: make configurable + self.setMovable(True) # TODO: make configurable + self.setExpanding(False) + + mainwin = self.window() + self.docs = [] + for doc in app.documents: + self.addDocument(doc) + if doc is mainwin.currentDocument(): + self.setCurrentDocument(doc) + + app.documentCreated.connect(self.addDocument) + app.documentClosed.connect(self.removeDocument) + app.documentUrlChanged.connect(self.setDocumentStatus) + app.documentModificationChanged.connect(self.setDocumentStatus) + app.jobStarted.connect(self.setDocumentStatus) + app.jobFinished.connect(self.setDocumentStatus) + mainwin.currentDocumentChanged.connect(self.setCurrentDocument) + self.currentChanged.connect(self.slotCurrentChanged) + self.tabMoved.connect(self.slotTabMoved) + self.tabCloseRequested.connect(self.slotTabCloseRequested) + + def documents(self): + return list(self.docs) + + def addDocument(self, doc): + if doc not in self.docs: + self.docs.append(doc) + self.blockSignals(True) + self.addTab('') + self.blockSignals(False) + self.setDocumentStatus(doc) + + def removeDocument(self, doc): + if doc in self.docs: + index = self.docs.index(doc) + self.docs.remove(doc) + self.blockSignals(True) + self.removeTab(index) + self.blockSignals(False) + + def setDocumentStatus(self, doc): + if doc in self.docs: + index = self.docs.index(doc) + self.setTabText(index, doc.documentName()) + if doc.url().toLocalFile(): + tooltip = util.homify(doc.url().toLocalFile()) + elif not doc.url().isEmpty(): + tooltip = doc.url().toString(QUrl.RemoveUserInfo) + else: + tooltip = None + self.setTabToolTip(index, tooltip) + # icon + if jobmanager.isRunning(doc): + icon = 'lilypond-run' + elif doc.isModified(): + icon = 'document-save' + else: + icon = 'text-plain' + self.setTabIcon(index, icons.get(icon)) + + def setCurrentDocument(self, doc): + """ Raise the tab belonging to this document.""" + if doc in self.docs: + index = self.docs.index(doc) + self.blockSignals(True) + self.setCurrentIndex(index) + self.blockSignals(False) + + def slotCurrentChanged(self, index): + """ Called when the user clicks a tab. """ + self.currentDocumentChanged.emit(self.docs[index]) + + def slotTabCloseRequested(self, index): + """ Called when the user clicks the close button. """ + self.window().closeDocument(self.docs[index]) + + def slotTabMoved(self, index_from, index_to): + """ Called when the user moved a tab. """ + doc = self.docs.pop(index_from) + self.docs.insert(index_to, doc) + + def nextDocument(self): + """ Switches to the next document. """ + index = self.currentIndex() + 1 + if index == self.count(): + index = 0 + self.setCurrentIndex(index) + + def previousDocument(self): + index = self.currentIndex() - 1 + if index < 0: + index = self.count() - 1 + self.setCurrentIndex(index) + + def contextMenuEvent(self, ev): + index = self.tabAt(ev.pos()) + if index >= 0: + self.contextMenu().exec_(self.docs[index], ev.globalPos()) + + def contextMenu(self): + try: + return self._contextMenu + except AttributeError: + import documentcontextmenu + self._contextMenu = documentcontextmenu.DocumentContextMenu( + self.window()) + return self._contextMenu + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/textformats.py frescobaldi-2.0.0/frescobaldi_app/textformats.py --- frescobaldi-1.2.0/frescobaldi_app/textformats.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/textformats.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,433 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Loading and defaults for the different textformats used for Syntax Highlighting. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings +from PyQt4.QtGui import QApplication, QColor, QFont, QPalette, QTextCharFormat, QTextFormat + +import app + + +# When textFormatData() is requested for the first time, it is loaded from the config +# When the settings are changed, it is cleared again so that it is reloaded when +# requested again. + + +def formatData(type): + """Returns a TextFormatData instance of type 'editor' or 'printer'.""" + if _currentData[type] is None: + _currentData[type] = TextFormatData(QSettings().value('{0}_scheme'.format(type), 'default')) + return _currentData[type] + +def _resetFormatData(): + global _currentData + _currentData = { + 'editor': None, + 'printer': None, + } + +app.settingsChanged.connect(_resetFormatData, -100) # before all others +_resetFormatData() + + +class TextFormatData(object): + """Encapsulates all settings in the Fonts & Colors page for a scheme.""" + def __init__(self, scheme): + """Loads the data from scheme.""" + self.font = None + self.baseColors = {} + self.defaultStyles = {} + self.allStyles = {} + self.load(scheme) + + def load(self, scheme): + s = QSettings() + s.beginGroup("fontscolors/" + scheme) + + # load font + self.font = QFont(s.value("fontfamily", "monospace")) + self.font.setPointSizeF(float(s.value("fontsize", 10.0))) + + # load base colors + s.beginGroup("basecolors") + for name in baseColors: + if s.contains(name): + self.baseColors[name] = QColor(s.value(name)) + else: + self.baseColors[name] = baseColorDefaults[name]() + s.endGroup() + + # load default styles + s.beginGroup("defaultstyles") + for name in defaultStyles: + self.defaultStyles[name] = f = QTextCharFormat(defaultStyleDefaults[name]) + s.beginGroup(name) + loadTextFormat(f, s) + s.endGroup() + s.endGroup() + + # load specific styles + s.beginGroup("allstyles") + for group, styles in allStyles: + self.allStyles[group]= {} + s.beginGroup(group) + for name in styles: + default = allStyleDefaults[group].get(name) + self.allStyles[group][name] = f = QTextCharFormat(default) if default else QTextCharFormat() + s.beginGroup(name) + loadTextFormat(f, s) + s.endGroup() + s.endGroup() + s.endGroup() + + def save(self, scheme): + s = QSettings() + s.beginGroup("fontscolors/" + scheme) + + # save font + s.setValue("fontfamily", self.font.family()) + s.setValue("fontsize", self.font.pointSizeF()) + + # save base colors + for name in baseColors: + s.setValue("basecolors/"+name, self.baseColors[name].name()) + + # save default styles + s.beginGroup("defaultstyles") + for name in defaultStyles: + s.beginGroup(name) + saveTextFormat(self.defaultStyles[name], s) + s.endGroup() + s.endGroup() + + # save all specific styles + s.beginGroup("allstyles") + for group, styles in allStyles: + s.beginGroup(group) + for name in styles: + s.beginGroup(name) + saveTextFormat(self.allStyles[group][name], s) + s.endGroup() + s.endGroup() + s.endGroup() + + def textFormat(self, group, name): + inherit = inherits[group].get(name) + f = QTextCharFormat(self.defaultStyles[inherit]) if inherit else QTextCharFormat() + f.merge(self.allStyles[group][name]) + return f + + def palette(self): + """Returns a basic palette with text, background, selection and selection background filled in.""" + p = QApplication.palette() + p.setColor(QPalette.Text, self.baseColors['text']) + p.setColor(QPalette.Base, self.baseColors['background']) + p.setColor(QPalette.HighlightedText, self.baseColors['selectiontext']) + p.setColor(QPalette.Highlight, self.baseColors['selectionbackground']) + return p + + +def saveTextFormat(fmt, settings): + if fmt.hasProperty(QTextFormat.FontWeight): + settings.setValue('bold', fmt.fontWeight() >= 70) + else: + settings.remove('bold') + if fmt.hasProperty(QTextFormat.FontItalic): + settings.setValue('italic', fmt.fontItalic()) + else: + settings.remove('italic') + if fmt.hasProperty(QTextFormat.TextUnderlineStyle): + settings.setValue('underline', fmt.fontUnderline()) + else: + settings.remove('underline') + if fmt.hasProperty(QTextFormat.ForegroundBrush): + settings.setValue('textColor', fmt.foreground().color().name()) + else: + settings.remove('textColor') + if fmt.hasProperty(QTextFormat.BackgroundBrush): + settings.setValue('backgroundColor', fmt.background().color().name()) + else: + settings.remove('backgroundColor') + if fmt.hasProperty(QTextFormat.TextUnderlineColor): + settings.setValue('underlineColor', fmt.underlineColor().name()) + else: + settings.remove('underlineColor') + +def loadTextFormat(fmt, settings): + if settings.contains('bold'): + fmt.setFontWeight(QFont.Bold if settings.value('bold') in (True, 'true') else QFont.Normal) + if settings.contains('italic'): + fmt.setFontItalic(settings.value('italic') in (True, 'true')) + if settings.contains('underline'): + fmt.setFontUnderline(settings.value('underline') in (True, 'true')) + if settings.contains('textColor'): + fmt.setForeground(QColor(settings.value('textColor'))) + if settings.contains('backgroundColor'): + fmt.setBackground(QColor(settings.value('backgroundColor'))) + if settings.contains('underlineColor'): + fmt.setUnderlineColor(QColor(settings.value('underlineColor'))) + + + +baseColors = ( + 'text', + 'background', + 'selectiontext', + 'selectionbackground', + 'current', + 'mark', + 'error', + 'search', + 'match', + 'paper', + 'musichighlight', +) + +baseColorDefaults = dict( + text = lambda: QApplication.palette().color(QPalette.Text), + background = lambda: QApplication.palette().color(QPalette.Base), + selectiontext = lambda: QApplication.palette().color(QPalette.HighlightedText), + selectionbackground = lambda: QApplication.palette().color(QPalette.Highlight), + current = lambda: QColor(255, 252, 149), + mark = lambda: QColor(192, 192, 255), + error = lambda: QColor(255, 192, 192), + search = lambda: QColor(192, 255, 192), + match = lambda: QColor(0, 192, 255), + paper = lambda: QColor(255, 238, 218), + musichighlight = lambda: QApplication.palette().color(QPalette.Highlight), +) + +defaultStyles = ( + 'keyword', + 'function', + 'variable', + 'value', + 'string', + 'escape', + 'comment', + 'error', +) + + +# decorator that executes the function and returns the result +_result = lambda f: f() + +@_result +def defaultStyleDefaults(): + keyword = QTextCharFormat() + keyword.setFontWeight(QFont.Bold) + + function = QTextCharFormat(keyword) + function.setForeground(QColor(0, 0, 192)) + + variable = QTextCharFormat() + variable.setForeground(QColor(0, 0, 255)) + + value = QTextCharFormat() + value.setForeground(QColor(128, 128, 0)) + + string = QTextCharFormat() + string.setForeground(QColor(192, 0, 0)) + + escape = QTextCharFormat() + escape.setForeground(QColor(0, 128, 128)) + + comment = QTextCharFormat() + comment.setForeground(QColor(128, 128, 128)) + comment.setFontItalic(True) + + error = QTextCharFormat() + error.setForeground(QColor(255, 0, 0)) + error.setFontUnderline(True) + + return locals() + + +@_result +def allStyleDefaults(): + + # LilyPond + lilypond = {} + + lilypond['duration'] = f = QTextCharFormat() + f.setForeground(QColor(0, 128, 128)) + + lilypond['markup'] = f = QTextCharFormat() + f.setForeground(QColor(0, 128, 0)) + f.setFontWeight(QFont.Normal) + + lilypond['lyricmode'] = f = QTextCharFormat() + f.setForeground(QColor(0, 96, 0)) + + lilypond['lyrictext'] = QTextCharFormat(f) + + lilypond['grob'] = f = QTextCharFormat() + f.setForeground(QColor(192, 0, 192)) + + lilypond['context'] = f = QTextCharFormat(f) + f.setFontWeight(QFont.Bold) + + lilypond['slur'] = QTextCharFormat(f) + + lilypond['articulation'] = f = QTextCharFormat() + f.setForeground(QColor(255, 128, 0)) + f.setFontWeight(QFont.Bold) + + lilypond['dynamic'] = QTextCharFormat(f) + + lilypond['fingering'] = f = QTextCharFormat() + f.setForeground(QColor(255, 128, 0)) + + lilypond['stringnumber'] = QTextCharFormat(f) + + # HTML + html = {} + + # Scheme + scheme = {} + + scheme['scheme'] = f = QTextCharFormat() + f.setForeground(QColor(160, 73, 0)) + + scheme['lilypond'] = f = QTextCharFormat(f) + f.setFontWeight(QFont.Bold) + + # LaTeX + latex = {} + + # DocBook + docbook = {} + + # Texinfo + texinfo = {} + + del f + return locals() + + +allStyles = ( + ('lilypond', ( + 'pitch', + 'octave', + 'duration', + 'fingering', + 'stringnumber', + 'slur', + 'dynamic', + 'articulation', + 'chord', + 'beam', + 'check', + 'repeat', + 'keyword', + 'command', + 'specifier', + 'usercommand', + 'markup', + 'lyricmode', + 'lyrictext', + 'delimiter', + 'context', + 'grob', + 'property', + 'variable', + 'uservariable', + 'value', + 'string', + 'stringescape', + 'comment', + 'error', + )), + ('html', ( + 'tag', + 'lilypondtag', + 'attribute', + 'value', + 'entityref', + 'string', + 'comment', + )), + ('scheme', ( + 'scheme', + 'number', + 'lilypond', + 'string', + 'comment', + )), + ('texinfo', ( + 'keyword', + 'block', + 'attribute', + 'escapechar', + 'verbatim', + 'comment', + )) +) + + +inherits = { + 'lilypond': { + 'keyword': 'keyword', + 'command': 'function', + 'markup': 'function', + 'lyricmode': 'function', + 'repeat': 'function', + 'specifier': 'variable', + 'usercommand': 'variable', + 'delimiter': 'keyword', + 'property': 'variable', + 'variable': 'variable', + 'value': 'value', + 'string': 'string', + 'stringescape': 'escape', + 'comment': 'comment', + 'error': 'error', + }, + 'html': { + 'tag': 'keyword', + 'lilypondtag': 'function', + 'attribute': 'variable', + 'value': 'value', + 'entityref': 'escape', + 'string': 'string', + 'comment': 'comment', + }, + 'scheme': { + 'number': 'value', + 'string': 'string', + 'comment': 'comment', + }, + 'texinfo': { + 'keyword': 'keyword', + 'block': 'function', + 'attribute': 'variable', + 'escapechar': 'escape', + 'verbatim': 'string', + 'comment': 'comment', + } + +} + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/tokeniter.py frescobaldi-2.0.0/frescobaldi_app/tokeniter.py --- frescobaldi-1.2.0/frescobaldi_app/tokeniter.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/tokeniter.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,482 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Use this module to get the parsed tokens of a document. + +The tokens are created by the syntax highlighter, see highlighter.py. +The core methods of this module are tokens() and state(). These access +the token information from the highlighter, and also run the highlighter +if it has not run yet. + +If you alter the document and directly after that need the new tokens, +use update(). + +""" + +from __future__ import unicode_literals + +import collections + +from PyQt4.QtGui import QTextBlock, QTextCursor + +import cursortools +import highlighter + + +def tokens(block): + """Returns the tokens for the given block as a (possibly empty) tuple.""" + try: + return highlighter.userData(block).tokens + except AttributeError: + highlighter.highlighter(block.document()).rehighlight() + try: + return highlighter.userData(block).tokens + except AttributeError: + return () + + +def state(blockOrCursor): + """Returns a thawn ly.lex.State() object at the beginning of the given QTextBlock. + + If the argument is a QTextCursor, uses the current block or the first block of its selection. + + """ + if isinstance(blockOrCursor, QTextCursor): + block = cursortools.block(blockOrCursor) + else: + block = blockOrCursor + if block.userState() == -1: + highlighter.highlighter(block.document()).rehighlight() + return highlighter.highlighter(block.document()).state(block) + + +def update(block): + """Retokenizes the given block, saving the tokens in the UserData.""" + highlighter.highlighter(block.document()).rehighlightBlock(block) + + +def cursor(block, token, start=0, end=None): + """Returns a QTextCursor for the given token in the given block. + + If start is given the cursor will start at position start in the token + (from the beginning of the token). Start defaults to 0. + If end is given, the cursor will end at that position in the token (from + the beginning of the token). End defaults to the length of the token. + + """ + if end is None: + end = len(token) + cursor = QTextCursor(block) + cursor.setPosition(block.position() + token.pos + start) + cursor.setPosition(block.position() + token.pos + end, QTextCursor.KeepAnchor) + return cursor + + +def find(text, tokens): + """Finds text in tokens. + + Consumes the tokens iterable until a token with text text is found. + Returns the found token or None. + + """ + if isinstance(tokens, (tuple, list)): + try: + i = tokens.index(text) + except ValueError: + return + return tokens[i] + for t in tokens: + if t == text: + return t + + +def index(cursor): + """Returns the index of the token at the cursor (right or overlapping). + + The index can range from 0 (if there are no tokens or the cursor is in the + first token) to the total count of tokens in the cursor's block (if the + cursor is at the very end of the block). + + """ + block = cursortools.block(cursor) + tokens_ = tokens(block) + if cursor.atBlockEnd(): + return len(tokens_) + pos = cursor.selectionStart() - block.position() + lo, hi = 0, len(tokens_) + while lo < hi: + mid = (lo + hi) // 2 + if pos < tokens_[mid].pos: + hi = mid + else: + lo = mid + 1 + return lo - 1 + + +Partition = collections.namedtuple('Partition', 'left middle right') + + +def partition(cursor): + """Returns a named three-tuple (left, middle, right). + + left is a tuple of tokens left to the cursor. + middle is the token that overlaps the cursor at both sides (or None). + right is a tuple of tokens right to the cursor. + + """ + block = cursortools.block(cursor) + t = tokens(block) + i = index(cursor) + if t: + if i < len(t) and t[i].pos < cursor.selectionStart() - block.position(): + return Partition(t[:i], t[i], t[i+1:]) + return Partition(t[:i], None, t[i:]) + + +def allTokens(document): + """Yields all tokens of a document.""" + return (token for block in cursortools.allBlocks(document) for token in tokens(block)) + + +def fromCursor(cursor, state=None, first=1): + """Yields block, tokens starting at the cursor position. + + If state is given, it should be the state at the start of the block + the selection begins. (Use state(cursor) to get that.) + + If first is -1: starts with the token that touches the cursor at the right + If first is 0: starts with the token that overlaps the cursor + If first is 1 (default): starts with the first token to the right. + + """ + block = cursortools.block(cursor) + pos = cursor.selectionStart() - block.position() + if state: + def token_source(block): + for t in tokens(block): + state.follow(t) + yield t + else: + def token_source(block): + return iter(tokens(block)) + if first == -1: + pred = lambda t: t.end < pos + elif first == 0: + pred = lambda t: t.end <= pos + else: + pred = lambda t: t.pos < pos + def source_start(block): + source = token_source(block) + for t in source: + if not pred(t): + yield t + for t in source: + yield t + source = source_start + while block.isValid(): + yield block, source(block) + block = block.next() + source = token_source + + +def selection(cursor, state=None, partial=True): + """Yields block, selected_tokens for every block that has selected tokens. + + Usage: + + for block, tokens in selection(cursor): + for token in tokens: + do_something() ... + + If state is given, it should be the state at the start of the block + the selection begins. (Use state(cursor) to get that.) + + If partial is True (the default), also tokens that are partially inside + the selection are yielded. + + """ + block = cursor.document().findBlock(cursor.selectionStart()) + endblock = cursor.document().findBlock(cursor.selectionEnd()) + pos = cursor.selectionStart() - block.position() + endpos = cursor.selectionEnd() - endblock.position() + + if state: + follow = state.follow + def follower(source): + for t in source: + follow(t) + yield t + else: + follow = lambda t: None + follower = lambda i: i + if partial: + start_pred = lambda t: t.end <= pos + end_pred = lambda t: t.pos >= endpos + else: + start_pred = lambda t: t.pos < pos + end_pred = lambda t: t.end > endpos + def token_source(block): + return iter(tokens(block)) + def source_start(block): + source = iter(tokens(block)) + for t in source: + if start_pred(t): + follow(t) + continue + else: + yield t + for t in source: + yield t + def source_end(source): + for t in source: + if end_pred(t): + break + yield t + source = source_start + while block != endblock: + yield block, follower(source(block)) + block = block.next() + source = token_source + yield block, follower(source_end(source(block))) + + +def document(cursor, state=None): + """Yields block, tokens for all blocks in the document. + + Usage: + + for block, tokens in document(cursor): + for token in tokens: + do_something() ... + + If state is given, it should be the state at the start of the document. + + """ + if state: + def gen(source): + for t in source: + state.follow(t) + yield t + else: + gen = iter + for block in cursortools.allBlocks(cursor.document()): + yield block, gen(tokens(block)) + + +class Source(object): + """Helper iterator. + + Iterates over the (block, tokens) tuples such as yielded by selection() + and fromCursor(). Stores the current block in the block attribute and the + tokens (which also should be a generator) in the tokens attribute. + + Iterating over the source object itself just yields the tokens, while the + block attribute contains the current block. + + You can also iterate over the tokens attribute, which will yield the + remaining tokens of the current block and then stop. + + Use the fromCursor() and selection() class methods with the same arguments + as the corresponding global functions to create a source iterator. + + So this: + + import tokeniter + s = tokeniter.Source(tokeniter.selection(cursor)) + + is equivalent to: + + import tokeniter + s = tokeniter.Source.selection(cursor) + + And then you can do: + + for token in s: + ... # do something with every token + ... + for token in s.tokens: + ... # do something with the remaining tokens on the line + + """ + def __init__(self, gen, state=None): + """Initializes ourselves with a generator returning (block, tokens).""" + self.state = state + for self.block, self.tokens in gen: + break + def g(): + for t in self.tokens: + yield t + for self.block, self.tokens in gen: + for t in self.tokens: + yield t + self.gen = g() + + def __iter__(self): + return self.gen + + def __next__(self): + return self.gen.next() + + next = __next__ + + def cursor(self, token, start=0, end=None): + """Returns a QTextCursor for the token in the current block. + + See the global cursor() function for more information. + + """ + return cursor(self.block, token, start, end) + + def position(self, token): + """Returns the position of the token in the current block.""" + return self.block.position() + token.pos + + def consume(self, iterable, position): + """Consumes iterable (supposed to be reading from us) until position. + + Returns the last token if that overlaps position. + + """ + if self.block.position() < position: + block = self.block.document().findBlock(position) + pos = position - block.position() + for t in iterable: + if self.block >= block: + if self.block > block or t.end > pos: + return t + elif t.end == pos: + return + + @classmethod + def fromCursor(cls, cursor, state=None, first=1): + """Initializes a source object with a fromCursor generator. + + If state is True, the state(cursor) module function is called and the + result is put in the state attribute. Otherwise state is just passed to + the global fromCursor() function. + See the documentation for the global fromCursor() function. + + """ + if state is True: + state = globals()['state'](cursor) + return cls(fromCursor(cursor, state, first), state) + + @classmethod + def selection(cls, cursor, state=None, partial=True): + """Initializes a source object with a fromCursor generator. + + If state is True, the state(cursor) module function is called and the + result is put in the state attribute. Otherwise state is just passed to + the global selection() function. + See the documentation for the global selection() function. + + """ + if state is True: + state = globals()['state'](cursor) + return cls(selection(cursor, state, partial), state) + + @classmethod + def document(cls, cursor, state=None): + """Initializes a source object with a document generator. + + If state is True, the state(cursor) module function is called and the + result is put in the state attribute. Otherwise state is just passed to + the global document() function. + See the documentation for the global document() function. + + """ + if state is True: + state = globals()['state'](cursor.document().firstBlock()) + return cls(document(cursor, state), state) + + +class Runner(object): + """Iterates back and forth over tokens. + + A Runner can stop anywhere and remembers its current token. + + """ + def __init__(self, block, atEnd=False): + """Positions the token iterator at the start of the given QTextBlock. + + If atEnd == True, the iterator is positioned past the end of the block. + + """ + self.block = block + self._tokens = tokens(block) + self._index = len(self._tokens) if atEnd else -1 + + def forward_line(self): + """Yields tokens in forward direction in the current block.""" + while self._index + 1 < len(self._tokens): + self._index += 1 + yield self._tokens[self._index] + + def forward(self): + """Yields tokens in forward direction across blocks.""" + while self.block.isValid(): + for t in self.forward_line(): + yield t + self.__init__(self.block.next()) + + def backward_line(self): + """Yields tokens in backward direction in the current block.""" + while self._index > 0: + self._index -= 1 + yield self._tokens[self._index] + + def backward(self): + """Yields tokens in backward direction across blocks.""" + while self.block.isValid(): + for t in self.backward_line(): + yield t + self.__init__(self.block.previous(), True) + + def atBlockStart(self): + """Returns True if the iterator is at the start of the current block.""" + return self._index <= 0 + + def atBlockEnd(self): + """Returns True if the iterator is at the end of the current block.""" + return self._index >= len(self._tokens) - 1 + + def token(self): + """Re-returns the last yielded token.""" + return self._tokens[self._index] + + def cursor(self, start=0, end=None): + """Returns a QTextCursor for the last token. + + If start is given the cursor will start at position start in the token + (from the beginning of the token). Start defaults to 0. + If end is given, the cursor will end at that position in the token (from + the beginning of the token). End defaults to the length of the token. + + """ + return cursor(self.block, self._tokens[self._index], start, end) + + def copy(self): + obj = object.__new__(self.__class__) + obj.block = self.block + obj._tokens = self._tokens + obj._index = self._index + return obj + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/toplevel.py frescobaldi-2.0.0/frescobaldi_app/toplevel.py --- frescobaldi-1.2.0/frescobaldi_app/toplevel.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/toplevel.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,31 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Importing this module makes all other modules and packages inside this +package available as toplevel modules and packages. +""" + +import os +import sys + +from . import __path__ as path +sys.path[0:0] = map(os.path.abspath, path) +del path[:], path + diff -Nru frescobaldi-1.2.0/frescobaldi_app/unicode_blocks.py frescobaldi-2.0.0/frescobaldi_app/unicode_blocks.py --- frescobaldi-1.2.0/frescobaldi_app/unicode_blocks.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/unicode_blocks.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,286 @@ +#! python + +""" +Unicode Block data, +http://www.unicode.org/Public/5.2.0/ucd/Blocks.txt + +The blocks() function returns a list of Block named tuples: (start, end, name). +The block() function returns the Block named tuple containing the given charcode, +if any. + +""" + +from __future__ import unicode_literals + +import collections + +__all__ = ['blocks', 'block'] + + +Block = collections.namedtuple('Block', 'start end name') + + +def blocks(): + """Returns a sorted list of Block tuples: (start, end, name).""" + global _blocks + try: + return _blocks + except NameError: + _blocks = [] + for line in block_data.splitlines(): + if line and not line.startswith('#'): + try: + range_, text = line.split(';', 1) + start, end = range_.split('..', 1) + _blocks.append(Block(int(start, 16), int(end, 16), text.strip())) + except ValueError: + pass + _blocks.sort() + return _blocks + + +def block(charcode): + """Returns the Block for the charcode, if any.""" + blocks_ = blocks() + lo, hi = 0, len(blocks_) + while lo < hi: + mid = (lo + hi) // 2 + if blocks_[mid].start > charcode: + hi = mid + elif blocks_[mid].end < charcode: + lo = mid + 1 + else: + return blocks_[mid] + + +# literal Blocks-5.2.0.txt +block_data = """\ +# Blocks-5.2.0.txt +# Date: 2009-05-19, 16:21:00 PDT [KW] +# +# Unicode Character Database +# Copyright (c) 1991-2009 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see http://www.unicode.org/reports/tr44/ +# +# Note: The casing of block names is not normative. +# For example, "Basic Latin" and "BASIC LATIN" are equivalent. +# +# Format: +# Start Code..End Code; Block Name + +# ================================================ + +# Note: When comparing block names, casing, whitespace, hyphens, +# and underbars are ignored. +# For example, "Latin Extended-A" and "latin extended a" are equivalent. +# For more information on the comparison of property values, +# see UAX #44: http://www.unicode.org/reports/tr44/ +# +# All code points not explicitly listed for Block +# have the value No_Block. + +# Property: Block +# +# @missing: 0000..10FFFF; No_Block + +0000..007F; Basic Latin +0080..00FF; Latin-1 Supplement +0100..017F; Latin Extended-A +0180..024F; Latin Extended-B +0250..02AF; IPA Extensions +02B0..02FF; Spacing Modifier Letters +0300..036F; Combining Diacritical Marks +0370..03FF; Greek and Coptic +0400..04FF; Cyrillic +0500..052F; Cyrillic Supplement +0530..058F; Armenian +0590..05FF; Hebrew +0600..06FF; Arabic +0700..074F; Syriac +0750..077F; Arabic Supplement +0780..07BF; Thaana +07C0..07FF; NKo +0800..083F; Samaritan +0900..097F; Devanagari +0980..09FF; Bengali +0A00..0A7F; Gurmukhi +0A80..0AFF; Gujarati +0B00..0B7F; Oriya +0B80..0BFF; Tamil +0C00..0C7F; Telugu +0C80..0CFF; Kannada +0D00..0D7F; Malayalam +0D80..0DFF; Sinhala +0E00..0E7F; Thai +0E80..0EFF; Lao +0F00..0FFF; Tibetan +1000..109F; Myanmar +10A0..10FF; Georgian +1100..11FF; Hangul Jamo +1200..137F; Ethiopic +1380..139F; Ethiopic Supplement +13A0..13FF; Cherokee +1400..167F; Unified Canadian Aboriginal Syllabics +1680..169F; Ogham +16A0..16FF; Runic +1700..171F; Tagalog +1720..173F; Hanunoo +1740..175F; Buhid +1760..177F; Tagbanwa +1780..17FF; Khmer +1800..18AF; Mongolian +18B0..18FF; Unified Canadian Aboriginal Syllabics Extended +1900..194F; Limbu +1950..197F; Tai Le +1980..19DF; New Tai Lue +19E0..19FF; Khmer Symbols +1A00..1A1F; Buginese +1A20..1AAF; Tai Tham +1B00..1B7F; Balinese +1B80..1BBF; Sundanese +1C00..1C4F; Lepcha +1C50..1C7F; Ol Chiki +1CD0..1CFF; Vedic Extensions +1D00..1D7F; Phonetic Extensions +1D80..1DBF; Phonetic Extensions Supplement +1DC0..1DFF; Combining Diacritical Marks Supplement +1E00..1EFF; Latin Extended Additional +1F00..1FFF; Greek Extended +2000..206F; General Punctuation +2070..209F; Superscripts and Subscripts +20A0..20CF; Currency Symbols +20D0..20FF; Combining Diacritical Marks for Symbols +2100..214F; Letterlike Symbols +2150..218F; Number Forms +2190..21FF; Arrows +2200..22FF; Mathematical Operators +2300..23FF; Miscellaneous Technical +2400..243F; Control Pictures +2440..245F; Optical Character Recognition +2460..24FF; Enclosed Alphanumerics +2500..257F; Box Drawing +2580..259F; Block Elements +25A0..25FF; Geometric Shapes +2600..26FF; Miscellaneous Symbols +2700..27BF; Dingbats +27C0..27EF; Miscellaneous Mathematical Symbols-A +27F0..27FF; Supplemental Arrows-A +2800..28FF; Braille Patterns +2900..297F; Supplemental Arrows-B +2980..29FF; Miscellaneous Mathematical Symbols-B +2A00..2AFF; Supplemental Mathematical Operators +2B00..2BFF; Miscellaneous Symbols and Arrows +2C00..2C5F; Glagolitic +2C60..2C7F; Latin Extended-C +2C80..2CFF; Coptic +2D00..2D2F; Georgian Supplement +2D30..2D7F; Tifinagh +2D80..2DDF; Ethiopic Extended +2DE0..2DFF; Cyrillic Extended-A +2E00..2E7F; Supplemental Punctuation +2E80..2EFF; CJK Radicals Supplement +2F00..2FDF; Kangxi Radicals +2FF0..2FFF; Ideographic Description Characters +3000..303F; CJK Symbols and Punctuation +3040..309F; Hiragana +30A0..30FF; Katakana +3100..312F; Bopomofo +3130..318F; Hangul Compatibility Jamo +3190..319F; Kanbun +31A0..31BF; Bopomofo Extended +31C0..31EF; CJK Strokes +31F0..31FF; Katakana Phonetic Extensions +3200..32FF; Enclosed CJK Letters and Months +3300..33FF; CJK Compatibility +3400..4DBF; CJK Unified Ideographs Extension A +4DC0..4DFF; Yijing Hexagram Symbols +4E00..9FFF; CJK Unified Ideographs +A000..A48F; Yi Syllables +A490..A4CF; Yi Radicals +A4D0..A4FF; Lisu +A500..A63F; Vai +A640..A69F; Cyrillic Extended-B +A6A0..A6FF; Bamum +A700..A71F; Modifier Tone Letters +A720..A7FF; Latin Extended-D +A800..A82F; Syloti Nagri +A830..A83F; Common Indic Number Forms +A840..A87F; Phags-pa +A880..A8DF; Saurashtra +A8E0..A8FF; Devanagari Extended +A900..A92F; Kayah Li +A930..A95F; Rejang +A960..A97F; Hangul Jamo Extended-A +A980..A9DF; Javanese +AA00..AA5F; Cham +AA60..AA7F; Myanmar Extended-A +AA80..AADF; Tai Viet +ABC0..ABFF; Meetei Mayek +AC00..D7AF; Hangul Syllables +D7B0..D7FF; Hangul Jamo Extended-B +D800..DB7F; High Surrogates +DB80..DBFF; High Private Use Surrogates +DC00..DFFF; Low Surrogates +E000..F8FF; Private Use Area +F900..FAFF; CJK Compatibility Ideographs +FB00..FB4F; Alphabetic Presentation Forms +FB50..FDFF; Arabic Presentation Forms-A +FE00..FE0F; Variation Selectors +FE10..FE1F; Vertical Forms +FE20..FE2F; Combining Half Marks +FE30..FE4F; CJK Compatibility Forms +FE50..FE6F; Small Form Variants +FE70..FEFF; Arabic Presentation Forms-B +FF00..FFEF; Halfwidth and Fullwidth Forms +FFF0..FFFF; Specials +10000..1007F; Linear B Syllabary +10080..100FF; Linear B Ideograms +10100..1013F; Aegean Numbers +10140..1018F; Ancient Greek Numbers +10190..101CF; Ancient Symbols +101D0..101FF; Phaistos Disc +10280..1029F; Lycian +102A0..102DF; Carian +10300..1032F; Old Italic +10330..1034F; Gothic +10380..1039F; Ugaritic +103A0..103DF; Old Persian +10400..1044F; Deseret +10450..1047F; Shavian +10480..104AF; Osmanya +10800..1083F; Cypriot Syllabary +10840..1085F; Imperial Aramaic +10900..1091F; Phoenician +10920..1093F; Lydian +10A00..10A5F; Kharoshthi +10A60..10A7F; Old South Arabian +10B00..10B3F; Avestan +10B40..10B5F; Inscriptional Parthian +10B60..10B7F; Inscriptional Pahlavi +10C00..10C4F; Old Turkic +10E60..10E7F; Rumi Numeral Symbols +11080..110CF; Kaithi +12000..123FF; Cuneiform +12400..1247F; Cuneiform Numbers and Punctuation +13000..1342F; Egyptian Hieroglyphs +1D000..1D0FF; Byzantine Musical Symbols +1D100..1D1FF; Musical Symbols +1D200..1D24F; Ancient Greek Musical Notation +1D300..1D35F; Tai Xuan Jing Symbols +1D360..1D37F; Counting Rod Numerals +1D400..1D7FF; Mathematical Alphanumeric Symbols +1F000..1F02F; Mahjong Tiles +1F030..1F09F; Domino Tiles +1F100..1F1FF; Enclosed Alphanumeric Supplement +1F200..1F2FF; Enclosed Ideographic Supplement +20000..2A6DF; CJK Unified Ideographs Extension B +2A700..2B73F; CJK Unified Ideographs Extension C +2F800..2FA1F; CJK Compatibility Ideographs Supplement +E0000..E007F; Tags +E0100..E01EF; Variation Selectors Supplement +F0000..FFFFF; Supplementary Private Use Area-A +100000..10FFFF; Supplementary Private Use Area-B + +# EOF +""" diff -Nru frescobaldi-1.2.0/frescobaldi_app/util.py frescobaldi-2.0.0/frescobaldi_app/util.py --- frescobaldi-1.2.0/frescobaldi_app/util.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/util.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,308 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Some utility functions. + +The functions that are directly Qt-related use camelCaps, +but the other utility functions use the python_convention. +""" + +from __future__ import unicode_literals + +import codecs +import contextlib +import glob +import itertools +import os +import re +import weakref + +from PyQt4.QtCore import QSettings, QSize, Qt +from PyQt4.QtGui import QApplication, QColor + +import info +import variables + + +def iswritable(path): + """Returns True if the path can be written to or created.""" + return ((os.path.exists(path) and os.access(path, os.W_OK)) + or os.access(os.path.dirname(path), os.W_OK)) + + +if os.name == 'nt': + def equal_paths(p1, p2): + """Returns True if the paths are equal (case and separator insensitive).""" + return p1.lower().replace('\\', '/') == p2.lower().replace('\\', '/') +else: + def equal_paths(p1, p2): + """Returns True if the paths are equal.""" + return p1 == p2 + + +def homify(path): + """Replaces the homedirectory (if present) in the path with a tilde (~).""" + homedir = os.path.expanduser('~') + if equal_paths(path[:len(homedir)+1], homedir + '/'): + path = "~" + path[len(homedir):] + return path + + +def files(basenames, extension = '.*'): + """Yields filenames with the given basenames matching the given extension.""" + def source(): + for name in basenames: + name = name.replace('[', '[[]').replace('?', '[?]').replace('*', '[*]') + yield glob.iglob(name + extension) + yield sorted(glob.iglob(name + '-*[0-9]' + extension), key=naturalsort) + return itertools.chain.from_iterable(source()) + + +def group_files(names, groups): + """Groups the given filenames by extension. + + names: an iterable (or list or tuple) yielding filenames. + groups: an iterable (or list or tuple) yielding strings. + + Each group is a string containing one or more extensions, without period, + separated by a space. If a filename has one of the extensions in the group, + the names is added to the list of file for that group. + An exclamation sign at the beginning of the string negates the match. + + Yields the same number of lists as there were group arguments. + + """ + allgroups = [] + for group in groups: + if group.startswith('!'): + pred = lambda e, ext=group[1:].split(): e not in ext + else: + pred = lambda e, ext=group.split(): e in ext + allgroups.append(([], pred)) + for name in names: + ext = os.path.splitext(name)[1][1:].lower() + for files, pred in allgroups: + if pred(ext): + files.append(name) + break + return (files for files, pred in allgroups) + + +@contextlib.contextmanager +def signalsBlocked(*objs): + """Blocks the signals of the given QObjects and then returns a contextmanager""" + blocks = [obj.blockSignals(True) for obj in objs] + try: + yield + finally: + for obj, block in zip(objs, blocks): + obj.blockSignals(block) + + +@contextlib.contextmanager +def deleteLater(*qobjs): + """Performs code and calls deleteLater() when done on the specified QObjects.""" + try: + yield + finally: + for obj in qobjs: + obj.deleteLater() + + +def addAccelerators(actions, used=[]): + """Adds accelerators to the list of actions. + + Actions that have accelerators are skipped, the accelerators that they use + are not used. This can be used for e.g. menus that are created on the fly. + + used is a sequence of already used accelerators (in lower case). + + """ + todo = [] + used = list(used) + for a in actions: + if a.text(): + accel = getAccelerator(a.text()) + used.append(accel) if accel else todo.append(a) + for a in todo: + text = a.text() + for m in itertools.chain(re.finditer(r'\b\w', text), + re.finditer(r'\B\w', text)): + if m.group().lower() not in used: + used.append(m.group().lower()) + a.setText(text[:m.start()] + '&' + text[m.start():]) + break + + +def getAccelerator(text): + """Returns the accelerator (in lower case) contained in the text, if any. + + An accelerator is a character preceded by an ampersand &. + + """ + m = re.search(r'(? 0: + r = max(0, r - d) + g = max(0, g - d) + b = max(0, b - d) + return QColor(r, g, b) + + +def mixcolor(color1, color2, mix): + """Returns a QColor as if color1 is painted on color1 with alpha value mix (0.0 - 1.0).""" + r1, g1, b1 = color1.red(), color1.green(), color1.blue() + r2, g2, b2 = color2.red(), color2.green(), color2.blue() + r = r1 * mix + r2 * (1 - mix) + g = g1 * mix + g2 * (1 - mix) + b = b1 * mix + b2 * (1 - mix) + return QColor(r, g, b) + + +def naturalsort(text): + """Returns a key for the list.sort() method. + + Intended to sort strings in a human way, for e.g. version numbers. + + """ + return tuple(int(s) if s.isdigit() else s for s in re.split(r'(\d+)', text)) + + +def uniq(iterable): + """Returns an iterable, removing duplicates. The items should be hashable.""" + s, l = set(), 0 + for i in iterable: + s.add(i) + if len(s) > l: + yield i + l = len(s) + + +def decode(data, encoding=None): + """Returns the unicode text from the encoded, data. Prefer encoding if given. + + The text is also checked for the 'coding' document variable. + + """ + encodings = [encoding] if encoding else [] + for bom, encoding in ( + (codecs.BOM_UTF8, 'utf-8'), + (codecs.BOM_UTF16_LE, 'utf_16_le'), + (codecs.BOM_UTF16_BE, 'utf_16_be'), + ): + if data.startswith(bom): + encodings.append(encoding) + data = data[len(bom):] + break + else: + var_coding = variables.variables(data).get("coding") + if var_coding: + encodings.append(var_coding) + encodings.append('utf-8') + encodings.append('latin1') + + for encoding in encodings: + try: + return data.decode(encoding) + except (UnicodeError, LookupError): + continue + return data.decode('utf-8', 'replace') + + +def encode(text, default_encoding='utf-8'): + """Returns the bytes representing the text, encoded. + + Looks at the 'coding' variable to determine the encoding, + otherwise falls back to the given default encoding, defaulting to 'utf-8'. + + """ + encoding = variables.variables(text).get("coding") + if encoding: + try: + return text.encode(encoding) + except (LookupError, UnicodeError): + pass + return text.encode(default_encoding) + + +def saveDialogSize(dialog, key, default=QSize()): + """Makes the size of a QDialog persistent. + + Resizes a QDialog from the setting saved in QSettings().value(key), + defaulting to the optionally specified default size, and stores the + size of the dialog at its finished() signal. + + Call this method at the end of the dialog constructor, when its + widgets are instantiated. + + """ + size = QSettings().value(key, default) + if size: + dialog.resize(size) + dialogref = weakref.ref(dialog) + def save(): + dialog = dialogref() + if dialog: + QSettings().setValue(key, dialog.size()) + dialog.finished.connect(save) + + +@contextlib.contextmanager +def busyCursor(cursor=Qt.WaitCursor, processEvents=True): + """Performs the contained code using a busy cursor. + + The default cursor used is Qt.WaitCursor. + If processEvents is True (the default), QApplication.processEvents() + will be called once before the contained code is executed. + + """ + QApplication.setOverrideCursor(cursor) + processEvents and QApplication.processEvents() + try: + yield + finally: + QApplication.restoreOverrideCursor() + + +def tempdir(): + """Returns a temporary directory that is erased on app quit.""" + import tempfile + global _tempdir + try: + _tempdir + except NameError: + _tempdir = tempfile.mkdtemp(prefix = info.name +'-') + import atexit + @atexit.register + def remove(): + import shutil + shutil.rmtree(_tempdir, ignore_errors=True) + return tempfile.mkdtemp(dir=_tempdir) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/variables.py frescobaldi-2.0.0/frescobaldi_app/variables.py --- frescobaldi-1.2.0/frescobaldi_app/variables.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/variables.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,189 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Infrastructure to get local variables embedded in comments in a document. +""" + +from __future__ import unicode_literals + +import re + +from PyQt4.QtCore import QTimer + +import signals +import plugin + + +__all__ = ['get', 'update', 'manager', 'variables'] + + +_variable_re = re.compile(br'\s*?([a-z]+(?:-[a-z]+)*):[ \t]*(.*?);') + +_LINES = 5 # how many lines from top and bottom to scan for variables + + +def get(document, varname, default=None): + """Get a single value from the document. + + If a default is given and the type is bool or int, the value is converted to the same type. + If no value exists, the default is returned. + + """ + variables = manager(document).variables() + try: + return prepare(variables[varname], default) + except KeyError: + return default + + +def update(document, dictionary): + """Updates the given dictionary with values from the document, using present values as default.""" + for name, value in manager(document).variables().items(): + if name in dictionary: + dictionary[name] = prepare(value, dictionary[name]) + return dictionary + + +def manager(document): + """Returns a VariableManager for this document.""" + return VariableManager.instance(document) + + +def variables(text): + """Reads variables from the first and last _LINES lines of text. Also accepts byte strings.""" + lines = text.split(b'\n') + start, count = 0, len(lines) + d = {} + if count > 2 * _LINES: + d.update(m.group(1, 2) for n, m in positions(lines[:_LINES])) + start = count - _LINES + d.update(m.group(1, 2) for n, m in positions(lines[start:])) + return d + + +class VariableManager(plugin.DocumentPlugin): + """Caches variables in the document and monitors for changes. + + The changed() Signal is emitted some time after the list of variables has been changed. + It is recommended to not change the document itself in response to this signal. + + """ + changed = signals.Signal() # without argument + + def __init__(self, document): + self._updateTimer = QTimer(singleShot=True, timeout=self.slotTimeout) + self._variables = self.readVariables() + document.contentsChange.connect(self.slotContentsChange) + document.closed.connect(self._updateTimer.stop) # just to be sure + + def slotTimeout(self): + variables = self.readVariables() + if variables != self._variables: + self._variables = variables + self.changed() + + def slotContentsChange(self, position, removed, added): + """Called if the document changes.""" + if (self.document().findBlock(position).blockNumber() < _LINES or + self.document().findBlock(position + added).blockNumber() > self.document().blockCount() - _LINES): + self._updateTimer.start(500) + + def variables(self): + """Returns the document variables (cached) as a dictionary. This method is recommended.""" + if self._updateTimer.isActive(): + # an update is pending, force it + self._updateTimer.stop() + self.slotTimeout() + return self._variables + + def readVariables(self): + """Reads the variables from the document and returns a dictionary. Internal.""" + count = self.document().blockCount() + blocks = [self.document().firstBlock()] + if count > _LINES * 2: + blocks.append(self.document().findBlockByNumber(count - _LINES)) + count = _LINES + def lines(block): + for i in range(count): + yield block.text() + block = block.next() + variables = {} + for block in blocks: + variables.update(m.group(1, 2) for n, m in positions(lines(block))) + return variables + + +def positions(lines): + """Lines should be an iterable returning lines of text. + + Returns an iterable yielding tuples (lineNum, matchObj) for every variable found. + Every matchObj has group(1) pointing to the variable name and group(2) to the value. + + """ + commentstart = '' + interesting = False + for lineNum, text in enumerate(lines): + # first check the line start + start = 0 + if interesting: + # already parsing? then skip comment start tokens + m = re.match(br'\s*{0}'.format(re.escape(commentstart)), text) + if m: + start = m.end() + else: + # does the line have '-*-' ? + m = re.search(br'(\S*)\s*-\*-', text) + if m: + interesting = True + commentstart = m.group(1) + start = m.end() + # now parse the line + if interesting: + while True: + m = _variable_re.match(text, start) + if m: + yield lineNum, m + start = m.end() + else: + if start < len(text) and not text[start:].isspace(): + interesting = False + break + + +def prepare(value, default): + """Try to convert the value (which is a string) to the type of the default value. + + If (for int and bool) that fails, returns the default, otherwise returns the string unchanged. + + """ + if isinstance(default, bool): + if value.lower() in ('true', 'yes', 'on', 't', '1'): + return True + elif value.lower() in ('false', 'no', 'off', 'f', '0'): + return False + return default + elif isinstance(default, int): + try: + return int(value) + except ValueError: + return default + return value + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/viewhighlighter.py frescobaldi-2.0.0/frescobaldi_app/viewhighlighter.py --- frescobaldi-1.2.0/frescobaldi_app/viewhighlighter.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/viewhighlighter.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,87 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages highlighting of arbitrary things in a View, e.g. +the current line, marked lines, search results etc. +""" + +from __future__ import unicode_literals + +from PyQt4.QtGui import QColor, QTextCharFormat, QTextFormat + +import app +import plugin +import bookmarks +import textformats +import widgets.arbitraryhighlighter + + +def highlighter(view): + return ViewHighlighter.instance(view) + + +app.viewCreated.connect(highlighter) + + +class ViewHighlighter(widgets.arbitraryhighlighter.ArbitraryHighlighter, plugin.ViewPlugin): + def __init__(self, view): + super(ViewHighlighter, self).__init__(view) + self._cursorFormat = QTextCharFormat() + self._cursorFormat.setProperty(QTextFormat.FullWidthSelection, True) + app.settingsChanged.connect(self.readSettings) + self.readSettings() + bookmarks.bookmarks(view.document()).marksChanged.connect(self.updateMarkedLines) + self.updateMarkedLines() + view.cursorPositionChanged.connect(self.updateCursor) + view.focusChanged.connect(self.updateCursor) + + def updateMarkedLines(self): + """Called when something changes in the bookmarks.""" + for type, marks in bookmarks.bookmarks(self.view().document()).marks().items(): + self.highlight(type, marks, -1) + + def updateCursor(self): + """Called when the textCursor has moved. Highlights the current line.""" + # highlight current line + color = QColor(self._baseColors['current']) + color.setAlpha(200 if self.view().hasFocus() else 100) + self._cursorFormat.setBackground(color) + cursor = self.view().textCursor() + cursor.clearSelection() + self.highlight(self._cursorFormat, [cursor], 0) + + def readSettings(self): + data = textformats.formatData('editor') + self._baseColors = data.baseColors + self.updateCursor() + self.reload() + + def textFormat(self, name): + """(Internal) Returns a QTextCharFormat setup according to the preferences. + + For bookmarks and the current line, FullWidthSelection is automatically enabled. + + """ + f = QTextCharFormat() + f.setBackground(self._baseColors[name]) + if name in ('current', 'mark', 'error'): + f.setProperty(QTextFormat.FullWidthSelection, True) + return f + diff -Nru frescobaldi-1.2.0/frescobaldi_app/viewmanager.py frescobaldi-2.0.0/frescobaldi_app/viewmanager.py --- frescobaldi-1.2.0/frescobaldi_app/viewmanager.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/viewmanager.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,447 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +ViewManager is a QSplitter containing sub-splitters to display multiple +ViewSpaces. +ViewSpace is a QStackedWidget with a statusbar, capable of displaying one of +multiple views. +""" + +from __future__ import unicode_literals + +import contextlib +import weakref + +from PyQt4.QtCore import QEvent, Qt, pyqtSignal +from PyQt4.QtGui import ( + QAction, QHBoxLayout, QKeySequence, QLabel, QMenu, QPixmap, QProgressBar, + QSplitter, QStackedWidget, QVBoxLayout, QWidget) + +import actioncollection +import app +import icons +import view as view_ + + +class ViewStatusBar(QWidget): + def __init__(self, parent=None): + super(ViewStatusBar, self).__init__(parent) + + layout = QHBoxLayout() + layout.setContentsMargins(2, 1, 0, 1) + layout.setSpacing(4) + self.setLayout(layout) + self.pos = QLabel() + layout.addWidget(self.pos) + + self.state = QLabel() + self.state.setFixedSize(16, 16) + layout.addWidget(self.state) + + self.info = QLabel() + layout.addWidget(self.info, 1) + + self.installEventFilter(self) + self.translateUI() + app.languageChanged.connect(self.translateUI) + + def translateUI(self): + text = _("Line: {line}, Col: {column}").format(line=9999, column=99) + self.pos.setMinimumWidth(self.pos.fontMetrics().width(text)) + + def eventFilter(self, obj, ev): + if ev.type() == QEvent.MouseButtonPress: + if ev.button() == Qt.RightButton: + self.showContextMenu(ev.globalPos()) + else: + self.parent().activeView().setFocus() + return True + return False + + def showContextMenu(self, pos): + menu = QMenu(self) + menu.aboutToHide.connect(menu.deleteLater) + viewspace = self.parent() + manager = viewspace.manager() + + a = QAction(icons.get('view-split-top-bottom'), _("Split &Horizontally"), menu) + menu.addAction(a) + a.triggered.connect(lambda: manager.splitViewSpace(viewspace, Qt.Vertical)) + a = QAction(icons.get('view-split-left-right'), _("Split &Vertically"), menu) + menu.addAction(a) + a.triggered.connect(lambda: manager.splitViewSpace(viewspace, Qt.Horizontal)) + menu.addSeparator() + a = QAction(icons.get('view-close'), _("&Close View"), menu) + a.triggered.connect(lambda: manager.closeViewSpace(viewspace)) + a.setEnabled(manager.canCloseViewSpace()) + menu.addAction(a) + + menu.exec_(pos) + + +class ViewSpace(QWidget): + """A ViewSpace manages a stack of views, one of them is visible. + + The ViewSpace also has a statusbar, accessible in the status attribute. + The viewChanged(View) signal is emitted when the current view for this ViewSpace changes. + + Also, when a ViewSpace is created (e.g. when a window is created or split), the + app.viewSpaceCreated(space) signal is emitted. + + You can use the app.viewSpaceCreated() and the ViewSpace.viewChanged() signals to implement + things on a per ViewSpace basis, e.g. in the statusbar of a ViewSpace. + + """ + viewChanged = pyqtSignal(view_.View) + + def __init__(self, manager, parent=None): + super(ViewSpace, self).__init__(parent) + self.manager = weakref.ref(manager) + self.views = [] + + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + self.setLayout(layout) + self.stack = QStackedWidget(self) + layout.addWidget(self.stack) + self.status = ViewStatusBar(self) + self.status.setEnabled(False) + layout.addWidget(self.status) + app.languageChanged.connect(self.updateStatusBar) + app.viewSpaceCreated(self) + + def activeView(self): + if self.views: + return self.views[-1] + + def document(self): + """Returns the currently active document in this space. + + If there are no views, returns None. + + """ + if self.views: + return self.views[-1].document() + + def showDocument(self, doc): + """Shows the document, creating a View if necessary.""" + if doc is self.document(): + return + cur = self.activeView() + for view in self.views[:-1]: + if doc is view.document(): + self.views.remove(view) + break + else: + view = view_.View(doc) + self.stack.addWidget(view) + self.views.append(view) + if cur: + self.disconnectView(cur) + self.connectView(view) + self.stack.setCurrentWidget(view) + self.updateStatusBar() + + def removeDocument(self, doc): + active = doc is self.document() + if active: + self.disconnectView(self.activeView()) + for view in self.views: + if doc is view.document(): + self.views.remove(view) + view.deleteLater() + break + else: + return + if active and self.views: + self.connectView(self.views[-1]) + self.stack.setCurrentWidget(self.views[-1]) + self.updateStatusBar() + + def connectView(self, view): + view.cursorPositionChanged.connect(self.updateCursorPosition) + view.modificationChanged.connect(self.updateModificationState) + view.focusChanged.connect(self.slotViewFocusChanged) + view.document().urlChanged.connect(self.updateDocumentName) + self.viewChanged.emit(view) + + def disconnectView(self, view): + view.cursorPositionChanged.disconnect(self.updateCursorPosition) + view.modificationChanged.disconnect(self.updateModificationState) + view.focusChanged.disconnect(self.slotViewFocusChanged) + view.document().urlChanged.disconnect(self.updateDocumentName) + + def slotViewFocusChanged(self, focus): + if focus: + self.setActiveViewSpace() + + def setActiveViewSpace(self): + self.manager().setActiveViewSpace(self) + + def updateStatusBar(self): + """Update all info in the statusbar, e.g. on document change.""" + if self.views: + self.updateCursorPosition() + self.updateModificationState() + self.updateDocumentName() + + def updateCursorPosition(self): + cur = self.activeView().textCursor() + line = cur.blockNumber() + 1 + try: + column = cur.positionInBlock() + except AttributeError: # only in very recent PyQt4 + column = cur.position() - cur.block().position() + self.status.pos.setText(_("Line: {line}, Col: {column}").format( + line = line, column = column)) + + def updateModificationState(self): + modified = self.document().isModified() + pixmap = icons.get('document-save').pixmap(16) if modified else QPixmap() + self.status.state.setPixmap(pixmap) + + def updateDocumentName(self): + self.status.info.setText(self.document().documentName()) + + +class ViewManager(QSplitter): + + # This signal is always emitted on setCurrentDocument, + # even if the view is the same as before. + # use MainWindow.currentViewChanged() to be informed about + # real View changes. + viewChanged = pyqtSignal(view_.View) + + def __init__(self, parent=None): + super(ViewManager, self).__init__(parent) + self._viewSpaces = [] + + viewspace = ViewSpace(self) + viewspace.status.setEnabled(True) + self.addWidget(viewspace) + self._viewSpaces.append(viewspace) + + self.createActions() + app.documentClosed.connect(self.slotDocumentClosed) + + def setCurrentDocument(self, doc, findOpenView=False): + if doc is not self.activeViewSpace().document(): + done = False + if findOpenView: + for space in self._viewSpaces[-2::-1]: + if doc is space.document(): + done = True + self.setActiveViewSpace(space) + break + if not done: + self.activeViewSpace().showDocument(doc) + self.viewChanged.emit(self.activeViewSpace().activeView()) + # the active space now displays the requested document + # now also set this document in spaces that are empty + for space in self._viewSpaces[:-1]: + if not space.document(): + space.showDocument(doc) + self.focusActiveView() + + def focusActiveView(self): + self.activeViewSpace().activeView().setFocus() + + def setActiveViewSpace(self, space): + prev = self._viewSpaces[-1] + if space is prev: + return + self._viewSpaces.remove(space) + self._viewSpaces.append(space) + prev.status.setEnabled(False) + space.status.setEnabled(True) + self.viewChanged.emit(space.activeView()) + + def slotDocumentClosed(self, doc): + activeDocument = self.activeViewSpace().document() + for space in self._viewSpaces: + space.removeDocument(doc) + if doc is not activeDocument: + # setCurrentDocument will not be called, fill empty spaces with our + # document. + for space in self._viewSpaces[:-1]: + if not space.document(): + space.showDocument(activeDocument) + + def createActions(self): + self.actionCollection = ac = ViewActions() + # connections + ac.window_close_view.setEnabled(False) + ac.window_close_others.setEnabled(False) + ac.window_split_horizontal.triggered.connect(self.splitCurrentVertical) + ac.window_split_vertical.triggered.connect(self.splitCurrentHorizontal) + ac.window_close_view.triggered.connect(self.closeCurrent) + ac.window_close_others.triggered.connect(self.closeOthers) + ac.window_next_view.triggered.connect(self.nextViewSpace) + ac.window_previous_view.triggered.connect(self.previousViewSpace) + + def splitCurrentVertical(self): + self.splitViewSpace(self.activeViewSpace(), Qt.Vertical) + + def splitCurrentHorizontal(self): + self.splitViewSpace(self.activeViewSpace(), Qt.Horizontal) + + def closeCurrent(self): + self.closeViewSpace(self.activeViewSpace()) + + def closeOthers(self): + for space in self._viewSpaces[-2::-1]: + self.closeViewSpace(space) + + def nextViewSpace(self): + self.focusNextChild() + + def previousViewSpace(self): + self.focusPreviousChild() + + def activeViewSpace(self): + return self._viewSpaces[-1] + + def splitViewSpace(self, viewspace, orientation): + """Split the given view. + + If orientation == Qt.Horizontal, adds a new view to the right. + If orientation == Qt.Vertical, adds a new view to the bottom. + + """ + active = viewspace is self.activeViewSpace() + splitter = viewspace.parentWidget() + newspace = ViewSpace(self) + + if splitter.count() == 1: + splitter.setOrientation(orientation) + size = splitter.sizes()[0] + splitter.addWidget(newspace) + splitter.setSizes([size / 2, size / 2]) + elif splitter.orientation() == orientation: + index = splitter.indexOf(viewspace) + splitter.insertWidget(index + 1, newspace) + else: + index = splitter.indexOf(viewspace) + newsplitter = QSplitter() + newsplitter.setOrientation(orientation) + sizes = splitter.sizes() + splitter.insertWidget(index, newsplitter) + newsplitter.addWidget(viewspace) + splitter.setSizes(sizes) + size = newsplitter.sizes()[0] + newsplitter.addWidget(newspace) + newsplitter.setSizes([size / 2, size / 2]) + self._viewSpaces.insert(0, newspace) + newspace.showDocument(viewspace.document()) + if active: + newspace.activeView().setFocus() + self.actionCollection.window_close_view.setEnabled(self.canCloseViewSpace()) + self.actionCollection.window_close_others.setEnabled(self.canCloseViewSpace()) + + def closeViewSpace(self, viewspace): + """Closes the given view.""" + active = viewspace is self.activeViewSpace() + if active: + self.setActiveViewSpace(self._viewSpaces[-2]) + splitter = viewspace.parentWidget() + if splitter.count() > 2: + viewspace.setParent(None) + viewspace.deleteLater() + elif splitter is self: + if self.count() < 2: + return + # we contain only one other widget. + # if that is a QSplitter, add all its children to ourselves + # and copy the sizes and orientation. + other = self.widget(1 - self.indexOf(viewspace)) + viewspace.setParent(None) + viewspace.deleteLater() + if isinstance(other, QSplitter): + sizes = other.sizes() + self.setOrientation(other.orientation()) + while other.count(): + self.insertWidget(0, other.widget(other.count()-1)) + other.setParent(None) + other.deleteLater() + self.setSizes(sizes) + else: + # this splitter contains only one other widget. + # if that is a ViewSpace, just add it to the parent splitter. + # if it is a splitter, add all widgets to the parent splitter. + other = splitter.widget(1 - splitter.indexOf(viewspace)) + parent = splitter.parentWidget() + sizes = parent.sizes() + index = parent.indexOf(splitter) + + if isinstance(other, ViewSpace): + parent.insertWidget(index, other) + else: + #QSplitter + sizes[index:index+1] = other.sizes() + while other.count(): + parent.insertWidget(index, other.widget(other.count()-1)) + viewspace.setParent(None) + splitter.setParent(None) + viewspace.deleteLater() + splitter.deleteLater() + parent.setSizes(sizes) + self._viewSpaces.remove(viewspace) + self.actionCollection.window_close_view.setEnabled(self.canCloseViewSpace()) + self.actionCollection.window_close_others.setEnabled(self.canCloseViewSpace()) + + def canCloseViewSpace(self): + return bool(self.count() > 1) + + + + +class ViewActions(actioncollection.ActionCollection): + name = "view" + def createActions(self, parent=None): + self.window_split_horizontal = QAction(parent) + self.window_split_vertical = QAction(parent) + self.window_close_view = QAction(parent) + self.window_close_others = QAction(parent) + self.window_next_view = QAction(parent) + self.window_previous_view = QAction(parent) + + # icons + self.window_split_horizontal.setIcon(icons.get('view-split-top-bottom')) + self.window_split_vertical.setIcon(icons.get('view-split-left-right')) + self.window_close_view.setIcon(icons.get('view-close')) + self.window_next_view.setIcon(icons.get('go-next-view')) + self.window_previous_view.setIcon(icons.get('go-previous-view')) + + # shortcuts + self.window_close_view.setShortcut(Qt.CTRL + Qt.SHIFT + Qt.Key_W) + self.window_next_view.setShortcuts(QKeySequence.NextChild) + actioncollection.removeShortcut(self.window_next_view, "Ctrl+,") + self.window_previous_view.setShortcuts(QKeySequence.PreviousChild) + actioncollection.removeShortcut(self.window_previous_view, "Ctrl+.") + + def translateUI(self): + self.window_split_horizontal.setText(_("Split &Horizontally")) + self.window_split_vertical.setText(_("Split &Vertically")) + self.window_close_view.setText(_("&Close Current View")) + self.window_close_others.setText(_("Close &Other Views")) + self.window_next_view.setText(_("&Next View")) + self.window_previous_view.setText(_("&Previous View")) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/view.py frescobaldi-2.0.0/frescobaldi_app/view.py --- frescobaldi-1.2.0/frescobaldi_app/view.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/view.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,210 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +View is basically a QPlainTextEdit instance. + +It is used to edit a Document. The ViewManager (see viewmanager.py) +has support for showing multiple Views in a window. +""" + +from __future__ import unicode_literals + +import weakref + +from PyQt4.QtCore import QEvent, Qt, QTimer, pyqtSignal +from PyQt4.QtGui import ( + QApplication, QPainter, QPlainTextEdit, QTextCursor, QVBoxLayout) + +import app +import metainfo +import textformats +import cursortools +import variables + + +metainfo.define('autoindent', True) +metainfo.define('position', 0) + + +class View(QPlainTextEdit): + """View is the text editor widget a Document is displayed and edited with. + + It is basically a QPlainTextEdit with some extra features: + - it draws a grey cursor when out of focus + - it reads basic palette colors from the preferences + - it determines tab width from the document variables (defaulting to 8 characters) + - it stores the cursor position in the metainfo + - it runs the autoindenter when enabled (also checked via metainfo) + - it can display a widget in the bottom using showWidget and hideWidget. + + """ + focusChanged = pyqtSignal(bool) + + def __init__(self, document): + """Creates the View for the given document.""" + super(View, self).__init__() + self._paintcursor = False + self._widget = None + self.setDocument(document) + self.setLineWrapMode(QPlainTextEdit.NoWrap) + self.setCursorWidth(2) + # restore saved cursor position (defaulting to 0) + document.loaded.connect(self.restoreCursor) + document.loaded.connect(self.setTabWidth) + document.closed.connect(self.slotDocumentClosed) + variables.manager(document).changed.connect(self.setTabWidth) + self.restoreCursor() + app.settingsChanged.connect(self.readSettings) + self.readSettings() # will also call updateCursor + app.viewCreated(self) + + def showWidget(self, widget): + """Displays the widget in the bottom of the View.""" + widget.setParent(self) + self._widget = widget + self.updateWidgetPosition() + + def hideWidget(self, widget): + """Removes the widget from the bottom of the View.""" + widget.setParent(None) + self._widget = None + self.setViewportMargins(0, 0, 0, 0) + + def updateWidgetPosition(self): + """Moves and resizes the widget embedded with showWidget().""" + geom = self.viewport().geometry() + height = self._widget.heightForWidth(geom.width()) + if height == -1: + height = self._widget.sizeHint().height() + geom.translate(0, geom.height()) + geom.setHeight(height) + self._widget.setGeometry(geom) + self.setViewportMargins(0, 0, 0, height) + + def resizeEvent(self, ev): + """Reimplemented to re-position widget embedded with showWidget().""" + super(View, self).resizeEvent(ev) + if self._widget: + self.updateWidgetPosition() + + def event(self, ev): + # handle Tab and Backtab + if ev.type() == QEvent.KeyPress: + modifiers = int(ev.modifiers() & (Qt.SHIFT | Qt.CTRL | Qt.ALT | Qt.META)) + if ev.key() == Qt.Key_Tab and modifiers == 0: + import indent + indent.increaseIndent(self.textCursor()) + return True + elif ev.key() == Qt.Key_Backtab and modifiers & ~Qt.SHIFT == 0: + import indent + indent.decreaseIndent(self.textCursor()) + return True + return super(View, self).event(ev) + + def keyPressEvent(self, ev): + super(View, self).keyPressEvent(ev) + + if metainfo.info(self.document()).autoindent: + # run the indenter on Return or when the user entered a dedent token. + import indent + cursor = self.textCursor() + if ev.text() == '\r' or (ev.text() in ('}', '#', '>') and indent.indentable(cursor)): + with cursortools.editBlock(cursor, True): + indent.autoIndentBlock(cursor.block()) + # keep the cursor at the indent position on vertical move + cursor = self.textCursor() + pos = cursor.position() + cursor.setPosition(cursor.block().position()) # move horizontal + cursor.setPosition(pos) # move back to position + self.setTextCursor(cursor) + + def focusInEvent(self, ev): + super(View, self).focusInEvent(ev) + self.focusChanged.emit(True) + self._paintcursor = False + + def focusOutEvent(self, ev): + super(View, self).focusOutEvent(ev) + self.focusChanged.emit(False) + self.storeCursor() + self._paintcursor = True # display the textcursor even if we have no focus + + def dragEnterEvent(self, ev): + """Reimplemented to avoid showing the cursor when dropping URLs.""" + if ev.mimeData().hasUrls(): + ev.accept() + else: + super(View, self).dragEnterEvent(ev) + + def dragMoveEvent(self, ev): + """Reimplemented to avoid showing the cursor when dropping URLs.""" + if ev.mimeData().hasUrls(): + ev.accept() + else: + super(View, self).dragMoveEvent(ev) + + def dropEvent(self, ev): + """Called when something is dropped. + + Calls dropEvent() of MainWindow if URLs are dropped. + + """ + if ev.mimeData().hasUrls(): + self.window().dropEvent(ev) + else: + super(View, self).dropEvent(ev) + + def paintEvent(self, ev): + """Reimplemented to paint a cursor if we have no focus.""" + super(View, self).paintEvent(ev) + if self._paintcursor: + rect = self.cursorRect() + if rect.intersects(ev.rect()): + color = self.palette().text().color() + color.setAlpha(128) + QPainter(self.viewport()).fillRect(rect, color) + + def readSettings(self): + data = textformats.formatData('editor') + self.setFont(data.font) + self.setPalette(data.palette()) + self.setTabWidth() + + def slotDocumentClosed(self): + if self.hasFocus(): + self.storeCursor() + + def restoreCursor(self): + """Places the cursor on the position saved in metainfo.""" + cursor = QTextCursor(self.document()) + cursor.setPosition(metainfo.info(self.document()).position) + self.setTextCursor(cursor) + QTimer.singleShot(0, self.ensureCursorVisible) + + def storeCursor(self): + """Stores our cursor position in the metainfo.""" + metainfo.info(self.document()).position = self.textCursor().position() + + def setTabWidth(self): + """(Internal) Reads the tab-width variable and the font settings to set the tabStopWidth.""" + tabwidth = self.fontMetrics().width(" ") * variables.get(self.document(), 'tab-width', 8) + self.setTabStopWidth(tabwidth) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/arbitraryhighlighter.py frescobaldi-2.0.0/frescobaldi_app/widgets/arbitraryhighlighter.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/arbitraryhighlighter.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/arbitraryhighlighter.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,100 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Manages highlighting of arbitrary sections in a Q(Plain)TextEdit +using QTextEdit.ExtraSelections. +""" + +import weakref + +from PyQt4.QtCore import QObject, QTimer +from PyQt4.QtGui import QTextCharFormat, QTextEdit, QTextFormat + + +class ArbitraryHighlighter(QObject): + """Manages highlighting of arbitrary sections in a Q(Plain)TextEdit. + + Stores and highlights lists of QTextCursors on a per-format basis. + + """ + def __init__(self, edit): + """Initializes ourselves with a Q(Plain)TextEdit as parent.""" + super(ArbitraryHighlighter, self).__init__(edit) + self._selections = {} + + def highlight(self, format, cursors, priority=0, msec=0): + """Highlights the selection of an arbitrary list of QTextCursors. + + format can be a name for a predefined text format or a QTextCharFormat; + in the first case the textFormat() method should return a qtextformat to use. + priority determines the order of drawing, highlighting with higher priority + is drawn over highlighting with lower priority. + msec, if > 0, removes the highlighting after that many milliseconds. + + """ + fmt = format if isinstance(format, QTextFormat) else self.textFormat(format) + selections = [] + for cursor in cursors: + es = QTextEdit.ExtraSelection() + es.cursor = cursor + es.format = fmt + selections.append(es) + if msec: + def clear(selfref=weakref.ref(self)): + self = selfref() + if self: + self.clear(format) + timer = QTimer(timeout=clear, singleShot=True) + timer.start(msec) + self._selections[format] = (priority, selections, timer) + else: + self._selections[format] = (priority, selections) + self.update() + + def clear(self, format): + """Removes the highlighting for the given format (name or QTextCharFormat).""" + try: + del self._selections[format] + except KeyError: + pass + else: + self.update() + + def textFormat(self, name): + """Implement this to return a QTextCharFormat for the given name.""" + raise NotImplemented + + def update(self): + """(Internal) Called whenever the arbitrary highlighting changes.""" + textedit = self.parent() + if textedit: + textedit.setExtraSelections( + sum((s[1] for s in sorted(self._selections.values())), [])) + + def reload(self): + """Reloads the named formats in the highlighting (e.g. in case of settings change).""" + for format in self._selections: + if not isinstance(format, QTextFormat): + fmt = self.textFormat(format) + for es in self._selections[format][1]: + es.format = fmt + self.update() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/charmap.py frescobaldi-2.0.0/frescobaldi_app/widgets/charmap.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/charmap.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/charmap.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,265 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Provides a widget displaying characters from a font. + +When a character is clicked, a signal is emitted. + +""" + +from __future__ import unicode_literals + +import unicodedata + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + + +class CharMap(QWidget): + """A widget displaying a table of characters.""" + characterSelected = pyqtSignal(unicode) + characterClicked = pyqtSignal(unicode) + + def __init__(self, parent=None): + super(CharMap, self).__init__(parent) + self._showToolTips = True + self._showWhatsThis = True + self._selected = -1 + self._column_count = 32 + self._square = 24 + self._range = (0, 0) + self._font = QFont() + + def setRange(self, first, last): + self._range = (first, last) + self._selected = -1 + self.adjustSize() + self.update() + + def range(self): + return self._range + + def square(self): + """Returns the width of one item (determined by font size).""" + return self._square + + def select(self, charcode): + """Selects the specifed character (int or str).""" + if not isinstance(charcode, int): + charcode = ord(charcode) + if not self._range[0] <= charcode <= self._range[1]: + charcode = -1 + if self._selected != charcode: + self._selected = charcode + self.characterSelected.emit(unichr(charcode)) + self.update() + + def character(self): + """Returns the currently selected character, if any.""" + if self._selected != -1: + return unichr(self._selected) + + def setDisplayFont(self, font): + self._font.setFamily(font.family()) + self.update() + + def displayFont(self): + return QFont(self._font) + + def setDisplayFontSize(self, size): + self._font.setPointSize(size) + self._square = max(24, QFontMetrics(self._font).xHeight() * 3) + self.adjustSize() + self.update() + + def displayFontSize(self): + return self._font.pointSize() + + def setDisplayFontSizeF(self, size): + self._font.setPointSizeF(size) + self._square = max(24, QFontMetrics(self._font).xHeight() * 3) + self.adjustSize() + self.update() + + def displayFontSizeF(self): + return self._font.pointSizeF() + + def setColumnCount(self, count): + """Sets how many columns should be used.""" + count = max(1, count) + self._column_count = count + self.adjustSize() + self.update() + + def columnCount(self): + return self._column_count + + def sizeHint(self): + return self.sizeForColumnCount(self._column_count) + + def paintEvent(self, ev): + rect = ev.rect() + s = self._square + rows = range(rect.top() / s, rect.bottom() / s + 1) + cols = range(rect.left() / s, rect.right() / s + 1) + + painter = QPainter(self) + painter.setPen(QPen(self.palette().color(QPalette.Window))) + painter.setFont(self._font) + metrics = QFontMetrics(self._font) + + # draw characters on white tiles + tile = self.palette().color(QPalette.Base) + selected_tile = self.palette().color(QPalette.Highlight) + selected_tile.setAlpha(96) + selected_box = self.palette().color(QPalette.Highlight) + + text_pen = QPen(self.palette().text()) + disabled_pen = QPen(self.palette().color(QPalette.Disabled, QPalette.Text)) + selection_pen = QPen(selected_box) + for row in rows: + for col in cols: + char = row * self._column_count + col + self._range[0] + if char > self._range[1]: + break + printable = self.isprint(char) + painter.setClipRect(col * s, row * s, s, s) + if char == self._selected: + painter.fillRect(col * s + 1, row * s + 1, s - 2, s - 2, selected_tile) + painter.setPen(selection_pen) + painter.drawRect(col * s, row * s, s - 1, s - 1) + elif printable: + painter.fillRect(col * s + 1, row * s + 1, s - 2, s - 2, tile) + painter.setPen(text_pen if printable else disabled_pen) + t = unichr(char) + x = col * s + s / 2 - metrics.width(t) / 2 + y = row * s + 4 + metrics.ascent() + painter.drawText(x, y, t) + else: + continue + break + + def sizeForColumnCount(self, count): + """Returns the size the widget would have in a certain column count. + + This can be used in e.g. a resizable scroll area. + + """ + first, last = self._range + rows = ((last - first) // count) + 1 + return QSize(count, rows) * self._square + + def columnCountForWidth(self, width): + """Returns the number of columns that would fit into the given width.""" + return width // self._square + + def mousePressEvent(self, ev): + charcode = self.charcodeAt(ev.pos()) + if charcode != -1 and self.isprint(charcode): + self.select(charcode) + if ev.button() != Qt.RightButton: + self.characterClicked.emit(unichr(charcode)) + + def charcodeRect(self, charcode): + """Returns the rectangular box around the given charcode, if any.""" + if self._range[0] <= charcode <= self._range[1]: + row, col = divmod(charcode - self._range[0], self._column_count) + s = self._square + return QRect(col * s, row * s, s, s) + + def charcodeAt(self, position): + row = position.y() // self._square + col = position.x() // self._square + if col <= self._column_count: + charcode = self._range[0] + row * self._column_count + col + if charcode <= self._range[1]: + return charcode + return -1 + + def event(self, ev): + if ev.type() == QEvent.ToolTip: + if self._showToolTips: + c = self.charcodeAt(ev.pos()) + if c: + text = self.getToolTipText(c) + if text: + rect = self.charcodeRect(c) + QToolTip.showText(ev.globalPos(), text, self, rect) + ev.accept() + return True + elif ev.type() == QEvent.QueryWhatsThis: + if self._showWhatsThis: + ev.accept() + return True + elif ev.type() == QEvent.WhatsThis: + ev.accept() + if self._showWhatsThis: + c = self.charcodeAt(ev.pos()) + text = self.getWhatsThisText(c) if c else None + if text: + QWhatsThis.showText(ev.globalPos(), text, self) + else: + QWhatsThis.leaveWhatsThisMode() + return True + return super(CharMap, self).event(ev) + + def getToolTipText(self, charcode): + try: + return unicodedata.name(unichr(charcode)) + except ValueError: + pass + + def getWhatsThisText(self, charcode): + try: + name = unicodedata.name(unichr(charcode)) + except ValueError: + return + return whatsthis_html.format( + self._font.family(), unichr(charcode), name, charcode) + + def setShowToolTips(self, enabled): + self._showToolTips = bool(enabled) + + def showToolTips(self): + return self._showToolTips + + def setShowWhatsThis(self, enabled): + self._showWhatsThis = bool(enabled) + + def showWhatsThis(self): + return self._showWhatsThis + + def isprint(self, charcode): + """Returns True if the given charcode is printable.""" + return isprint(charcode) + + +def isprint(charcode): + """Returns True if the given charcode is printable.""" + return unicodedata.category(unichr(charcode)) not in ('Cc', 'Cn') + + +whatsthis_html = """\ + +

{1}

+

{2}

+

0x{3:04X}

+""" + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/colorbutton.py frescobaldi-2.0.0/frescobaldi_app/widgets/colorbutton.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/colorbutton.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/colorbutton.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,86 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A button to select a color. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt, pyqtSignal +from PyQt4.QtGui import ( + QColor, QColorDialog, QPainter, QPushButton, QStyle, QStyleOptionButton, + qDrawShadeRect) + + +class ColorButton(QPushButton): + """A PushButton displaying a color. + + When clicked, opens a color dialog to change the color. + + """ + colorChanged = pyqtSignal(QColor) + + def __init__(self, parent=None): + super(ColorButton, self).__init__(parent) + + self.setFixedSize(self.sizeHint()) + self._color = QColor() + self.clicked.connect(self.openDialog) + + def color(self): + """Returns the currently set color.""" + return self._color + + def setColor(self, color): + """Sets the current color. Maybe QColor() to indicate 'unset'.""" + if self._color != color: + self._color = color + self.update() + self.colorChanged.emit(color) + + def clear(self): + """Unsets the current color (setting it to QColor()).""" + self.setColor(QColor()) + + def openDialog(self): + """Called when clicked, opens a dialog to change the color.""" + color = self._color if self._color.isValid() else QColor(Qt.white) + color = QColorDialog.getColor(color, self) + if color.isValid(): + self.setColor(color) + + def paintEvent(self, ev): + """Reimplemented to display a colored rectangle.""" + QPushButton.paintEvent(self, ev) + if not self._color.isValid(): + return + style = self.style() + opt = QStyleOptionButton() + self.initStyleOption(opt) + r = style.subElementRect(QStyle.SE_PushButtonContents, opt, self) + shift = style.pixelMetric(QStyle.PM_ButtonMargin, opt, self) // 2 + r.adjust(shift, shift, -shift, -shift) + if self.isChecked() or self.isDown(): + dx = style.pixelMetric(QStyle.PM_ButtonShiftHorizontal, opt, self) + dy = style.pixelMetric(QStyle.PM_ButtonShiftVertical, opt, self) + r.translate(dx, dy) + p = QPainter(self) + qDrawShadeRect(p, r, self.palette(), True, 1, 0, self._color) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/completer.py frescobaldi-2.0.0/frescobaldi_app/widgets/completer.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/completer.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/completer.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,160 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Completer providing completions in a Q(Plain)TextEdit. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QEvent, QModelIndex, Qt +from PyQt4.QtGui import QCompleter, QKeySequence, QTextCursor + + +class Completer(QCompleter): + """A QCompleter providing completions in a Q(Plain)TextEdit. + + Use setWidget() to assign the completer to a text edit. + + You can reimplement completionCursor() to make your own, other than simple + string-based completions. + + Call showCompletionPopup() to force the popup to show. + + """ + autoComplete = True + autoCompleteLength = 2 + + def __init__(self, *args, **kwargs): + super(Completer, self).__init__(*args, **kwargs) + self.activated[QModelIndex].connect(self.insertCompletion) + + def eventFilter(self, obj, ev): + if ev.type() != QEvent.KeyPress: + return super(Completer, self).eventFilter(obj, ev) + # we can't test for self.popup() as that will recursively call + # eventFilter during instantiation. + popupVisible = obj != self.widget() + if popupVisible: + # a key was pressed while the popup is visible + if ev.key() in (Qt.Key_Return, Qt.Key_Enter): + # insert the highlighted completion + self.setCurrentRow(self.popup().currentIndex().row()) + self.insertCompletion(self.currentIndex()) + self.popup().hide() + return True + elif ev.key() == Qt.Key_Backspace: + # deliver event, hide popup if completionPrefix already none + self.widget().event(ev) + if self.completionPrefix(): + self.showCompletionPopup() + else: + self.popup().hide() + return True + elif self.isTextEvent(ev, True): + # deliver event and keep showing popup if necessary + self.widget().event(ev) + self.showCompletionPopup() + return True + elif ev.key() not in ( + Qt.Key_Up, Qt.Key_Down, Qt.Key_PageUp, Qt.Key_PageDown, + Qt.Key_Shift, Qt.Key_Control, Qt.Key_Alt, Qt.Key_Meta): + # hide on anything except navigation keys + self.popup().hide() + return super(Completer, self).eventFilter(obj, ev) + # a key was pressed while the popup is not visible + if self.autoComplete and self.isTextEvent(ev, False): + self.widget().event(ev) + self.showCompletionPopup(False) + return True + return False + + def isTextEvent(self, ev, visible): + """Called when a key is pressed. + + Should return True if the given KeyPress event 'ev' represents text that + makes sense for showing the completions popup. + + The 'visible' argument is True when the popup is currently visible. + + """ + return ev.text()[-1:] > " " and ev.key() != Qt.Key_Delete + + def textCursor(self): + """Returns the current text cursor of the TextEdit.""" + return self.widget().textCursor() + + def completionCursor(self): + """Should return a QTextCursor or None. + + If a QTextCursor is returned, its selection is used as the completion + prefix and its selectionStart() as the place to popup the popup. + + This method may also alter the completion model. + + """ + cursor = self.textCursor() + cursor.movePosition(QTextCursor.StartOfWord, QTextCursor.KeepAnchor) + return cursor + + def showCompletionPopup(self, forced=True): + """Shows the completion popup. + + Calls completionCursor() to get the place where to popup, and that + method may also alter the completion model. + + If forced is True (the default) the popup is always shown (if it + contains any entries). Otherwise it is only shown self.autoComplete is + True and the cursor returned by completionCursor() has at least + self.autoCompleteLength characters selected. + + """ + cursor = self.completionCursor() + if not cursor: + self.popup().hide() + return + text = cursor.selectedText() + if forced or (self.autoComplete and len(text) >= self.autoCompleteLength): + self.setCompletionPrefix(text) + # hide if there is only one completion left + if (not self.setCurrentRow(1) and self.setCurrentRow(0) + and self.currentCompletion() == text): + self.popup().hide() + return + self.setCurrentRow(0) + rect = self.widget().cursorRect(cursor) + rect.setWidth(self.popup().sizeHintForColumn(0) + + self.popup().verticalScrollBar().sizeHint().width()) + frameWidth = self.popup().frameWidth() + rect.translate(-frameWidth, frameWidth + 2) + self.complete(rect) + + def insertCompletion(self, index): + """Inserts the completion at the given index. + + The default implementation reads the model data under the Qt.EditRole, + and inserts that with the (already entered) completionPrefix removed. + + """ + text = self.completionModel().data(index, Qt.EditRole) + text = text[len(self.completionPrefix()):] + self.textCursor().insertText(text) + + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/dialog.py frescobaldi-2.0.0/frescobaldi_app/widgets/dialog.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/dialog.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/dialog.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,355 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A basic Dialog class. +""" + +from __future__ import unicode_literals + +import functools +import operator + +from PyQt4.QtCore import QRegExp, QSize, Qt +from PyQt4.QtGui import ( + QDialog, QDialogButtonBox, QGridLayout, QIcon, QLabel, QLineEdit, QPixmap, + QRegExpValidator, QStyle, QWidget) + +from . import Separator + + +__all__ = ['Dialog', 'TextDialog'] + + +standardicons = { + 'info': QStyle.SP_MessageBoxInformation, + 'warning': QStyle.SP_MessageBoxWarning, + 'critical': QStyle.SP_MessageBoxCritical, + 'question': QStyle.SP_MessageBoxQuestion, +} + +standardbuttons = { + 'ok': QDialogButtonBox.Ok, + 'open': QDialogButtonBox.Open, + 'save': QDialogButtonBox.Save, + 'cancel': QDialogButtonBox.Cancel, + 'close': QDialogButtonBox.Close, + 'discard': QDialogButtonBox.Discard, + 'apply': QDialogButtonBox.Apply, + 'reset': QDialogButtonBox.Reset, + 'restoredefaults': QDialogButtonBox.RestoreDefaults, + 'help': QDialogButtonBox.Help, + 'saveall': QDialogButtonBox.SaveAll, + 'yes': QDialogButtonBox.Yes, + 'yestoall': QDialogButtonBox.YesToAll, + 'no': QDialogButtonBox.No, + 'notoall': QDialogButtonBox.NoToAll, + 'abort': QDialogButtonBox.Abort, + 'retry': QDialogButtonBox.Retry, + 'ignore': QDialogButtonBox.Ignore, +} + + +class Dialog(QDialog): + """A Dialog with basic layout features: + + a main widget, + an icon or pixmap, + a separator, + buttons (provided by a QDialogButtonBox) + + """ + def __init__(self, + parent = None, + message = "", + title = "", + icon = None, + iconSize = QSize(64, 64), + pixmap = None, + separator = True, + buttonOrientation = Qt.Horizontal, + buttons = ('ok', 'cancel'), + help = None, + **kwargs): + """Initializes the dialog. + + parent = a parent widget or None. + + The following keyword arguments are recognized: + - message: the text to display in the message label + - title: the window title + - icon or pixmap: shown in the left area + - iconSize: size of the icon in the left (QSize, default: 64x64) + - separator: draw a separator line or not (default: True) + - buttonOrientation: Qt.Horizontal (default) or Qt.Vertical + - buttons: which buttons to use (default: Ok, Cancel) + - help: function to call when a help button is clicked. + + Other keyword arguments are passed to QDialog. + + """ + super(Dialog, self).__init__(parent, **kwargs) + self._icon = QIcon() + self._separatorWidget = Separator() + self._mainWidget = QWidget() + self._pixmap = QPixmap() + self._pixmapLabel = QLabel(self) + self._messageLabel = QLabel(self) + self._buttonBox = b = QDialogButtonBox(self) + b.accepted.connect(self.accept) + b.rejected.connect(self.reject) + layout = QGridLayout() + layout.setSpacing(10) + self.setLayout(layout) + + # handle keyword args + self._buttonOrientation = buttonOrientation + self._iconSize = iconSize + self._separator = separator + if title: + self.setWindowTitle(title) + self.setMessage(message) + if icon: + self.setIcon(icon) + elif pixmap: + self.setPixmap(pixmap) + b.helpRequested.connect(help or self.helpRequest) + self.setStandardButtons(buttons) + self.reLayout() + + def helpRequest(self): + """Called when a help button is clicked.""" + pass + + def setButtonOrientation(self, orientation): + """Sets the button orientation. + + Qt.Horizontal (default) puts the buttons at the bottom of the dialog + in a horizonzal row, Qt.Vertical puts the buttons at the right in a + vertical column. + + """ + if orientation != self._buttonOrientation: + self._buttonOrientation = orientation + self._buttonBox.setOrientation(orientation) + self.reLayout() + + def buttonOrientation(self): + """Returns the button orientation.""" + return self._buttonOrientation + + def setIcon(self, icon): + """Sets the icon to display in the left area. + + May be: + - None or QIcon() + - one of 'info', 'warning', 'critical', 'question' + - a QStyle.StandardPixmap + - a QIcon. + + """ + if icon in standardicons: + icon = standardicons[icon] + if isinstance(icon, QStyle.StandardPixmap): + icon = self.style().standardIcon(icon) + if icon is None: + icon = QIcon() + self._icon = icon + self.setPixmap(icon.pixmap(self._iconSize)) + + def icon(self): + """Returns the currently set icon as a QIcon.""" + return self._icon + + def setIconSize(self, size): + """Sets the icon size (QSize or int).""" + if isinstance(size, int): + size = QSize(size, size) + changed = size != self._iconSize + self._iconSize = size + if changed and not self._icon.isNull(): + self.setPixmap(self._icon.pixmap(size)) + + def iconSize(self): + """Returns the icon size (QSize).""" + return self._iconSize + + def setPixmap(self, pixmap): + """Sets the pixmap to display in the left area.""" + changed = self._pixmap.isNull() != pixmap.isNull() + self._pixmap = pixmap + self._pixmapLabel.setPixmap(pixmap) + if not pixmap.isNull(): + self._pixmapLabel.setFixedSize(pixmap.size()) + if changed: + self.reLayout() + + def pixmap(self): + """Returns the currently set pixmap.""" + return self._pixmap + + def setMessage(self, text): + """Sets the main text in the dialog.""" + self._messageLabel.setText(text) + + def message(self): + """Returns the main text.""" + return self._messageLabel.text() + + def messageLabel(self): + """Returns the QLabel displaying the message text.""" + return self._messageLabel + + def buttonBox(self): + """Returns our QDialogButtonBox instance.""" + return self._buttonBox + + def setStandardButtons(self, buttons): + """Convenience method to set standard buttons in the button box. + + Accepts a sequence of string names from the standardbuttons constant, + or a QDialogButtonBox.StandardButtons value. + + """ + if isinstance(buttons, (set, tuple, list)): + buttons = functools.reduce(operator.or_, + map(standardbuttons.get, buttons), + QDialogButtonBox.StandardButtons()) + self._buttonBox.setStandardButtons(buttons) + + def button(self, button): + """Returns the given button. + + May be a QDialogButtonBox.StandardButton or a key from standardbuttons. + + """ + if button in standardbuttons: + button = standardbuttons[button] + return self._buttonBox.button(button) + + def setSeparator(self, enabled): + """Sets whether to show a line between contents and buttons.""" + changed = self._separator != enabled + self._separator = enabled + if changed: + self.reLayout() + + def hasSeparator(self): + """Returns whether a separator line is shown.""" + return self._separator + + def setMainWidget(self, widget): + """Sets the specified widget as our main widget.""" + old = self._mainWidget + if old: + old.setParent(None) + self._mainWidget = widget + self.reLayout() + + def mainWidget(self): + """Returns the current main widget (an empty QWidget by default).""" + return self._mainWidget + + def reLayout(self): + """(Internal) Lays out all items in this dialog.""" + layout = self.layout() + while layout.takeAt(0): + pass + + if not self._pixmap.isNull(): + col = 1 + layout.addWidget(self._pixmapLabel, 0, 0, 2, 1) + else: + layout.setColumnStretch(1, 0) + col = 0 + layout.setColumnStretch(col, 1) + self._pixmapLabel.setVisible(not self._pixmap.isNull()) + layout.addWidget(self._messageLabel, 0, col) + layout.addWidget(self._mainWidget, 1, col) + if self._buttonOrientation == Qt.Horizontal: + if self._separator: + layout.addWidget(self._separatorWidget, 2, 0, 1, col+1) + layout.addWidget(self._buttonBox, 3, 0, 1, col+1) + else: + if self._separator: + layout.addWidget(self._separatorWidget, 0, col+1, 2, 1) + layout.addWidget(self._buttonBox, 0, col+2, 2, 1) + self._separatorWidget.setVisible(self._separator) + + +class TextDialog(Dialog): + """A dialog with text string input and validation.""" + def __init__(self, parent, *args, **kwargs): + super(TextDialog, self).__init__(parent, *args, **kwargs) + self._validateFunction = None + self.setMainWidget(QLineEdit()) + self.lineEdit().setFocus() + + def lineEdit(self): + """Returns the QLineEdit widget.""" + return self.mainWidget() + + def setText(self, text): + """Sets the tekst in the lineEdit().""" + self.lineEdit().setText(text) + + def text(self): + """Returns the text in the lineEdit().""" + return self.lineEdit().text() + + def setValidateFunction(self, func): + """Sets a function to run on every change in the lineEdit(). + + If the function returns True, the OK button is enabled, otherwise + disabled. + + If func is None, an earlier validate function will be removed. + + """ + old = self._validateFunction + self._validateFunction = func + if func: + self._validate(self.lineEdit().text()) + if not old: + self.lineEdit().textChanged.connect(self._validate) + elif old: + self.lineEdit().textChanged.disconnect(self._validate) + self.button('ok').setEnabled(True) + + def setValidateRegExp(self, regexp): + """Sets a regular expression the text must match. + + If the regular expression matches the full text, the OK button is + enabled, otherwise disabled. + + If regexp is None, an earlier set regular expression is removed. + + """ + validator = function = None + if regexp is not None: + rx = QRegExp(regexp) + validator = QRegExpValidator(rx, self.lineEdit()) + function = rx.exactMatch + self.lineEdit().setValidator(validator) + self.setValidateFunction(function) + + def _validate(self, text): + self.button('ok').setEnabled(self._validateFunction(text)) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/drag.py frescobaldi-2.0.0/frescobaldi_app/widgets/drag.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/drag.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/drag.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,126 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Event-filtering objects and helper functions to drag things. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QEvent, QFileInfo, QMimeData, QObject, Qt, QUrl +from PyQt4.QtGui import QApplication, QDrag, QFileIconProvider + + +class ComboDrag(QObject): + """Enables dragging from a QComboBox. + + Instantiate this with a QComboBox as parent to enable dragging the + current item. + + By default, drags a filename got from the current index under the + Qt.EditRole. Change the role by changing the 'role' instance attribute. + + """ + column = 0 + role = Qt.EditRole + + def __init__(self, combobox): + super(ComboDrag, self).__init__(combobox) + self._dragpos = None + combobox.installEventFilter(self) + + def eventFilter(self, combobox, ev): + if ev.type() == QEvent.MouseButtonPress and ev.button() == Qt.LeftButton: + self._dragpos = ev.pos() + return not combobox.isEditable() + elif (ev.type() == QEvent.MouseMove and ev.buttons() & Qt.LeftButton + and combobox.count() >0): + return self.mouseMoved(combobox, ev.pos()) or False + elif (ev.type() == QEvent.MouseButtonRelease + and ev.button() == Qt.LeftButton and not combobox.isEditable()): + combobox.mousePressEvent(ev) + return False + + def mouseMoved(self, combobox, pos): + if (self._dragpos is not None + and (pos - self._dragpos).manhattanLength() + >= QApplication.startDragDistance()): + self.startDrag(combobox) + return True + + def startDrag(self, combobox): + index = combobox.model().index(combobox.currentIndex(), self.column) + filename = combobox.model().data(index, self.role) + icon = combobox.model().data(index, Qt.DecorationRole) + dragFile(combobox, filename, icon, Qt.CopyAction) + + +class Dragger(QObject): + """Drags anything from any widget. + + Use dragger.installEventFilter(widget) to have it drag. + + """ + def __init__(self, parent=None): + super(Dragger, self).__init__(parent) + self._dragpos = None + if parent: + parent.installEventFilter(self) + + def eventFilter(self, widget, ev): + if ev.type() == QEvent.MouseButtonPress and ev.button() == Qt.LeftButton: + self._dragpos = ev.pos() + return True + elif ev.type() == QEvent.MouseMove and ev.buttons() & Qt.LeftButton: + return self.mouseMoved(widget, ev.pos()) or False + return False + + def mouseMoved(self, widget, pos): + if (self._dragpos is not None + and (pos - self._dragpos).manhattanLength() + >= QApplication.startDragDistance()): + self.startDrag(widget) + return True + + def startDrag(self, widget): + """Reimplement to start a drag.""" + + +class FileDragger(Dragger): + def filename(self): + """Should return the filename to drag.""" + + def startDrag(self, widget): + filename = self.filename() + if filename: + dragFile(widget, filename) + + +def dragFile(widget, filename, icon=None, dropactions=Qt.CopyAction): + """Starts dragging the given local file from the widget.""" + if icon is None or icon.isNull(): + icon = QFileIconProvider().icon(QFileInfo(filename)) + drag = QDrag(widget) + data = QMimeData() + data.setUrls([QUrl.fromLocalFile(filename)]) + drag.setMimeData(data) + drag.setPixmap(icon.pixmap(32)) + drag.exec_(dropactions) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/imageviewer.py frescobaldi-2.0.0/frescobaldi_app/widgets/imageviewer.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/imageviewer.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/imageviewer.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,144 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A simple scrollarea that can display an image. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import pyqtSignal, QMimeData, QSize, QRect, Qt +from PyQt4.QtGui import ( + QApplication, QDrag, QImage, QPainter, QPalette, QPixmap, QScrollArea, + QSizePolicy, QWidget) + + +__all__ = ['ImageViewer'] + + +# internal constants +MOVE = 1 +DRAG = 2 + + +class ImageViewer(QScrollArea): + + actualSizeChanged = pyqtSignal(bool) + + def __init__(self, parent=None): + super(ImageViewer, self).__init__(parent, alignment=Qt.AlignCenter) + self._actualsize = True + self._image = QImage() + self.setBackgroundRole(QPalette.Dark) + self.setWidget(ImageWidget(self)) + + def setActualSize(self, enabled=True): + if enabled == self._actualsize: + return + self.setWidgetResizable(not enabled) + if enabled and not self._image.isNull(): + self.widget().resize(self._image.size()) + self._actualsize = enabled + self.actualSizeChanged.emit(enabled) + + def actualSize(self): + return self._actualsize + + def setImage(self, image): + self._image = image + self._pixmap = None + self._pixmapsize = None + if self._actualsize: + self.widget().resize(image.size()) + self.widget().update() + + def image(self): + return self._image + + def pixmap(self, size): + """Returns (and caches) a scaled pixmap for the image.""" + if self._pixmapsize == size: + return self._pixmap + self._pixmap = QPixmap.fromImage( + self._image.scaled(size, Qt.KeepAspectRatio, Qt.SmoothTransformation)) + self._pixmapsize = size + return self._pixmap + + def startDrag(self): + image = self.image() + data = QMimeData() + data.setImageData(image) + drag = QDrag(self) + drag.setMimeData(data) + if max(image.width(), image.height()) > 256: + image = image.scaled(QSize(256, 256), Qt.KeepAspectRatio, Qt.SmoothTransformation) + pixmap = QPixmap.fromImage(image) + drag.setPixmap(pixmap) + drag.setHotSpot(pixmap.rect().center()) + drag.exec_(Qt.CopyAction) + + +class ImageWidget(QWidget): + def __init__(self, viewer): + super(ImageWidget, self).__init__() + self.viewer = viewer + self.setBackgroundRole(QPalette.Dark) + self.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) + self._mode = None + self._startpos = None + + def paintEvent(self, ev): + image = self.viewer.image() + painter = QPainter(self) + if self.size() == image.size(): + painter.drawImage(ev.rect(), image, ev.rect()) + else: + s = image.size() + s.scale(self.size(), Qt.KeepAspectRatio) + r = QRect() + r.setSize(s) + r.moveCenter(self.rect().center()) + painter.drawPixmap(r, self.viewer.pixmap(s)) + + def mousePressEvent(self, ev): + if ev.button() == Qt.LeftButton: + if ev.modifiers() & Qt.ControlModifier: + self._mode = MOVE + else: + self._mode = DRAG + self._startpos = ev.globalPos() + + def mouseMoveEvent(self, ev): + diff = self._startpos - ev.globalPos() + if self._mode == MOVE: + self._startpos = ev.globalPos() + h = self.viewer.horizontalScrollBar() + v = self.viewer.verticalScrollBar() + h.setValue(h.value() + diff.x()) + v.setValue(v.value() + diff.y()) + elif self._mode == DRAG and diff.manhattanLength() >= QApplication.startDragDistance(): + self.viewer.startDrag() + + def mouseReleaseEvent(self, ev): + mode, self._mode = self._mode, None + if (ev.button() == Qt.LeftButton and + mode == DRAG and ev.globalPos() == self._startpos): + self.viewer.setActualSize(not self.viewer.actualSize()) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/indenter.py frescobaldi-2.0.0/frescobaldi_app/widgets/indenter.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/indenter.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/indenter.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,135 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A basic auto-indenter for a textedit widget. +""" + + +from __future__ import unicode_literals + +import contextlib + +from PyQt4.QtCore import QEvent, QObject, Qt +from PyQt4.QtGui import QTextCursor + + +class Indenter(QObject): + """A basic indenter for a Q(Plain)TextEdit. + + When instantiated it automatically installs itself + as an event filter for the textedit, catching some + keypresses: + + Return: + enters a newline and the same indent as the current line + Tab: + indents the current line + Backtab: + dedents the current line + + These instance attributes may be set: + + indentWidth: + how many characters to indent (default 2) + indentChar: + which character to use (default " ") + + """ + + indentWidth = 2 + indentChar = ' ' + + def __init__(self, textedit): + """Installs ourselves as event filter for textedit. + + The textedit also becomes our parent. + + """ + super(Indenter, self).__init__(textedit) + textedit.installEventFilter(self) + + def eventFilter(self, edit, ev): + """Handles Return, Tab and Backtab.""" + if ev.type() == QEvent.KeyPress: + modifiers = int(ev.modifiers() & (Qt.SHIFT | Qt.CTRL | Qt.ALT | Qt.META)) + if ev.text() == '\r' and modifiers == 0: + cursor = edit.textCursor() + self.newline(cursor) + edit.setTextCursor(cursor) + return True + elif ev.key() == Qt.Key_Tab and modifiers == 0: + self.indent(edit.textCursor()) + return True + elif ev.key() == Qt.Key_Backtab and modifiers & ~Qt.SHIFT == 0: + self.dedent(edit.textCursor()) + return True + return False + + def newline(self, cursor): + """Inserts a newline and then the same indent as the current line.""" + indent = self.getIndent(cursor) + cursor.insertText('\n' + indent) + + def getIndent(self, cursor): + """Returns the whitespace with which the current line starts.""" + text = cursor.document().findBlock(cursor.selectionStart()).text() + return text[:len(text) - len(text.lstrip())] + + def indent(self, cursor): + """Indents the line with the cursor or the selected lines (one step more).""" + with editBlock(cursor): + for block in blocks(cursor): + cursor.setPosition(block.position()) + cursor.setPosition(block.position() + len(self.getIndent(cursor))) + cursor.insertText(self.indentChar * self.indentWidth) + + def dedent(self, cursor): + """Dedents the line with the cursor or the selected lines (one step less).""" + with editBlock(cursor): + for block in blocks(cursor): + cursor.setPosition(block.position()) + end = len(self.getIndent(cursor)) + start = max(0, end - self.indentWidth) + if start < end: + cursor.setPosition(block.position() + start) + cursor.setPosition(block.position() + end, QTextCursor.KeepAnchor) + cursor.removeSelectedText() + + +def blocks(cursor): + """Yields the blocks (one or more) of the cursor or its selection.""" + block = cursor.document().findBlock(cursor.selectionStart()) + end = cursor.document().findBlock(cursor.selectionEnd()) + while True: + yield block + if block == end: + break + block = block.next() + + +@contextlib.contextmanager +def editBlock(cursor): + """Returns a context manager to perform operations on cursor as a single undo-item.""" + cursor.beginEditBlock() + try: + yield + finally: + cursor.endEditBlock() + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/__init__.py frescobaldi-2.0.0/frescobaldi_app/widgets/__init__.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/__init__.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,60 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +All kinds of more or less generally usable widgets. + +Some very simple ones are in this file, others in their own files. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSize, Qt +from PyQt4.QtGui import QFrame, QToolButton + +import icons + + +class Separator(QFrame): + def __init__(self, *args, **kwargs): + QFrame.__init__(self, *args, **kwargs) + self.setLineWidth(1) + self.setMidLineWidth(0) + self.setOrientation(Qt.Horizontal) + + def setOrientation(self, orientation): + if orientation == Qt.Vertical: + self.setFrameShape(QFrame.VLine) + self.setFrameShadow(QFrame.Sunken) + self.setMinimumSize(2, 0) + else: + self.setFrameShape(QFrame.HLine) + self.setFrameShadow(QFrame.Sunken) + self.setMinimumSize(0, 2) + self.updateGeometry() + + def orientation(self): + return Qt.Vertical if self.frameStyle() & QFrame.VLine == QFrame.VLine else Qt.Horizontal + + +class ClearButton(QToolButton): + def __init__(self, *args, **kwargs): + QToolButton.__init__(self, *args, **kwargs) + self.setIcon(icons.get("edit-clear-locationbar-rtl")) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/keysequencewidget.py frescobaldi-2.0.0/frescobaldi_app/widgets/keysequencewidget.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/keysequencewidget.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/keysequencewidget.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,220 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A widget to enter a keyboard shortcut. + +Loosely based on kkeysequencewidget.cpp from KDE :-) + +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QEvent, Qt, QTimer, pyqtSignal +from PyQt4.QtGui import ( + QApplication, QHBoxLayout, QKeySequence, QPushButton, QToolButton, QWidget) + +import app +import icons + +from . import ClearButton + + +class KeySequenceWidget(QWidget): + + keySequenceChanged = pyqtSignal() + + def __init__(self, parent=None): + super(KeySequenceWidget, self).__init__(parent) + + layout = QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(2) + self.setLayout(layout) + + self.button = KeySequenceButton(self) + self.clearButton = ClearButton(self) + layout.addWidget(self.button) + layout.addWidget(self.clearButton) + + self.clearButton.clicked.connect(self.clear) + app.translateUI(self) + + def translateUI(self): + self.button.setToolTip(_("Start recording a key sequence.")) + self.clearButton.setToolTip(_("Clear the key sequence.")) + + def setShortcut(self, shortcut): + """Sets the initial shortcut to display.""" + self.button.setKeySequence(shortcut) + + def shortcut(self): + """Returns the currently set key sequence.""" + return self.button.keySequence() + + def clear(self): + """Empties the displayed shortcut.""" + if self.button.isRecording(): + self.button.cancelRecording() + if not self.button.keySequence().isEmpty(): + self.button.setKeySequence(QKeySequence()) + self.keySequenceChanged.emit() + + def setModifierlessAllowed(self, allow): + self.button._modifierlessAllowed = allow + + def isModifierlessAllowed(self): + return self.button._modifierlessAllowed + + +class KeySequenceButton(QPushButton): + + def __init__(self, parent=None): + super(KeySequenceButton, self).__init__(parent) + self.setIcon(icons.get("configure")) + self._modifierlessAllowed = False + self._seq = QKeySequence() + self._timer = QTimer() + self._timer.setSingleShot(True) + self._isrecording = False + self.clicked.connect(self.startRecording) + self._timer.timeout.connect(self.doneRecording) + + def setKeySequence(self, seq): + self._seq = seq + self.updateDisplay() + + def keySequence(self): + if self._isrecording: + self.doneRecording() + return self._seq + + def updateDisplay(self): + if self._isrecording: + s = self._recseq.toString(QKeySequence.NativeText).replace('&', '&&') + if self._modifiers: + if s: s += "," + s += QKeySequence(self._modifiers).toString(QKeySequence.NativeText) + elif self._recseq.isEmpty(): + s = _("Input") + s += " ..." + else: + s = self._seq.toString(QKeySequence.NativeText).replace('&', '&&') + self.setText(s) + + def isRecording(self): + return self._isrecording + + def event(self, ev): + if self._isrecording: + # prevent Qt from special casing Tab and Backtab + if ev.type() == QEvent.KeyPress: + self.keyPressEvent(ev) + return True + return super(KeySequenceButton, self).event(ev) + + def keyPressEvent(self, ev): + if not self._isrecording: + return super(KeySequenceButton, self).keyPressEvent(ev) + if ev.isAutoRepeat(): + return + modifiers = int(ev.modifiers() & (Qt.SHIFT | Qt.CTRL | Qt.ALT | Qt.META)) + ev.accept() + + key = ev.key() + # check if key is a modifier or a character key without modifier (and if that is allowed) + if ( + # don't append the key if the key is -1 (garbage) or a modifier ... + key not in (-1, Qt.Key_AltGr, Qt.Key_Shift, Qt.Key_Control, + Qt.Key_Alt, Qt.Key_Meta, Qt.Key_Menu) + # or if this is the first key and without modifier and modifierless keys are not allowed + and (self._modifierlessAllowed + or self._recseq.count() > 0 + or modifiers & ~Qt.SHIFT + or not ev.text() + or (modifiers & Qt.SHIFT + and key in (Qt.Key_Return, Qt.Key_Space, Qt.Key_Tab, Qt.Key_Backtab, + Qt.Key_Backspace, Qt.Key_Delete, Qt.Key_Escape)))): + # change Shift+Backtab into Shift+Tab + if key == Qt.Key_Backtab and modifiers & Qt.SHIFT: + key = Qt.Key_Tab | modifiers + # remove the Shift modifier if it doen't make sense + elif (Qt.Key_Exclam <= key <= Qt.Key_At + or Qt.Key_Z < key <= 0x0ff): + key = key | (modifiers & ~Qt.SHIFT) + else: + key = key | modifiers + + # append max. 4 keystrokes + if self._recseq.count() < 4: + l = list(self._recseq) + l.append(key) + self._recseq = QKeySequence(*l) + + self._modifiers = modifiers + self.controlTimer() + self.updateDisplay() + + def keyReleaseEvent(self, ev): + if not self._isrecording: + return super(KeySequenceButton, self).keyReleaseEvent(ev) + modifiers = int(ev.modifiers() & (Qt.SHIFT | Qt.CTRL | Qt.ALT | Qt.META)) + ev.accept() + + self._modifiers = modifiers + self.controlTimer() + self.updateDisplay() + + def hideEvent(self, ev): + if self._isrecording: + self.cancelRecording() + super(KeySequenceButton, self).hideEvent(ev) + + def controlTimer(self): + if self._modifiers or self._recseq.isEmpty(): + self._timer.stop() + else: + self._timer.start(600) + + def startRecording(self): + self.setDown(True) + self.setStyleSheet("text-align: left;") + self._isrecording = True + self._recseq = QKeySequence() + self._modifiers = int(QApplication.keyboardModifiers() & (Qt.SHIFT | Qt.CTRL | Qt.ALT | Qt.META)) + self.grabKeyboard() + self.updateDisplay() + + def doneRecording(self): + self._seq = self._recseq + self.cancelRecording() + self.clearFocus() + self.parentWidget().keySequenceChanged.emit() + + def cancelRecording(self): + if not self._isrecording: + return + self.setDown(False) + self.setStyleSheet(None) + self._isrecording = False + self.releaseKeyboard() + self.updateDisplay() + + + \ No newline at end of file diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/lineedit.py frescobaldi-2.0.0/frescobaldi_app/widgets/lineedit.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/lineedit.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/lineedit.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,80 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A lineedit with a clear button. +""" + +from __future__ import unicode_literals + + +from PyQt4.QtCore import QEvent, QSize, Qt +from PyQt4.QtGui import QLineEdit, QStyle, QToolButton + +import icons + +class LineEdit(QLineEdit): + """A QLineEdit with a clear button. No additional methods.""" + def __init__(self, *args, **kwargs): + super(LineEdit, self).__init__(*args, **kwargs) + self._clearButton = b = QToolButton(self, iconSize=QSize(16,16), autoRaise=True) + b.setFixedSize(QSize(16, 16)) + b.setStyleSheet("QToolButton { border: none; }") + b.clicked.connect(self.clear) + b.setCursor(Qt.ArrowCursor) + b.setFocusPolicy(Qt.NoFocus) + self.textChanged.connect(self._updateClearButton) + self._updateLayoutDirection() + self._updateClearButton() + + def _updateLayoutDirection(self): + b = self._clearButton + if self.layoutDirection() == Qt.RightToLeft: + self.setTextMargins(b.width(), 0, 0, 0) + b.setIcon(icons.get('edit-clear-locationbar-ltr')) + else: + self.setTextMargins(0, 0, b.width(), 0) + b.setIcon(icons.get('edit-clear-locationbar-rtl')) + + def _updateClearButton(self): + b = self._clearButton + if self.text(): + frame = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth) + y = max(0, (self.height() - b.height()) / 2) + if self.layoutDirection() == Qt.RightToLeft: + x = frame + 2 + else: + x = self.rect().right() - b.width() - frame - 2 + b.move(x, y) + b.show() + else: + b.hide() + + def resizeEvent(self, ev): + super(LineEdit, self).resizeEvent(ev) + if self.text(): + self._updateClearButton() + + def changeEvent(self, ev): + super(LineEdit, self).changeEvent(ev) + if ev.type() == QEvent.LayoutDirectionChange: + self._updateLayoutDirection() + self._updateClearButton() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/listedit.py frescobaldi-2.0.0/frescobaldi_app/widgets/listedit.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/listedit.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/listedit.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,190 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Widgets to edit a list of items in a flexible way. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import pyqtSignal +from PyQt4.QtGui import ( + QFileDialog, QGridLayout, QListWidget, QListWidgetItem, QPushButton, QWidget) + +import app +import icons + + +class ListEdit(QWidget): + """A widget to edit a list of items (e.g. a list of directories).""" + + # emitted when anything changed in the listbox. + changed = pyqtSignal() + + def __init__(self, *args, **kwargs): + QWidget.__init__(self, *args, **kwargs) + layout = QGridLayout(self) + self.setLayout(layout) + + self.addButton = QPushButton(icons.get('list-add'), '') + self.editButton = QPushButton(icons.get('document-edit'), '') + self.removeButton = QPushButton(icons.get('list-remove'), '') + self.listBox = QListWidget() + + layout.setContentsMargins(1, 1, 1, 1) + layout.setSpacing(0) + layout.addWidget(self.listBox, 0, 0, 4, 1) + layout.addWidget(self.addButton, 0, 1) + layout.addWidget(self.editButton, 1, 1) + layout.addWidget(self.removeButton, 2, 1) + + @self.addButton.clicked.connect + def addClicked(): + item = self.createItem() + if self.openEditor(item): + self.addItem(item) + + @self.editButton.clicked.connect + def editClicked(): + item = self.listBox.currentItem() + item and self.editItem(item) + + @self.removeButton.clicked.connect + def removeClicked(): + item = self.listBox.currentItem() + if item: + self.removeItem(item) + + @self.listBox.itemDoubleClicked.connect + def itemDoubleClicked(item): + item and self.editItem(item) + + self.listBox.model().layoutChanged.connect(self.changed) + + def updateSelection(): + selected = bool(self.listBox.currentItem()) + self.editButton.setEnabled(selected) + self.removeButton.setEnabled(selected) + + self.changed.connect(updateSelection) + self.listBox.itemSelectionChanged.connect(updateSelection) + updateSelection() + app.translateUI(self) + + def translateUI(self): + self.addButton.setText(_("&Add...")) + self.editButton.setText(_("&Edit...")) + self.removeButton.setText(_("&Remove")) + + def createItem(self): + return QListWidgetItem() + + def addItem(self, item): + self.listBox.addItem(item) + self.itemChanged(item) + self.changed.emit() + + def removeItem(self, item): + self.listBox.takeItem(self.listBox.row(item)) + self.changed.emit() + + def editItem(self, item): + if self.openEditor(item): + self.itemChanged(item) + self.changed.emit() + + def setCurrentItem(self, item): + self.listBox.setCurrentItem(item) + + def setCurrentRow(self, row): + self.listBox.setCurrentRow(row) + + def openEditor(self, item): + """Opens an editor (dialog) for the item. + + Returns True if the dialog was accepted and the item edited. + Returns False if the dialog was cancelled (the item must be left + unedited). + """ + pass + + def itemChanged(self, item): + """Called after an item has been added or edited. + + Re-implement to do something at this moment if needed, e.g. alter the + text or display of other items. + """ + pass + + def setValue(self, strings): + """Sets the listbox to a list of strings.""" + self.listBox.clear() + self.listBox.addItems(strings) + self.changed.emit() + + def value(self): + """Returns the list of paths in the listbox.""" + return [self.listBox.item(i).text() + for i in range(self.listBox.count())] + + def setItems(self, items): + """Sets the listbox to a list of items.""" + self.listBox.clear() + for item in items: + self.listBox.addItem(item) + self.itemChanged(item) + self.changed.emit() + + def items(self): + """Returns the list of items in the listbox.""" + return [self.listBox.item(i) + for i in range(self.listBox.count())] + + def clear(self): + """Clears the listbox.""" + self.listBox.clear() + self.changed.emit() + + +class FilePathEdit(ListEdit): + """ + A widget to edit a list of directories (e.g. a file path). + """ + def __init__(self, *args, **kwargs): + super(FilePathEdit, self).__init__(*args, **kwargs) + + def fileDialog(self): + """The QFileDialog this widget is using.""" + try: + return self._filedialog + except AttributeError: + self._filedialog = d = QFileDialog(self) + d.setFileMode(QFileDialog.Directory) + return d + + def openEditor(self, item): + """Asks the user for an (existing) directory.""" + directory = item.text() + dlg = self.fileDialog() + dlg.selectFile(directory) + if dlg.exec_(): + item.setText(dlg.selectedFiles()[0]) + return True + return False + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/matcher_ah.py frescobaldi-2.0.0/frescobaldi_app/widgets/matcher_ah.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/matcher_ah.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/matcher_ah.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,46 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Highlights matching characters in a textedit, +using an ArbitraryHighlighter. +""" + +from . import matcher + +class Matcher(matcher.Matcher): + + priority = 0 + + def __init__(self, highlighter): + """Initialize the Matcher; highlighter is an ArbitraryHighlighter instance.""" + super(matcher.Matcher, self).__init__(highlighter) + self.edit().cursorPositionChanged.connect(self.slotCursorPositionChanged) + + def edit(self): + """Reimplemented to return the parent of our parent:)""" + return self.parent().parent() + + def highlight(self, cursors): + """Highlights the selections of the specified QTextCursor instances.""" + self.parent().highlight(self.format, cursors, self.priority, self.time) + + def clear(self): + """Removes the highlighting.""" + self.parent().clear(self.format) diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/matcher.py frescobaldi-2.0.0/frescobaldi_app/widgets/matcher.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/matcher.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/matcher.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,126 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A basic parenthesis/brace character matcher for a textedit widget. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QObject, QRegExp, Qt, QTimer +from PyQt4.QtGui import QTextCharFormat, QTextCursor, QTextDocument, QTextEdit + + +class Matcher(QObject): + """Highlights matching characters in a textedit. + + The following attributes are available at the class level, + and may be overridden by setting them as instance attributes: + + matchPairs: a string of characters that match in pairs with each other + default: "{}()[]" + format: a QTextCharFormat used to highlight matching characters with + default: a red foreground color + time: how many milliseconds to show the highlighting (0=forever) + default: 2000 + + """ + + matchPairs = "{}()[]" + format = QTextCharFormat() + format.setForeground(Qt.red) + time = 2000 + + def __init__(self, edit): + """Initialize the Matcher; edit is a Q(Plain)TextEdit instance.""" + super(Matcher, self).__init__(edit) + self._timer = QTimer(singleShot=True, timeout=self.clear) + edit.cursorPositionChanged.connect(self.slotCursorPositionChanged) + + def edit(self): + """Returns our Q(Plain)TextEdit.""" + return self.parent() + + def slotCursorPositionChanged(self): + """Called whenever the cursor position changes. + + Highlights matching characters if the cursor is at one of them. + + """ + cursor = self.edit().textCursor() + block = cursor.block() + text = block.text() + + # try both characters at the cursor + col = cursor.position() - block.position() + end = col + 1 + col = max(0, col - 1) + for c in text[col:end]: + if c in self.matchPairs: + break + col += 1 + else: + self.clear() + return + + # the cursor is at a character from matchPairs + i = self.matchPairs.index(c) + cursor.setPosition(block.position() + col) + + # find the matching character + new = QTextCursor(cursor) + if i & 1: + # look backward + match = self.matchPairs[i-1] + flags = QTextDocument.FindBackward + else: + # look forward + match = self.matchPairs[i+1] + flags = QTextDocument.FindFlags() + new.movePosition(QTextCursor.Right) + + # search, also nesting + rx = QRegExp(QRegExp.escape(c) + '|' + QRegExp.escape(match)) + nest = 0 + while nest >= 0: + new = cursor.document().find(rx, new, flags) + if new.isNull(): + self.clear() + return + nest += 1 if new.selectedText() == c else -1 + cursor.movePosition(QTextCursor.Right, QTextCursor.KeepAnchor) + self.highlight([cursor, new]) + + def highlight(self, cursors): + """Highlights the selections of the specified QTextCursor instances.""" + selections = [] + for cursor in cursors: + es = QTextEdit.ExtraSelection() + es.cursor = cursor + es.format = self.format + selections.append(es) + self.edit().setExtraSelections(selections) + if self.time and selections: + self._timer.start(self.time) + + def clear(self): + """Removes the highlighting.""" + self.edit().setExtraSelections([]) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/progressbar.py frescobaldi-2.0.0/frescobaldi_app/widgets/progressbar.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/progressbar.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/progressbar.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,74 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +QProgressBar subclasses. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QTimeLine, QTimer +from PyQt4.QtGui import QProgressBar + +class TimedProgressBar(QProgressBar): + """A QProgressBar showing a certain time elapse.""" + hideOnTimeout = True + def __init__(self, parent=None): + super(TimedProgressBar, self).__init__(parent, minimum=0, maximum=100) + self._timeline = QTimeLine(updateInterval=100, frameChanged=self.setValue) + self._timeline.setFrameRange(0, 100) + self._hideTimer = QTimer(timeout=self._done, singleShot=True, interval=3000) + + def start(self, total, elapsed=0.0): + """Starts showing progress. + + total is the number of seconds (maybe float) the timeline will last, + elapsed (defaulting to 0) is the value to start with. + + """ + self._hideTimer.stop() + self._timeline.stop() + self._timeline.setDuration(total * 1000) + self._timeline.setCurrentTime(elapsed * 1000) + self.setValue(self._timeline.currentFrame()) + self._timeline.resume() + if self.hideOnTimeout: + self.show() + + def stop(self, showFinished=True): + """Ends the progress display. + + If showFinished is True (the default), 100% is shown for a few + seconds and then the progress is reset. + The progressbar is hidden if the hideOnTimeout attribute is True. + + """ + self._hideTimer.stop() + self._timeline.stop() + if showFinished: + self.setValue(100) + self._hideTimer.start() + else: + self._done() + + def _done(self): + self.reset() + if self.hideOnTimeout: + self.hide() + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/schemeselector.py frescobaldi-2.0.0/frescobaldi_app/widgets/schemeselector.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/schemeselector.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/schemeselector.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,149 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A widget that provides a scheme selector, with New and Remove buttons. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QSettings, pyqtSignal +from PyQt4.QtGui import ( + QComboBox, QHBoxLayout, QInputDialog, QLabel, QPushButton, QWidget) + +import app +import icons +import preferences + + +class SchemeSelector(QWidget): + + currentChanged = pyqtSignal() + changed = pyqtSignal() + + def __init__(self, parent=None): + super(SchemeSelector, self).__init__(parent) + + layout = QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + + self.label = QLabel(_("Scheme:")) + self.scheme = QComboBox() + self.label.setBuddy(self.scheme) + self.add = QPushButton(icons.get('list-add'), '') + self.remove = QPushButton(icons.get('list-remove'), '') + layout.addWidget(self.label) + layout.addWidget(self.scheme) + layout.addWidget(self.add) + layout.addWidget(self.remove) + self.scheme.currentIndexChanged.connect(self.slotSchemeChanged) + self.add.clicked.connect(self.addClicked) + self.remove.clicked.connect(self.removeClicked) + app.translateUI(self) + + def translateUI(self): + self.label.setText(_("Scheme:")) + self.add.setText(_("New Scheme", "&New...")) + self.remove.setText(_("&Remove")) + + def slotSchemeChanged(self, index): + """Called when the Scheme combobox is changed by the user.""" + self.remove.setEnabled(bool(index)) + self.currentChanged.emit() + self.changed.emit() + + def schemes(self): + """Returns the list with internal names of currently available schemes.""" + return self._schemes + + def currentScheme(self): + """Returns the internal name of the currently selected scheme""" + return self._schemes[self.scheme.currentIndex()] + + def removeClicked(self): + index = self.scheme.currentIndex() + if index == 0: + return # default can not be removed + + self._schemesToRemove.add(self._schemes[index]) + del self._schemes[index] + del self._schemeNames[index] + self.scheme.removeItem(index) + + def addClicked(self): + name, ok = QInputDialog.getText(self, + app.caption("Add Scheme"), + _("Please enter a name for the new scheme:")) + if not ok: + return + num, key = 1, 'user1' + while key in self._schemes or key in self._schemesToRemove: + num += 1 + key = 'user{0}'.format(num) + self._schemes.append(key) + self._schemeNames.append(name) + self.scheme.addItem(name) + self.scheme.setCurrentIndex(self.scheme.count() - 1) + + def loadSettings(self, currentKey, namesGroup): + # dont mark schemes for removal anymore + self._schemesToRemove = set() + + s = QSettings() + cur = s.value(currentKey, "default") + + # load the names for the shortcut schemes + s.beginGroup(namesGroup) + self._schemes = ["default"] + self._schemeNames = [_("Default")] + for key in s.childKeys(): + self._schemes.append(key) + self._schemeNames.append(s.value(key, key)) + block = self.scheme.blockSignals(True) + self.scheme.clear() + self.scheme.addItems(self._schemeNames) + + # find out index + index = self._schemes.index(cur) if cur in self._schemes else 0 + self.remove.setEnabled(bool(index)) + self.scheme.setCurrentIndex(index) + self.scheme.blockSignals(block) + self.currentChanged.emit() + + def saveSettings(self, currentKey, namesGroup, removePrefix=None): + # first save new scheme names + s = QSettings() + s.beginGroup(namesGroup) + for scheme, name in zip(self._schemes, self._schemeNames)[1:]: + s.setValue(scheme, name) + # then remove removed schemes + for scheme in self._schemesToRemove: + s.remove(scheme) + s.endGroup() + if removePrefix: + for scheme in self._schemesToRemove: + s.remove("{0}/{1}".format(removePrefix, scheme)) + # then save current + scheme = self.currentScheme() + s.setValue(currentKey, scheme) + # clean up + self._schemesToRemove = set() + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/shortcuteditdialog.py frescobaldi-2.0.0/frescobaldi_app/widgets/shortcuteditdialog.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/shortcuteditdialog.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/shortcuteditdialog.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,144 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A dialog to edit the keyboard shortcuts for an action. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import ( + QDialog, QDialogButtonBox, QGridLayout, QHBoxLayout, QKeySequence, QLabel, + QRadioButton, QVBoxLayout) + + +import app +from . import Separator +from keysequencewidget import KeySequenceWidget + + +class ShortcutEditDialog(QDialog): + """A modal dialog to view and/or edit keyboard shortcuts.""" + + def __init__(self, parent=None): + super(ShortcutEditDialog, self).__init__(parent) + self.setMinimumWidth(400) + # create gui + + layout = QVBoxLayout() + layout.setSpacing(10) + self.setLayout(layout) + + top = QHBoxLayout() + top.setSpacing(4) + p = self.toppixmap = QLabel() + l = self.toplabel = QLabel() + l.setWordWrap(True) + top.addWidget(p) + top.addWidget(l, 1) + layout.addLayout(top) + + grid = QGridLayout() + grid.setSpacing(4) + grid.setColumnStretch(1, 2) + layout.addLayout(grid) + + self.buttonDefault = QRadioButton(self) + self.buttonNone = QRadioButton(self) + self.buttonCustom = QRadioButton(self) + grid.addWidget(self.buttonDefault, 0, 0, 1, 2) + grid.addWidget(self.buttonNone, 1, 0, 1, 2) + grid.addWidget(self.buttonCustom, 2, 0, 1, 2) + + self.keybuttons = [] + self.keylabels = [] + for num in range(4): + l = QLabel(self) + l.setStyleSheet("margin-left: 2em;") + l.setAlignment(Qt.AlignRight | Qt.AlignVCenter) + b = KeySequenceWidget(self) + b.keySequenceChanged.connect(self.slotKeySequenceChanged) + l.setBuddy(b) + self.keylabels.append(l) + self.keybuttons.append(b) + grid.addWidget(l, num+3, 0) + grid.addWidget(b, num+3, 1) + + layout.addWidget(Separator(self)) + + b = QDialogButtonBox(self) + b.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + layout.addWidget(b) + b.accepted.connect(self.accept) + b.rejected.connect(self.reject) + app.translateUI(self) + + def translateUI(self): + self.setWindowTitle(app.caption(_("window title", "Edit Shortcut"))) + self.buttonNone.setText(_("&No shortcut")) + self.buttonCustom.setText(_("Use a &custom shortcut:")) + for num in range(4): + self.keylabels[num].setText(_("Alternative #{num}:").format(num=num) if num else _("Primary shortcut:")) + + def slotKeySequenceChanged(self): + """Called when one of the keysequence buttons has changed.""" + self.buttonCustom.setChecked(True) + + def editAction(self, action, default=None): + # load the action + self._action = action + self._default = default + self.toplabel.setText('

{0}

'.format( + _("Here you can edit the shortcuts for {name}").format( + name='
{0}:'.format(action.text())))) + self.toppixmap.setPixmap(action.icon().pixmap(32)) + shortcuts = action.shortcuts() + self.buttonDefault.setVisible(default is not None) + if default is not None and shortcuts == default: + self.buttonDefault.setChecked(True) + elif shortcuts: + self.buttonCustom.setChecked(True) + else: + self.buttonNone.setChecked(True) + for num, key in enumerate(shortcuts[:4]): + self.keybuttons[num].setShortcut(key) + for num in range(len(shortcuts), 4): + self.keybuttons[num].clear() + if default: + ds = "; ".join(key.toString(QKeySequence.NativeText) for key in default) + else: + ds = _("no keyboard shortcut", "none") + self.buttonDefault.setText(_("Use &default shortcut ({name})").format(name=ds)) + + return self.exec_() + + def done(self, result): + if result: + shortcuts = [] + if self.buttonDefault.isChecked(): + shortcuts = self._default + elif self.buttonCustom.isChecked(): + for num in range(4): + seq = self.keybuttons[num].shortcut() + if not seq.isEmpty(): + shortcuts.append(seq) + self._action.setShortcuts(shortcuts) + super(ShortcutEditDialog, self).done(result) + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/tempobutton.py frescobaldi-2.0.0/frescobaldi_app/widgets/tempobutton.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/tempobutton.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/tempobutton.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,59 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A button that emits a tempo(int) signal when the user clicks multiple times. +""" + +from __future__ import unicode_literals + +import time + +from PyQt4.QtCore import pyqtSignal +from PyQt4.QtGui import QToolButton + +import app +import icons + + +class TempoButton(QToolButton): + """A button the user can tap a tempo on. + + emits tempo(bpm) when the user clicks the button multiple times. + + """ + tempo = pyqtSignal(int) + + def __init__(self, icon=None, parent=None): + super(TempoButton, self).__init__(parent) + self.setIcon(icon or icons.get("media-record")) + self.tapTime = 0.0 + self.pressed.connect(self.slotPressed) + app.translateUI(self) + + def translateUI(self): + self.setToolTip(_("Click this button a few times to set the tempo.")) + + def slotPressed(self): + self.tapTime, t = time.time(), self.tapTime + bpm = int(60.0 / (self.tapTime - t)) + if 10 < bpm < 1000: + self.tempo.emit(bpm) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/toolboxwheeler.py frescobaldi-2.0.0/frescobaldi_app/widgets/toolboxwheeler.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/toolboxwheeler.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/toolboxwheeler.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,49 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +Pages through a QToolBox using the mouse wheel, by default with the +CTRL modifier. +""" + +from PyQt4.QtCore import QEvent, QObject, Qt + + +class ToolBoxWheeler(QObject): + """Pages through a QToolBox using the mouse wheel.""" + def __init__(self, toolbox): + """Initializes us as eventfilter with the toolbox as parent.""" + super(ToolBoxWheeler, self).__init__(toolbox) + self._wheeldelta = 0 + toolbox.installEventFilter(self) + + def eventFilter(self, toolbox, ev): + if ev.type() == QEvent.Wheel and ev.modifiers() & Qt.CTRL: + self.wheelEvent(toolbox, ev) + return True + return False + + def wheelEvent(self, toolbox, ev): + self._wheeldelta -= ev.delta() + steps, self._wheeldelta = divmod(self._wheeldelta, 120) + i = toolbox.currentIndex() + steps + if 0 <= i < toolbox.count(): + toolbox.setCurrentIndex(i) + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/treewidget.py frescobaldi-2.0.0/frescobaldi_app/widgets/treewidget.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/treewidget.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/treewidget.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,124 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +A TreeWidget with some useful methods to manupulate items. +""" + + +from PyQt4.QtGui import QTreeWidget, QTreeWidgetItem + + +class TreeWidget(QTreeWidget): + """A QTreeWidget with some item-manipulation methods. + + We use a widget instead of a view with a standard model because + this lets us really have control over the items. With a standard + model, items are recreated e.g. when dragging and this looses the + python subclassed instances with their own paramaters. + + Calls the cleanup() method on QTreeWidgetItems as they are removed, + but does not error out if the QTreeWidgetItem does not have a cleanup() + method. + + """ + def __init__(self, parent=None, **kws): + super(TreeWidget, self).__init__(parent, **kws) + + def items(self, parent=None): + """Yields all items from parent or the invisibleRootItem.""" + if parent is None: + parent = self.invisibleRootItem() + for i in range(parent.childCount()): + c = parent.child(i) + for i in self.items(c): + yield i + yield c + + def clear(self): + """Removes all items, calling their cleanup() method (if available) first.""" + for item in self.items(): + self._cleanup(item) + super(TreeWidget, self).clear() + + def removeSelectedItems(self, item=None): + """Removes all selected items from the specified item or the root item.""" + if item is None: + item = self.invisibleRootItem() + itemsToRemove = [] + for i in range(item.childCount()): + child = item.child(i) + if child.isSelected(): + itemsToRemove.append(child) + else: + self.removeSelectedItems(child) + for child in itemsToRemove: + for descendant in self.items(child): + self._cleanup(descendant) + item.removeChild(child) + self._cleanup(child) + + def findSelectedItem(self, item=None): + """Returns an item that has selected children, if any exists. + + The item closest to the specified item or the root item that + has selected children, is returned. + + """ + if item is None: + item = self.invisibleRootItem() + for i in range(item.childCount()): + if item.child(i).isSelected(): + return item + for i in range(item.childCount()): + child = item.child(i) + r = self.findSelectedItem(child) + if r: + return r + + def moveSelectedChildrenUp(self): + item = self.findSelectedItem() + if item: + for row in range(1, item.childCount()): + if item.child(row).isSelected(): + i = item.takeChild(row) + item.insertChild(row - 1, i) + i.setSelected(True) + + def moveSelectedChildrenDown(self): + item = self.findSelectedItem() + if item: + for row in range(item.childCount() - 2, -1, -1): + if item.child(row).isSelected(): + i = item.takeChild(row) + item.insertChild(row + 1, i) + i.setSelected(True) + + @staticmethod + def _cleanup(item): + """Calls item.cleanup() if the QTreeWidgetItem has that method.""" + if hasattr(item, 'cleanup'): + item.cleanup() + + +class TreeWidgetItem(QTreeWidgetItem): + def cleanup(self): + """May be implemented to perform cleanup when an item is removed.""" + + diff -Nru frescobaldi-1.2.0/frescobaldi_app/widgets/urlrequester.py frescobaldi-2.0.0/frescobaldi_app/widgets/urlrequester.py --- frescobaldi-1.2.0/frescobaldi_app/widgets/urlrequester.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi_app/widgets/urlrequester.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,128 @@ +# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ +# +# Copyright (c) 2008 - 2011 by Wilbert Berendsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# See http://www.gnu.org/licenses/ for more information. + +""" +UrlRequester, a lineedit with a Browse-button. +""" + +from __future__ import unicode_literals + +from PyQt4.QtCore import QDir, pyqtSignal +from PyQt4.QtGui import ( + QCompleter, QFileDialog, QFileSystemModel, QHBoxLayout, QLineEdit, + QToolButton, QWidget) + +import app +import icons + + +class UrlRequester(QWidget): + """Shows a lineedit and a button to select a file or directory. + + The lineEdit, button, and fileDialog attributes represent their + respective objects. + + """ + changed = pyqtSignal() + + def __init__(self, parent=None): + super(UrlRequester, self).__init__(parent) + + self._fileDialog = None + self._dialogTitle = None + self._fileMode = None + + layout = QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(2) + self.setLayout(layout) + + self.lineEdit = QLineEdit() + layout.addWidget(self.lineEdit) + self.button = QToolButton(clicked=self.browse) + layout.addWidget(self.button) + + self.setFileMode(QFileDialog.Directory) + + self.lineEdit.textChanged.connect(self.changed) + + completer = QCompleter(self.lineEdit) + model = QFileSystemModel(completer) + model.setRootPath(QDir.homePath()) + model.setFilter(QDir.Dirs | QDir.NoDotAndDotDot) + completer.setModel(model) + self.lineEdit.setCompleter(completer) + + app.translateUI(self) + + def translateUI(self): + self.button.setToolTip(_("Open file dialog")) + + def fileDialog(self, create = False): + """Returns the QFileDialog, if already instantiated. + + If create is True, the dialog is instantiated anyhow. + + """ + if create and self._fileDialog is None: + self._fileDialog = QFileDialog(self) + return self._fileDialog + + def setPath(self, path): + self.lineEdit.setText(path) + + def path(self): + return self.lineEdit.text() + + def setFileMode(self, mode): + """Sets the mode for the dialog, is a QFileDialog.FileMode value.""" + if mode == QFileDialog.Directory: + self.button.setIcon(icons.get('folder-open')) + else: + self.button.setIcon(icons.get('document-open')) + self._fileMode = mode + + def fileMode(self): + return self._fileMode + + def setDialogTitle(self, title): + self._dialogTitle = title + if self._fileDialog: + self._fileDialog.setWindowTitle(title) + + def dialogTitle(self): + return self._dialogTitle + + def browse(self): + """Opens the dialog.""" + dlg = self.fileDialog(True) + dlg.setFileMode(self._fileMode) + if self._dialogTitle: + title = self._dialogTitle + elif self.fileMode() == QFileDialog.Directory: + title = _("Select a directory") + else: + title = _("Select a file") + dlg.setWindowTitle(app.caption(title)) + dlg.selectFile(self.path()) + result = dlg.exec_() + if result: + self.lineEdit.setText(dlg.selectedFiles()[0]) + + diff -Nru frescobaldi-1.2.0/frescobaldi.desktop frescobaldi-2.0.0/frescobaldi.desktop --- frescobaldi-1.2.0/frescobaldi.desktop 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi.desktop 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,20 @@ +[Desktop Entry] +GenericName=LilyPond Music Editor +GenericName[nl]=Muziek-editor voor LilyPond +GenericName[es]=Editor de música para LilyPond +GenericName[it]=Editor musicale per LilyPond +GenericName[ru]=Музыкальный нотатор LilyPond +GenericName[cs]=LilyPond hudební editor +GenericName[tr]=LilyPond Müzik Düzenleyicisi +GenericName[pl]=Edytor nutowy LilyPond +GenericName[fr]=Éditeur de musique LilyPond +GenericName[de]=LilyPond Musik-Editor +Name=Frescobaldi +MimeType=text/x-lilypond; +Exec=frescobaldi %F +X-KDE-StartupNotify=true +Icon=frescobaldi +Type=Application +Terminal=false +InitialPreference=8 +Categories=Qt;AudioVideo;Music;Utility;TextEditor; diff -Nru frescobaldi-1.2.0/frescobaldi.pot frescobaldi-2.0.0/frescobaldi.pot --- frescobaldi-1.2.0/frescobaldi.pot 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi.pot 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,5541 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: frescobaldi 2.0.0\n" +"Report-Msgid-Bugs-To: info@frescobaldi.org\n" +"POT-Creation-Date: 2011-12-23 09:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: frescobaldi_app/about.py:43 +msgid "{appname} is written in {python} and uses the {qt} toolkit." +msgstr "" + +#. L10N: the Python programming language +#: frescobaldi_app/about.py:46 +msgid "Python" +msgstr "" + +#. L10N: the Qt4 application framework +#: frescobaldi_app/about.py:48 +msgid "Qt4" +msgstr "" + +#: frescobaldi_app/about.py:50 +msgid "" +"The Music View is powered by the {poppler} library by {authors} and others." +msgstr "" + +#. L10N: the Poppler PDF library +#: frescobaldi_app/about.py:54 +msgid "Poppler" +msgstr "" + +#: frescobaldi_app/about.py:57 +msgid "Most of the bundled icons are created by {tango}." +msgstr "" + +#: frescobaldi_app/about.py:59 +msgid "The Tango Desktop Project" +msgstr "" + +#: frescobaldi_app/about.py:61 +msgid "{appname} is translated into the following languages:" +msgstr "" + +#: frescobaldi_app/about.py:80 +msgid "About {appname}" +msgstr "" + +#: frescobaldi_app/about.py:87 +msgid "About" +msgstr "" + +#: frescobaldi_app/about.py:88 frescobaldi_app/help/contents.py:280 +msgid "Credits" +msgstr "" + +#: frescobaldi_app/about.py:89 +msgid "Version" +msgstr "" + +#: frescobaldi_app/about.py:144 +msgid "Operating System" +msgstr "" + +#: frescobaldi_app/about.py:151 +msgid "Version {version}" +msgstr "" + +#: frescobaldi_app/about.py:152 frescobaldi_app/main.py:59 +msgid "A LilyPond Music Editor" +msgstr "" + +#: frescobaldi_app/about.py:153 +msgid "Copyright (c) {year} by {author}" +msgstr "" + +#: frescobaldi_app/about.py:157 +msgid "Send an e-mail message to the maintainers." +msgstr "" + +#. L10N: Translate this sentence and fill in your own name to have it appear in the About Dialog. +#: frescobaldi_app/about.py:160 frescobaldi_app/help/contents.py:57 +msgid "Translated by Your Name." +msgstr "" + +#: frescobaldi_app/about.py:165 +msgid "Licensed under the {gpl}." +msgstr "" + +#: frescobaldi_app/actioncollectionmanager.py:123 +#: frescobaldi_app/preferences/shortcuts.py:203 +msgid "This shortcut conflicts with the following command:" +msgid_plural "This shortcut conflicts with the following commands:" +msgstr[0] "" +msgstr[1] "" + +#: frescobaldi_app/actioncollectionmanager.py:129 +#: frescobaldi_app/preferences/shortcuts.py:209 +msgid "Shortcut Conflict" +msgstr "" + +#: frescobaldi_app/actioncollectionmanager.py:131 +msgid "Edit again" +msgstr "" + +#: frescobaldi_app/app.py:128 +msgid "LilyPond Files" +msgstr "" + +#: frescobaldi_app/app.py:129 +msgid "LaTeX Files" +msgstr "" + +#: frescobaldi_app/app.py:130 +msgid "DocBook Files" +msgstr "" + +#: frescobaldi_app/app.py:131 +msgid "HTML Files" +msgstr "" + +#: frescobaldi_app/app.py:132 +msgid "Texinfo Files" +msgstr "" + +#: frescobaldi_app/app.py:133 +msgid "Scheme Files" +msgstr "" + +#: frescobaldi_app/app.py:134 frescobaldi_app/snippet/widget.py:260 +#: frescobaldi_app/snippet/widget.py:277 +msgid "All Files" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:112 +msgid "&Mark Current Line" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:113 +msgid "Clear &Error Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:114 +msgid "Clear &All Marks" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:115 +msgid "Next Mark" +msgstr "" + +#: frescobaldi_app/bookmarkmanager.py:116 +msgid "Previous Mark" +msgstr "" + +#: frescobaldi_app/convert_ly.py:118 +msgid "From version:" +msgstr "" + +#: frescobaldi_app/convert_ly.py:119 +msgid "To version:" +msgstr "" + +#: frescobaldi_app/convert_ly.py:120 +msgid "Save convert-ly messages in document" +msgstr "" + +#: frescobaldi_app/convert_ly.py:122 +msgid "" +"If checked, the messages of convert-ly are appended as a comment to the end " +"of the document." +msgstr "" + +#: frescobaldi_app/convert_ly.py:124 +msgid "&Messages" +msgstr "" + +#: frescobaldi_app/convert_ly.py:125 +msgid "&Changes" +msgstr "" + +#: frescobaldi_app/convert_ly.py:126 +msgid "Run Again" +msgstr "" + +#: frescobaldi_app/convert_ly.py:137 frescobaldi_app/docbrowser/browser.py:139 +#: frescobaldi_app/musicview/image.py:166 +msgid "" +msgstr "" + +#: frescobaldi_app/convert_ly.py:138 +msgid "Convert-ly from LilyPond {version}" +msgstr "" + +#: frescobaldi_app/convert_ly.py:162 +msgid "(set in document)" +msgstr "" + +#: frescobaldi_app/convert_ly.py:175 +msgid "Both 'from' and 'to' versions need to be set." +msgstr "" + +#: frescobaldi_app/convert_ly.py:190 +msgid "" +"Could not start {convert_ly}:\n" +"\n" +"{message}\n" +msgstr "" + +#: frescobaldi_app/convert_ly.py:196 +msgid "The document has not been changed." +msgstr "" + +#: frescobaldi_app/convert_ly.py:202 +msgid "Current Document" +msgstr "" + +#: frescobaldi_app/convert_ly.py:202 +msgid "Converted Document" +msgstr "" + +#: frescobaldi_app/convert_ly.py:208 +msgid "Colors:" +msgstr "" + +#: frescobaldi_app/convert_ly.py:209 +msgid "Added" +msgstr "" + +#: frescobaldi_app/convert_ly.py:210 +msgid "Changed" +msgstr "" + +#: frescobaldi_app/convert_ly.py:211 +msgid "Deleted" +msgstr "" + +#: frescobaldi_app/convert_ly.py:212 +msgid "Links:" +msgstr "" + +#: frescobaldi_app/convert_ly.py:213 +msgid "First Change" +msgstr "" + +#: frescobaldi_app/convert_ly.py:214 +msgid "Next Change" +msgstr "" + +#: frescobaldi_app/convert_ly.py:215 +msgid "Top" +msgstr "" + +#: frescobaldi_app/cut_assign.py:39 +msgid "Cut and Assign" +msgstr "" + +#: frescobaldi_app/cut_assign.py:40 +msgid "Please enter the name for the variable to assign the selected text to:" +msgstr "" + +#: frescobaldi_app/document.py:143 frescobaldi_app/doclist/widget.py:126 +#: frescobaldi_app/snippet/edit.py:163 +msgid "Untitled" +msgstr "" + +#: frescobaldi_app/document.py:145 +msgid "Untitled ({num})" +msgstr "" + +#: frescobaldi_app/documentactions.py:125 +msgid "Cut and Assign..." +msgstr "" + +#: frescobaldi_app/documentactions.py:126 +msgid "Syntax &Highlighting" +msgstr "" + +#: frescobaldi_app/documentactions.py:127 +msgid "&Automatic Indent" +msgstr "" + +#: frescobaldi_app/documentactions.py:128 +msgid "Re-&Indent" +msgstr "" + +#: frescobaldi_app/documentactions.py:129 +msgid "&Format" +msgstr "" + +#: frescobaldi_app/documentactions.py:130 +msgid "&Update with convert-ly..." +msgstr "" + +#: frescobaldi_app/documentcontextmenu.py:55 frescobaldi_app/mainwindow.py:928 +#: frescobaldi_app/sessions/manager.py:128 +msgid "&Save" +msgstr "" + +#: frescobaldi_app/documentcontextmenu.py:56 frescobaldi_app/mainwindow.py:929 +msgid "Save &As..." +msgstr "" + +#: frescobaldi_app/documentcontextmenu.py:57 frescobaldi_app/mainwindow.py:933 +msgid "&Close" +msgstr "" + +#: frescobaldi_app/documentmenu.py:42 +msgctxt "menu title" +msgid "&Document" +msgstr "" + +#. L10N: 'always engraved': the document is marked as 'Always Engrave' in the LilyPond menu +#: frescobaldi_app/documentmenu.py:109 +msgid "[always engraved]" +msgstr "" + +#: frescobaldi_app/exception.py:69 +msgid "An internal error has occurred:" +msgstr "" + +#: frescobaldi_app/exception.py:70 +msgid "Internal Error" +msgstr "" + +#: frescobaldi_app/exception.py:71 +msgid "Email Bug Report..." +msgstr "" + +#: frescobaldi_app/exception.py:79 +msgid "Optionally describe below what you were doing:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:69 +msgid "Global Fonts" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:71 +msgid "" +"Please select the three global fonts to use for \\roman, " +"\\sans, and \\typewriter respectively. You should also " +"set the staff size to the global staff size you use in the document (20 by " +"default)." +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:76 +msgid "Roman Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:77 +msgid "Sans Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:78 +msgid "Typewriter Font:" +msgstr "" + +#: frescobaldi_app/globalfontdialog.py:79 +msgid "Staff Size:" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:114 +msgid "Hyphenate Lyrics Text" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:115 +msgid "Please select a language:" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:157 frescobaldi_app/hyphendialog.py:166 +msgid "Lyrics" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:166 frescobaldi_app/pitch/pitch.py:744 +#: frescobaldi_app/rhythm/rhythm.py:279 frescobaldi_app/scorewiz/dialog.py:198 +msgctxt "menu title" +msgid "Tools" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:138 +#: frescobaldi_app/help/contents.py:145 +msgctxt "menu title" +msgid "Edit" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:167 frescobaldi_app/help/contents.py:139 +#: frescobaldi_app/preferences/__init__.py:100 +#: frescobaldi_app/preferences/midi.py:134 +msgid "Preferences" +msgstr "" + +#: frescobaldi_app/hyphendialog.py:169 +msgid "" +"

\n" +"Frescobaldi can automatically place hyphens '{hyphen}' inside texts to make\n" +"those texts usable as lyrics.\n" +"It can use hyphenation dictionaries of OpenOffice.org, Scribus, etc.\n" +"

\n" +"\n" +"

\n" +"To use this feature you must first select the text you want to hyphenate. " +"Then\n" +"press {key_hyphen} or choose {menu_hyphen}.\n" +"In the dialog that appears, select the language.\n" +"Click OK or press Enter to have the hyphenation take place. \n" +"

\n" +"\n" +"

\n" +"A small limitation is that word processor hyphenation dictionaries often " +"don't\n" +"want to break a word right after the first letter (e.g. '{example}'), " +"because that\n" +"does not look nice in word processor texts. So it can happen that you\n" +"have to add some hyphens after the first letter of such lyrics. \n" +"

\n" +"\n" +"

\n" +"There is also a command to remove hyphenation. This can be useful if you " +"have a\n" +"stanza of lyrics that you just want to display as a markup below the music.\n" +"Under {menu_settings} you can enter a list of directories to search for\n" +"hyphenation pattern files.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/inputdialog.py:101 +msgid "Select Color" +msgstr "" + +#: frescobaldi_app/job.py:195 +msgid "Starting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:200 +msgid "Aborting {job}..." +msgstr "" + +#: frescobaldi_app/job.py:206 +msgid "" +"Could not start {program}.\n" +"Please check path and permissions." +msgstr "" + +#: frescobaldi_app/job.py:209 +msgid "Could not read from the process." +msgstr "" + +#: frescobaldi_app/job.py:211 +msgid "An unknown error occured." +msgstr "" + +#: frescobaldi_app/job.py:216 +msgid "Exited with return code {code}." +msgstr "" + +#: frescobaldi_app/job.py:218 +msgid "Exited with exit status {status}." +msgstr "" + +#: frescobaldi_app/job.py:221 +msgid "Completed successfully in {time}." +msgstr "" + +#: frescobaldi_app/lyrics.py:132 +msgid "&Hyphenate Lyrics Text..." +msgstr "" + +#: frescobaldi_app/lyrics.py:133 +msgid "&Remove hyphenation" +msgstr "" + +#: frescobaldi_app/lyrics.py:134 +msgid "&Copy Lyrics with hyphenation removed" +msgstr "" + +#: frescobaldi_app/main.py:57 +msgid "{appname} [options] file ..." +msgstr "" + +#: frescobaldi_app/main.py:60 +msgid "ENC" +msgstr "" + +#: frescobaldi_app/main.py:61 +msgid "Encoding to use" +msgstr "" + +#: frescobaldi_app/main.py:62 frescobaldi_app/main.py:64 +msgid "NUM" +msgstr "" + +#: frescobaldi_app/main.py:63 +msgid "Line number to go to, starting at 1" +msgstr "" + +#: frescobaldi_app/main.py:65 +msgid "Column to go to, starting at 0" +msgstr "" + +#: frescobaldi_app/main.py:66 +msgid "NAME" +msgstr "" + +#: frescobaldi_app/main.py:67 +msgid "Session to start ('{none}' for empty session)" +msgstr "" + +#. L10N: state of document in window titlebar +#: frescobaldi_app/mainwindow.py:225 +msgid "[modified]" +msgstr "" + +#: frescobaldi_app/mainwindow.py:268 +msgctxt "dialog title" +msgid "Close Document" +msgstr "" + +#: frescobaldi_app/mainwindow.py:269 +msgid "" +"The document \"{name}\" has been modified.\n" +"Do you want to save your changes or discard them?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:281 +msgid "Tab Bar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:335 frescobaldi_app/popplerprint.py:53 +#: frescobaldi_app/sessions/dialog.py:165 +#: frescobaldi_app/sessions/dialog.py:173 +#: frescobaldi_app/sessions/dialog.py:179 +msgid "Warning" +msgstr "" + +#: frescobaldi_app/mainwindow.py:336 +msgid "" +"Can't load non-local document:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:354 +msgctxt "dialog title" +msgid "Open File" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/mainwindow.py:373 frescobaldi_app/mainwindow.py:379 +#: frescobaldi_app/mainwindow.py:404 frescobaldi_app/mainwindow.py:455 +#: frescobaldi_app/mainwindow.py:523 frescobaldi_app/mainwindow.py:583 +#: frescobaldi_app/musicview/image.py:213 +#: frescobaldi_app/preferences/fontscolors.py:476 +#: frescobaldi_app/preferences/fontscolors.py:514 +#: frescobaldi_app/snippet/import_export.py:104 +#: frescobaldi_app/snippet/widget.py:287 +msgid "Error" +msgstr "" + +#: frescobaldi_app/mainwindow.py:374 frescobaldi_app/mainwindow.py:380 +#: frescobaldi_app/mainwindow.py:405 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:399 +msgctxt "dialog title" +msgid "Save File" +msgstr "" + +#: frescobaldi_app/mainwindow.py:439 +msgctxt "dialog title" +msgid "Save Copy" +msgstr "" + +#: frescobaldi_app/mainwindow.py:445 +msgctxt "dialog title" +msgid "Save Selection" +msgstr "" + +#: frescobaldi_app/mainwindow.py:456 frescobaldi_app/mainwindow.py:584 +#: frescobaldi_app/snippet/widget.py:288 +msgid "" +"Can't write to destination:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:516 +msgctxt "dialog title" +msgid "Insert From File" +msgstr "" + +#: frescobaldi_app/mainwindow.py:524 +#: frescobaldi_app/snippet/import_export.py:105 +msgid "" +"Can't read from source:\n" +"\n" +"{url}\n" +"\n" +"{error}" +msgstr "" + +#: frescobaldi_app/mainwindow.py:541 +msgctxt "dialog title" +msgid "Print Source" +msgstr "" + +#: frescobaldi_app/mainwindow.py:574 +msgid "Export as HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:695 +msgid "" +"Please describe the issue or feature request.\n" +"Provide as much information as possible.\n" +"\n" +"\n" +msgstr "" + +#: frescobaldi_app/mainwindow.py:796 +msgid "Main Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:797 +msgid "Music View Toolbar" +msgstr "" + +#: frescobaldi_app/mainwindow.py:923 +msgctxt "action: new document" +msgid "&New" +msgstr "" + +#: frescobaldi_app/mainwindow.py:924 +msgid "&Open..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:925 +msgid "Open &Recent" +msgstr "" + +#: frescobaldi_app/mainwindow.py:926 +msgid "Insert from &File..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:927 +msgid "Open Current Directory" +msgstr "" + +#: frescobaldi_app/mainwindow.py:930 +msgid "Save Copy or Selection As..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:931 +msgid "Save All" +msgstr "" + +#: frescobaldi_app/mainwindow.py:932 +msgid "Print Source..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:934 +msgid "Close Other Documents" +msgstr "" + +#: frescobaldi_app/mainwindow.py:935 +msgid "Close All Documents" +msgstr "" + +#: frescobaldi_app/mainwindow.py:936 +msgid "Closes all documents and leaves the current session." +msgstr "" + +#: frescobaldi_app/mainwindow.py:937 +msgid "&Quit" +msgstr "" + +#: frescobaldi_app/mainwindow.py:939 +msgid "Export Source as Colored &HTML..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:941 +msgid "&Undo" +msgstr "" + +#: frescobaldi_app/mainwindow.py:942 +msgid "Re&do" +msgstr "" + +#: frescobaldi_app/mainwindow.py:943 +msgid "Cu&t" +msgstr "" + +#: frescobaldi_app/mainwindow.py:944 +msgid "&Copy" +msgstr "" + +#: frescobaldi_app/mainwindow.py:945 +msgid "Copy as Colored &HTML" +msgstr "" + +#: frescobaldi_app/mainwindow.py:946 +msgid "&Paste" +msgstr "" + +#: frescobaldi_app/mainwindow.py:947 +msgid "Select &All" +msgstr "" + +#: frescobaldi_app/mainwindow.py:948 +msgid "Select &Block" +msgstr "" + +#: frescobaldi_app/mainwindow.py:949 +msgid "Select &None" +msgstr "" + +#: frescobaldi_app/mainwindow.py:950 +msgid "Select Whole Lines Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:951 +msgid "Select Whole Lines Down" +msgstr "" + +#: frescobaldi_app/mainwindow.py:952 +msgid "&Find..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:953 +msgid "Find Ne&xt" +msgstr "" + +#: frescobaldi_app/mainwindow.py:954 +msgid "Find Pre&vious" +msgstr "" + +#: frescobaldi_app/mainwindow.py:955 +msgid "&Replace..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:956 +msgid "Pr&eferences..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:958 +msgid "&Next Document" +msgstr "" + +#: frescobaldi_app/mainwindow.py:959 +msgid "&Previous Document" +msgstr "" + +#: frescobaldi_app/mainwindow.py:960 +msgid "Scroll Up" +msgstr "" + +#: frescobaldi_app/mainwindow.py:961 +msgid "Scroll Down" +msgstr "" + +#: frescobaldi_app/mainwindow.py:963 +msgid "New &Window" +msgstr "" + +#: frescobaldi_app/mainwindow.py:964 +msgid "&Fullscreen" +msgstr "" + +#: frescobaldi_app/mainwindow.py:966 +msgid "&User Guide" +msgstr "" + +#: frescobaldi_app/mainwindow.py:967 +msgid "&What's This?" +msgstr "" + +#: frescobaldi_app/mainwindow.py:968 +msgid "Report a &Bug..." +msgstr "" + +#: frescobaldi_app/mainwindow.py:969 +msgid "&About {appname}..." +msgstr "" + +#: frescobaldi_app/menu.py:81 +msgctxt "menu title" +msgid "&File" +msgstr "" + +#: frescobaldi_app/menu.py:112 +msgctxt "submenu title" +msgid "&Export" +msgstr "" + +#: frescobaldi_app/menu.py:120 +msgctxt "menu title" +msgid "&Edit" +msgstr "" + +#: frescobaldi_app/menu.py:147 +msgctxt "menu title" +msgid "&View" +msgstr "" + +#: frescobaldi_app/menu.py:170 +msgctxt "submenu title" +msgid "Music &View" +msgstr "" + +#: frescobaldi_app/menu.py:189 +msgctxt "menu title" +msgid "&LilyPond" +msgstr "" + +#: frescobaldi_app/menu.py:208 +msgctxt "menu title" +msgid "&Tools" +msgstr "" + +#: frescobaldi_app/menu.py:233 +msgctxt "submenu title" +msgid "&Lyrics" +msgstr "" + +#: frescobaldi_app/menu.py:245 +msgctxt "submenu title" +msgid "&Pitch" +msgstr "" + +#: frescobaldi_app/menu.py:259 +msgctxt "submenu title" +msgid "&Rhythm" +msgstr "" + +#: frescobaldi_app/menu.py:287 +msgctxt "menu title" +msgid "&Window" +msgstr "" + +#: frescobaldi_app/menu.py:307 +msgctxt "menu title" +msgid "&Help" +msgstr "" + +#: frescobaldi_app/musicpreview.py:113 +msgid "Document:" +msgstr "" + +#: frescobaldi_app/musicpreview.py:195 +msgid "&Print" +msgstr "" + +#: frescobaldi_app/musicpreview.py:196 +msgid "Music Preview" +msgstr "" + +#: frescobaldi_app/popplerdummy.py:42 +msgid "Could not load the {name} module." +msgstr "" + +#: frescobaldi_app/popplerprint.py:54 +msgid "" +"No print command to print a PostScript file could be found.\n" +"\n" +"Therefore the document will be printed using raster images at {resolution} " +"DPI. It is recommended to print using a dedicated PDF viewer.\n" +"\n" +"Do you want to continue?" +msgstr "" + +#: frescobaldi_app/popplerprint.py:61 +msgid "PDF Document" +msgstr "" + +#: frescobaldi_app/popplerprint.py:69 +msgid "Print {filename}" +msgstr "" + +#: frescobaldi_app/popplerprint.py:87 frescobaldi_app/popplerprint.py:116 +msgid "Printing Error" +msgstr "" + +#: frescobaldi_app/popplerprint.py:88 frescobaldi_app/popplerprint.py:117 +msgid "Could not send the document to the printer." +msgstr "" + +#: frescobaldi_app/popplerprint.py:108 +msgid "Printing page {page} ({num} of {total})..." +msgstr "" + +#: frescobaldi_app/search.py:99 +msgid "Search:" +msgstr "" + +#: frescobaldi_app/search.py:100 +msgid "&Case" +msgstr "" + +#: frescobaldi_app/search.py:101 +msgid "Case Sensitive" +msgstr "" + +#: frescobaldi_app/search.py:102 +msgid "&Regex" +msgstr "" + +#: frescobaldi_app/search.py:103 +msgid "Regular Expression" +msgstr "" + +#: frescobaldi_app/search.py:104 +msgid "The total number of matches" +msgstr "" + +#: frescobaldi_app/search.py:105 +msgid "Close" +msgstr "" + +#: frescobaldi_app/search.py:106 +msgid "Replace:" +msgstr "" + +#: frescobaldi_app/search.py:107 +msgid "Re&place" +msgstr "" + +#: frescobaldi_app/search.py:108 +msgid "Replaces the next occurrence of the search term." +msgstr "" + +#: frescobaldi_app/search.py:109 +msgid "&All" +msgstr "" + +#: frescobaldi_app/search.py:110 +msgid "" +"Replaces all occurrences of the search term in the document or selection." +msgstr "" + +#: frescobaldi_app/viewmanager.py:66 frescobaldi_app/viewmanager.py:213 +msgid "Line: {line}, Col: {column}" +msgstr "" + +#: frescobaldi_app/viewmanager.py:84 frescobaldi_app/viewmanager.py:441 +msgid "Split &Horizontally" +msgstr "" + +#: frescobaldi_app/viewmanager.py:87 frescobaldi_app/viewmanager.py:442 +msgid "Split &Vertically" +msgstr "" + +#: frescobaldi_app/viewmanager.py:91 +msgid "&Close View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:443 +msgid "&Close Current View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:444 +msgid "Close &Other Views" +msgstr "" + +#: frescobaldi_app/viewmanager.py:445 +msgid "&Next View" +msgstr "" + +#: frescobaldi_app/viewmanager.py:446 +msgid "&Previous View" +msgstr "" + +#: frescobaldi_app/autocomplete/__init__.py:79 +msgid "Automatic &Completion" +msgstr "" + +#: frescobaldi_app/autocomplete/__init__.py:80 +msgid "Show C&ompletions Popup" +msgstr "" + +#: frescobaldi_app/charmap/__init__.py:40 +#: frescobaldi_app/preferences/tools.py:186 +msgid "Special Characters" +msgstr "" + +#: frescobaldi_app/charmap/__init__.py:41 +msgid "Special Charac&ters" +msgstr "" + +#: frescobaldi_app/docbrowser/__init__.py:46 +#: frescobaldi_app/docbrowser/__init__.py:62 +#: frescobaldi_app/preferences/documentation.py:110 +msgid "Documentation Browser" +msgstr "" + +#: frescobaldi_app/docbrowser/__init__.py:47 +msgid "&Documentation Browser" +msgstr "" + +#: frescobaldi_app/docbrowser/__init__.py:80 +#: frescobaldi_app/help/browser.py:76 +msgid "Back" +msgstr "" + +#: frescobaldi_app/docbrowser/__init__.py:81 +#: frescobaldi_app/help/browser.py:77 +msgid "Forward" +msgstr "" + +#. L10N: Home page of the LilyPond manual +#: frescobaldi_app/docbrowser/__init__.py:83 +msgid "Home" +msgstr "" + +#: frescobaldi_app/docbrowser/__init__.py:84 +msgid "&LilyPond Documentation" +msgstr "" + +#: frescobaldi_app/docbrowser/__init__.py:85 +msgid "&Contextual LilyPond Help" +msgstr "" + +#: frescobaldi_app/docbrowser/browser.py:96 +#: frescobaldi_app/snippet/widget.py:167 +msgid "Search..." +msgstr "" + +#: frescobaldi_app/docbrowser/browser.py:136 +msgid "(local)" +msgstr "" + +#: frescobaldi_app/docbrowser/browser.py:138 +msgid "({hostname})" +msgstr "" + +#: frescobaldi_app/docbrowser/sourceviewer.py:59 +msgid "LilyPond Source" +msgstr "" + +#: frescobaldi_app/doclist/__init__.py:39 +#: frescobaldi_app/preferences/tools.py:219 +msgid "Documents" +msgstr "" + +#: frescobaldi_app/doclist/__init__.py:40 +msgid "Docum&ents" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:169 +msgid "&Always Engrave [{docname}]" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:171 +msgid "&Always Engrave This Document" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:200 +msgid "Engrave" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:201 +msgid "&Engrave (preview)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:202 +msgid "Engrave (&publish)" +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:203 +msgid "Engrave (&custom)..." +msgstr "" + +#: frescobaldi_app/engrave/__init__.py:204 +msgid "Abort Engraving &Job" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:118 frescobaldi_app/engrave/custom.py:206 +msgid "Engrave custom" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:119 +msgid "LilyPond Version:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:120 +msgid "Output Format:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:121 +msgid "Resolution:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:123 +msgid "Run LilyPond in preview mode (with Point and Click)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:124 +msgid "Run LilyPond with verbose output" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:125 +#: frescobaldi_app/preferences/lilypond.py:284 +msgid "Delete intermediate output files" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:126 +msgid "Command line:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:127 +msgid "Run LilyPond" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:149 +msgid "LilyPond {version}" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:210 +msgid "" +"In this dialog you can set some parameters for the LilyPond command to be " +"used\n" +"to engrave your document.\n" +"It is even possible to edit the command line itself.\n" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:215 +msgid "The following replacements will be made:" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:218 +msgid "The LilyPond executable" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:219 +msgid "All the include paths" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:220 +msgid "The filename of the document" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:233 +msgid "PDF" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:239 +msgid "PostScript" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:245 +msgid "PNG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:251 +msgid "SVG" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:257 +msgid "PDF (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:263 +msgid "Encapsulated PostScript (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/custom.py:269 +msgid "PNG (EPS Backend)" +msgstr "" + +#: frescobaldi_app/engrave/result_menu.py:45 +msgid "Generated &Files" +msgstr "" + +#: frescobaldi_app/engrave/result_menu.py:66 +msgid "No files available" +msgstr "" + +#: frescobaldi_app/help/browser.py:75 +msgid "Toolbar" +msgstr "" + +#: frescobaldi_app/help/browser.py:78 +msgid "Start" +msgstr "" + +#: frescobaldi_app/help/browser.py:79 +msgid "Contents" +msgstr "" + +#: frescobaldi_app/help/browser.py:85 frescobaldi_app/help/browser.py:86 +#: frescobaldi_app/help/contents.py:70 +#: frescobaldi_app/quickinsert/widget.py:106 +msgid "Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:37 +msgid "No Help" +msgstr "" + +#: frescobaldi_app/help/contents.py:40 +msgid "No help has been found on this topic." +msgstr "" + +#: frescobaldi_app/help/contents.py:46 +msgid "Frescobaldi Manual" +msgstr "" + +#: frescobaldi_app/help/contents.py:49 +msgid "" +"

\n" +"Frescobaldi is a light-weight and powerful editor for LilyPond\n" +"sheet music documents.\n" +"This manual is written by {author} and documents {appname} version " +"{version}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:60 +msgid "" +"

How to get help inside Frescobaldi

\n" +"\n" +"

\n" +"In many dialogs you can click a Help button or press the {key_help} key.\n" +"Many user interface items also have \"What's This\" information which can " +"be\n" +"revealed by pressing {key_whatsthis} or by selecting {menu_whatsthis}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:70 +msgid "What's This" +msgstr "" + +#: frescobaldi_app/help/contents.py:88 +msgid "Introduction" +msgstr "" + +#: frescobaldi_app/help/contents.py:91 +msgid "" +"

\n" +"LilyPond\n" +"is an open-source music engraving program, producing very high-quality " +"sheet\n" +"music printouts from fairly simple text input files.\n" +"Those text files can be created with any text editor, and LilyPond then " +"loads\n" +"the text file and outputs a beautiful engraving, by default in PDF format.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is an application designed to make editing LilyPond music " +"scores\n" +"faster and easier. You still will need to learn the LilyPond input " +"language.\n" +"If you read the {getting_started} section of this User Guide, you'll also " +"pickup\n" +"some LilyPond basics.\n" +"

\n" +"\n" +"

\n" +"Then you can continue to learn using the Learning Manual from \n" +"LilyPond's excellent online " +"documentation.\n" +"

" +msgstr "" + +#: frescobaldi_app/help/contents.py:116 +msgid "Getting Started" +msgstr "" + +#: frescobaldi_app/help/contents.py:136 +#: frescobaldi_app/preferences/fontscolors.py:482 +#: frescobaldi_app/preferences/lilypond.py:237 +#: frescobaldi_app/scorewiz/settings.py:289 +msgid "LilyPond" +msgstr "" + +#: frescobaldi_app/help/contents.py:136 +msgid "Engrave (publish)" +msgstr "" + +#: frescobaldi_app/help/contents.py:140 +#: frescobaldi_app/preferences/__init__.py:172 +msgid "LilyPond Preferences" +msgstr "" + +#: frescobaldi_app/help/contents.py:142 +msgctxt "menu title" +msgid "View" +msgstr "" + +#: frescobaldi_app/help/contents.py:143 +msgid "Clear Error Marks" +msgstr "" + +#: frescobaldi_app/help/contents.py:146 +msgid "Copy to Image..." +msgstr "" + +#: frescobaldi_app/help/contents.py:147 +msgid "" +"

\n" +"The default screen of Frescobaldi shows a text document on the left and an\n" +"empty music preview on the right.\n" +"

\n" +"\n" +"

\n" +"Now, in the text view, enter some LilyPond code, like this:\n" +"

\n" +"\n" +"{example}\n" +"\n" +"

\n" +"Then click the Lily toolbar button or press {key_engrave}.\n" +"If all is well, LilyPond starts now and processes your file.\n" +"At the bottom of the screen you can follow LilyPond's progress.\n" +"If LilyPond does not encounter any mistakes on your part, it will produce a " +"PDF\n" +"file that will be displayed in the music preview:\n" +"

\n" +"\n" +"

\n" +"\n" +"

\n" +"The Music View has many possibilities:\n" +"

\n" +"\n" +"

    \n" +"
  • \n" +"Hovering notes and other objects will highlight them in the text;\n" +"click objects to move the text cursor to them\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-wheel to change the zoom. Zooming will center at the mouse pointer\n" +"
  • \n" +"\n" +"
  • \n" +"Ctrl-click on an empty place to show a magnifier glass\n" +"
  • \n" +"\n" +"
  • \n" +"Moving the text cursor or selecting text highlights the notes in the " +"preview;\n" +"press {key_jump} to explicitly center and highlight a note or other object\n" +"in the preview.\n" +"
  • \n" +"\n" +"
  • \n" +"Shift-drag a selection and then press {key_copy_image} or {menu_copy_image}\n" +"to copy the selected music as a raster image to the clipboard, a file or\n" +"another application.\n" +"
  • \n" +"
\n" +"\n" +"

\n" +"If your music score is finished, it is recommended to run LilyPond once " +"again\n" +"with clickable notes turned off: menu {menu_engrave}.\n" +"This will result in much smaller PDF documents.\n" +"

\n" +"\n" +"

\n" +"If LilyPond does not start at all, check if you have installed LilyPond\n" +"correctly and that the lilypond command is in your system's PATH " +"environment\n" +"variable. If needed, provide the exact path to your LilyPond executable " +"under\n" +"{menu_preferences_lilypond}.\n" +"

\n" +"\n" +"

\n" +"If LilyPond encounters errors in your document they will show up in the " +"log,\n" +"and Frescobaldi will mark the lines in your document where the errors were\n" +"found. Clicking the error in the log or pressing {key_error} immediately\n" +"brings the text cursor to the offending place. Pressing {key_error} again\n" +"will move to the next error message and so forth. When running LilyPond\n" +"again, the error line marks will be removed.\n" +"You can manually remove the error line markings with the option\n" +"{menu_clear_error_marks}.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:228 +msgid "Other Tools" +msgstr "" + +#: frescobaldi_app/help/contents.py:231 +msgid "

Some other important tools are listed here.

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:252 +msgid "About Frescobaldi" +msgstr "" + +#: frescobaldi_app/help/contents.py:255 +msgid "" +"

\n" +"Frescobaldi is named after\n" +"Girolamo\n" +"Frescobaldi (1583 – 1643), an Italian organist and composer.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi's homepage is at\n" +"www.frescobaldi.org\n" +"and there is a mailinglist at\n" +"frescobaldi@googlegroups." +"com\n" +"(more info).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:285 +msgid "Frescobaldi's main author is {author}." +msgstr "" + +#: frescobaldi_app/help/contents.py:293 +msgid "Contributing" +msgstr "" + +#: frescobaldi_app/help/contents.py:296 +msgid "" +"

\n" +"Frescobaldi is a Free\n" +"Software project to create a user friendly LilyPond music score editor.\n" +"The goal is to make Frescobaldi available on all major platforms.\n" +"

\n" +"\n" +"

\n" +"Frescobaldi is developed in a public GitHub repository at {url}.\n" +"There you can browse or checkout the source code and report bugs and " +"wishes.\n" +"

\n" +"\n" +"

\n" +"You can contribute by simply using Frescobaldi and reporting bugs and " +"suggestions.\n" +"Translations are also very welcome. How to create new translations is " +"described\n" +"in the file README-translations in the source distribution of Frescobaldi.\n" +"If you want to add functionality you can find information about the source " +"code\n" +"structure in the file README-development.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:321 +msgid "History of Frescobaldi" +msgstr "" + +#: frescobaldi_app/help/contents.py:324 +msgid "" +"

\n" +"Frescobaldi has its roots in LilyKDE, which was a plugin for KDE3's editor " +"Kate.\n" +"LilyKDE was written in Python and released in 2007 on Christmas.\n" +"

\n" +"\n" +"

\n" +"When KDE developed version 4, it was not immediately possible to make Kate\n" +"plugins in Python. So LilyKDE became a standalone application, wrapping the\n" +"Kate texteditor part, and was renamed to Frescobaldi. It still used the " +"Okular\n" +"KDE part to display PDF documents.\n" +"Frescobaldi 0.7 was the first public release, on Christmas 2008.\n" +"On Christmas 2009 version 1.0.0 was released and on Christmas 2010 version " +"1.2.0.\n" +"

\n" +"\n" +"

\n" +"At that time it was decided to move away from the KDE4 libraries and just " +"use\n" +"Python and Qt4 which are easily available on all major computing platforms.\n" +"Frescobaldi 2.0 is a complete rewrite from scratch. Its release date is\n" +"targeted at Christmas 2011.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:350 +msgid "The editor" +msgstr "" + +#: frescobaldi_app/help/contents.py:353 +msgid "" +"

\n" +"In this part the features of the editor are discussed,\n" +"e.g. how to control auto-indenting, how to use search and replace,\n" +"etcetera.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:369 +msgid "Search and replace" +msgstr "" + +#: frescobaldi_app/help/contents.py:377 +msgid "Edit" +msgstr "" + +#: frescobaldi_app/help/contents.py:379 +msgid "" +"

\n" +"In the menu {edit_menu} the commands Find ({key_search})\n" +"and Replace ({key_replace}) can be found, which open a small window at the\n" +"bottom of the view.\n" +"It is possible to search for plain text or regular expressions.\n" +"

\n" +"\n" +"

\n" +"Regular expressions are advanced search texts that contain characters that " +"can\n" +"match multiple characters in the document.\n" +"When replacing text, it is also possible to refer to parenthesized parts of " +"the\n" +"search text.\n" +"

\n" +"\n" +"

\n" +"In regular expression search mode, some characters have a special meaning:\n" +"

\n" +"\n" +"
\n" +"
*
\n" +"
matches the preceding character or group zero or more times
\n" +"
+
\n" +"
matches the preceding character or group one or more times
\n" +"
?
\n" +"
matches the preceding character or group zero or one time
\n" +"
[ ]
\n" +"
matches one of the contained characters
\n" +"
( )
\n" +"
group characters. This also saves the matched text in the group.\n" +"When replacing, you can use characters like \\1, \\2\n" +"etcetera, to write the text of the corresponding group in the replacement " +"text.\n" +"
\n" +"
\\\\ \\n \\t \\s \\d \\w
\n" +"
match, respectively, a backslash, a newline, a tab, any whitespace\n" +"character, a digit, a generic word-like character.
\n" +"
\n" +"\n" +"

\n" +"A full discussion on regular expressions can be found in the\n" +"Python\n" +"documentation.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:427 +msgid "Document variables" +msgstr "" + +#: frescobaldi_app/help/contents.py:432 +msgid "" +"Document variables are variables that influence the behaviour of " +"Frescobaldi.\n" +"They can be written in the first five or last five lines of a document.\n" +"If a line contains '-*-', Frescobaldi searches the rest " +"of\n" +"the lines for variable definitions like name: value;.\n" +msgstr "" + +#: frescobaldi_app/help/contents.py:439 +msgid "The following variables are recognized:" +msgstr "" + +#: frescobaldi_app/help/contents.py:444 +msgid "mode" +msgstr "" + +#. L10N: do not translate the mode names lilypond, html, etc. +#: frescobaldi_app/help/contents.py:446 +msgid "" +"Force mode to be one of lilypond, html, texinfo, latex, docbook or scheme. " +"Default: automatic mode recognition." +msgstr "" + +#: frescobaldi_app/help/contents.py:448 +msgid "filename" +msgstr "" + +#: frescobaldi_app/help/contents.py:449 +msgid "Compiles another LilyPond document instead of the current." +msgstr "" + +#: frescobaldi_app/help/contents.py:450 +msgid "encoding" +msgstr "" + +#: frescobaldi_app/help/contents.py:451 +msgid "Use another encoding than the default UTF-8." +msgstr "" + +#: frescobaldi_app/help/contents.py:452 +msgid "version" +msgstr "" + +#: frescobaldi_app/help/contents.py:453 +msgid "" +"Set the LilyPond version to use, can be used for non-LilyPond documents." +msgstr "" + +#: frescobaldi_app/help/contents.py:455 frescobaldi_app/help/contents.py:463 +msgid "number" +msgstr "" + +#: frescobaldi_app/help/contents.py:456 +msgid "The width of a tab character, by default 8." +msgstr "" + +#: frescobaldi_app/help/contents.py:458 +msgid "Whether to use tabs in indent, by default {no}." +msgstr "" + +#: frescobaldi_app/help/contents.py:461 +msgid "Whether to use tabs elsewhere in the document, by default {yes}." +msgstr "" + +#: frescobaldi_app/help/contents.py:464 +msgid "The number of spaces each indent level uses, by default 2." +msgstr "" + +#: frescobaldi_app/help/contents.py:472 +msgid "You can put document variables in comments." +msgstr "" + +#: frescobaldi_app/help/contents.py:479 +msgid "Table of Contents" +msgstr "" + +#: frescobaldi_app/help/helpimpl.py:115 +msgid "Up:" +msgstr "" + +#: frescobaldi_app/help/helpimpl.py:130 +msgid "Next:" +msgstr "" + +#: frescobaldi_app/help/helpimpl.py:133 +msgid "See also:" +msgstr "" + +#: frescobaldi_app/help/helpimpl.py:165 +msgid "(no key defined)" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:50 +#: frescobaldi_app/preferences/tools.py:80 +msgid "LilyPond Log" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:51 +msgid "LilyPond &Log" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:91 +msgid "Next Error Message" +msgstr "" + +#: frescobaldi_app/logtool/__init__.py:92 +msgid "Previous Error Message" +msgstr "" + +#: frescobaldi_app/logtool/logwidget.py:106 +msgid "Click to edit this file" +msgstr "" + +#: frescobaldi_app/miditool/__init__.py:51 +msgid "MIDI" +msgstr "" + +#: frescobaldi_app/miditool/__init__.py:52 +msgid "MIDI &Player" +msgstr "" + +#: frescobaldi_app/miditool/__init__.py:97 +msgctxt "midi player" +msgid "Pause" +msgstr "" + +#: frescobaldi_app/miditool/__init__.py:98 +msgctxt "midi player" +msgid "Play" +msgstr "" + +#: frescobaldi_app/miditool/__init__.py:99 +msgctxt "midi player" +msgid "Stop" +msgstr "" + +#: frescobaldi_app/miditool/__init__.py:100 +msgctxt "midi player" +msgid "Restart" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:102 +msgid "Tempo" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:156 +msgid "No output found!" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:231 +msgctxt "midi lcd screen" +msgid "LOADED" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:232 +msgctxt "midi lcd screen" +msgid "TOTAL" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:314 +#: frescobaldi_app/miditool/widget.py:324 +msgctxt "midi lcd screen" +msgid "TIME" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:315 +msgctxt "midi lcd screen" +msgid "TEMPO" +msgstr "" + +#: frescobaldi_app/miditool/widget.py:325 +msgctxt "midi lcd screen" +msgid "BEAT" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:86 +msgctxt "window title" +msgid "Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:87 +msgid "&Music View" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:191 +msgid "Select Music View Document" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:192 +msgid "&Print Music..." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:193 +msgid "Zoom &In" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:194 +msgid "Zoom &Out" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:195 +msgid "Zoom Music" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:196 +msgid "Fit &Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:197 +msgid "Fit &Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:198 +msgid "Fit &Page" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:199 +msgid "&Jump to Cursor Position" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:200 +msgid "Copy to &Image..." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:339 +msgid "Choose the PDF document to display." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:341 +msgid "" +"Choose the PDF document to display or drag the file to another application " +"or location." +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:399 +msgid "Fit Width" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:400 +msgid "Fit Height" +msgstr "" + +#: frescobaldi_app/musicview/__init__.py:401 +msgid "Fit Page" +msgstr "" + +#: frescobaldi_app/musicview/image.py:126 +msgid "DPI:" +msgstr "" + +#: frescobaldi_app/musicview/image.py:127 +msgid "Paper Color" +msgstr "" + +#: frescobaldi_app/musicview/image.py:128 +msgid "Auto-crop" +msgstr "" + +#: frescobaldi_app/musicview/image.py:129 +msgid "Antialias" +msgstr "" + +#: frescobaldi_app/musicview/image.py:130 +msgid "Drag" +msgstr "" + +#: frescobaldi_app/musicview/image.py:131 +msgid "Drag the image as a PNG file." +msgstr "" + +#: frescobaldi_app/musicview/image.py:132 +msgid "&Copy to Clipboard" +msgstr "" + +#: frescobaldi_app/musicview/image.py:133 +msgid "&Save As..." +msgstr "" + +#: frescobaldi_app/musicview/image.py:136 +#, no-python-format +msgid "" +"

\n" +"Clicking toggles the display between 100% size and window size. Drag to copy " +"the image to another application. Drag with Ctrl (or {command}) to scroll a " +"large image.\n" +"

\n" +"

\n" +"You can also drag the small picture icon in the bottom right, which drags " +"the actual file on disk, e.g. to an e-mail message.\n" +"

" +msgstr "" + +#: frescobaldi_app/musicview/image.py:167 +msgid "Image from {filename}" +msgstr "" + +#: frescobaldi_app/musicview/image.py:210 +msgid "Save Image As" +msgstr "" + +#: frescobaldi_app/musicview/image.py:214 +msgid "Could not save the image." +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:99 +msgid "Pitch Name &Language" +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:101 +msgid "" +"Change the LilyPond language used for pitch names in this document or in the " +"selection." +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:103 +msgid "Convert Relative to &Absolute" +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:105 +msgid "" +"Converts the notes in the document or selection from relative to absolute " +"pitch." +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:107 +msgid "Convert Absolute to &Relative" +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:109 +msgid "" +"Converts the notes in the document or selection from absolute to relative " +"pitch." +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:111 +msgid "&Transpose..." +msgstr "" + +#: frescobaldi_app/pitch/__init__.py:113 +msgid "Transposes all notes in the document or selection." +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:81 frescobaldi_app/pitch/pitch.py:94 +msgid "Pitch Name Language" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:82 +msgid "" +"Can't perform the requested translation.\n" +"\n" +"The music contains quarter-tone alterations, but those are not available in " +"the pitch language \"{name}\"." +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:98 +msgid "" +"The pitch language of the selected text has been updated, but you need to " +"manually add the following command to your document:" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:102 +msgid "(for LilyPond below 2.14), or" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:103 +msgid "(for LilyPond 2.14 and higher.)" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:398 frescobaldi_app/pitch/pitch.py:580 +#: frescobaldi_app/pitch/pitch.py:752 +msgid "Transpose" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:399 +msgid "" +"Please enter two absolute pitches, separated by a space, using the pitch " +"name language \"{language}\"." +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:581 +msgid "" +"Can't perform the requested transposition.\n" +"\n" +"The transposed music would contain quarter-tone alterations that are not " +"available in the pitch language \"{language}\"." +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:712 +msgid "Pitch manipulation" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:715 +msgid "" +"

\n" +"Frescobaldi offers the following pitch-manipulating functions,\n" +"all in the menu {menu}:\n" +"

\n" +"\n" +"
\n" +"\n" +"
Pitch language
\n" +"
\n" +"This translates pitch names in the whole document or a selection.\n" +"
\n" +"\n" +"
Convert relative music to absolute
\n" +"
\n" +"This converts all \\relative music parts to absolute pitch " +"names.\n" +"It removes, but honours, octave checks.\n" +"
\n" +"\n" +"
Convert absolute music to relative
\n" +"
\n" +"Checks all toplevel music expressions, changing them into\n" +"\\relative mode as soon as the expression contains a pitch.\n" +"If you want to make separate sub-expressions relative, it may be necessary " +"to\n" +"select music from the first expression, leaving out higher-level opening\n" +"braces.\n" +"
\n" +"\n" +"
\n" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:744 +msgctxt "submenu title" +msgid "Pitch" +msgstr "" + +#: frescobaldi_app/pitch/pitch.py:755 +msgid "" +"

\n" +"When transposing music, two absolute pitches need to be given to specify\n" +"the distance to transpose over. The pitches may include octave marks.\n" +"The pitches must be entered in the pitch name language used in the " +"document.\n" +"

\n" +"\n" +"

\n" +"The music will then be transposed from the first pitch to the second,\n" +"just as the \\transpose LilyPond command would do.\n" +"

\n" +"\n" +"

\n" +"E.g. when transposing a minor third upwards, you would enter:
\n" +"c es\n" +"

\n" +"\n" +"

\n" +"To transpose down a major second, you can enter:
\n" +"c bes,\n" +"

\n" +"\n" +"

\n" +"or:
\n" +"d c\n" +"

\n" +"\n" +"

\n" +"It is also possible to use the transpose function to change a piece of " +"music\n" +"from C-sharp to D-flat, or to specify quarter tones if supported in the\n" +"pitch name language that is used.\n" +"

\n" +"\n" +"

\n" +"The transpose function can transpose both relative and absolute music,\n" +"correctly handling key signatures, chordmode and octave checks.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:27 +msgid "Usage" +msgstr "" + +#: frescobaldi_app/po/messages.py:28 +#, python-format +msgid "Usage: %s\n" +msgstr "" + +#: frescobaldi_app/po/messages.py:29 +msgid "show this help message and exit" +msgstr "" + +#: frescobaldi_app/po/messages.py:30 +msgid "show program's version number and exit" +msgstr "" + +#. L10N: Command line options +#: frescobaldi_app/po/messages.py:32 +msgid "Options" +msgstr "" + +#: frescobaldi_app/po/messages.py:36 +msgctxt "CloseButton" +msgid "Close Tab" +msgstr "" + +#: frescobaldi_app/po/messages.py:38 +msgctxt "QDialog" +msgid "What's This?" +msgstr "" + +#: frescobaldi_app/po/messages.py:40 +msgctxt "QDialogButtonBox" +msgid "Apply" +msgstr "" + +#: frescobaldi_app/po/messages.py:41 +msgctxt "QDialogButtonBox" +msgid "OK" +msgstr "" + +#: frescobaldi_app/po/messages.py:42 +msgctxt "QDialogButtonBox" +msgid "Cancel" +msgstr "" + +#: frescobaldi_app/po/messages.py:43 +msgctxt "QDialogButtonBox" +msgid "Discard" +msgstr "" + +#: frescobaldi_app/po/messages.py:44 +msgctxt "QDialogButtonBox" +msgid "Save" +msgstr "" + +#: frescobaldi_app/po/messages.py:45 +msgctxt "QDialogButtonBox" +msgid "Help" +msgstr "" + +#: frescobaldi_app/po/messages.py:46 +msgctxt "QDialogButtonBox" +msgid "Close" +msgstr "" + +#: frescobaldi_app/po/messages.py:47 +msgctxt "QDialogButtonBox" +msgid "Open" +msgstr "" + +#: frescobaldi_app/po/messages.py:48 +msgctxt "QDialogButtonBox" +msgid "Reset" +msgstr "" + +#: frescobaldi_app/po/messages.py:50 +msgctxt "QFileDialog" +msgid "File" +msgstr "" + +#: frescobaldi_app/po/messages.py:51 +msgctxt "QFileDialog" +msgid "Folder" +msgstr "" + +#: frescobaldi_app/po/messages.py:52 +msgctxt "QFileDialog" +msgid "Find Directory" +msgstr "" + +#: frescobaldi_app/po/messages.py:53 +msgctxt "QFileDialog" +msgid "All Files (*)" +msgstr "" + +#: frescobaldi_app/po/messages.py:55 +msgctxt "QScrollBar" +msgid "Scroll here" +msgstr "" + +#: frescobaldi_app/po/messages.py:56 +msgctxt "QScrollBar" +msgid "Top" +msgstr "" + +#: frescobaldi_app/po/messages.py:57 +msgctxt "QScrollBar" +msgid "Bottom" +msgstr "" + +#: frescobaldi_app/po/messages.py:58 +msgctxt "QScrollBar" +msgid "Page up" +msgstr "" + +#: frescobaldi_app/po/messages.py:59 +msgctxt "QScrollBar" +msgid "Page down" +msgstr "" + +#: frescobaldi_app/po/messages.py:60 +msgctxt "QScrollBar" +msgid "Scroll up" +msgstr "" + +#: frescobaldi_app/po/messages.py:61 +msgctxt "QScrollBar" +msgid "Scroll down" +msgstr "" + +#: frescobaldi_app/po/messages.py:62 +msgctxt "QScrollBar" +msgid "Left edge" +msgstr "" + +#: frescobaldi_app/po/messages.py:63 +msgctxt "QScrollBar" +msgid "Right edge" +msgstr "" + +#: frescobaldi_app/po/messages.py:64 +msgctxt "QScrollBar" +msgid "Page left" +msgstr "" + +#: frescobaldi_app/po/messages.py:65 +msgctxt "QScrollBar" +msgid "Page right" +msgstr "" + +#: frescobaldi_app/po/messages.py:66 +msgctxt "QScrollBar" +msgid "Scroll left" +msgstr "" + +#: frescobaldi_app/po/messages.py:67 +msgctxt "QScrollBar" +msgid "Scroll right" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:162 +#: frescobaldi_app/preferences/general.py:119 +msgid "General Preferences" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:182 +msgid "MIDI Settings" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:192 +#: frescobaldi_app/preferences/helpers.py:80 +msgid "Helper Applications" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:202 +msgid "Paths" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:212 +msgid "LilyPond Documentation" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:222 +msgid "Keyboard Shortcuts" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:232 +msgid "Fonts & Colors" +msgstr "" + +#: frescobaldi_app/preferences/__init__.py:242 +msgid "Tools" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:64 +msgid "Paths to LilyPond Documentation" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:66 +msgid "Add paths or URLs. See \"What's This\" for more information." +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:68 +msgid "" +"

Here you can add local paths or URLs pointing to LilyPond documentation. " +"A local path should point to the directory where either the \"{documentation}" +"\" directory lives, or the whole \"share/doc/lilypond/html/offline-root\" " +"path.

\n" +"

If those can't be found, documentation is looked for in all " +"subdirectories of the given path, one level deep. This makes it possible to " +"put multiple versions of LilyPond documentation in different subdirectories " +"and have Frescobaldi automatically find them.

" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:111 +msgid "Preferred Language:" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:112 +#: frescobaldi_app/preferences/general.py:124 +#: frescobaldi_app/scorewiz/settings.py:132 +#: frescobaldi_app/scorewiz/settings.py:198 +#: frescobaldi_app/scorewiz/settings.py:293 +#: frescobaldi_app/scorewiz/parts/_base.py:214 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:65 +#: frescobaldi_app/widgets/schemeselector.py:115 +msgid "Default" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:113 +#: frescobaldi_app/scorewiz/settings.py:196 +msgid "English (untranslated)" +msgstr "" + +#: frescobaldi_app/preferences/documentation.py:135 +msgid "Please enter a local path or a URL:" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:121 +msgid "Use this scheme for printing" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:122 +#: frescobaldi_app/preferences/tools.py:81 +#: frescobaldi_app/preferences/tools.py:187 +msgid "Font:" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:123 +#: frescobaldi_app/preferences/fontscolors.py:298 +msgid "Base Colors" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:124 +msgid "Default Styles" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:157 +msgid "(Inherits: {name})" +msgstr "" + +#. L10N: color of Text +#: frescobaldi_app/preferences/fontscolors.py:360 +#: frescobaldi_app/preferences/fontscolors.py:435 +msgid "Text" +msgstr "" + +#. L10N: color of Background +#: frescobaldi_app/preferences/fontscolors.py:361 +#: frescobaldi_app/preferences/fontscolors.py:437 +msgid "Background" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:362 +msgid "Bold" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:363 +msgid "Italic" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:364 +msgid "Underline" +msgstr "" + +#. L10N: color of Selected Text +#: frescobaldi_app/preferences/fontscolors.py:439 +msgid "Selected Text" +msgstr "" + +#. L10N: color of Selection Background +#: frescobaldi_app/preferences/fontscolors.py:441 +msgid "Selection Background" +msgstr "" + +#. L10N: color of Current Line +#: frescobaldi_app/preferences/fontscolors.py:443 +msgid "Current Line" +msgstr "" + +#. L10N: color of Marked Line (bookmark) +#: frescobaldi_app/preferences/fontscolors.py:445 +msgid "Marked Line" +msgstr "" + +#. L10N: color of line with Error +#: frescobaldi_app/preferences/fontscolors.py:447 +msgid "Error Line" +msgstr "" + +#. L10N: color of highlighted search result +#: frescobaldi_app/preferences/fontscolors.py:449 +msgid "Search Result" +msgstr "" + +#. L10N: color of characters that match (e.g. braces, parentheses) +#: frescobaldi_app/preferences/fontscolors.py:451 +msgid "Matching Character" +msgstr "" + +#. L10N: color of paper in music preview +#: frescobaldi_app/preferences/fontscolors.py:453 +msgid "Preview Background" +msgstr "" + +#. L10N: color of objects highlighting in preview +#: frescobaldi_app/preferences/fontscolors.py:455 +msgid "Preview Highlight" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:462 +#: frescobaldi_app/preferences/fontscolors.py:497 +#: frescobaldi_app/preferences/fontscolors.py:533 +msgid "Keyword" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:464 +msgid "Function" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:466 +#: frescobaldi_app/preferences/fontscolors.py:508 +msgid "Variable" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:468 +#: frescobaldi_app/preferences/fontscolors.py:510 +#: frescobaldi_app/preferences/fontscolors.py:520 +msgid "Value" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:470 +#: frescobaldi_app/preferences/fontscolors.py:511 +#: frescobaldi_app/preferences/fontscolors.py:523 +#: frescobaldi_app/preferences/fontscolors.py:529 +msgid "String" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:472 +msgid "Escape" +msgstr "" + +#. L10N: a basic type of input in the editor +#: frescobaldi_app/preferences/fontscolors.py:474 +#: frescobaldi_app/preferences/fontscolors.py:513 +#: frescobaldi_app/preferences/fontscolors.py:522 +#: frescobaldi_app/preferences/fontscolors.py:530 +#: frescobaldi_app/preferences/fontscolors.py:538 +#: frescobaldi_app/snippet/builtin.py:274 +msgid "Comment" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:483 +msgid "Pitch" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:484 +msgid "Octave" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:485 +msgid "Duration" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:486 +msgid "Octave Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:487 +msgid "Fingering" +msgstr "" + +#. L10N: For String instruments like Guitar +#: frescobaldi_app/preferences/fontscolors.py:489 +msgid "String Number" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:490 +#: frescobaldi_app/quickinsert/spanners.py:143 +msgid "Slur" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:491 +msgid "Dynamic" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:492 +msgid "Articulation" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:493 +msgid "Chord" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:494 +#: frescobaldi_app/quickinsert/spanners.py:145 +msgid "Beam" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:495 +msgid "Check" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:496 +#: frescobaldi_app/snippet/builtin.py:154 +msgid "Repeat" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:498 +#: frescobaldi_app/preferences/shortcuts.py:56 +msgid "Command" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:499 +msgid "Specifier" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:500 +msgid "User Command" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:501 +#: frescobaldi_app/snippet/builtin.py:184 +msgid "Markup" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:502 +msgid "Lyric Mode" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:503 +msgid "Lyric Text" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:504 +msgid "Delimiter" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:505 +msgid "Context" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:506 +msgid "Layout Object" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:507 +msgid "Property" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:509 +msgid "User Variable" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:512 +#: frescobaldi_app/preferences/fontscolors.py:535 +msgid "Escaped Character" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:516 +msgid "HTML" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:517 +msgid "Tag" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:518 +msgid "LilyPond Tag" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:519 +#: frescobaldi_app/preferences/fontscolors.py:536 +msgid "Attribute" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:521 +msgid "Entity Reference" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:525 +#: frescobaldi_app/preferences/fontscolors.py:526 +msgid "Scheme" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:527 +msgid "Number" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:528 +msgid "LilyPond Environment" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:532 +msgid "Texinfo" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:534 +msgid "Block" +msgstr "" + +#: frescobaldi_app/preferences/fontscolors.py:537 +msgid "Verbatim" +msgstr "" + +#: frescobaldi_app/preferences/general.py:120 +#: frescobaldi_app/scorewiz/settings.py:216 +msgid "Language:" +msgstr "" + +#: frescobaldi_app/preferences/general.py:121 +msgid "No Translation" +msgstr "" + +#: frescobaldi_app/preferences/general.py:122 +msgid "System Default Language (if available)" +msgstr "" + +#: frescobaldi_app/preferences/general.py:123 +#: frescobaldi_app/scorewiz/parts/percussion.py:187 +msgid "Style:" +msgstr "" + +#: frescobaldi_app/preferences/general.py:125 +msgid "Use System Icons" +msgstr "" + +#: frescobaldi_app/preferences/general.py:127 +msgid "" +"If checked, icons of the desktop icon theme will be used instead of the " +"bundled icons.\n" +"This setting takes effect on the next start of {appname}." +msgstr "" + +#: frescobaldi_app/preferences/general.py:156 +msgid "Session to load if Frescobaldi is started without arguments" +msgstr "" + +#: frescobaldi_app/preferences/general.py:157 +msgid "Start with no session" +msgstr "" + +#: frescobaldi_app/preferences/general.py:158 +msgid "Start with last used session" +msgstr "" + +#: frescobaldi_app/preferences/general.py:159 +msgid "Start with session:" +msgstr "" + +#: frescobaldi_app/preferences/general.py:214 +msgid "When saving documents" +msgstr "" + +#: frescobaldi_app/preferences/general.py:215 +msgid "Keep backup copy" +msgstr "" + +#: frescobaldi_app/preferences/general.py:217 +msgid "" +"Frescobaldi always backups a file before overwriting it with a new version.\n" +"If checked those backup copies are retained." +msgstr "" + +#: frescobaldi_app/preferences/general.py:220 +msgid "Remember cursor position, bookmarks, etc." +msgstr "" + +#: frescobaldi_app/preferences/general.py:221 +msgid "Default directory:" +msgstr "" + +#: frescobaldi_app/preferences/general.py:222 +msgid "The default folder for your LilyPond documents (optional)." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:70 +msgid "PDF:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:71 +msgid "MIDI:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:72 +msgid "SVG:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:73 +msgid "Image:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:74 +msgid "Browser:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:75 +msgid "E-Mail:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:76 +msgid "File Manager:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:77 +msgid "Shell:" +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:82 +msgid "" +"Below you can enter commands to open different file types. $f " +"is replaced with the filename, $u with the URL. Leave a field " +"empty to use the operating system default application." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:90 +msgid "Command that should accept a mailto: URL." +msgstr "" + +#: frescobaldi_app/preferences/helpers.py:92 +msgid "Command to open a Terminal or Command window." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:81 +msgid "LilyPond versions to use" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:82 +msgid "Automatically choose LilyPond version from document" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:84 +msgid "" +"If checked, the document's version determines the LilyPond version to use.\n" +"See \"What's This\" for more information." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:87 +msgid "" +"

If this setting is enabled, the document is searched for a LilyPond " +"\\version command or a version document variable.

\n" +"

The LilyPond version command looks like:

\n" +"
\\version \"2.14.0\"
\n" +"

The document variable looks like:

\n" +"
-*- version: 2.14.0;
\n" +"

somewhere (in a comments section) in the first or last 5 lines of the " +"document. This way the LilyPond version to use can also be specified in non-" +"LilyPond documents like HTML, LaTeX, etc.

\n" +"

If the document specifies a version, the oldest suitable LilyPond version " +"is chosen. Otherwise, the default version is chosen.

\n" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:101 +msgid "See also {link}." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:149 +msgid "Set as &Default" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:190 +msgid "default" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:238 +msgid "LilyPond Command:" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:239 +msgid "Name or full path of the LilyPond program." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:240 +msgid "Convert-ly:" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:241 +msgid "LilyPond-book:" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:242 +msgid "Include in automatic version selection" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:279 +msgid "Running LilyPond" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:280 +msgid "Save document if possible" +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:282 +msgid "" +"If checked, the document is saved when it is local and modified.\n" +"Otherwise a temporary file is used to run LilyPond." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:286 +msgid "If checked, LilyPond will delete intermediate PostScript files." +msgstr "" + +#: frescobaldi_app/preferences/lilypond.py:287 +msgid "LilyPond include path:" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:77 +msgid "MIDI Ports" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:79 +msgid "" +"Note: There are no MIDI output ports available on your system. To use MIDI, " +"please check if PortMIDI is installed on your system and that a MIDI " +"synthesizer is available or connected." +msgstr "" + +#: frescobaldi_app/preferences/midi.py:82 +msgid "Player output:" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:84 +msgid "" +"The MIDI port to play music to. See \"What's This\" for more information." +msgstr "" + +#: frescobaldi_app/preferences/midi.py:87 +msgid "" +"

This dropdown menu lists the available MIDI ports on your system. You can " +"select one, or just type part of a name. In that case, the first available " +"port name that starts with the specified characters is used.

\n" +"

Click the button to refresh the list, e.g. when you connect a MIDI device " +"or start a software synthesizer.

" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:96 +msgid "Refresh MIDI ports" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:135 +msgid "Close unused MIDI output" +msgstr "" + +#: frescobaldi_app/preferences/midi.py:137 +msgid "" +"Closes unused MIDI ports after one minute. See \"What's This\" for more " +"information." +msgstr "" + +#: frescobaldi_app/preferences/midi.py:140 +msgid "" +"

If checked, Frescobaldi will close MIDI output ports that are not used " +"for one minute.

\n" +"

This could free up system resources that a software MIDI synthesizer " +"might be using, thus saving battery power.

\n" +"

A side effect is that if you pause a MIDI file for a long time the " +"instruments are reset to the default piano (instrument 0). In that case, " +"playing the file from the beginning sets up the instruments again.

\n" +msgstr "" + +#: frescobaldi_app/preferences/paths.py:59 +msgid "Folders containing hyphenation dictionaries" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:56 +#: frescobaldi_app/snippet/model.py:63 +msgid "Shortcut" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:101 +msgid "Menu {name}:" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:125 +msgid "Other commands:" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:173 +msgid "&Edit Shortcut for \"{name}\"" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:178 +msgid "(no shortcut)" +msgstr "" + +#: frescobaldi_app/preferences/shortcuts.py:206 +msgid "Remove the shortcut from that command?" +msgid_plural "Remove the shortcut from those commands?" +msgstr[0] "" +msgstr[1] "" + +#: frescobaldi_app/preferences/shortcuts.py:304 +msgid "(default)" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:82 +msgid "Show log when a job is started" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:83 +msgid "Display plain log output" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:85 +msgid "If checked, Frescobaldi will not shorten filenames in the log output." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:141 +msgid "Music View" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:142 +msgid "Magnifier Size:" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:144 +msgid "Size of the magnifier glass (Ctrl+Click in the Music View)." +msgstr "" + +#. L10N: as in "400 pixels", appended after number in spinbox, note the leading space +#: frescobaldi_app/preferences/tools.py:146 +msgid " pixels" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:147 +msgid "Magnifier Scale:" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:149 +msgid "Magnification of the magnifier." +msgstr "" + +#: frescobaldi_app/preferences/tools.py:150 +msgctxt "percent unit sign" +msgid "%" +msgstr "" + +#: frescobaldi_app/preferences/tools.py:220 +msgid "Group documents by directory" +msgstr "" + +#: frescobaldi_app/quickinsert/__init__.py:47 +#: frescobaldi_app/quickinsert/__init__.py:70 +msgid "Quick Insert" +msgstr "" + +#: frescobaldi_app/quickinsert/__init__.py:48 +msgid "Quick &Insert" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:73 +msgid "Allow shorthands" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:75 +msgid "Use short notation for some articulations like staccato." +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:83 +#: frescobaldi_app/quickinsert/articulations.py:115 +msgid "Articulations" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:87 +msgid "Different kinds of articulations and other signs." +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:118 +msgid "Accent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:119 +msgid "Marcato" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:120 +msgid "Staccatissimo" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:121 +msgid "Staccato" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:122 +msgid "Portato" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:123 +msgid "Tenuto" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:124 +msgid "Espressivo" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:129 +msgid "Ornaments" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:132 +#: frescobaldi_app/quickinsert/spanners.py:146 +msgid "Trill" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:133 +msgid "Prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:134 +msgid "Mordent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:135 +msgid "Turn" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:136 +msgid "Prall prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:137 +msgid "Prall mordent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:138 +msgid "Up prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:139 +msgid "Down prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:140 +msgid "Up mordent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:141 +msgid "Down mordent" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:142 +msgid "Prall up" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:143 +msgid "Prall down" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:144 +msgid "Line prall" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:145 +msgid "Reverse turn" +msgstr "" + +#. L10N: dynamic signs +#: frescobaldi_app/quickinsert/articulations.py:150 +#: frescobaldi_app/quickinsert/dynamics.py:115 +msgid "Signs" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:153 +msgid "Fermata" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:154 +msgid "Short fermata" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:155 +msgid "Long fermata" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:156 +msgid "Very long fermata" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:157 +msgid "Segno" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:158 +msgid "Coda" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:159 +msgid "Varcoda" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:160 +msgid "Signumcongruentiae" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:165 +msgid "Other" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:168 +msgid "Upbow" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:169 +msgid "Downbow" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:170 +msgid "Snappizzicato" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:171 +msgid "Open (e.g. brass)" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:172 +msgid "Stopped (e.g. brass)" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:173 +msgid "Flageolet" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:174 +msgid "Thumb" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:175 +msgid "Left heel" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:176 +msgid "Right heel" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:177 +msgid "Left toe" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:178 +msgid "Right toe" +msgstr "" + +#: frescobaldi_app/quickinsert/articulations.py:179 +msgid "Half open (e.g. hi-hat)" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:49 +#: frescobaldi_app/quickinsert/barlines.py:58 +msgid "Bar Lines" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:53 +msgid "Bar lines, breathing signs, etcetera." +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:61 +msgid "Double bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:62 +msgid "Ending bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:63 +msgid "Dotted bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:64 +msgid "Dashed bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:65 +msgid "Invisible bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:66 +msgid "Repeat start" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:67 +msgid "Repeat both" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:68 +msgid "Repeat end" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:69 +msgid "Repeat both (old)" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:70 +msgid "Repeat both (classic)" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:71 +msgid "Tick bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:72 +msgid "Single bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:73 +msgid "Small-Wide-Small bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:74 +msgid "Wide-Small bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:75 +msgid "Double wide bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:76 +msgid "Segno bar line" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:95 +msgid "Breathing Signs" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:102 +msgid "Default Breathing Sign" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:103 +msgid "Straight Breathing Sign" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:104 +msgid "Curved Caesura" +msgstr "" + +#: frescobaldi_app/quickinsert/barlines.py:105 +msgid "Straight Caesura" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:175 +msgid "{name} ({key})" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +msgid "Configure Keyboard Shortcut ({key})" +msgstr "" + +#: frescobaldi_app/quickinsert/buttongroup.py:182 +#: frescobaldi_app/scorewiz/scoreproperties.py:171 +#: frescobaldi_app/scorewiz/settings.py:189 +#: frescobaldi_app/snippet/edit.py:125 +msgid "None" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:51 +msgid "Dynamics" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:55 +msgid "Dynamic symbols." +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:128 +msgid "Dynamic sign {name}" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:133 +#: frescobaldi_app/quickinsert/spanners.py:51 +#: frescobaldi_app/quickinsert/spanners.py:136 +msgid "Spanners" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:142 +msgid "Hairpin crescendo" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:143 +msgid "Crescendo" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:144 +msgid "Hairpin diminuendo" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:145 +msgid "Diminuendo" +msgstr "" + +#: frescobaldi_app/quickinsert/dynamics.py:146 +msgid "Decrescendo" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:55 +msgid "Slurs, spanners, etcetera." +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:60 +msgid "Arpeggios" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:69 +msgid "Arpeggio" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:70 +msgid "Arpeggio with Up Arrow" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:71 +msgid "Arpeggio with Down Arrow" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:72 +msgid "Bracket Arpeggio" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:73 +msgid "Parenthesis Arpeggio" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:105 +msgid "Glissandos" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:114 +msgid "Glissando" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:115 +msgid "Dashed Glissando" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:116 +msgid "Dotted Glissando" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:117 +msgid "Zigzag Glissando" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:118 +msgid "Trill Glissando" +msgstr "" + +#: frescobaldi_app/quickinsert/spanners.py:144 +msgid "Phrasing Slur" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:102 +msgid "" +"

With the Quick Insert Panel you can add various music elements to the " +"current note or selected music.

\n" +"

See {link} for more information.

" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:107 +msgid "Direction:" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Up" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Neutral" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:108 +msgid "Down" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:127 +msgid "The Quick Insert Panel" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:130 +msgid "" +"

\n" +"With the tools in the Quick Insert Panel you can add various music elements\n" +"to the current note or selected music.\n" +"

\n" +"\n" +"

\n" +"The Direction chooser specifies if articulations, dynamics or " +"slurs\n" +"appear in a neutral position (e.g. determined by stem direction), or above\n" +"or below the staff by prepending a -, ^ or\n" +"_ character.\n" +"

\n" +"\n" +"

\n" +"Click on a tab to select a tool. You can cycle through the tools with Ctrl\n" +"(or {command}) and the mouse wheel.\n" +"All buttons in the Quick Insert Panel have configurable keyboard shortcuts;\n" +"you can change them by right-clicking a button.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:149 +msgid "" +"

Articulations

\n" +"\n" +"

\n" +"These musical symbols can be added to a note or rest or a selected range\n" +"of music.\n" +"If you add them to a selection, rests will be skipped.\n" +"If there is no text selected, the cursor will automatically move to the " +"next\n" +"pitch, rest, skip or chord.\n" +"

\n" +"\n" +"

\n" +"If Allow shorthands is checked, Frescobaldi will use short signs\n" +"for articulations if they exist\n" +"(e.g. -. instead of -\\staccato).\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:165 +msgid "" +"

Dynamics

\n" +"\n" +"

\n" +"Dynamics can also be added to a note or rest.\n" +"If you select a range of music, you can add spanners which will " +"automatically\n" +"terminate at the last note, rest or chord in the selection.\n" +"If you then click a sign, it will replace the terminator.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:174 +msgid "" +"

Spanners

\n" +"\n" +"

\n" +"This tool lets you add arpeggio, glissandos and other spanners like slurs,\n" +"phrasing slurs, manual beams or trills.\n" +"

\n" +"\n" +"

\n" +"Arpeggios and glissandos apply to the current note;\n" +"they need no music to be selected.\n" +"The slurs, beams or trill apply to the current note and the next one\n" +"if no music is selected,\n" +"or to the first and the last note or chord in the selection.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/quickinsert/widget.py:189 +msgid "" +"

Bar Lines

\n" +"\n" +"

\n" +"Here you can insert bar lines or various breathing signs.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:146 +msgid "&Double durations" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:148 +msgid "Double all the durations in the selection." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:149 +msgid "&Halve durations" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:151 +msgid "Halve all the durations in the selection." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:152 +msgid "Do&t durations" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:154 +msgid "Add a dot to all the durations in the selection." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:155 +msgid "&Undot durations" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:157 +msgid "Remove one dot from all the durations in the selection." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:158 +msgid "Remove &scaling" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:160 +msgid "Remove all scaling (*n/m) from the durations in the selection." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:161 +msgid "&Remove durations" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:163 +msgid "Remove all durations from the selection." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:164 +msgid "Make &implicit" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:166 +msgid "Make durations implicit (remove repeated durations)." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:167 +msgid "Make implicit (per &line)" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:169 +msgid "" +"Make durations implicit (remove repeated durations), except for the first " +"duration in a line." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:171 +msgid "Make &explicit" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:173 +msgid "" +"Make durations explicit (add duration to every note, even if it is the same " +"as the preceding note)." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:175 +msgid "&Apply rhythm..." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:177 +msgid "Apply an entered rhythm to the selected music." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:178 +msgid "&Copy rhythm" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:180 +msgid "Copy the rhythm of the selected music." +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:181 +msgid "&Paste rhythm" +msgstr "" + +#: frescobaldi_app/rhythm/__init__.py:182 +msgid "Paste a rhythm to the selected music." +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Apply Rhythm" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:146 +msgid "Enter a rhythm:" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:244 +msgid "Rhythm manipulation" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:247 +msgid "" +"

\n" +"The rhythm functions of Frescobaldi alter the durations written after " +"notes,\n" +"chords, rests, etcetera. Using those functions, all in menu {menu}, it\n" +"is possible to double or halve the length of notes, to add or remove dots\n" +"and to remove scaling factors.\n" +"

\n" +"\n" +"

\n" +"Also it is possible to change the way rhythm is specified: for every note\n" +"(explicit), or only when the duration changes (implicit). Some users may " +"prefer\n" +"the option implicit per line, which always specifies the duration for the " +"first\n" +"note, chord or rest on a line.\n" +"

\n" +"\n" +"

\n" +"The last three menu commands can copy, paste or apply a rhythm that is " +"entered\n" +"in a dialog.\n" +"

\n" +"\n" +"

\n" +"In the \"Apply Rhythm\" dialog you can enter a series of durations, e.g.:\n" +"

\n" +"\n" +"

\n" +"4. 8 4 16 16 8 2\n" +"

\n" +"\n" +"

\n" +"which will then, repetitively, be applied to a selection of notes.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/rhythm/rhythm.py:279 +msgctxt "submenu title" +msgid "Rhythm" +msgstr "" + +#: frescobaldi_app/scorewiz/__init__.py:59 +#: frescobaldi_app/scorewiz/dialog.py:198 +msgid "Setup New Score..." +msgstr "" + +#: frescobaldi_app/scorewiz/build.py:136 +msgid "Music follows here." +msgstr "" + +#: frescobaldi_app/scorewiz/build.py:403 +msgid "Remove default LilyPond tagline" +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:77 +msgid "Score Setup Wizard" +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:80 +msgid "Clear" +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:82 +msgid "Clears the current page of the Score Wizard." +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:83 +msgid "Preview" +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:130 +msgid "Score Preview" +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:164 +msgid "&Titles and Headers" +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:173 +msgid "&Parts" +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:182 +msgid "&Score settings" +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:191 +msgid "The Score Wizard" +msgstr "" + +#: frescobaldi_app/scorewiz/dialog.py:199 +msgid "" +"

\n" +"The Score Setup Wizard ({key}) in {menu} is designed\n" +"to quickly setup a LilyPond music score.\n" +"

\n" +"\n" +"

\n" +"In the first tab, Titles and Headers, you can enter titling\n" +"information.\n" +"

\n" +"\n" +"

\n" +"In the second tab, Parts, you can compose your score out of many\n" +"available part types.\n" +"Doubleclick a part type to add it to your score (or click Add).\n" +"Select the part in the score list to change some settings for the selected " +"part,\n" +"if desired.\n" +"Many parts, especially Choir, have powerful options to set up the score the " +"way\n" +"you want it.\n" +"

\n" +"\n" +"

\n" +"In the third tab, Score settings, global score properties and\n" +"preferences can be set.\n" +"

\n" +"\n" +"

\n" +"Click the Preview button to get a preview with some example music filled " +"in.\n" +"Click OK to copy the generated LilyPond source text to the editor.\n" +"

\n" +"\n" +"

Multiple pieces or mouvements

\n" +"\n" +"

\n" +"A special and powerful feature of the Parts tab is hidden in the \n" +"\"Containers\" category in the part types list.\n" +"

\n" +"\n" +"

\n" +"This category contains the Score, Book and Bookpart types, with which you\n" +"can setup a LilyPond document containing multiple scores or even books.\n" +"You may add Score, Bookpart or Book entries to the score view.\n" +"They can be nested: a Score can be added to a Bookpart or Book but you " +"can't\n" +"add a Book to a Bookpart or a Score.\n" +"

\n" +"\n" +"

\n" +"Then you can add musical parts.\n" +"If you want to create multiple scores with exact the same parts, you can " +"just\n" +"add the parts to the top level of the score view, and then the scores, " +"without\n" +"adding musical parts to the scores.\n" +"The scores will then use the parts in the top level of the score.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:87 +msgid "Click to enter a value." +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:89 +msgid "bottom of first page" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:90 +msgid "bottom of last page" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:135 +msgid "Dedication" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:136 +msgid "Title" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:137 +msgid "Subtitle" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:138 +msgid "Subsubtitle" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:139 +msgid "Instrument" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:140 +msgid "Composer" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:141 +msgid "Arranger" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:142 +msgid "Poet" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:143 +msgid "Meter" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:144 +msgid "Piece" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:145 +msgid "Opus" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:146 +msgid "Copyright" +msgstr "" + +#: frescobaldi_app/scorewiz/header.py:147 +msgid "Tagline" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:100 +msgid "Available parts:" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:101 +msgid "Score:" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:102 +msgid "&Add" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:103 frescobaldi_app/snippet/widget.py:178 +#: frescobaldi_app/widgets/listedit.py:93 +#: frescobaldi_app/widgets/schemeselector.py:64 +msgid "&Remove" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:104 +msgid "Move up" +msgstr "" + +#: frescobaldi_app/scorewiz/score.py:105 +msgid "Move down" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:99 +msgid "Key signature:" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:135 +msgid "Time signature:" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:177 +msgid "Pickup measure:" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:221 +msgid "Metronome mark:" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:246 +msgid "Tempo indication:" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:385 +msgid "Major" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:386 +msgid "Minor" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:387 +msgid "Ionian" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:388 +msgid "Dorian" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:389 +msgid "Phrygian" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:390 +msgid "Lydian" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:391 +msgid "Mixolydian" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:392 +msgid "Aeolian" +msgstr "" + +#: frescobaldi_app/scorewiz/scoreproperties.py:393 +msgid "Locrian" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:73 +msgid "Score properties" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:112 +msgid "General preferences" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:113 +msgid "Use typographical quotes" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:115 +msgid "Replace normal quotes in titles with nice typographical quotes." +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:116 +msgid "Remove default tagline" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:118 +msgid "Suppress the default tagline output by LilyPond." +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:119 +msgid "Remove bar numbers" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:121 +msgid "" +"Suppress the display of measure numbers at the beginning of every system." +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:123 +msgid "Create MIDI output" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:125 +msgid "Create a MIDI file in addition to the PDF file." +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:126 +msgid "Show metronome mark" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:128 +msgid "" +"If checked, show the metronome mark at the beginning of the score. The MIDI " +"output also uses the metronome setting." +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:131 +msgid "Paper size:" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:133 +msgid "Landscape" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Long" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:186 +#: frescobaldi_app/scorewiz/settings.py:189 +msgid "Short" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:213 +msgid "Instrument names" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:214 +msgid "First system:" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:215 +msgid "Other systems:" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:218 +msgid "Use long or short instrument names before the first system." +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:220 +msgid "Use short, long or no instrument names before the next systems." +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:222 +msgid "Which language to use for the instrument names." +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:290 +msgid "Pitch name language:" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:292 +msgid "The LilyPond language you want to use for the pitch names." +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:294 +msgid "Version:" +msgstr "" + +#: frescobaldi_app/scorewiz/settings.py:296 +msgid "The LilyPond version you will be using for this document." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:64 +msgid "No settings available." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:133 +msgid "Adjust how many separate voices you want on each staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:134 +msgid "This is primarily useful when you write polyphonic music like a fuge." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:136 +msgid "Right hand:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:137 +msgid "Left hand:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:186 +msgid "Chord style:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:187 +msgid "Guitar fret diagrams" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:189 +msgid "" +"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " +"and above)." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:203 +msgid "Chords follow here." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:215 +msgid "German" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:216 +msgid "Semi-German" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:217 +msgid "Italian" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/_base.py:218 +msgid "French" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:39 +msgid "Horn in F" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:43 +msgctxt "abbreviation for Horn in F" +msgid "Hn.F." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:52 +msgid "Trumpet in C" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:56 +msgctxt "abbreviation for Trumpet in C" +msgid "Tr.C." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:64 +msgid "Trumpet in Bb" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:68 +msgctxt "abbreviation for Trumpet in Bb" +msgid "Tr.Bb." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:76 +msgid "Trombone" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:80 +msgctxt "abbreviation for Trombone" +msgid "Trb." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:90 +msgid "Tuba" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:94 +msgctxt "abbreviation for Tuba" +msgid "Tb." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:103 +msgid "Bass Tuba" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:107 +msgctxt "abbreviation for Bass Tuba" +msgid "B.Tb." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/brass.py:116 +msgid "Brass" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:43 +msgid "Staff Group" +msgstr "" + +#. L10N: Brace like a piano staff +#: frescobaldi_app/scorewiz/parts/containers.py:54 +msgid "Brace" +msgstr "" + +#. L10N: Bracket like a choir staff +#: frescobaldi_app/scorewiz/parts/containers.py:56 +msgid "Bracket" +msgstr "" + +#. L10N: Square bracket like a sub-group +#: frescobaldi_app/scorewiz/parts/containers.py:58 +msgid "Square" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:71 +msgid "Type:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:72 +msgid "Connect Barlines" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:73 +msgid "If checked, barlines are connected between the staves." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:94 +msgid "Score" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:123 +msgid "Piece:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:124 +msgid "Opus:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:125 +msgid "Properties" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:153 +msgid "Book Part" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:166 +msgid "Book" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:188 +msgid "" +"

Here you can specify a filename or suffix (without extension) to set the " +"names of generated output files for this book.

\n" +"

If you choose \"Suffix\" the entered name will be appended to the " +"document's file name; if you choose \"Filename\", just the entered name will " +"be used.

" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:193 +msgid "Output Filename:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:194 +msgid "Filename" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:195 +msgid "Suffix" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/containers.py:207 +msgid "Containers" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:44 +msgid "Piano" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:48 +msgctxt "abbreviation for Piano" +msgid "Pno." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:56 +msgid "Harpsichord" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:60 +msgctxt "abbreviation for Harpsichord" +msgid "Hs." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:68 +msgid "Clavichord" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:72 +msgctxt "abbreviation for Clavichord" +msgid "Clv." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:80 +msgid "Organ" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:84 +msgctxt "abbreviation for Organ" +msgid "Org." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:99 +msgid "Pedal:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:101 +msgid "Set to 0 to disable the pedal altogether." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:114 +msgid "Celesta" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:118 +msgctxt "abbreviation for Celesta" +msgid "Cel." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/keyboard.py:124 +msgid "Keyboard instruments" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:45 +msgid "Timpani" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:49 +msgctxt "abbreviation for Timpani" +msgid "Tmp." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:59 +msgid "Xylophone" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:63 +msgctxt "abbreviation for Xylophone" +msgid "Xyl." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:71 +msgid "Marimba" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:75 +msgctxt "abbreviation for Marimba" +msgid "Mar." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:84 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:318 +msgid "Upper staff:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:85 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:319 +msgid "Lower staff:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:87 +msgid "Set the number of voices to 0 to disable the second staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:99 +msgid "Vibraphone" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:103 +msgctxt "abbreviation for Vibraphone" +msgid "Vib." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:111 +msgid "Tubular bells" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:115 +msgctxt "abbreviation for Tubular bells" +msgid "Tub." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:123 +msgid "Glockenspiel" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:127 +msgctxt "abbreviation for Glockenspiel" +msgid "Gls." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:135 +msgid "Carillon" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:139 +msgctxt "abbreviation for Carillon" +msgid "Car." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:145 +msgid "Manual staff:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:146 +msgid "Pedal staff:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:161 +msgid "Drums" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:165 +msgctxt "abbreviation for Drums" +msgid "Dr." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:186 +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:258 +msgid "Voices:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:188 +msgid "Remove stems" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:189 +msgid "Remove the stems from the drum notes." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:201 +msgid "Drums follow here." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:226 +msgid "keep some distance." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:232 +msgid "Drums (5 lines, default)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:233 +msgid "Timbales-style (2 lines)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:234 +msgid "Congas-style (2 lines)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:235 +msgid "Bongos-style (2 lines)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:236 +msgid "Percussion-style (1 line)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/percussion.py:242 +msgid "Percussion" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:76 +msgid "Staff type:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:82 +msgid "Tuning:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:172 +msgid "Normal staff" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:173 +msgid "Tablature" +msgstr "" + +#. L10N: Both a Normal and a Tablature staff +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:175 +msgid "Both" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:182 +msgid "Mandolin" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:186 +msgctxt "abbreviation for Mandolin" +msgid "Mdl." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:190 +msgid "Mandolin tuning" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:197 +msgid "Banjo" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:201 +msgctxt "abbreviation for Banjo" +msgid "Bj." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:206 +msgid "Open G-tuning (aDGBD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:207 +msgid "C-tuning (gCGBD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:208 +msgid "Modal tuning (gDGCD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:209 +msgid "Open D-tuning (aDF#AD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:210 +msgid "Open Dm-tuning (aDFAD)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:220 +msgid "Four strings (instead of five)" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:234 +msgid "Classical guitar" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:238 +msgctxt "abbreviation for Classical guitar" +msgid "Gt." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:243 +msgid "Guitar tuning" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:244 +msgid "Open G-tuning" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:267 +msgid "Jazz guitar" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:271 +msgctxt "abbreviation for Jazz guitar" +msgid "J.Gt." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:279 +#: frescobaldi_app/scorewiz/parts/vocal.py:171 +msgid "Bass" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:283 +msgctxt "abbreviation for Bass" +msgid "Bs." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:289 +msgid "Bass tuning" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:296 +msgid "Electric bass" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:300 +msgctxt "abbreviation for Electric bass" +msgid "E.Bs." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:308 +msgid "Harp" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:312 +msgctxt "abbreviation for Harp" +msgid "Hp." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/plucked_strings.py:335 +msgid "Plucked strings" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/special.py:39 +#: frescobaldi_app/scorewiz/parts/vocal.py:204 +msgid "Chord names" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/special.py:45 +msgid "Figured Bass" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/special.py:52 +msgid "Use extender lines" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/special.py:60 +#: frescobaldi_app/scorewiz/parts/strings.py:109 +msgid "Figures follow here." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/special.py:70 +msgid "Staff" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/special.py:76 +msgid "Special" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:41 +msgid "Violin" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:45 +msgctxt "abbreviation for Violin" +msgid "Vl." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:53 +msgid "Viola" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:57 +msgctxt "abbreviation for Viola" +msgid "Vla." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:67 +msgid "Cello" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:71 +msgctxt "abbreviation for Cello" +msgid "Cl." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:81 +msgid "Contrabass" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:85 +msgctxt "abbreviation for Contrabass" +msgid "Cb." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:95 +msgid "Basso Continuo" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:99 +msgctxt "abbreviation for Basso Continuo" +msgid "B.c." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/strings.py:117 +msgid "Strings" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:65 +msgid "Stanzas:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:66 +msgid "The number of stanzas." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:73 +msgid "Ambitus" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:75 +msgid "Show the pitch range of the voice at the beginning of the staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:89 +msgid "Lyrics follow here." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:126 +msgid "Soprano" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:130 +msgctxt "abbreviation for Soprano" +msgid "S." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:136 +msgid "Mezzo-soprano" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:140 +msgctxt "abbreviation for Mezzo-soprano" +msgid "Ms." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:146 +msgid "Alto" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:150 +msgctxt "abbreviation for Alto" +msgid "A." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:158 +msgid "Tenor" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:162 +msgctxt "abbreviation for Tenor" +msgid "T." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:175 +msgctxt "abbreviation for Bass" +msgid "B." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:184 +msgid "Lead sheet" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:202 +msgid "" +"The Lead Sheet provides a staff with chord names above and lyrics below it. " +"A second staff is optional." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:205 +msgid "Add accompaniment staff" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:207 +msgid "" +"Adds an accompaniment staff and also puts an accompaniment voice in the " +"upper staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:273 +#: frescobaldi_app/scorewiz/parts/vocal.py:360 +msgid "Choir" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:319 +msgid "" +"Please select the voices for the choir. Use the letters S, A, T, or B. A " +"hyphen denotes a new staff." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:321 +msgid "Hint: For a double choir you can use two choir parts." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:322 +msgid "Voicing:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:323 +msgid "Lyrics:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:324 +msgid "Piano reduction" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:326 +msgid "Adds an automatically generated piano reduction." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:327 +msgid "Rehearsal MIDI files" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:329 +msgid "" +"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " +"generated for the main score." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:361 +msgctxt "abbreviation for Choir" +msgid "Ch." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:612 +msgid "Rehearsal MIDI files:" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:658 +msgid "All voices same lyrics" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:659 +msgid "A set of the same lyrics is placed between all staves." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:660 +msgid "Every voice same lyrics" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:661 +msgid "" +"Every voice gets its own lyrics, using the same text as the other voices." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:663 +msgid "Every voice different lyrics" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:664 +msgid "Every voice gets a different set of lyrics." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:665 +msgid "Distribute stanzas" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:666 +msgid "One set of stanzas is distributed across the staves." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/vocal.py:691 +msgid "Vocal" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:39 +msgid "Flute" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:43 +msgctxt "abbreviation for Flute" +msgid "Fl." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:51 +msgid "Piccolo" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:55 +msgctxt "abbreviation for Piccolo" +msgid "Pic." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:64 +msgid "Bass flute" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:68 +msgctxt "abbreviation for Bass flute" +msgid "Bfl." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:77 +msgid "Oboe" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:81 +msgctxt "abbreviation for Oboe" +msgid "Ob." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:89 +msgid "Oboe d'amore" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:93 +msgctxt "abbreviation for Oboe d'amore" +msgid "Ob.d'am." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:102 +msgid "English horn" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:106 +msgctxt "abbreviation for English horn" +msgid "Eng.h." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:115 +msgid "Bassoon" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:119 +msgctxt "abbreviation for Bassoon" +msgid "Bn." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:129 +msgid "Contrabassoon" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:133 +msgctxt "abbreviation for Contrabassoon" +msgid "C.Bn." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:144 +msgid "Clarinet" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:148 +msgctxt "abbreviation for Clarinet" +msgid "Cl." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:157 +msgid "Sopranino Sax" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:161 +msgctxt "abbreviation for Sopranino Sax" +msgid "SiSx." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:170 +msgid "Soprano Sax" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:174 +msgctxt "abbreviation for Soprano Sax" +msgid "SoSx." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:183 +msgid "Alto Sax" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:187 +msgctxt "abbreviation for Alto Sax" +msgid "ASx." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:196 +msgid "Tenor Sax" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:200 +msgctxt "abbreviation for Tenor Sax" +msgid "TSx." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:209 +msgid "Baritone Sax" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:213 +msgctxt "abbreviation for Baritone Sax" +msgid "BSx." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:222 +msgid "Bass Sax" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:226 +msgctxt "abbreviation for Bass Sax" +msgid "BsSx." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:235 +msgid "Soprano recorder" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:239 +msgctxt "abbreviation for Soprano recorder" +msgid "S.rec." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:248 +msgid "Alto recorder" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:252 +msgctxt "abbreviation for Alto recorder" +msgid "A.rec." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:260 +msgid "Tenor recorder" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:264 +msgctxt "abbreviation for Tenor recorder" +msgid "T.rec." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:272 +msgid "Bass recorder" +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:276 +msgctxt "abbreviation for Bass recorder" +msgid "B.rec." +msgstr "" + +#: frescobaldi_app/scorewiz/parts/woodwind.py:285 +msgid "Woodwinds" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:40 +msgid "Manage Sessions" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:109 +msgid "Name:" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:110 +msgid "Always save the list of documents in this session" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:111 +msgid "Base directory:" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:133 +msgid "Edit session: {name}" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:137 +msgid "Edit new session" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:166 +msgid "Please enter a session name." +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:174 +msgid "Please do not use the name '{name}'." +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:180 +msgid "" +"Another session with the name {name} already exists.\n" +"\n" +"Do you want to overwrite it?" +msgstr "" + +#: frescobaldi_app/sessions/dialog.py:183 +msgid "Overwrite" +msgstr "" + +#: frescobaldi_app/sessions/manager.py:127 +msgctxt "New Session" +msgid "&New..." +msgstr "" + +#: frescobaldi_app/sessions/manager.py:129 +msgid "&Manage..." +msgstr "" + +#: frescobaldi_app/sessions/manager.py:130 +msgid "No Session" +msgstr "" + +#: frescobaldi_app/sessions/menu.py:55 +msgctxt "menu title" +msgid "&Session" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:38 +msgid "Blank Line" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:44 +msgid "Single Typographical Quotes" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:49 +msgid "Double Typographical Quotes" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:115 +msgid "Tuplets" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:125 +msgid "Modern 2/2 Time Signature" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:131 +msgid "Modern 4/4 Time Signature" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:137 +msgid "Tactus Time Signature (number with note)" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:148 +msgid "LilyPond Version" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:159 +msgid "Relative Music" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:166 +msgid "Upper case selection" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:172 +msgid "Lower case selection" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:178 +msgid "Title case selection" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:189 +msgid "Markup lines" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:197 +msgid "Markup column" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:202 +msgid "Tagline with date and LilyPond version" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:212 +msgid "Header Template" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:227 +msgid "No Tagline" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:235 +msgid "No Barnumbers" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:245 +msgid "Midi Tempo" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:255 +msgid "Staff Size" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:310 +msgid "A5 Paper" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:318 +msgid "Document Fonts..." +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:346 +msgid "Last note or chord" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:427 +msgid "Color" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:464 +msgid "Basic Leadsheet" +msgstr "" + +#: frescobaldi_app/snippet/builtin.py:508 +msgid "Choir Hymn" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:116 frescobaldi_app/snippet/insert.py:221 +msgid "Edit Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:116 +msgid "New Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:118 +msgid "Snippet Text:" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:119 +msgid "Title:" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:120 +msgid "Shortcut:" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:131 +msgid "Click to change the keyboard shortcut." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "Empty Snippet" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:136 +msgid "A snippet can't be empty." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:198 +msgid "Snippet editor" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:203 +msgid "" +"

Here you can edit the text of the snippet.

If you start the first " +"line(s) with '-*- ' (note the space), the remainder of that line" +"(s) defines variables like name: value; or simply name; which influence the behaviour of the snippet. The following variables " +"can be used:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:212 +msgid "Place the snippet in the insert menu, grouped by the (optional) value." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:214 +msgid "" +"Place the snippet in the menu {file_new_from_template}, grouped by the " +"(optional) value. When triggered via the menu, the snippet is inserted into " +"a new document." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:218 +msgctxt "menu title" +msgid "File" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:219 +msgctxt "menu subtitle" +msgid "New from Template" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:221 +msgid "The mnemonic to type to select the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:223 +msgid "Do not auto-indent the snippet after inserting." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:225 +msgid "The icon to show in menu and snippet list." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:227 +msgid "" +"The symbol to show in menu and snippet list. Symbols are icons that use the " +"default text color and can be found in {directory}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:231 +msgid "Execute the snippet as a Python script. See {link}." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:234 +msgid "One of more of the following words (separated with spaces or commas):" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:237 +msgid "Requires text to be selected." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:239 +msgid "Adjusts the selection to not include starting and trialing whitespace." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:241 +msgid "Selects all inserted text." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:247 +msgid "" +"

The other lines of the snippet define the text to be inserted in the " +"editor. Here, you can insert variables prefixed with a $. A double $ will be " +"replaced with a single one. The following variables are recognized:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:263 +msgid "Python Snippets" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:268 +msgid "" +"

Python snippets can read and should set the variable {text}. The variable " +"{text} contains the currently selected text (which may be an empty string).\n" +"

You may set {text} to a string or a list of strings.

\n" +"

Other variables that may be referenced:

" +msgstr "" + +#: frescobaldi_app/snippet/edit.py:276 +msgid "A list of strings describing the type of text the cursor is at." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:278 +msgid "" +"The current QTextCursor, giving access to the document. Don't change the " +"document through the cursor, however." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:281 +msgid "" +"When setting {text} to a list instead of a string, you can use this value to " +"specify the place the text cursor will be placed after inserting the snippet." +msgstr "" + +#: frescobaldi_app/snippet/edit.py:285 +msgid "" +"When setting {text} to a list instead of a string, this value can be used " +"together with {cursor} to select text when inserting the string parts of the " +"list." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:76 +msgid "The current date in YYYY-MM-DD format." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:80 +msgid "The version of the default LilyPond program." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:84 +msgid "The version of Frescobaldi." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:88 +msgid "The URL of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:92 +msgid "The full local filename of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:96 +msgid "The name of the current document." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:100 +msgid "Moves the text cursor here after insert." +msgstr "" + +#: frescobaldi_app/snippet/expand.py:104 +msgid "" +"Selects text from here to the position given using the $CURSOR " +"variable" +msgstr "" + +#: frescobaldi_app/snippet/expand.py:108 +msgid "The selected text if available. If not, the text cursor is moved here." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:102 +msgid "No snippets found." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:111 +#: frescobaldi_app/snippet/widget.py:261 +msgctxt "dialog title" +msgid "Import Snippets" +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:119 +msgid "New Snippets" +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:120 +msgid "Updated Snippets" +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:121 +msgid "Unchanged Snippets" +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:183 +msgid "Import Keyboard Shortcuts" +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:188 +msgid "Choose which snippets you want to import:" +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:190 +msgid "There are no new or updated snippets in the file." +msgstr "" + +#: frescobaldi_app/snippet/import_export.py:194 +msgid "" +"

Here the snippets from {filename} are displayed.

\n" +"

If there are new or updated snippets, you can select or deselect them one " +"by one, or all at once, using the checkbox of the group. Then click OK to " +"import all the selected snippets.

\n" +"

Existing, unchanged snippets can't be imported.

\n" +msgstr "" + +#: frescobaldi_app/snippet/insert.py:219 +msgid "Snippet error" +msgstr "" + +#: frescobaldi_app/snippet/menu.py:117 +msgid "&Insert" +msgstr "" + +#: frescobaldi_app/snippet/menu.py:138 +msgid "New from &Template" +msgstr "" + +#: frescobaldi_app/snippet/model.py:59 +msgid "Name" +msgstr "" + +#: frescobaldi_app/snippet/model.py:61 +msgid "Description" +msgstr "" + +#: frescobaldi_app/snippet/template.py:33 +msgid "Save as Template" +msgstr "" + +#: frescobaldi_app/snippet/template.py:34 +msgid "Please enter a template name:" +msgstr "" + +#: frescobaldi_app/snippet/tool.py:53 frescobaldi_app/snippet/tool.py:119 +#: frescobaldi_app/snippet/widget.py:362 +msgid "Snippets" +msgstr "" + +#: frescobaldi_app/snippet/tool.py:54 +msgid "&Snippets" +msgstr "" + +#: frescobaldi_app/snippet/tool.py:79 +msgid "Save as Template..." +msgstr "" + +#: frescobaldi_app/snippet/tool.py:80 +msgid "&Snippets..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:171 +msgid "&Menu" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:172 +#: frescobaldi_app/widgets/listedit.py:91 +msgid "&Add..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:174 +msgid "Add a new snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:175 +#: frescobaldi_app/widgets/listedit.py:92 +msgid "&Edit..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:177 +msgid "Edit the current snippet. ({key})" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:179 +msgid "Remove the selected snippets." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:180 +msgid "A&pply" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:181 +msgid "Apply the current snippet." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:182 +msgid "&Import..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:183 +msgid "Import snippets from a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:184 +msgid "E&xport..." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:185 +msgid "Export snippets to a file." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:186 +msgid "&Help" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:188 +msgid "" +"Enter text to search in the snippets list.\n" +"See \"What's This\" for more information." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:191 +msgid "" +"Enter text to search in the snippets list, and press Enter to apply the " +"currently selected snippet." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:193 +msgid "" +"If the search text fully matches the value of the '{name}' variable of a " +"snippet, that snippet is selected." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:195 +msgid "" +"If the search text starts with a colon ':', the rest of the search text " +"filters snippets that define the given variable. After a space a value can " +"also be entered, snippets will then match if the value of the given variable " +"contains the text after the space." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:200 +msgid "" +"E.g. entering {menu} will show all snippets that are displayed in the insert " +"menu." +msgstr "" + +#: frescobaldi_app/snippet/widget.py:260 frescobaldi_app/snippet/widget.py:277 +msgid "XML Files" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:280 +msgctxt "dialog title" +msgid "Export {num} Snippet" +msgid_plural "Export {num} Snippets" +msgstr[0] "" +msgstr[1] "" + +#: frescobaldi_app/snippet/widget.py:368 +msgid "" +"

\n" +"With the snippets manager you can store often used pieces of text called\n" +"\"snippets\", and easily paste them into the text editor.\n" +"

\n" +"\n" +"

\n" +"The snippets manager can be activated via the menu {menu_snippets} or\n" +"by pressing {key_snippets}.\n" +"

\n" +"\n" +"

\n" +"Snippets can be searched by browsing the list or by typing some characters\n" +"in the search entry.\n" +"Snippets can also have a keyboard shortcut which directly applies them.\n" +"Some snippets have a special mnemonic (short name) which you can also type\n" +"in the search entry to select the snippet. Pressing the Return key will " +"then\n" +"apply the snippet to the text editor and hide the snippets manager.\n" +"

\n" +"\n" +"

\n" +"Add new snippets using {key_add}. Edit the selected snippet with " +"{key_edit}.\n" +"Remove selected snippets using {key_delete}. Warning: there's no undo!\n" +"

\n" +"\n" +"

\n" +"Snippets can also be put in the menu (see {link}).\n" +"And finally there are snippets which can include or alter selected text.\n" +"Some snippets do this by using special variables, while others are small\n" +"scripts written in Python.\n" +"

\n" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:400 +msgctxt "menu title" +msgid "Insert" +msgstr "" + +#: frescobaldi_app/snippet/widget.py:400 +msgid "Snippets..." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:60 +msgid "Start recording a key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:61 +msgid "Clear the key sequence." +msgstr "" + +#: frescobaldi_app/widgets/keysequencewidget.py:115 +msgid "Input" +msgstr "" + +#: frescobaldi_app/widgets/schemeselector.py:47 +#: frescobaldi_app/widgets/schemeselector.py:62 +msgid "Scheme:" +msgstr "" + +#: frescobaldi_app/widgets/schemeselector.py:63 +msgctxt "New Scheme" +msgid "&New..." +msgstr "" + +#: frescobaldi_app/widgets/schemeselector.py:93 +msgid "Please enter a name for the new scheme:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:94 +msgctxt "window title" +msgid "Edit Shortcut" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:95 +msgid "&No shortcut" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:96 +msgid "Use a &custom shortcut:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Alternative #{num}:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:98 +msgid "Primary shortcut:" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:109 +msgid "Here you can edit the shortcuts for {name}" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:127 +msgctxt "no keyboard shortcut" +msgid "none" +msgstr "" + +#: frescobaldi_app/widgets/shortcuteditdialog.py:128 +msgid "Use &default shortcut ({name})" +msgstr "" + +#: frescobaldi_app/widgets/tempobutton.py:51 +msgid "Click this button a few times to set the tempo." +msgstr "" + +#: frescobaldi_app/widgets/urlrequester.py:75 +msgid "Open file dialog" +msgstr "" + +#: frescobaldi_app/widgets/urlrequester.py:119 +msgid "Select a directory" +msgstr "" + +#: frescobaldi_app/widgets/urlrequester.py:121 +msgid "Select a file" +msgstr "" diff -Nru frescobaldi-1.2.0/frescobaldi.py frescobaldi-2.0.0/frescobaldi.py --- frescobaldi-1.2.0/frescobaldi.py 2010-07-26 08:36:50.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -#!@PYTHON_EXECUTABLE@ - -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this package; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -import sys - -import sip -sip.setapi("QString", 2) -sip.setapi("QVariant", 2) - -from PyKDE4.kdecore import (ki18n, ki18nc, - KAboutData, KCmdLineArgs, KCmdLineOptions, KComponentData, KLocalizedString) - -# Find our own Python modules and packages -sys.path.insert(0, "@MODULE_DIR@") -from frescobaldi_app import newApp, runningApp - -appName = "frescobaldi" -catalog = appName -programName = ki18n("Frescobaldi") -version = "@VERSION@" -description = ki18n("LilyPond Music Editor") -license = KAboutData.License_GPL -copyright = ki18n("Copyright (c) 2008-2010, Wilbert Berendsen") -text = KLocalizedString() -homepage = "http://www.frescobaldi.org/" -bugs = "info@frescobaldi.org" - -aboutData = KAboutData(appName, catalog, programName, version, description, - license, copyright, text, homepage, bugs) - -aboutData.setTranslator( - ki18nc("NAME OF TRANSLATORS", "Your name"), - ki18nc("EMAIL OF TRANSLATORS", "i18n@frescobaldi.org")) - -KCmdLineArgs.init(list(sys.argv), aboutData) -KComponentData(aboutData).dirs().addPrefix("@CMAKE_INSTALL_PREFIX@") - -options = KCmdLineOptions() -options.add("start ", ki18n("Session to start")) -options.add("n").add("new", ki18n("Start a new instance")) -options.add("e").add("encoding ", ki18n("Encoding to use")) -options.add("l").add("line ", ki18n("Line number to go to, starting at 1")) -options.add("c").add("column ", ki18n("Column to go to, starting at 0")) -options.add("smart", ki18n("Try to use smart line and column numbers")) -options.add("+files", ki18n("LilyPond files to open, may also be textedit URLs")) -KCmdLineArgs.addCmdLineOptions(options) - -args = KCmdLineArgs.parsedArgs() - -app = not args.isSet("new") and runningApp() or newApp() -if args.isSet("start"): - app.startSession(args.getOption("start")) -docs = [app.openUrl(args.url(c), args.getOption("encoding")) - for c in range(args.count())] -if docs: - docs[-1].setActive() - line = args.getOption("line") - if line.isdigit(): - line = int(line) or 1 - column = args.getOption("column") - column = int(column) if column.isdigit() else 0 - docs[-1].setCursorPosition(line, column, args.isSet("smart")) - -app.run() Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/frescobaldi-wininst.bmp and /tmp/z3itFtculI/frescobaldi-2.0.0/frescobaldi-wininst.bmp differ diff -Nru frescobaldi-1.2.0/frescobaldi-wininst.py frescobaldi-2.0.0/frescobaldi-wininst.py --- frescobaldi-1.2.0/frescobaldi-wininst.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/frescobaldi-wininst.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,122 @@ +#! python +""" +PostInstall/PostUninstall script for Frescobaldi on Windows + +This install script is used by setup.py bdist_wininst + +It is called with the '-install' argument after installing, and with the +'-remove' argument _after_ uninstalling. + +""" + +import os +import sys + + +# Windows register: +try: + import winreg +except ImportError: + try: + import _winreg as winreg + except ImportError: + winreg = None + + +# Frescobaldi meta info (Possibly not accessible anymore on uninstall): +try: + from frescobaldi_app import info +except ImportError: + info = None + + +# Icon: +try: + import frescobaldi_app + icon = os.path.join(frescobaldi_app.__path__[0], 'icons', 'frescobaldi.ico') +except ImportError: + icon = None + + +# Main application script and Python executable: +script = os.path.join(sys.prefix, 'Scripts', 'frescobaldi') +python = os.path.join(sys.exec_prefix, 'pythonw.exe') # because sys.executable points to installer + + +def install_association(): + """Installs a file association for the LilyPond file type. + + Sets HKEY_CLASSES_ROOT\\LilyPond\\shell\\frescobaldi to 'Open with &Frescobaldi...' + Sets HKEY_CLASSES_ROOT\\LilyPond\\shell\\frescobaldi\\command + to '{python} "{script}" "%1"' + + """ + key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, "LilyPond\\shell\\frescobaldi") + with key: + winreg.SetValue(key, None, winreg.REG_SZ, "Open with &Frescobaldi...") + winreg.SetValue(key, "command", winreg.REG_SZ, '{0} "{1}" "%1"'.format(python, script)) + print("* Created file association") + +def remove_association(): + """Removes the file association. + + Removes HKEY_CLASSES_ROOT\\LilyPond\\shell\\frescobaldi + + """ + try: + key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, "LilyPond\\shell") + with key: + winreg.DeleteKey(key, "frescobaldi\\command") + winreg.DeleteKey(key, "frescobaldi") + print("* Removed file association") + except WindowsError: + print("*** Could not remove file association ***") + +def install_startmenu(): + """Installs a shortcut in the startmenu.""" + for startmenu in ( + get_special_folder_path('CSIDL_COMMON_STARTMENU'), + get_special_folder_path('CSIDL_STARTMENU'), + ): + menudir = os.path.join(startmenu, info.appname) + if os.path.isdir(menudir): + shortcut(menudir) + break + else: + try: + os.mkdir(menudir) + except OSError: + continue + else: + directory_created(menudir) + shortcut(menudir) + break + +def shortcut(directory): + """Makes the Frescobaldi shortcut in the specified directory.""" + lnk = os.path.join(directory, info.appname + ".lnk") + create_shortcut( + python, # path + info.description, # description + lnk, # link name + script, # arguments + "", # workdir + icon, # icon + 0, # icon index + ) + file_created(lnk) + print("* Added \"{0}\" to Start Menu".format(info.appname)) + +def welcome(): + """Prints a nice welcome message in the installer.""" + print("\nWelcome to {0} {1}!".format(info.appname, info.version)) + + +### Main: +if sys.argv[1] == '-install': + install_startmenu() + install_association() + welcome() +elif sys.argv[1] == '-remove': + remove_association() + diff -Nru frescobaldi-1.2.0/.gitignore frescobaldi-2.0.0/.gitignore --- frescobaldi-1.2.0/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/.gitignore 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,2 @@ +*.pyc +*~ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/icons/hicolor/16x16/actions/lilydoc.png and /tmp/z3itFtculI/frescobaldi-2.0.0/icons/hicolor/16x16/actions/lilydoc.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/icons/hicolor/scalable/actions/run-lilypond.svgz and /tmp/z3itFtculI/frescobaldi-2.0.0/icons/hicolor/scalable/actions/run-lilypond.svgz differ diff -Nru frescobaldi-1.2.0/INSTALL frescobaldi-2.0.0/INSTALL --- frescobaldi-1.2.0/INSTALL 2010-12-26 06:28:53.000000000 +0000 +++ frescobaldi-2.0.0/INSTALL 2011-12-26 07:09:49.000000000 +0000 @@ -1,107 +1,64 @@ -How to install Frescobaldi: -=========================== +INSTALL for Frescobaldi 2.0. +============================ -To install Frescobaldi in /usr/local: +You can run Frescobaldi without installing. Just unpack and then run: - cmake . - make - make install + python frescobaldi -To install Frescobaldi in your distributions default KDE4 directory (also -recommended for creating installable distribution packages): - cmake . -DCMAKE_INSTALL_PREFIX=$(kde4-config --exec-prefix) - make - make install +The Frescobaldi package is based on distutils. No build process is needed as +Frescobaldi is fully written in the interpreted Python language. To install in +the default location: + sudo python setup.py install -Try Frescobaldi without installing: -=================================== -Just run the 'run' script: +To run Frescobaldi, then simply type - ./run + frescobaldi -If your system is missing some necessary software, the script will inform you. -If everything is fine, Frescobaldi will be added to your Applications menu -and started right away without installing anything. An executable 'frescobaldi' -will be created in the current directory as well. -Running the 'run' script again will give you the option to remove Frescobaldi -from your Applications menu. +If you want to install into /usr instead of /usr/local: + python setup.py install --prefix=/usr -Installing Frescobaldi from SVN: -================================ -If you install Frescobaldi from a SubVersion checkout, you need a very recent -LilyPond, ImageMagick and GNU Gettext to built the LilyPond-generated icons and -the translations. +If you have a Debian-based system such as Ubuntu, and you get the error +message "ImportError: No module named frescobaldi_app.main", try: -If you install Frescobaldi from a released tarball (e.g. -frescobaldi-1.1.3.tar.gz), the icons and translations are already prebuilt. -The makedist.sh shell script creates a tar ball from a SVN checkout. + python setup.py install --install-layout=deb -CMake command line options: -=========================== - -The installation can be customized in a few ways. - -If you don't want to install the User Guide (some Linux distros split -applications and their documentation), add -DHANDBOOK=NO to the cmake command -line. - -If you don't want to bytecompile the Python modules on install (some Linux -distros want their own installers to do that), add -DBYTECOMPILE=NO to the cmake -command line. - -If you get errors about missing Python modules, but you're sure that they are -installed, CMake might be finding the wrong Python version. If you e.g. install -PyKDE4 inside Python 2.6 but CMake is finding Python 2.5 then you get errors -about missing modules. You can fix this by explicitly defining the Python -interpreter to use. Add -DPYTHON_EXECUTABLE=/usr/bin/python2.6 to the cmake -command line in that case. - -If you install Frescobaldi from a SVN checkout (or have removed the prebuilt/ -directory) the icons in pics/ will need to be rebuilt using LilyPond and convert -(from ImageMagick). You can define the locations of those programs using the -LILYPOND_EXECUTABLE and the CONVERT_EXECUTABLE CMake variables. Otherwise the -programs are searched for in the PATH environment variable. You need at least -LilyPond-2.13.19 to build the icons. - -If you install Frescobaldi from a SVN checkout (or have removed the prebuilt/ -directory) the translations in po/ will need to be rebuilt using Gettext's -msgfmt tool. If this tool is not in your $PATH, you can define the -GETTEXT_MSGFMT_EXECUTABLE CMake variable. +See the distutils documentation for more install options. Dependencies: ============= -This is the 1.2 stable branch of Frescobaldi. It depends on: -- Python 2.6 or 2.7 -- python-dbus (http://www.freedesktop.org/wiki/Software/DBusBindings#python) -- Qt >= 4.6 -- SIP >= 4.9.3 -- PyQt4 >= 4.6 -- kdelibs >= 4.3.2 -- PyKDE4 >= 4.0.2 Rev 2 - -Frescobaldi embeds the KParts of the following applications: -- Okular (required, necessary for the PDF preview) -- Konsole (optional, used for the Terminal tool) -- KMid (recommended, needs version 2.4.0 or higher, for the MIDI player) - -You also might need to install some of the the corresponding -dev packages from -the above to install Frescobaldi from this source package. - - -Other useful programs to use with Frescobaldi: -============================================== - -Some other useful programs to use together with Frescobaldi are: -- LilyPond (of course!) http://lilypond.org/ -- Rumor http://www.volny.cz/smilauer/rumor/ -- a MIDI player like KMid or timidity++, etc. +Frescobaldi 2.0 is written in Python version 2.6 or 2.7 (3.x support is planned) +and depends on Qt4.7 and PyQt4.8, and uses the python-poppler-qt4 binding to +Poppler for the built-in PDF preview. + +For MIDI the PortMidi library is used, either via importing 'pypm', +'pyportmidi._pyportmidi, or, if that is not available, loading the pygame.pypm +module from pygame; or, as a last resort, embedding the PortMidi C-library via +ctypes. MIDI is optional. + +Required: + Python: + http://www.python.org/ + Qt4: + http://qt.nokia.com/ + PyQt4: + http://www.riverbankcomputing.co.uk/software/pyqt/ + Poppler: + http://poppler.freedesktop.org/ + python-poppler-qt4: + http://python-poppler-qt4.googlecode.com/ + +Optional: + PortMidi: + http://portmedia.sourceforge.net/portmidi/ + +Of course you'll need to install one or more versions of LilyPond! diff -Nru frescobaldi-1.2.0/MANIFEST.in frescobaldi-2.0.0/MANIFEST.in --- frescobaldi-1.2.0/MANIFEST.in 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/MANIFEST.in 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,10 @@ +include README* COPYING THANKS INSTALL TODO ChangeLog +include frescobaldi.desktop +include frescobaldi.pot +include *.py +include frescobaldi-wininst.bmp +recursive-include frescobaldi_app README* +recursive-include frescobaldi_app *.png *.svg *.ico +recursive-include frescobaldi_app *.ly *.ily Makefile +recursive-include frescobaldi_app *.po *.mo +global-exclude *~ diff -Nru frescobaldi-1.2.0/pics/arpeggio_arrow_down.ly frescobaldi-2.0.0/pics/arpeggio_arrow_down.ly --- frescobaldi-1.2.0/pics/arpeggio_arrow_down.ly 2010-09-08 18:43:25.000000000 +0000 +++ frescobaldi-2.0.0/pics/arpeggio_arrow_down.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -\version "2.12.0" -\include "arpeggio_defaults.ily" -\relative c' { - \arpeggioArrowDown - 4\arpeggio -} diff -Nru frescobaldi-1.2.0/pics/arpeggio_arrow_up.ly frescobaldi-2.0.0/pics/arpeggio_arrow_up.ly --- frescobaldi-1.2.0/pics/arpeggio_arrow_up.ly 2010-09-08 18:43:25.000000000 +0000 +++ frescobaldi-2.0.0/pics/arpeggio_arrow_up.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -\version "2.12.0" -\include "arpeggio_defaults.ily" -\relative c' { - \arpeggioArrowUp - 4\arpeggio -} diff -Nru frescobaldi-1.2.0/pics/arpeggio_bracket.ly frescobaldi-2.0.0/pics/arpeggio_bracket.ly --- frescobaldi-1.2.0/pics/arpeggio_bracket.ly 2010-09-08 18:43:25.000000000 +0000 +++ frescobaldi-2.0.0/pics/arpeggio_bracket.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -\version "2.12.0" -\include "arpeggio_defaults.ily" -\relative c' { - \arpeggioBracket - 4\arpeggio -} diff -Nru frescobaldi-1.2.0/pics/arpeggio_defaults.ily frescobaldi-2.0.0/pics/arpeggio_defaults.ily --- frescobaldi-1.2.0/pics/arpeggio_defaults.ily 2010-09-08 18:43:25.000000000 +0000 +++ frescobaldi-2.0.0/pics/arpeggio_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -\version "2.12.0" - -#(set-global-staff-size 17) - -\header { - tagline = ##f -} - -\layout { - \context { - \Staff - \override StaffSymbol #'transparent = ##t - \remove "Clef_engraver" - \remove "Time_signature_engraver" - } - \context { - \Voice - \override NoteHead #'no-ledgers = ##t - \override NoteHead #'transparent = ##t - \override Stem #'transparent = ##t - } -} diff -Nru frescobaldi-1.2.0/pics/arpeggio_normal.ly frescobaldi-2.0.0/pics/arpeggio_normal.ly --- frescobaldi-1.2.0/pics/arpeggio_normal.ly 2010-09-08 18:43:25.000000000 +0000 +++ frescobaldi-2.0.0/pics/arpeggio_normal.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -\version "2.12.0" -\include "arpeggio_defaults.ily" -\relative c' { - 4\arpeggio -} diff -Nru frescobaldi-1.2.0/pics/arpeggio_parenthesis.ly frescobaldi-2.0.0/pics/arpeggio_parenthesis.ly --- frescobaldi-1.2.0/pics/arpeggio_parenthesis.ly 2010-09-08 18:43:25.000000000 +0000 +++ frescobaldi-2.0.0/pics/arpeggio_parenthesis.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -\version "2.12.0" -\include "arpeggio_defaults.ily" -\relative c' { - \arpeggioParenthesis - 4\arpeggio -} diff -Nru frescobaldi-1.2.0/pics/articulation_accent.ly frescobaldi-2.0.0/pics/articulation_accent.ly --- frescobaldi-1.2.0/pics/articulation_accent.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_accent.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.sforzato" diff -Nru frescobaldi-1.2.0/pics/articulation_coda.ly frescobaldi-2.0.0/pics/articulation_coda.ly --- frescobaldi-1.2.0/pics/articulation_coda.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_coda.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.coda" diff -Nru frescobaldi-1.2.0/pics/articulation_defaults.ily frescobaldi-2.0.0/pics/articulation_defaults.ily --- frescobaldi-1.2.0/pics/articulation_defaults.ily 2008-11-30 15:48:11.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -\header { tagline=##f } -#(set-global-staff-size 20) diff -Nru frescobaldi-1.2.0/pics/articulation_downbow.ly frescobaldi-2.0.0/pics/articulation_downbow.ly --- frescobaldi-1.2.0/pics/articulation_downbow.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_downbow.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.downbow" diff -Nru frescobaldi-1.2.0/pics/articulation_downmordent.ly frescobaldi-2.0.0/pics/articulation_downmordent.ly --- frescobaldi-1.2.0/pics/articulation_downmordent.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_downmordent.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.downmordent" diff -Nru frescobaldi-1.2.0/pics/articulation_downprall.ly frescobaldi-2.0.0/pics/articulation_downprall.ly --- frescobaldi-1.2.0/pics/articulation_downprall.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_downprall.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.downprall" diff -Nru frescobaldi-1.2.0/pics/articulation_espressivo.ly frescobaldi-2.0.0/pics/articulation_espressivo.ly --- frescobaldi-1.2.0/pics/articulation_espressivo.ly 2008-11-30 15:48:11.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_espressivo.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \fontsize #-1 \musicglyph #"scripts.espr" diff -Nru frescobaldi-1.2.0/pics/articulation_fermata.ly frescobaldi-2.0.0/pics/articulation_fermata.ly --- frescobaldi-1.2.0/pics/articulation_fermata.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_fermata.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.ufermata" diff -Nru frescobaldi-1.2.0/pics/articulation_flageolet.ly frescobaldi-2.0.0/pics/articulation_flageolet.ly --- frescobaldi-1.2.0/pics/articulation_flageolet.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_flageolet.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.flageolet" diff -Nru frescobaldi-1.2.0/pics/articulation_halfopen.ly frescobaldi-2.0.0/pics/articulation_halfopen.ly --- frescobaldi-1.2.0/pics/articulation_halfopen.ly 2010-01-28 14:21:34.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_halfopen.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.11" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.halfopen" diff -Nru frescobaldi-1.2.0/pics/articulation_lheel.ly frescobaldi-2.0.0/pics/articulation_lheel.ly --- frescobaldi-1.2.0/pics/articulation_lheel.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_lheel.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.upedalheel" diff -Nru frescobaldi-1.2.0/pics/articulation_lineprall.ly frescobaldi-2.0.0/pics/articulation_lineprall.ly --- frescobaldi-1.2.0/pics/articulation_lineprall.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_lineprall.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.lineprall" diff -Nru frescobaldi-1.2.0/pics/articulation_longfermata.ly frescobaldi-2.0.0/pics/articulation_longfermata.ly --- frescobaldi-1.2.0/pics/articulation_longfermata.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_longfermata.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.ulongfermata" diff -Nru frescobaldi-1.2.0/pics/articulation_ltoe.ly frescobaldi-2.0.0/pics/articulation_ltoe.ly --- frescobaldi-1.2.0/pics/articulation_ltoe.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_ltoe.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.upedaltoe" diff -Nru frescobaldi-1.2.0/pics/articulation_marcato.ly frescobaldi-2.0.0/pics/articulation_marcato.ly --- frescobaldi-1.2.0/pics/articulation_marcato.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_marcato.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.umarcato" diff -Nru frescobaldi-1.2.0/pics/articulation_mordent.ly frescobaldi-2.0.0/pics/articulation_mordent.ly --- frescobaldi-1.2.0/pics/articulation_mordent.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_mordent.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.mordent" diff -Nru frescobaldi-1.2.0/pics/articulation_open.ly frescobaldi-2.0.0/pics/articulation_open.ly --- frescobaldi-1.2.0/pics/articulation_open.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_open.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.open" diff -Nru frescobaldi-1.2.0/pics/articulation_portato.ly frescobaldi-2.0.0/pics/articulation_portato.ly --- frescobaldi-1.2.0/pics/articulation_portato.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_portato.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.dportato" diff -Nru frescobaldi-1.2.0/pics/articulation_pralldown.ly frescobaldi-2.0.0/pics/articulation_pralldown.ly --- frescobaldi-1.2.0/pics/articulation_pralldown.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_pralldown.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.pralldown" diff -Nru frescobaldi-1.2.0/pics/articulation_prall.ly frescobaldi-2.0.0/pics/articulation_prall.ly --- frescobaldi-1.2.0/pics/articulation_prall.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_prall.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.prall" diff -Nru frescobaldi-1.2.0/pics/articulation_prallmordent.ly frescobaldi-2.0.0/pics/articulation_prallmordent.ly --- frescobaldi-1.2.0/pics/articulation_prallmordent.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_prallmordent.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.prallmordent" diff -Nru frescobaldi-1.2.0/pics/articulation_prallprall.ly frescobaldi-2.0.0/pics/articulation_prallprall.ly --- frescobaldi-1.2.0/pics/articulation_prallprall.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_prallprall.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.prallprall" diff -Nru frescobaldi-1.2.0/pics/articulation_prallup.ly frescobaldi-2.0.0/pics/articulation_prallup.ly --- frescobaldi-1.2.0/pics/articulation_prallup.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_prallup.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.prallup" diff -Nru frescobaldi-1.2.0/pics/articulation_reverseturn.ly frescobaldi-2.0.0/pics/articulation_reverseturn.ly --- frescobaldi-1.2.0/pics/articulation_reverseturn.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_reverseturn.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.reverseturn" diff -Nru frescobaldi-1.2.0/pics/articulation_rheel.ly frescobaldi-2.0.0/pics/articulation_rheel.ly --- frescobaldi-1.2.0/pics/articulation_rheel.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_rheel.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.dpedalheel" diff -Nru frescobaldi-1.2.0/pics/articulation_rtoe.ly frescobaldi-2.0.0/pics/articulation_rtoe.ly --- frescobaldi-1.2.0/pics/articulation_rtoe.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_rtoe.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.dpedaltoe" diff -Nru frescobaldi-1.2.0/pics/articulation_segno.ly frescobaldi-2.0.0/pics/articulation_segno.ly --- frescobaldi-1.2.0/pics/articulation_segno.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_segno.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.segno" diff -Nru frescobaldi-1.2.0/pics/articulation_shortfermata.ly frescobaldi-2.0.0/pics/articulation_shortfermata.ly --- frescobaldi-1.2.0/pics/articulation_shortfermata.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_shortfermata.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.ushortfermata" diff -Nru frescobaldi-1.2.0/pics/articulation_signumcongruentiae.ly frescobaldi-2.0.0/pics/articulation_signumcongruentiae.ly --- frescobaldi-1.2.0/pics/articulation_signumcongruentiae.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_signumcongruentiae.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.usignumcongruentiae" diff -Nru frescobaldi-1.2.0/pics/articulation_snappizzicato.ly frescobaldi-2.0.0/pics/articulation_snappizzicato.ly --- frescobaldi-1.2.0/pics/articulation_snappizzicato.ly 2010-01-28 14:21:34.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_snappizzicato.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.10" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.snappizzicato" diff -Nru frescobaldi-1.2.0/pics/articulation_staccatissimo.ly frescobaldi-2.0.0/pics/articulation_staccatissimo.ly --- frescobaldi-1.2.0/pics/articulation_staccatissimo.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_staccatissimo.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.ustaccatissimo" diff -Nru frescobaldi-1.2.0/pics/articulation_staccato.ly frescobaldi-2.0.0/pics/articulation_staccato.ly --- frescobaldi-1.2.0/pics/articulation_staccato.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_staccato.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.staccato" diff -Nru frescobaldi-1.2.0/pics/articulation_stopped.ly frescobaldi-2.0.0/pics/articulation_stopped.ly --- frescobaldi-1.2.0/pics/articulation_stopped.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_stopped.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.stopped" diff -Nru frescobaldi-1.2.0/pics/articulation_tenuto.ly frescobaldi-2.0.0/pics/articulation_tenuto.ly --- frescobaldi-1.2.0/pics/articulation_tenuto.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_tenuto.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.tenuto" diff -Nru frescobaldi-1.2.0/pics/articulation_thumb.ly frescobaldi-2.0.0/pics/articulation_thumb.ly --- frescobaldi-1.2.0/pics/articulation_thumb.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_thumb.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.thumb" diff -Nru frescobaldi-1.2.0/pics/articulation_trill.ly frescobaldi-2.0.0/pics/articulation_trill.ly --- frescobaldi-1.2.0/pics/articulation_trill.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_trill.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.trill" diff -Nru frescobaldi-1.2.0/pics/articulation_turn.ly frescobaldi-2.0.0/pics/articulation_turn.ly --- frescobaldi-1.2.0/pics/articulation_turn.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_turn.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.turn" diff -Nru frescobaldi-1.2.0/pics/articulation_upbow.ly frescobaldi-2.0.0/pics/articulation_upbow.ly --- frescobaldi-1.2.0/pics/articulation_upbow.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_upbow.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.upbow" diff -Nru frescobaldi-1.2.0/pics/articulation_upmordent.ly frescobaldi-2.0.0/pics/articulation_upmordent.ly --- frescobaldi-1.2.0/pics/articulation_upmordent.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_upmordent.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.upmordent" diff -Nru frescobaldi-1.2.0/pics/articulation_upprall.ly frescobaldi-2.0.0/pics/articulation_upprall.ly --- frescobaldi-1.2.0/pics/articulation_upprall.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_upprall.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.upprall" diff -Nru frescobaldi-1.2.0/pics/articulation_varcoda.ly frescobaldi-2.0.0/pics/articulation_varcoda.ly --- frescobaldi-1.2.0/pics/articulation_varcoda.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_varcoda.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.varcoda" diff -Nru frescobaldi-1.2.0/pics/articulation_verylongfermata.ly frescobaldi-2.0.0/pics/articulation_verylongfermata.ly --- frescobaldi-1.2.0/pics/articulation_verylongfermata.ly 2008-11-29 12:48:18.000000000 +0000 +++ frescobaldi-2.0.0/pics/articulation_verylongfermata.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "articulation_defaults.ily" -\markup \musicglyph #"scripts.uverylongfermata" diff -Nru frescobaldi-1.2.0/pics/bar_cswc.ly frescobaldi-2.0.0/pics/bar_cswc.ly --- frescobaldi-1.2.0/pics/bar_cswc.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_cswc.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -\layout { - \context { - \Score - \override StaffSymbol #'extra-offset = #'(4.5 . 0) - } -} - -{ s \bar ":|.:" s } diff -Nru frescobaldi-1.2.0/pics/bar_cswsc.ly frescobaldi-2.0.0/pics/bar_cswsc.ly --- frescobaldi-1.2.0/pics/bar_cswsc.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_cswsc.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -\layout { - \context { - \Score - \override StaffSymbol #'extra-offset = #'(5 . 0) - } -} - -{ s \bar ":|.|:" s } diff -Nru frescobaldi-1.2.0/pics/bar_dashed.ly frescobaldi-2.0.0/pics/bar_dashed.ly --- frescobaldi-1.2.0/pics/bar_dashed.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_dashed.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" - -{ s \bar "dashed" s } diff -Nru frescobaldi-1.2.0/pics/bar_defaults.ily frescobaldi-2.0.0/pics/bar_defaults.ily --- frescobaldi-1.2.0/pics/bar_defaults.ily 2009-10-15 09:49:22.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -\header { tagline = ##f } -#(set-global-staff-size 14.2857) - -\layout { - indent = #0 - \context { - \Score - \override StaffSymbol #'width = #'4 - \override StaffSymbol #'extra-offset = #'(3.3 . 0) - } - \context { - \Staff - \remove "Clef_engraver" - \remove "Time_signature_engraver" - } -} diff -Nru frescobaldi-1.2.0/pics/bar_dotted.ly frescobaldi-2.0.0/pics/bar_dotted.ly --- frescobaldi-1.2.0/pics/bar_dotted.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_dotted.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" - -{ s \bar ":" s } diff -Nru frescobaldi-1.2.0/pics/bar_double.ly frescobaldi-2.0.0/pics/bar_double.ly --- frescobaldi-1.2.0/pics/bar_double.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_double.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -\layout { - \context { - \Score - \override StaffSymbol #'extra-offset = #'(3.4 . 0) - } -} - -{ s \bar "||" s } diff -Nru frescobaldi-1.2.0/pics/bar_end.ly frescobaldi-2.0.0/pics/bar_end.ly --- frescobaldi-1.2.0/pics/bar_end.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_end.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -\layout { - \context { - \Score - \override StaffSymbol #'extra-offset = #'(2.5 . 0) - } -} - -{ s \bar "|." s } diff -Nru frescobaldi-1.2.0/pics/bar_invisible.ly frescobaldi-2.0.0/pics/bar_invisible.ly --- frescobaldi-1.2.0/pics/bar_invisible.ly 2009-09-21 21:32:04.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_invisible.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" - -{ s } diff -Nru frescobaldi-1.2.0/pics/bar_repeat_double.ly frescobaldi-2.0.0/pics/bar_repeat_double.ly --- frescobaldi-1.2.0/pics/bar_repeat_double.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_repeat_double.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -\layout { - \context { - \Score - \override StaffSymbol #'extra-offset = #'(4.8 . 0) - } -} - -{ s \bar ":|:" s } diff -Nru frescobaldi-1.2.0/pics/bar_repeat_end.ly frescobaldi-2.0.0/pics/bar_repeat_end.ly --- frescobaldi-1.2.0/pics/bar_repeat_end.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_repeat_end.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" - -{ s \bar ":|" s } diff -Nru frescobaldi-1.2.0/pics/bar_repeat_start.ly frescobaldi-2.0.0/pics/bar_repeat_start.ly --- frescobaldi-1.2.0/pics/bar_repeat_start.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_repeat_start.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -\layout { - \context { - \Score - \override StaffSymbol #'extra-offset = #'(5.2 . 0) - } -} - -{ s \bar "|:" s } diff -Nru frescobaldi-1.2.0/pics/bar_segno.ly frescobaldi-2.0.0/pics/bar_segno.ly --- frescobaldi-1.2.0/pics/bar_segno.ly 2010-05-21 19:36:00.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_segno.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -\version "2.13.19" -\include "bar_defaults.ily" - -#(set-global-staff-size (* 20 (/ 11 28))) - -{ - s - \once \override Staff.BarLine #'extra-offset = #'(-1 . 0) - \bar "S" - s -} diff -Nru frescobaldi-1.2.0/pics/bar_single.ly frescobaldi-2.0.0/pics/bar_single.ly --- frescobaldi-1.2.0/pics/bar_single.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_single.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" - -{ s \bar "|" s } diff -Nru frescobaldi-1.2.0/pics/bar_sws.ly frescobaldi-2.0.0/pics/bar_sws.ly --- frescobaldi-1.2.0/pics/bar_sws.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_sws.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -\layout { - \context { - \Score - \override StaffSymbol #'extra-offset = #'(4.1 . 0) - } -} - -{ s \bar "|.|" s } diff -Nru frescobaldi-1.2.0/pics/bar_tick.ly frescobaldi-2.0.0/pics/bar_tick.ly --- frescobaldi-1.2.0/pics/bar_tick.ly 2009-10-15 09:49:22.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_tick.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -#(set-global-staff-size 11.4284) -{ s \bar "'" s } diff -Nru frescobaldi-1.2.0/pics/bar_ws.ly frescobaldi-2.0.0/pics/bar_ws.ly --- frescobaldi-1.2.0/pics/bar_ws.ly 2009-09-21 09:24:59.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_ws.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -\layout { - \context { - \Score - \override StaffSymbol #'extra-offset = #'(3.7 . 0) - } -} - -{ s \bar ".|" s } diff -Nru frescobaldi-1.2.0/pics/bar_ww.ly frescobaldi-2.0.0/pics/bar_ww.ly --- frescobaldi-1.2.0/pics/bar_ww.ly 2009-09-21 21:32:04.000000000 +0000 +++ frescobaldi-2.0.0/pics/bar_ww.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -\version "2.10.0" -\include "bar_defaults.ily" -\layout { - \context { - \Score - \override StaffSymbol #'extra-offset = #'(4.1 . 0) - } -} - -{ s \bar ".|." s } - diff -Nru frescobaldi-1.2.0/pics/breathe_caesura_curved.ly frescobaldi-2.0.0/pics/breathe_caesura_curved.ly --- frescobaldi-1.2.0/pics/breathe_caesura_curved.ly 2010-09-02 08:30:19.000000000 +0000 +++ frescobaldi-2.0.0/pics/breathe_caesura_curved.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.12.0" -\include "breathe_defaults.ily" -\markup \musicglyph #"scripts.caesura.curved" diff -Nru frescobaldi-1.2.0/pics/breathe_caesura_straight.ly frescobaldi-2.0.0/pics/breathe_caesura_straight.ly --- frescobaldi-1.2.0/pics/breathe_caesura_straight.ly 2010-09-02 08:30:19.000000000 +0000 +++ frescobaldi-2.0.0/pics/breathe_caesura_straight.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.12.0" -\include "breathe_defaults.ily" -\markup \musicglyph #"scripts.caesura.straight" diff -Nru frescobaldi-1.2.0/pics/breathe_defaults.ily frescobaldi-2.0.0/pics/breathe_defaults.ily --- frescobaldi-1.2.0/pics/breathe_defaults.ily 2010-09-02 08:30:19.000000000 +0000 +++ frescobaldi-2.0.0/pics/breathe_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -\header { tagline=##f } -#(set-global-staff-size 20) diff -Nru frescobaldi-1.2.0/pics/breathe_rcomma.ly frescobaldi-2.0.0/pics/breathe_rcomma.ly --- frescobaldi-1.2.0/pics/breathe_rcomma.ly 2010-09-02 08:30:19.000000000 +0000 +++ frescobaldi-2.0.0/pics/breathe_rcomma.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.12.0" -\include "breathe_defaults.ily" -\markup \musicglyph #"scripts.rcomma" diff -Nru frescobaldi-1.2.0/pics/breathe_rvarcomma.ly frescobaldi-2.0.0/pics/breathe_rvarcomma.ly --- frescobaldi-1.2.0/pics/breathe_rvarcomma.ly 2010-09-02 08:30:19.000000000 +0000 +++ frescobaldi-2.0.0/pics/breathe_rvarcomma.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.12.0" -\include "breathe_defaults.ily" -\markup \musicglyph #"scripts.rvarcomma" diff -Nru frescobaldi-1.2.0/pics/clef_alto.ly frescobaldi-2.0.0/pics/clef_alto.ly --- frescobaldi-1.2.0/pics/clef_alto.ly 2009-10-14 05:27:42.000000000 +0000 +++ frescobaldi-2.0.0/pics/clef_alto.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "clef_defaults.ily" -{ \clef alto s4 } diff -Nru frescobaldi-1.2.0/pics/clef_bass.ly frescobaldi-2.0.0/pics/clef_bass.ly --- frescobaldi-1.2.0/pics/clef_bass.ly 2009-10-14 05:27:42.000000000 +0000 +++ frescobaldi-2.0.0/pics/clef_bass.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "clef_defaults.ily" -{ \clef bass s4 } diff -Nru frescobaldi-1.2.0/pics/clef_defaults.ily frescobaldi-2.0.0/pics/clef_defaults.ily --- frescobaldi-1.2.0/pics/clef_defaults.ily 2009-10-15 09:49:22.000000000 +0000 +++ frescobaldi-2.0.0/pics/clef_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -\version "2.10.0" -#(set-global-staff-size 14.2857) -\paper { - oddFooterMarkup = ##f - evenFooterMarkup = ##f - oddHeaderMarkup = ##f - evenHeaderMarkup = ##f -} - -\layout { - indent = #0 - \context { - \Staff - \remove "Time_signature_engraver" - \override StaffSymbol #'width = #4 - } -} diff -Nru frescobaldi-1.2.0/pics/clef_none.ly frescobaldi-2.0.0/pics/clef_none.ly --- frescobaldi-1.2.0/pics/clef_none.ly 2009-10-14 05:27:42.000000000 +0000 +++ frescobaldi-2.0.0/pics/clef_none.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -\version "2.10.0" -\include "clef_defaults.ily" -\layout { - \context { - \Staff - \remove "Clef_engraver" - } -} -{ s4 } diff -Nru frescobaldi-1.2.0/pics/clef_percussion.ly frescobaldi-2.0.0/pics/clef_percussion.ly --- frescobaldi-1.2.0/pics/clef_percussion.ly 2009-10-16 17:59:56.000000000 +0000 +++ frescobaldi-2.0.0/pics/clef_percussion.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "clef_defaults.ily" -{ \clef percussion s4 } diff -Nru frescobaldi-1.2.0/pics/clef_tab.ly frescobaldi-2.0.0/pics/clef_tab.ly --- frescobaldi-1.2.0/pics/clef_tab.ly 2009-10-16 17:59:56.000000000 +0000 +++ frescobaldi-2.0.0/pics/clef_tab.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -\version "2.10.0" -\include "clef_defaults.ily" -#(set-global-staff-size 11.3) -\layout { - \context { - \TabStaff - \remove "Time_signature_engraver" - \override StaffSymbol #'width = #4 - } -} -\new TabStaff { s4 } diff -Nru frescobaldi-1.2.0/pics/clef_tenor.ly frescobaldi-2.0.0/pics/clef_tenor.ly --- frescobaldi-1.2.0/pics/clef_tenor.ly 2009-10-14 05:27:42.000000000 +0000 +++ frescobaldi-2.0.0/pics/clef_tenor.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "clef_defaults.ily" -{ \clef tenor s4 } diff -Nru frescobaldi-1.2.0/pics/clef_treble_8.ly frescobaldi-2.0.0/pics/clef_treble_8.ly --- frescobaldi-1.2.0/pics/clef_treble_8.ly 2009-10-14 05:27:42.000000000 +0000 +++ frescobaldi-2.0.0/pics/clef_treble_8.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "clef_defaults.ily" -{ \clef "treble_8" s4 } diff -Nru frescobaldi-1.2.0/pics/clef_treble.ly frescobaldi-2.0.0/pics/clef_treble.ly --- frescobaldi-1.2.0/pics/clef_treble.ly 2009-10-14 05:27:42.000000000 +0000 +++ frescobaldi-2.0.0/pics/clef_treble.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "clef_defaults.ily" -{ \clef treble s4 } diff -Nru frescobaldi-1.2.0/pics/CMakeLists.txt frescobaldi-2.0.0/pics/CMakeLists.txt --- frescobaldi-1.2.0/pics/CMakeLists.txt 2010-09-09 11:38:02.000000000 +0000 +++ frescobaldi-2.0.0/pics/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,145 +0,0 @@ -# Generate PNGs from LilyPond files - -find_program(LILYPOND_EXECUTABLE NAMES lilypond) -find_program(CONVERT_EXECUTABLE NAMES convert) - -# keep a list of all pngs for adding them to our target -set(all_pngs) - -# find out which local files a LilyPond file includes -macro(lilypond_deps _varname _lyfile) - set(_deps ${_lyfile}) - file(READ ${_lyfile} _contents) - string(REGEX MATCHALL "\\\\include *\"[^\"]+\"" _includes ${_contents}) - foreach(_incl ${_includes}) - string(REGEX REPLACE "[^\"]*\"([^\"]*)\".*" "\\1" _incl ${_incl}) - if(_incl) - set(_dep ${CMAKE_CURRENT_SOURCE_DIR}/${_incl}) - if(EXISTS ${_dep}) - list(APPEND _deps ${_dep}) - endif(EXISTS ${_dep}) - endif(_incl) - endforeach(_incl ${_includes}) - set(${_varname} ${_deps}) -endmacro(lilypond_deps) - - -# convert a ly file to a PNG icon (e.g. 22x22) pix. -macro(lilypond_png_icon _lyfile _size) - lilypond_deps(_deps ${_lyfile}) - get_filename_component(_base ${_lyfile} NAME_WE) - set(_outp "${CMAKE_CURRENT_BINARY_DIR}/${_base}.png") - add_custom_command( - OUTPUT ${_outp} - DEPENDS ${_deps} - COMMAND ${LILYPOND_EXECUTABLE} - -ddelete-intermediate-files - --png -dpixmap-format=pngalpha - -o "${CMAKE_CURRENT_BINARY_DIR}/temp_${_base}" - "${_lyfile}" - COMMAND ${CONVERT_EXECUTABLE} - "${CMAKE_CURRENT_BINARY_DIR}/temp_${_base}.png" - -trim - -bordercolor transparent -border ${_size} - +repage - -gravity Center -crop "${_size}x${_size}+0+0" - +repage - "${_outp}" - COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_CURRENT_BINARY_DIR}/temp_${_base}.png" - VERBATIM - ) - list(APPEND all_pngs ${_outp}) -endmacro(lilypond_png_icon) - -# convert a ly file to a PNG image with a 3px border. -macro(lilypond_png_image _lyfile_arg) - set(_lyfile ${_lyfile_arg}) - if(NOT IS_ABSOLUTE ${_lyfile_arg}) - set(_lyfile "${CMAKE_CURRENT_SOURCE_DIR}/${_lyfile_arg}") - endif(NOT IS_ABSOLUTE ${_lyfile_arg}) - lilypond_deps(_deps ${_lyfile}) - get_filename_component(_base ${_lyfile} NAME_WE) - set(_outp "${CMAKE_CURRENT_BINARY_DIR}/${_base}.png") - add_custom_command( - OUTPUT ${_outp} - DEPENDS ${_deps} - COMMAND lilypond - -ddelete-intermediate-files - --png -dpixmap-format=pngalpha - -o "${CMAKE_CURRENT_BINARY_DIR}/temp_${_base}" - "${_lyfile}" - COMMAND convert - "${CMAKE_CURRENT_BINARY_DIR}/temp_${_base}.png" - -trim - -bordercolor transparent -border 3 - +repage - "${_outp}" - COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_CURRENT_BINARY_DIR}/temp_${_base}.png" - VERBATIM - ) - list(APPEND all_pngs ${_outp}) -endmacro(lilypond_png_image) - -# convert a ly file to a fixed size icon without cropping it -# and then scaling it down to size. -macro(lilypond_png_text_icon _lyfile _size) - lilypond_deps(_deps ${_lyfile}) - get_filename_component(_base ${_lyfile} NAME_WE) - set(_outp "${CMAKE_CURRENT_BINARY_DIR}/${_base}.png") - add_custom_command( - OUTPUT ${_outp} - DEPENDS ${_deps} - COMMAND ${LILYPOND_EXECUTABLE} - -ddelete-intermediate-files - --png -dpixmap-format=pngalpha - -dresolution=300 - -o "${CMAKE_CURRENT_BINARY_DIR}/temp_${_base}" - "${_lyfile}" - COMMAND ${CONVERT_EXECUTABLE} - "${CMAKE_CURRENT_BINARY_DIR}/temp_${_base}.png" - -resize ${_size} -unsharp 0x1 - "${_outp}" - COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_CURRENT_BINARY_DIR}/temp_${_base}.png" - VERBATIM - ) - list(APPEND all_pngs ${_outp}) -endmacro(lilypond_png_text_icon) - -# Make icons for articulations and notes etc. at 22px -file(GLOB lilypond_files - arpeggio_*.ly - articulation_*.ly - bar_*.ly - breathe_*.ly - glissando_*.ly - note_*.ly - slur_*.ly - spanner_*.ly - time_*.ly -) -foreach(_ly ${lilypond_files}) - lilypond_png_icon(${_ly} 22) -endforeach(_ly ${lilypond_files}) - -# Clefs, etc at 48px -file(GLOB lilypond_files clef_*.ly system_*.ly) -foreach(_ly ${lilypond_files}) - lilypond_png_icon(${_ly} 48) -endforeach(_ly ${lilypond_files}) - -# Make misc. larger images -file(GLOB lilypond_files scorewiz.ly) -foreach(_ly ${lilypond_files}) - lilypond_png_image(${_ly}) -endforeach(_ly ${lilypond_files}) - -# Text icons for dynamics -file(GLOB lilypond_files dynamic_*.ly) -foreach(_ly ${lilypond_files}) - lilypond_png_text_icon(${_ly} 22) -endforeach(_ly ${lilypond_files}) - - -# Build and install all LilyPond-generated pictures -add_custom_target(lilypond_pngs ALL DEPENDS ${all_pngs}) -install(FILES ${all_pngs} DESTINATION ${APP_DIR}/pics) diff -Nru frescobaldi-1.2.0/pics/dynamic_cresc.ly frescobaldi-2.0.0/pics/dynamic_cresc.ly --- frescobaldi-1.2.0/pics/dynamic_cresc.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_cresc.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.21" -\include "dynamic_defaults.ily" -\markup \icon #size2 \italic cresc diff -Nru frescobaldi-1.2.0/pics/dynamic_decresc.ly frescobaldi-2.0.0/pics/dynamic_decresc.ly --- frescobaldi-1.2.0/pics/dynamic_decresc.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_decresc.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.21" -\include "dynamic_defaults.ily" -\markup \icon #size2 \italic decr diff -Nru frescobaldi-1.2.0/pics/dynamic_defaults.ily frescobaldi-2.0.0/pics/dynamic_defaults.ily --- frescobaldi-1.2.0/pics/dynamic_defaults.ily 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -\version "2.13.21" - -\paper { - paper-height = 0.5\in - paper-width = 0.5\in - top-margin = 0 - bottom-margin = 0 - left-margin = 0 - right-margin = 0 - oddFooterMarkup = ##f - oddHeaderMarkup = ##f - top-title-spacing = #'((space . 4.5)) -} - -#(define-markup-command - (icon layout props size text) - (number? markup?) - (interpret-markup layout props - (markup - #:override (cons 'word-space 0) - (#:fill-line - (#:fontsize size text))))) - -#(define size1 6) -#(define size2 3.5) -#(define size3 -0.5) - - diff -Nru frescobaldi-1.2.0/pics/dynamic_dim.ly frescobaldi-2.0.0/pics/dynamic_dim.ly --- frescobaldi-1.2.0/pics/dynamic_dim.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_dim.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.21" -\include "dynamic_defaults.ily" -\markup \icon #size2 \italic dim diff -Nru frescobaldi-1.2.0/pics/dynamic_fffff.ly frescobaldi-2.0.0/pics/dynamic_fffff.ly --- frescobaldi-1.2.0/pics/dynamic_fffff.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_fffff.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size3 \dynamic fffff diff -Nru frescobaldi-1.2.0/pics/dynamic_ffff.ly frescobaldi-2.0.0/pics/dynamic_ffff.ly --- frescobaldi-1.2.0/pics/dynamic_ffff.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_ffff.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size3 \dynamic ffff diff -Nru frescobaldi-1.2.0/pics/dynamic_fff.ly frescobaldi-2.0.0/pics/dynamic_fff.ly --- frescobaldi-1.2.0/pics/dynamic_fff.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_fff.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic fff diff -Nru frescobaldi-1.2.0/pics/dynamic_ff.ly frescobaldi-2.0.0/pics/dynamic_ff.ly --- frescobaldi-1.2.0/pics/dynamic_ff.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_ff.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size1 \dynamic ff diff -Nru frescobaldi-1.2.0/pics/dynamic_f.ly frescobaldi-2.0.0/pics/dynamic_f.ly --- frescobaldi-1.2.0/pics/dynamic_f.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_f.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size1 \dynamic f diff -Nru frescobaldi-1.2.0/pics/dynamic_fp.ly frescobaldi-2.0.0/pics/dynamic_fp.ly --- frescobaldi-1.2.0/pics/dynamic_fp.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_fp.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic fp diff -Nru frescobaldi-1.2.0/pics/dynamic_hairpin_cresc.ly frescobaldi-2.0.0/pics/dynamic_hairpin_cresc.ly --- frescobaldi-1.2.0/pics/dynamic_hairpin_cresc.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_hairpin_cresc.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -\version "2.13.21" -\include "dynamic_defaults.ily" -#(set-global-staff-size 22) -\paper { - top-title-spacing = #'((space . 3.4)) -} -\markup { - \icon #0 - \combine - \draw-line #'(6 . 1) - \draw-line #'(6 . -1) -} diff -Nru frescobaldi-1.2.0/pics/dynamic_hairpin_dim.ly frescobaldi-2.0.0/pics/dynamic_hairpin_dim.ly --- frescobaldi-1.2.0/pics/dynamic_hairpin_dim.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_hairpin_dim.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -\version "2.13.21" -\include "dynamic_defaults.ily" -#(set-global-staff-size 22) -\paper { - top-title-spacing = #'((space . 4.4)) -} -\markup { - \icon #0 - \combine - \draw-line #'(6 . 1) - \translate #'(0 . 2) - \draw-line #'(6 . -1) -} diff -Nru frescobaldi-1.2.0/pics/dynamic_mf.ly frescobaldi-2.0.0/pics/dynamic_mf.ly --- frescobaldi-1.2.0/pics/dynamic_mf.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_mf.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic mf diff -Nru frescobaldi-1.2.0/pics/dynamic_mp.ly frescobaldi-2.0.0/pics/dynamic_mp.ly --- frescobaldi-1.2.0/pics/dynamic_mp.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_mp.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic mp diff -Nru frescobaldi-1.2.0/pics/dynamic_p.ly frescobaldi-2.0.0/pics/dynamic_p.ly --- frescobaldi-1.2.0/pics/dynamic_p.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_p.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size1 \dynamic p diff -Nru frescobaldi-1.2.0/pics/dynamic_pp.ly frescobaldi-2.0.0/pics/dynamic_pp.ly --- frescobaldi-1.2.0/pics/dynamic_pp.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_pp.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic pp diff -Nru frescobaldi-1.2.0/pics/dynamic_ppp.ly frescobaldi-2.0.0/pics/dynamic_ppp.ly --- frescobaldi-1.2.0/pics/dynamic_ppp.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_ppp.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic ppp diff -Nru frescobaldi-1.2.0/pics/dynamic_pppp.ly frescobaldi-2.0.0/pics/dynamic_pppp.ly --- frescobaldi-1.2.0/pics/dynamic_pppp.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_pppp.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size3 \dynamic pppp diff -Nru frescobaldi-1.2.0/pics/dynamic_ppppp.ly frescobaldi-2.0.0/pics/dynamic_ppppp.ly --- frescobaldi-1.2.0/pics/dynamic_ppppp.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_ppppp.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size3 \dynamic ppppp diff -Nru frescobaldi-1.2.0/pics/dynamic_rfz.ly frescobaldi-2.0.0/pics/dynamic_rfz.ly --- frescobaldi-1.2.0/pics/dynamic_rfz.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_rfz.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic rfz diff -Nru frescobaldi-1.2.0/pics/dynamic_sff.ly frescobaldi-2.0.0/pics/dynamic_sff.ly --- frescobaldi-1.2.0/pics/dynamic_sff.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_sff.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic sff diff -Nru frescobaldi-1.2.0/pics/dynamic_sf.ly frescobaldi-2.0.0/pics/dynamic_sf.ly --- frescobaldi-1.2.0/pics/dynamic_sf.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_sf.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size1 \dynamic sf diff -Nru frescobaldi-1.2.0/pics/dynamic_sfz.ly frescobaldi-2.0.0/pics/dynamic_sfz.ly --- frescobaldi-1.2.0/pics/dynamic_sfz.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_sfz.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic sfz diff -Nru frescobaldi-1.2.0/pics/dynamic_sp.ly frescobaldi-2.0.0/pics/dynamic_sp.ly --- frescobaldi-1.2.0/pics/dynamic_sp.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_sp.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic sp diff -Nru frescobaldi-1.2.0/pics/dynamic_spp.ly frescobaldi-2.0.0/pics/dynamic_spp.ly --- frescobaldi-1.2.0/pics/dynamic_spp.ly 2010-08-29 20:32:27.000000000 +0000 +++ frescobaldi-2.0.0/pics/dynamic_spp.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.13.20" -\include "dynamic_defaults.ily" -\markup \icon #size2 \dynamic spp diff -Nru frescobaldi-1.2.0/pics/glissando_dashed.ly frescobaldi-2.0.0/pics/glissando_dashed.ly --- frescobaldi-1.2.0/pics/glissando_dashed.ly 2010-09-09 11:38:02.000000000 +0000 +++ frescobaldi-2.0.0/pics/glissando_dashed.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -\version "2.12.0" - -\include "glissando_defaults.ily" - -\relative c' { - \override Glissando #'style = #'dashed-line - d2\glissando f' -} diff -Nru frescobaldi-1.2.0/pics/glissando_defaults.ily frescobaldi-2.0.0/pics/glissando_defaults.ily --- frescobaldi-1.2.0/pics/glissando_defaults.ily 2010-09-09 11:38:02.000000000 +0000 +++ frescobaldi-2.0.0/pics/glissando_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -\version "2.12.0" - -\paper { - line-width = 18\mm - ragged-right = ##f -} - -\header { - tagline = ##f -} - -\layout { - indent = #0 - \context { - \Staff - \remove "Clef_engraver" - \remove "Time_signature_engraver" - \remove "Staff_symbol_engraver" - } - \context { - \Voice - \override NoteHead #'transparent = ##t - \override Stem #'transparent = ##t - } -} diff -Nru frescobaldi-1.2.0/pics/glissando_dotted.ly frescobaldi-2.0.0/pics/glissando_dotted.ly --- frescobaldi-1.2.0/pics/glissando_dotted.ly 2010-09-09 11:38:02.000000000 +0000 +++ frescobaldi-2.0.0/pics/glissando_dotted.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -\version "2.12.0" - -\include "glissando_defaults.ily" - -\relative c' { - \override Glissando #'thickness = #1.5 - \override Glissando #'style = #'dotted-line - d2\glissando f' -} diff -Nru frescobaldi-1.2.0/pics/glissando_normal.ly frescobaldi-2.0.0/pics/glissando_normal.ly --- frescobaldi-1.2.0/pics/glissando_normal.ly 2010-09-09 11:38:02.000000000 +0000 +++ frescobaldi-2.0.0/pics/glissando_normal.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -\version "2.12.0" - -\include "glissando_defaults.ily" - -\relative c' { - d2\glissando f' -} diff -Nru frescobaldi-1.2.0/pics/glissando_trill.ly frescobaldi-2.0.0/pics/glissando_trill.ly --- frescobaldi-1.2.0/pics/glissando_trill.ly 2010-09-09 11:38:02.000000000 +0000 +++ frescobaldi-2.0.0/pics/glissando_trill.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -\version "2.12.0" - -\include "glissando_defaults.ily" - -\relative c' { - \override Glissando #'style = #'trill - d2\glissando f' -} diff -Nru frescobaldi-1.2.0/pics/glissando_zigzag.ly frescobaldi-2.0.0/pics/glissando_zigzag.ly --- frescobaldi-1.2.0/pics/glissando_zigzag.ly 2010-09-09 11:38:02.000000000 +0000 +++ frescobaldi-2.0.0/pics/glissando_zigzag.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -\version "2.12.0" - -\include "glissando_defaults.ily" - -\relative c' { - \override Glissando #'style = #'zigzag - d2\glissando f' -} diff -Nru frescobaldi-1.2.0/pics/note_16d.ly frescobaldi-2.0.0/pics/note_16d.ly --- frescobaldi-1.2.0/pics/note_16d.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_16d.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"16." #1 diff -Nru frescobaldi-1.2.0/pics/note_16.ly frescobaldi-2.0.0/pics/note_16.ly --- frescobaldi-1.2.0/pics/note_16.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_16.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"16" #1 diff -Nru frescobaldi-1.2.0/pics/note_1d.ly frescobaldi-2.0.0/pics/note_1d.ly --- frescobaldi-1.2.0/pics/note_1d.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_1d.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"1." #1 diff -Nru frescobaldi-1.2.0/pics/note_1.ly frescobaldi-2.0.0/pics/note_1.ly --- frescobaldi-1.2.0/pics/note_1.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_1.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"1" #1 diff -Nru frescobaldi-1.2.0/pics/note_2d.ly frescobaldi-2.0.0/pics/note_2d.ly --- frescobaldi-1.2.0/pics/note_2d.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_2d.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"2." #1 diff -Nru frescobaldi-1.2.0/pics/note_2.ly frescobaldi-2.0.0/pics/note_2.ly --- frescobaldi-1.2.0/pics/note_2.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_2.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"2" #1 diff -Nru frescobaldi-1.2.0/pics/note_4d.ly frescobaldi-2.0.0/pics/note_4d.ly --- frescobaldi-1.2.0/pics/note_4d.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_4d.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"4." #1 diff -Nru frescobaldi-1.2.0/pics/note_4.ly frescobaldi-2.0.0/pics/note_4.ly --- frescobaldi-1.2.0/pics/note_4.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_4.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"4" #1 diff -Nru frescobaldi-1.2.0/pics/note_8d.ly frescobaldi-2.0.0/pics/note_8d.ly --- frescobaldi-1.2.0/pics/note_8d.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_8d.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"8." #1 diff -Nru frescobaldi-1.2.0/pics/note_8.ly frescobaldi-2.0.0/pics/note_8.ly --- frescobaldi-1.2.0/pics/note_8.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_8.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\include "note_defaults.ily" -\markup \note #"8" #1 diff -Nru frescobaldi-1.2.0/pics/note_defaults.ily frescobaldi-2.0.0/pics/note_defaults.ily --- frescobaldi-1.2.0/pics/note_defaults.ily 2008-12-10 21:48:32.000000000 +0000 +++ frescobaldi-2.0.0/pics/note_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -\header { tagline = ##f } -#(set-global-staff-size 16) diff -Nru frescobaldi-1.2.0/pics/scorewiz.ly frescobaldi-2.0.0/pics/scorewiz.ly --- frescobaldi-1.2.0/pics/scorewiz.ly 2008-12-09 14:07:29.000000000 +0000 +++ frescobaldi-2.0.0/pics/scorewiz.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -\version "2.10.0" - -\paper { - indent = 3\mm - line-width = 3.2\in - oddFooterMarkup = ##f - oddHeaderMarkup = ##f - bookTitleMarkup = ##f - scoreTitleMarkup = ##f -} - -\layout { - \context { - \Score - \remove "Bar_number_engraver" - } -} - -\header { - tagline = ##f -} - -\score { - \new PianoStaff << - \new Staff \relative c' { c2 d4 e f g a b c1 \bar"|."} - \new Staff \relative c' { \clef F c2 b4 a g f e d c1 } - >> -} diff -Nru frescobaldi-1.2.0/pics/slur_defaults.ily frescobaldi-2.0.0/pics/slur_defaults.ily --- frescobaldi-1.2.0/pics/slur_defaults.ily 2010-08-28 22:35:39.000000000 +0000 +++ frescobaldi-2.0.0/pics/slur_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -\version "2.12.0" - -#(set-global-staff-size 23) - -\paper { - oddFooterMarkup = ##f - evenFooterMarkup = ##f - oddHeaderMarkup = ##f - evenHeaderMarkup = ##f -} - -\layout { - \context { - \Staff - \override StaffSymbol #'transparent = ##t - \override Clef #'transparent = ##t - \override TimeSignature #'transparent = ##t - } - \context { - \Voice - \override NoteHead #'transparent = ##t - \override Stem #'transparent = ##t - } -} diff -Nru frescobaldi-1.2.0/pics/slur_solid.ly frescobaldi-2.0.0/pics/slur_solid.ly --- frescobaldi-1.2.0/pics/slur_solid.ly 2010-08-28 22:35:39.000000000 +0000 +++ frescobaldi-2.0.0/pics/slur_solid.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.12.0" -\include "slur_defaults.ily" -{ c''~c'' } diff -Nru frescobaldi-1.2.0/pics/spanner_beam16.ly frescobaldi-2.0.0/pics/spanner_beam16.ly --- frescobaldi-1.2.0/pics/spanner_beam16.ly 2010-09-08 05:34:42.000000000 +0000 +++ frescobaldi-2.0.0/pics/spanner_beam16.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -\version "2.12.0" - -#(set-global-staff-size 14) - -\header { - tagline = ##f -} - -\relative c' { - f16[ g] -} - -\layout { - \context { - \Staff - \override StaffSymbol #'transparent = ##t - \override Clef #'transparent = ##t - \override TimeSignature #'transparent = ##t - } -} diff -Nru frescobaldi-1.2.0/pics/spanner_trill.ly frescobaldi-2.0.0/pics/spanner_trill.ly --- frescobaldi-1.2.0/pics/spanner_trill.ly 2010-09-08 05:34:42.000000000 +0000 +++ frescobaldi-2.0.0/pics/spanner_trill.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -\version "2.12.0" - -#(set-global-staff-size 15) - -\header { - tagline = ##f -} - -\markup { - \concat { - \musicglyph #"scripts.trill" - \translate #'(0.5 . 0.6) - \concat { - \musicglyph #"scripts.trill_element" - \musicglyph #"scripts.trill_element" - } - } -} - diff -Nru frescobaldi-1.2.0/pics/system_brace.ly frescobaldi-2.0.0/pics/system_brace.ly --- frescobaldi-1.2.0/pics/system_brace.ly 2009-10-26 22:36:38.000000000 +0000 +++ frescobaldi-2.0.0/pics/system_brace.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -\version "2.10.0" -\include "system_defaults.ily" -\score { - \new PianoStaff << - \new Staff \music - \new Staff \music - >> -} diff -Nru frescobaldi-1.2.0/pics/system_bracket.ly frescobaldi-2.0.0/pics/system_bracket.ly --- frescobaldi-1.2.0/pics/system_bracket.ly 2009-10-26 22:36:38.000000000 +0000 +++ frescobaldi-2.0.0/pics/system_bracket.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -\version "2.10.0" -\include "system_defaults.ily" -\score { - \new StaffGroup << - \new Staff \music - \new Staff \music - >> -} diff -Nru frescobaldi-1.2.0/pics/system_defaults.ily frescobaldi-2.0.0/pics/system_defaults.ily --- frescobaldi-1.2.0/pics/system_defaults.ily 2009-10-26 22:36:38.000000000 +0000 +++ frescobaldi-2.0.0/pics/system_defaults.ily 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -\version "2.10.0" - -#(set-global-staff-size (* 20 (/ 4 7))) - -\paper { - ragged-right = ##t -} - -\header { - tagline = ##f -} - -music = { - s1 -} - -\layout { - indent = #0 - \context { - \Score - \remove "Bar_number_engraver" - defaultBarType = #"" - } - \context { - \Staff - \remove "Time_signature_engraver" - \remove "Clef_engraver" - \override StaffSymbol #'line-count = #4 - \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3) - } -} diff -Nru frescobaldi-1.2.0/pics/time_c22.ly frescobaldi-2.0.0/pics/time_c22.ly --- frescobaldi-1.2.0/pics/time_c22.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/time_c22.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\header { tagline = ##f } -\markup \musicglyph #"timesig.C22" diff -Nru frescobaldi-1.2.0/pics/time_c44.ly frescobaldi-2.0.0/pics/time_c44.ly --- frescobaldi-1.2.0/pics/time_c44.ly 2008-12-10 18:48:44.000000000 +0000 +++ frescobaldi-2.0.0/pics/time_c44.ly 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -\version "2.10.0" -\header { tagline = ##f } -\markup \musicglyph #"timesig.C44" diff -Nru frescobaldi-1.2.0/po/CMakeLists.txt frescobaldi-2.0.0/po/CMakeLists.txt --- frescobaldi-1.2.0/po/CMakeLists.txt 2009-02-25 07:12:44.000000000 +0000 +++ frescobaldi-2.0.0/po/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -# Translations - -find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt) - -file(GLOB _po_files *.po) -set(_mo_files) -foreach(_po ${_po_files}) - get_filename_component(_lang ${_po} NAME_WE) - set(_mo ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.mo) - add_custom_command( - OUTPUT ${_mo} - COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -v -o ${_mo} ${_po} - DEPENDS ${_po} - COMMENT "Creating MO file for language ${_lang}:" - ) - install( - FILES ${_mo} - DESTINATION ${LOCALE_INSTALL_DIR}/${_lang}/LC_MESSAGES - RENAME ${PROJECT_NAME}.mo - ) - list(APPEND _mo_files ${_mo}) -endforeach(_po) -add_custom_target(translations ALL DEPENDS ${_mo_files}) diff -Nru frescobaldi-1.2.0/po/cs.po frescobaldi-2.0.0/po/cs.po --- frescobaldi-1.2.0/po/cs.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/cs.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,4038 +0,0 @@ -# Czech translations for PACKAGE package. -# Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# , 2009. -# Pavel Fric , 2009. -# Pavel Fric , 2009. -# Pavel Fric , 2010. -msgid "" -msgstr "" -"Project-Id-Version: frescobaldi 0.7.5\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-12-25 07:48+0100\n" -"PO-Revision-Date: 2010-12-13 19:14+0100\n" -"Last-Translator: Pavel Fric \n" -"Language-Team: Czech \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 1.1\n" -"Language: cs\n" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "LilyPond hudební editor" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Pavel Fric" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "fripohled.blogspot.com" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Začít sezení" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Začít nový příklad" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Použít kódování" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Přejít na řádek číslo. Začíná prvním" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Přejít na sloupec. Začíná nulou" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Zkusit použít chytrá čísla řádků a sloupců" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "" -"Otevřít soubory LilyPond. Mohou to být také textově upravené internetové " -"adresy" - -#: dummy.py:5 -msgid "&Insert" -msgstr "&Vložka" - -#: dummy.py:6 -msgid "&Document" -msgstr "&Dokument" - -#: dummy.py:7 -msgid "&LilyPond" -msgstr "&LilyPond" - -#: dummy.py:8 -msgid "&Sessions" -msgstr "&Sezení" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "&Výška tónu" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "&Slova písně" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "&Rytmus" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "&Zdrojový dokument" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "&Nástroje navíc" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "Věnování" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Název" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Podnázev" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "Podpodnázev" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Nástroj" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Skladatel" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Hudební aranžér" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Básník" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Metrum" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Skladba" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Dílo" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Autorské právo" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Motto" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "Durová (Major)" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "Mollová (Minor)" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "Jónský" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "Dórský" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "Frýgický" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "Lýdický" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "Mixolýdický" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "Éolský" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "Lokrijský" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Artikulace" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Akcent (důraz)" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Marcato (důrazně)" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Staccatissimo (nejkratčeji)" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Staccato (krátce)" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Portato" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Tenuto (drženě)" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo (výrazně)" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Ozdoby" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Trylek" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Nátryl" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Mordent" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Obal" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "Nátryl nátrylu" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "Mordent nátrylu" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "Nátryl nahoru" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "Nátryl dolů" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "Mordent nahoru" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "Mordent dolů" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "Nátryl nahoru" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "Nátryl dolů" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "Nátryl na lince notové osnovy" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Obrátit obal" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "Předznamenání" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Koruna (fermata)" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Krátká koruna (~ fermata)" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Dlouhá koruna (~ fermata)" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Velmi dlouhá koruna (~ fermata)" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Segno" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Varcoda" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "Signum congruentiae (značka pro shodu)" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Jiné" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Tah smyčcem nahoru" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Tah smyčcem dolů" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "Kvapné pizzicato" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "Otevřeno (např. žestě)" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "Zastaveno (např. žestě)" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Flažolet" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Palec" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Levá pata" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Pravá pata" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "Levý prst" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Pravý prst" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "Napůl otevřeno (např. hajtka)" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Vyskytla se vnitřní chyba:" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "Vnitřní chyba" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Hlášení chyb e-mailem..." - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "Níže volně popište, co jste dělal:" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Levá zpráva" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Pravá zpráva " - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Zpráva nahoře" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Zpráva dole" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "Zavřít jiné dokumenty" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Ukázat cestu" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Ukázat karty dokumentu" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "&Zobrazení nástrojů" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "Nový..." - -#: ../python/kateshell/mainwindow.py:240 -msgid "Manage Sessions..." -msgstr "Spravovat sezení..." - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" -"Nepodařilo se najít XMLGUI kontejner \"%1\".\n" -"\n" -"Pravděpodobně obsahuje místní soubor ui.rc chyby. Doporučuje se tento soubor " -"smazat, protože v uživatelském rozhraní budou chybět nějaké prvky. Toto je " -"úplná cesta k tomuto souboru:\n" -"\n" -"%2\n" - -#: ../python/kateshell/mainwindow.py:325 -msgid "No Session" -msgstr "Žádné sezení" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Nejprve, prosím, vyberte nějaký text." - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "Změněno" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Řádek: %1 Sloupec: %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "BLOK" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Režim výběru bloku" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "ŘÁDEK" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Režim výběru řádku" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Všechny soubory" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Otevřít soubor" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "Pravé klepnutí pro zobrazení voleb karet" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Přesunout do" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Vyplout z doku" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "Nešlo nahrát %1" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Nainstalujte, prosím, %1" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "Nastavit klávesovou zkratku" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "Stiskněte tlačítko, pro které se má klávesová zkratka nastavit:" - -#: ../python/kateshell/sessions.py:41 -msgid "Manage Sessions" -msgstr "Spravovat sezení" - -#: ../python/kateshell/sessions.py:99 -msgid "Session" -msgstr "Sezení" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "Vlastnosti tohoto sezení" - -#: ../python/kateshell/sessions.py:105 -msgid "Name:" -msgstr "Název:" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "Vždy uložit seznam dokumentů v tomto sezení" - -#: ../python/kateshell/sessions.py:115 -msgid "Base directory:" -msgstr "Základní adresář:" - -#: ../python/kateshell/sessions.py:128 -msgid "Edit session: %1" -msgstr "Upravit sezení: %1" - -#: ../python/kateshell/sessions.py:135 -msgid "Edit new session" -msgstr "Upravit nové sezení" - -#: ../python/kateshell/sessions.py:171 -msgid "Please enter a session name." -msgstr "Zadejte, prosím, název sezení." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "Nepoužívejte, prosím, název '%1'." - -#: ../python/kateshell/sessions.py:187 -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "V názvu sezení nepoužívejte, prosím, znak & (ampersand)" - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" -"Jiné sezení s názvem \"%1\" již existuje.\n" -"\n" -"Chcete je přepsat?" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "Otevřít %1 ve vnějším prohlížeči" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "Přehrát %1" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "(Nejsou dostupné žádné nejnovější soubory MIDI nebo PDF.)" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "" -"Nejsou dostupné žádné nejnovější soubory MIDI nebo PDF. Spusťte, prosím, " -"LilyPond, aby vytvořil jeden nebo více výstupních souborů." - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "" -"Nejsou zde žádné soubory, které by bylo možné odeslat prostřednictvím e-" -"mailu." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "Žádné soubory k odeslání" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" -"Nejsou žádné dokumenty PDF k tisku.\n" -"\n" -"Pravděpodobně musíte spustit LilyPond, aby vytvořil nebo obnovil dokument " -"PDF. Pokud vytváříte soubory MIDI, ujistěte se, že jste do svého notového " -"zápisu vložil i část \\layout { }, jinak LilyPond PDF nevytvoří." - -#: ../python/frescobaldi_app/actions.py:146 -msgid "No files to print" -msgstr "Žádné soubory k tisku" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "E-mailové dokumenty" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Vyberte, prosím, soubory, které si přejete odeslat:" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" -"Jsou zde nejnovější soubory (tedy novější než je zdrojový dokument " -"LilyPondu). Jsou tedy ukázány soubory LilyPondu, které jsou zahrnuty ve " -"zdrojovém dokumentu." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -"Poznámka: tento PDF soubor byl vytvořen s vloženými \"ukázat a klepnout\" " -"internetovými adresami (režim náhledu), což dramaticky zvětšuje velikost " -"souboru. Zvažte, prosím, že znovu necháte sestavit tento soubor ve " -"vydavatelském režimu, protože pak je PDF soubor mnohem menší." -msgstr[1] "" -"Poznámka: tyto PDF soubory byly vytvořeny s vloženými \"ukázat a klepnout\" " -"internetovými adresami (režim náhledu), což dramaticky zvětšuje velikost " -"souboru. Zvažte, prosím, že znovu necháte sestavit tyto soubory ve " -"vydavatelském režimu, protože pak jsou PDF soubory mnohem menší." -msgstr[2] "" -"Poznámka: tyto PDF soubory byly vytvořeny s vloženými \"ukázat a klepnout\" " -"internetovými adresami (režim náhledu), což dramaticky zvětšuje velikost " -"souboru. Zvažte, prosím, že znovu necháte sestavit tyto soubory ve " -"vydavatelském režimu, protože pak jsou PDF soubory mnohem menší." - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "" -"Poznámka: Pokud tu nejsou žádné soubory PDF a žádné soubory MIDI, " -"pravděpodobně musíte LilyPond spustit, aby tyto soubory obnovil předtím, než " -"pošlete e-mail." - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "Vybrat vše" - -#: ../python/frescobaldi_app/actions.py:249 -msgid "Print documents" -msgstr "Vytisknout dokumenty" - -#: ../python/frescobaldi_app/actions.py:252 -msgid "Please select the files you want to print:" -msgstr "Vyberte, prosím, soubory, které si přejete vytisknout:" - -#: ../python/frescobaldi_app/actions.py:256 -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" -"Toto jsou nejnovější soubory (tedy novější než je zdrojový dokument " -"LilyPondu). Ověřte dokumenty, které chcete poslat na tiskárnu." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "Tisk %1" - -#: ../python/frescobaldi_app/actions.py:340 -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "Tisk jednoho souboru" -msgstr[1] "Tisk %1 souborů" -msgstr[2] "Tisk %1 souborů" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "" -"Příkaz k tisku (jako 'lpr' nebo 'lp') se ve vašem systému nalézt nepodařilo." - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "Příkaz '%1' se ve vašem systému nalézt nepodařilo." - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" -"Příkaz dole byl spuštěn, ale skončil s návratovým kódem %1.\n" -"\n" -"%2" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "Vytvořit prázdný papír s notovou osnovou" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "Typ:" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "Činnost:" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "Vyberte, jaký druh prázdných notových osnov chcete vytvořit." - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "Vyberte, která činnost se provede, když klepnete na \"OK\"." - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "Náhled na papír s prázdnou notovou osnovu." - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "Klepněte pro zobrazení více nastavení." - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "Papír" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "Nastavení" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Velikost papíru:" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "Výchozí" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "Velikost notové osnovy:" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "Počet stran:" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Odstranit výchozí motto" - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "Tisknout taktové čáry" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "Taktů na čáru:" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "Tisknout čísla stran" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "Začít:" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "Náhled na papír s prázdnou notovou osnovu" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "Nebylo vytvořeno žádné PDF." - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "Otevřít v prohlížeči PDF" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "Uložit PDF jako..." - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "Soubory PDF" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "Uložit PDF" - -#: ../python/frescobaldi_app/blankpaper.py:365 -msgid "Print..." -msgstr "Tisk..." - -#: ../python/frescobaldi_app/blankpaper.py:371 -msgid "Print staff paper" -msgstr "Vytisknout prázdný papír s notovou osnovou" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "Kopírovat kód LilyPondu do editoru" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "Notových osnov na stranu:" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "Klíč:" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "Jednoduchá notová osnova" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "Osnov na stranu:" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "Klíče" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "Klavírní notová osnova" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "Varhanní notová osnova" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "Notových osnov na osnovu:" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "Klíče:" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" -"Zadejte tolik písmen (S, A, T nebo B), kolik je notových osnov.\n" -"Pro další informace se podívejte na \"Co je toto\"." - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" -"Pro nastavení klíčů, nastavte nejprve počet notových osnov na osnovu. Pak " -"zadejte tolik písmen, (S, A, T nebo B), kolik je notových osnov.\n" -"\n" -"S nebo A: houslový klíč,\n" -"T: houslový klíč s \"8\" pod,\n" -"B: basový klíč\n" -"\n" -"Takže když chcete vytvořit notový papír pro notový zápis složený ze čtyř " -"sborových částí, nastavte nejprve počet notových osnov na osnovu na 4. Potom " -"zde zadejte \"SATB\" (bez uvozovek)." - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "Sbor notová osnova" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Žádný" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "Vlastní notová osnova" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "Notová osnova" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "Mezera pod:" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "Svorka" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "Závorka" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "Hranatá závorka" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "Spojit taktové čáry" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "Zvláštní znaky" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "neznámý" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" -"Nelze provést požadovaný překlad.\n" -"\n" -"Noty obsahují čtvrttónové úpravy, ale tyto úpravy nejsou dostupné v jazyku " -"polohy tónu \"%1.\"" - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" -"Jazyk polohy tónu vybraného textu byl aktualizován, ale budete ještě muset " -"do vašeho dokumentu vlastnoručně přidat následující příkaz:" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "(pro LilyPond s menším číslem verze než 2.14), nebo" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "(pro LilyPond ve verzi 2.14 a vyšší.)" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Jazyk názvu polohy tónu" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "Zadejte, prosím, název proměnné, aby byl vybraný text přidělen do:" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Vyjmout a přidělit" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "Otevřít %1" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "Vyberte, prosím, hudební výraz, uzavřený v << ... >> nebo { ... }." - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" -"Nepodařilo se porozumět zadaným výškám tónů.\n" -"\n" -"Ujistěte se, prosím, že používáte názvy pro výšky v jazyce \"%1\"." - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" -"Nelze provést požadované převedení.\n" -"\n" -"Převedené noty obsahují čtvrttónové úpravy, ale tyto úpravy nejsou dostupné " -"v jazyku polohy tónu %1." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "Převést" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "Zadejte, prosím, počáteční výšku a cílovou výšku:" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "Převést z:" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "do:" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "Nainstalovat" - -#: ../python/frescobaldi_app/download.py:56 -msgid "Download LilyPond" -msgstr "Stáhnout LilyPond" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "" -"S tímto nástrojem můžete stáhnout zabalená binární vydání LilyPondu určená " -"pro váš operační systém." - -#: ../python/frescobaldi_app/download.py:68 -msgid "Select the LilyPond version you want to download." -msgstr "Vyberte, prosím, verzi LilyPondu, kterou si přejete stáhnout." - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Verze:" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" -"Vyberte zapisovatelný adresář, do kterého si přejete LilyPond nainstalovat.\n" -"(V tomto adresáři bude vytvořen adresář označený číslem verze.)" - -#: ../python/frescobaldi_app/download.py:81 -msgid "Install into:" -msgstr "Nainstalovat do:" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "Podrobnosti" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "Internetové stránky, z nichž lze stáhnout binární soubory LilyPondu." - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "Stáhnout z:" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "Typ stroje:" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" -"Toto je adresa (URL) vedoucí k balíčku, který bude stažen a nainstalován.\n" -"Také můžete jít na jiná místa, kde můžete vybrat balíček s LilyPondem." - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "Adresa (URL) balíčku:" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "Stahuje se výpis obsahu adresáře..." - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "Nebyly nalezeny žádné balíčky. Můžete balíček najít ručně." - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "Poslední vývojářská verze (%1)" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "Poslední stálá verze (%1)" - -#: ../python/frescobaldi_app/download.py:241 -msgid "Downloading %1..." -msgstr "Stahuje se %1..." - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "Stahování bylo zrušeno." - -#: ../python/frescobaldi_app/download.py:263 -msgid "Download failed: %1" -msgstr "Stahování selhalo: %1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" -"Zdá se, že LilyPond %1 je již nainstalován v %2.\n" -"\n" -"Chcete jej používat, nebo jej chcete odstranit a nainstalovat znovu?" - -#: ../python/frescobaldi_app/download.py:284 -msgid "Use existing LilyPond" -msgstr "Použít stávající LilyPond" - -#: ../python/frescobaldi_app/download.py:285 -msgid "Remove and re-install" -msgstr "Odstranit a nainstalovat znovu" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "Rozbaluje se %1..." - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "Rozbalování bylo dokončeno." - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -msgid "Unpacking failed." -msgstr "Rozbalování selhalo." - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "" -"Vyskytla se chyba:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Správce rozšíření " - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Hledat..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "Název" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Popis" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Zkratka" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" -"Toto je seznam stanovených rozšíření.\n" -"\n" -"Klepněte na řádek, abyste se podíval nebo změnil související text. Klepněte " -"dvakrát na zkratku nebo na její popis, abyste ji/jej změnil. Také můžete " -"stisknout funkční klávesu F2, abyste upravil aktuální zkratku.\n" -"\n" -"Použijte níže uvedená tlačítka, abyste přidal anebo odstranil rozšíření.\n" -"\n" -"Jsou dva způsoby pro použití rozšíření: buď napíšete zkratku v textu, a " -"potom vyvoláte rozšiřovací funkci, nebo prostě vyvoláte rozšiřovací funkci " -"(vychozí klávesová zkratka: Ctrl+.), vyberete rozšíření ze seznamu a " -"stisknete Enter nebo klepnete na tlačítko OK." - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" -"Toto je text spojený s vybranou zkratkou. Některé znaky mají zvláštní význam:" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "Umístěte ukazovátko na toto místo." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Přesuňte následující výšku tónu." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Nová položka" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"Tento název již používá jiné rozšíření.\n" -"\n" -"Použijte, prosím, jiný název." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "" -"V názvu rozšíření použijte, prosím, pouze písmena, číslice a podtržítka." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "Neopusťte, prosím, popis prázdný." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" -"Nepodařilo se nalézt žádné slovníky s dělením slov.\n" -"\n" -"Nainstalujte, prosím, balíček, který bude nějaký obsahovat, a/nebo v " -"nastavení pro Frescobaldi, pod \"Cesty\", nastavte vyhledávací cestu, aby " -"byly slovníky nalezeny." - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Rozdělit spojovníkem text se slovy písně" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Vyberte, prosím, jazyk:" - -#: ../python/frescobaldi_app/kmid.py:68 -msgid "Pause" -msgstr "Pozastavit" - -#: ../python/frescobaldi_app/kmid.py:85 -msgid "Volume" -msgstr "Hlasitost" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "Domovská složka" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "Větší text" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "Menší text" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "První strana" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Předchozí" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "O jednu úroveň výše" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Další" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "Obsah" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "Rejstřík" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Kopírovat &odkaz" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Otevřít odkaz v &novém okně" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Kopírovat" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Otevřít dokument v &novém okně" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "Nahrává se ..." - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "Nedostupné" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "Odkaz na notaci" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "Rejstřík příkazů pro LilyPond" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "Příručka pro učení se" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "Rejstřík k příručce pro učení se" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -msgid "Internals Reference" -msgstr "Odkaz na vnitřní části" - -#: ../python/frescobaldi_app/lilydoc.py:877 -msgid "The %1 context" -msgstr "%1 souvislost" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "%1 předmět rozvržení" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "&Nápověda k LilyPondu" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Směr:" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Nahoru" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Neutrální" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Dolů" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "Kam přidat artikulace atd.: nad nebo pod osnovu nebo ve výchozí poloze" - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "Nastavit klávesovou zkratku (%1)" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Artikulace" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Různé druhy artikulací a dalších značek." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Klepněte na značku artikulace pro její přidání do vašeho dokumentu." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" -"Pokud nejprve vyberete nějaké noty, artikulace bude přidána ke všem notám ve " -"výběru." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Povolit zkratky" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "Použít krátký zápis pro některé artikulace jako je staccato." - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "Dynamika" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "Symboly pro dynamiku." - -#: ../python/frescobaldi_app/lqi.py:267 -msgid "Click a dynamic sign to add it to your document." -msgstr "Klepněte na značku pro dynamiku pro její přidání do vašeho dokumentu." - -#: ../python/frescobaldi_app/lqi.py:268 -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "" -"Pokud nejprve vyberete nějaké noty, natahovače dynamiky budou přidány k " -"vybrané části." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "" -"Pokud jste vybral nějaké noty, a klepnete na značku po natahovači, značka " -"ukončí natahovač." - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "Značka dynamiky %1" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "Natahovače" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "Sponka crescenda" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "Crescendo" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "Sponka diminuenda" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "Diminuendo" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "Decrescendo" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -msgid "Bar Lines" -msgstr "Taktové čáry" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "Taktové čáry, značky pro dýchání atd." - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Dvojitá taktová čára" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "koncová taktová čára" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "Tečkovaná taktová čára" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "Čárkovaná taktová čára" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Neviditelná taktová čára" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "Opakovat začátek" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "Opakovat obojí" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "Opakovat konec" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "Opakovat obojí (starý)" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "Opakovat obojí (klasický)" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "Zaškrtnutá taktová čára" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "Jednoduchá taktová čára" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "Malá-Široká-Malá taktová čára" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "Široká-Malá taktová čára" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "Dvojita široká taktová čára" - -#: ../python/frescobaldi_app/lqi.py:354 -msgid "Segno bar line" -msgstr "Taktová čára Segno" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "Značky pro dýchání" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "Výchozí značka pro dýchání" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "Přímá značka pro dýchání" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "Zahnuté přerušení (césura)" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "Přímé přerušení (césura)" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "Legatové obloučky, natahovače atd." - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "Tyto natahovače potřebují, aby byla vybrána část not." - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "Legatový oblouček" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "Frázovací oblouček" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "Trámec" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "Arpeggia" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "Arpeggia se používají u akordů s více notami." - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "Arpeggio" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "Arpeggio s šipkou nahoru" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "Arpeggio s šipkou dolů" - -#: ../python/frescobaldi_app/lqi.py:445 -msgid "Bracket Arpeggio" -msgstr "Arpeggio v závorce" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "Arpeggio v kulaté závorce" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "Glissanda" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "" -"Glissandos are attached to a note and automatically extend to the next note." -msgstr "Glissanda jsou přidána k notě a automaticky rozšířena na další notu." - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "Glissando" - -#: ../python/frescobaldi_app/lqi.py:466 -msgid "Dashed Glissando" -msgstr "Čárkované glissando" - -#: ../python/frescobaldi_app/lqi.py:467 -msgid "Dotted Glissando" -msgstr "Tečkované glissando" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "Klikaté glissando" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "Trylkové glissando" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "Soubory LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:170 -msgid "Print Source..." -msgstr "Vytisknout zdroj..." - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Nastavit nový notový zápis..." - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "Spustit LilyPond (náhled)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "Spustit LilyPond (vydat)" - -#: ../python/frescobaldi_app/mainapp.py:488 -msgid "Run LilyPond (custom)..." -msgstr "Spustit LilyPond (vlastní)..." - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "Přerušit práci programu LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:502 -msgid "Print Music..." -msgstr "Vytisknout noty..." - -#: ../python/frescobaldi_app/mainapp.py:508 -msgid "Email Documents..." -msgstr "Poslat dokumenty e-mailem..." - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "Vyjmout výběr a přidělit jej proměnné programu LilyPond." - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Opakovat poslední notu nebo akord" - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Opakovat poslední hudební výraz (notu nebo akord)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "Vložit nebo spravovat rozšíření..." - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Rozšířit poslední slovo nebo otevřít dialog rozšíření." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "Zvláštní znaky..." - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "Vložit zvláštní znaky." - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "Přidat do rozšíření" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Další prázdný řádek" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Přejít na další prázdný řádek." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Předchozí prázdný řádek" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Přejít na předchozí prázdný řádek." - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "Vybrat po další prázdný řádek" - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "Vybere text od nynější polohy dolů včetně dalšího prázdného řádku." - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "Vybrat po předchozí prázdný řádek" - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "Vybere text od nynější polohy nahoru až po předchozí prázdný řádek." - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "Posunout výběr k dalšímu prázdnému řádku" - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "Posune vybraný blok k dalšímu prázdnému řádku." - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "Posunout výběr k předchozímu prázdnému řádku" - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "Posune vybraný blok k předchozímu prázdnému řádku." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "Přehrát/Zobrazit" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "" -"Změnit jazyk LilyPondu, který se používá pro názvy výšek tónů v tomto " -"dokumentu nebo ve výběru." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "Převést poměrnou na &naprostou" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" -"Převede noty v dokumentu nebo ve výběru z poměrné na naprostou výšku tónu." - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "Převést naprostou na &poměrnou" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "" -"Převede noty v dokumentu nebo ve výběru z naprosté na poměrnou výšku tónu." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "Převést..." - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "Převede všechny noty v dokumentu nebo ve výběru." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Zdvojnásobit doby trvání" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Zdvojnásobit všechny doby trvání ve výběru." - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Zkrátit na polovinu doby trvání" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Zkrátit na polovinu všechny doby trvání ve výběru." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Udělat tečky na dobách trvání" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Přidat tečku ke všem dobám trvání ve výběru." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Odstranit tečky na dobách trvání" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Odstranit tečku ze všech dob trvání ve výběru." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Odstranit změny velikosti" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "Odstranit změny velikosti (*n/m) z dob trvání ve výběru." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Odstranit doby trvání" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "Odstranit všechny doby trvání ve výběru." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Odstranit doby trvání, které jsou stejné jako u předchozí noty" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "Skrýt doby trvání (odstranit opakované doby trvání)." - -#: ../python/frescobaldi_app/mainapp.py:713 -msgid "Make implicit (per line)" -msgstr "Odstranit doby trvání (na řádek)" - -#: ../python/frescobaldi_app/mainapp.py:714 -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "" -"Skrýt doby trvání (odstranit opakované doby trvání), kromě první doby trvání " -"v řádku." - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Přidat dobu trvání ke každé notě" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "" -"Přímo vyjádřit doby trvání (přidat dobu trvání ke každé notě, i když se " -"jedná o tu samou jako je předcházející nota)." - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Použít rytmus..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Použít zadaný rytmus na vybrané noty." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Kopírovat rytmus" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Kopírovat rytmus vybraných not." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Vložit rytmus" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Vložit rytmus do vybraných not." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Odstranit dělení slov" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "Kopírovat slova s odstraněným dělením slov" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Jednoduché uvozovky" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Dvojité uvozovky" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Zarovnat" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "Vložit číslo verze aplikace LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "Zaktualizovat s pomocí convert-ly" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Otevřít aktuální složku" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "Opakovat vybrané noty" - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "Vložit dvojici svorek" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" -"Váš dokument byl změněn a je třeba jej uložit předtím, než bude možné " -"spustit LilyPond.\n" -"\n" -"Uložit dokument nyní?" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "LilyPond je již spuštěn a pracuje na tomto dokumentu." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "Dokument nelze zpracovat" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "Přesto pokračovat?" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "" -"Chcete LilyPond spustit v náhledovém režimu (s povolenou funkcí ukázat a " -"klepnout), ale váš dokument obsahuje příkaz, který funkcí ukázat a klepnout " -"vypíná." - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" -"Chcete LilyPond spustit ve vydavatelském režimu (se zakázanou funkcí ukázat " -"a klepnout), ale váš dokument obsahuje příkaz, který funkcí ukázat a " -"klepnout zapíná." - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Zrušit běžící proces aplikace LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:917 -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "Spustit LilyPond v režimu náhledu (Shift-klepnutí pro vlastní dialog)" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Rychle vložit" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "LilyPond úspěšně sestavil %1." - -#: ../python/frescobaldi_app/mainapp.py:956 -msgid "LilyPond exited with an error compiling %1." -msgstr "LilyPond skončil při sestavování %1 s chybou." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Použít rytmus" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Zadat rytmus:" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "" -"Zadat rytmus za použití mezerou oddělených hodnot dob trvání (např. 8. 16 8 " -"4 8)" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Terminál" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "Se&řídit terminál s aktuálním dokumentem" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "Přehrávač MIDI" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" -"Nepodařilo se nahrát součást KMid.\n" -"Nainstalujte, prosím, KMid 2.4.0 nebo vyšší." - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "Náhled PDF" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "Ukázat navigační panel PDF" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "Ukázat miniaturní PDF číslovač stran" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Nastavit Okular..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "S&ladit náhled se současným dokumentem" - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "Nahrát znovu" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "Záznam o průběhu činnosti od LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "Žádný záznam o průběhu činnosti" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "Ukázat pouze na chybách" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "Dokumentace k LilyPondu" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" -"Používané metrum. Ponechte 'Auto', abyste nechali na Frescobaldi stanovení " -"metra z LilyPond dokumentu." - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Kvantovat:" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "Použít tuto nejkratší dobu trvání noty." - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Udělat krok" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Nahrát LilyPond vstup notu po notě bez dob trvání." - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Monofonní" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Nahrát monofonní vstup bez akordů." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" -"Počet posuvek. Záporné číslo určuje počet snížení o půltón. Ponechte 'Auto', " -"abyste nechali na Frescobaldi stanovení předznamenání z LilyPond dokumentu." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Tempo:" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Metrum:" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Tónina:" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Nastavit..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "Upravovat více nastavení jako MIDI vstup a výstup." - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Uložit" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Nastavit nastavení na výchozí." - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Nalezena verze programu Rumor %1." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "Rumor nebyl nalezen: %1." - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "Byla uložena nastavení." - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Nahrávat" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Začít nebo zastavit Rumor MIDI nahrávání." - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Rumor nahrává. Stiskněte ESC pro zastavení nahrávání." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor byl zastaven." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "Začít nebo zastavit ALSA MIDI klienta TiMidity." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Nastavení programu Rumor." - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "Zařízení OSS %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Klávesnice" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "MIDI vstup:" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" -"Použít MIDI vstup. Jestliže chcete hrát s pomocí klávesnice vašeho počítače, " -"vyberte 'klávesnice'." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "MIDI výstup:" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "Použít MIDI výstup." - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Jazyk:" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "" -"Jazyk programu LilyPond, kterým chcete, aby Rumor prováděl výstup výšek tónů." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Otevřená doba trvání" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" -"Přidat dobu trvání po každé notě, i když je stejná, jako byla předcházející " -"nota." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Naprostá výška tónu" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "Použít naprostou výšku tónu namísto poměrné." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Žádné taktové čáry" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Filtrovat taktové čáry pryč z výstupu programu Rumor." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Žádné tečky" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "Nepoužívat noty s tečkami, ale místo nich používat ligatury." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Legáto" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "Nepoužívat pomlky, ale dát všem notám největší délku." - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Odebrat pomlky" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Odebrat z výstupu pomlky před a za." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Guile skripty k nahrání:" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "" -"Zde si můžete vybrat, které Guile skripty chcete, aby program Rumor nahrál. " -"Pro další informace se podívejte na \"Co je toto\"." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" -"Zde si můžete vybrat, které Guile skripty chcete, aby program Rumor nahrál. " -"Můžete přidat vaše vlastní texty tím, že je vložíte do %1. Pokud by první " -"řádek vašeho skriptu začínal středníkem (;), bude tento řádek ukazován jako " -"popis." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "A&utomaticky" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "Režim náhledu" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "Režim vydávání" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "LilyPond %1 [%2] začíná (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "LilyPond [%1] začíná (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "LilyPond [%1] skončil se zpátečním kódem %2." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "LilyPond [%1] skončil ve stavu ukončení %2." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] skončil (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "LilyPond nešel spustit. Zkontrolujte, prosím, cestu a oprávnění." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "Z LilyPond procesu nešlo číst." - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Vyskytla se neznámá chyba." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -msgid "Run LilyPond" -msgstr "Spustit LilyPond" - -#: ../python/frescobaldi_app/runlily.py:257 -msgid "Select which LilyPond version you want to run:" -msgstr "Vyberte, prosím, kterou verzi LilyPondu si přejete spustit:" - -#: ../python/frescobaldi_app/runlily.py:265 -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "Spustit LilyPond v režimu náhledu (s funkcí ukázat a klepnout)" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "Spustit LilyPond s podrobným výstupem" - -#: ../python/frescobaldi_app/runlily.py:310 -msgid "Command" -msgstr "Příkaz" - -#: ../python/frescobaldi_app/runlily.py:317 -msgid "LilyPond %1" -msgstr "LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:318 -msgid "Use LilyPond version %1" -msgstr "Použít LilyPond ve verzi %1" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -msgid "default" -msgstr "Výchozí" - -#: ../python/frescobaldi_app/runlily.py:322 -msgid "Default LilyPond Version." -msgstr "Výchozí verze programu LilyPond." - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "Automatická" - -#: ../python/frescobaldi_app/runlily.py:325 -msgid "Automatic LilyPond Version (determined from document)." -msgstr "Automatická verze LilyPondu (určená z dokumentu)." - -#: ../python/frescobaldi_app/runlily.py:330 -msgid "Path: %1" -msgstr "Cesta: %1" - -#: ../python/frescobaldi_app/runlily.py:334 -msgid "LilyPond (version unknown)" -msgstr "LilyPond (neznámá verze)" - -#: ../python/frescobaldi_app/runlily.py:335 -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "" -"Použít LilyPond (neznámá verze)\n" -"Cesta: %1" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Klepněte, abyste mohl upravovat tento soubor" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "Uložit zápis o průběhu činnosti LilyPondu jako" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"Nepodařilo se uložit zápis o průběhu činnosti LilyPondu:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -msgid "LilyPond-related settings" -msgstr "Nastavení vztahující se k LilyPondu" - -#: ../python/frescobaldi_app/sessions.py:44 -msgid "LilyPond version to use:" -msgstr "Verze LilyPondu, která se má použít:" - -#: ../python/frescobaldi_app/sessions.py:48 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" -"Zde můžete nastavit pevnou verzi LilyPondu, která se bude spouštět u " -"dokumentů v tomto sezení.\n" -"Pro další informace se podívejte na \"Co je toto\" (Shift+F1)." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" -"Zde můžete nastavit pevnou verzi LilyPondu, která se bude spouštět u " -"dokumentů v tomto sezení.\n" -"\n" -"Zde vybraná verze LilyPondu je u vašich dokumentů spouštěna jako výchozí a " -"je používána i příkazem \"Vložit verzi\"." - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Nastavit" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Obecné volby" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Obecné volby programu Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -msgid "LilyPond Preferences" -msgstr "Nastavení LilyPondu" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Cesty" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Cesty k programům nebo datům používaným programem Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "MIDI vstup Rumor" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Nastavení přídavného modulu pro MIDI vstup Rumor" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Nastavení editoru" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Volby pro nastavení editoru" - -#: ../python/frescobaldi_app/settings.py:298 -msgid "Running LilyPond" -msgstr "Spuštění LilyPondu" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "Nechat LilyPond mazat prostřední výstupní soubory" - -#: ../python/frescobaldi_app/settings.py:310 -msgid "LilyPond include path:" -msgstr "Vyhledávací cesta pro LilyPond:" - -#: ../python/frescobaldi_app/settings.py:336 -msgid "When saving documents" -msgstr "Při ukládání dokumentů" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "Zapamatovat si pozici ukazovátka, záložky atd." - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Výchozí adresář:" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "Výchozí složka pro vaše dokumenty LilyPond (volitelná)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "Verze programu LilyPond, která se bude používat v nových dokumentech" - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Použít číslo verze nainstalovaného LilyPondu" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Použít číslo verze posledního pravidla convert-ly" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Použít vlastní číslo verze:" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Zadat platné číslo verze programu LilyPond, např. 2.12.0" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "Varování a oznámení" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "" -"Varovat, když dokument obsahuje střetávající se nastavení pro ukázat a " -"klepnout" - -#: ../python/frescobaldi_app/settings.py:438 -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "" -"Varovat, když je třeba, aby byl dokument uložen předtím, než je LilyPond " -"spuštěn" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "Varovat, když by uložení sezení přepsalo jiné sezení" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "Ukázat a klepnout" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "Povolit ukázat a klepnout" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "" -"Na toto tlačítko klepněte, když vlastnost ukázat a klepnout nepracuje. Pro " -"další informace se podívejte na \"Co je toto\" (Shift+F1)." - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside " -"Okular. This works best when all instances of Okular are closed and the PDF " -"preview has not yet been opened." -msgstr "" -"Při svém prvním spuštění se Frescobaldi pokouší automaticky nastavit program " -"Okular, jenž poskytuje náhled na soubory PDF, aby Frescobaldi volal, když je " -"klepnuto na klepnutelný předmět.\n" -"\n" -"Ale toto nastavení se může ztratit, přesunete-li Frescobaldi do jiného " -"umístění, nebo když jiné programy Okular přenastaví.\n" -"\n" -"Klepněte na toto tlačítko pro nastavení Frescobaldi jako \"uživatelského " -"editoru\" v Okularu. Nejlépe to pracuje, když jsou všechny běhy Okularu " -"zavřeny a náhled na PDF ještě nebyl otevřen." - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" -"Náhled na PDF v Okularu byl přenastaven.\n" -"\n" -"Pokud jste již náhled na PDF otevřel, spusťte Frescobaldi znovu, aby se nová " -"nastavení projevila." - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "Pomocné programy" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "Prohlížeč PDF:" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "Prohlížeč PDF" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "(ponechat prázdné pro výchozí nastavení operačního systému)" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "Přehrávač MIDI:" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "Adresa (URL):" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "Adresa nebo cesta k dokumentaci programu LilyPond." - -#: ../python/frescobaldi_app/settings.py:563 -msgid "Lyrics Hyphenation" -msgstr "Dělení slov v textu" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" -"Cesty, které se budou prohledávat kvůli slovníkům dělení slov používaných v " -"programech OpenOffice.org, Scribus, KOffice a dalších; jedna cesta na řádek. " -"Jestliže vynecháte počáteční lomítko, jsou na začátek přidány předpony z " -"proměnné prostředí KDEDIRS." - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Příkazy používané modulem pro MIDI vstup Rumor" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Název nebo úplná cesta k programu Rumor." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" -"Název nebo úplná cesta k programu aconnect (část ALSA, určen pro MIDI vstup " -"a přehrávání s využitím programu Rumor)." - -#: ../python/frescobaldi_app/settings.py:615 -msgid "" -"Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" -"Úplný příkaz pro spuštění Timidity (nebo jakéhokoli jiného programu) jako " -"ALSA MIDI klienta." - -#: ../python/frescobaldi_app/settings.py:648 -msgid "LilyPond versions to use:" -msgstr "Verze LilyPondu, které se mají použít:" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "" -"Enable automatic version selection (choose LilyPond version from document)" -msgstr "Povolit automatický výběr verze (zvolit verzi LilyPondu z dokumentu)" - -#: ../python/frescobaldi_app/settings.py:710 -msgid "Document Tabs" -msgstr "Karty dokumentu" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "Tlačítko pro zavření" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "Velké karty" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "Karty mohou být přesunuty" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "Convert-ly:" - -#: ../python/frescobaldi_app/settings.py:778 -msgid "Lilypond-book:" -msgstr "Lilypond-book:" - -#: ../python/frescobaldi_app/settings.py:809 -msgid "Path" -msgstr "Cesta" - -#: ../python/frescobaldi_app/settings.py:810 -msgid "Version" -msgstr "Verze" - -#: ../python/frescobaldi_app/settings.py:813 -msgid "Can't determine LilyPond version." -msgstr "Nelze určit číslo verze LilyPondu." - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "Stáhnout..." - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "Stáhnout nová vydání spustitelného souboru LilyPondu." - -#: ../python/frescobaldi_app/settings.py:842 -msgid "LilyPond Command:" -msgstr "Příkaz pro LilyPond:" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "Název nebo úplná cesta k programu LilyPond." - -#: ../python/frescobaldi_app/settings.py:847 -msgid "LilyPond Command" -msgstr "Příkaz pro LilyPond" - -#: ../python/frescobaldi_app/settings.py:860 -msgid "Set as default" -msgstr "Nastavit jako výchozí" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "Zahrnout do automatického výběru verze" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "Sezení, které se má nahrát, je-li Frescobaldi spuštěn bez argumentů" - -#: ../python/frescobaldi_app/settings.py:903 -msgid "Start with no session" -msgstr "Začít bez sezení" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "Začít s naposledy použitým sezením" - -#: ../python/frescobaldi_app/settings.py:905 -msgid "Start with session:" -msgstr "Začít se sezením:" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "Vybrat sezení." - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "Vybrat..." - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "Váš dokument má již uvedenu verzi programu LilyPond." - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "Verze je již nastavena" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "" -"Nelze určit verzi programu LilyPond. Zkontrolujte, prosím, vaši instalaci " -"programu LilyPond. " - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" -"Nelze určit verzi aktuálního dokumentu programu LilyPond. Přidejte, prosím, " -"\\správné označení verze." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "Tento LilyPond dokument je již aktuální." - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" -"Tento dokument byl zpracován s convert-ly. Hlášení convert-ly naleznete v " -"komentáři na konci. Je možnéže ještě budete muset upravovat některé části " -"ručně." - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" -"Tento dokument byl zpracován s convert-ly, ale zůstal nezměněn. Toto hlášení " -"bylo podáno convert-ly: %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "Nepodařilo sa spustit convert-ly: %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Zaťukáním nastavit tempo" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Klepněte na toto tlačítko několikrát, abyste nastavili tempo." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "Tempo v úderech za minutu." - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "Houslový klíč" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Alt" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Tenor" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "Houslový klíč 8" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Basová kytara" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Bicí nástroje" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "Tabulaturový klíč" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "Žádný klíč" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Kouzelník pro způsob uspořádání notového zápisu" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Názvy a hlavičky" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Klepněte pro zadání hodnoty" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "úpatí první strany" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "úpatí poslední strany" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Party" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Dostupné party:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Přidat vybraný part do notového zápisu" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Notový zápis:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Nastavení notového zápisu" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Obecné volby" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Názvy nástrojů" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Předznamenání" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Taktové označení:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Předtaktí:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Hodnota na metronomu:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Údaj o tempu:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Údaj o tempu. Např. \"Allegro.\"" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Jazyk názvu polohy tónu:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "Jazyk programu LilyPond, který chcete použít pro názvy výšek tónů." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "Verze programu LilyPond, kterou budete používat v tomto dokumentu." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Použít typografické uvozovky" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "Nahradit normální uvozovky v názvech hezkými typografickými uvozovkami" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Potlačit výstup výchozího motta pomocí LilyPondu" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Odstranit čísla taktů" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "" -"Suppress the display of measure numbers at the beginning of every system." -msgstr "Potlačit zobrazení čísel taktů na začátku každé osnovy." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "Vytvořit MIDI výstup" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "Vytvořit soubor MIDI vedle souboru PDF." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Ukázat hodnotu na metronomu" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" -"V případě, že je zaškrtnuto, hodnota na metronomu se ukáže na začátku " -"notového zápisu. MIDI výstup používá nastavení metronomu také." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "Zalomit notový zápis v bloku \\book" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "Je-li zaškrtnuta tato volba, zalomí blok \\score v bloku \\book." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Formát na šířku" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "První systém:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Dlouhý" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Krátký" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "Požít dlouhé nebo krátké názvy nástrojů před první osnovou." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Jiné osnovy:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "Požít krátké, dlouhé nebo žádné názvy nástrojů před dalšími osnovami." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "Jaký použít jazyk pro názvy nástrojů." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Odstranit výchozí motto programu LilyPond" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "Nejsou dostupná žádná nastavení." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Pěvecké hlasy:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "Kolik hlasů umístit do této notové osnovy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "Hudba následuje zde." - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Druh notové osnovy:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Normální notová osnova" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Tabulatura" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Oba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Intonace:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "Zde následují slova písně." - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Sloka:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Počet slok:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Hlasový rozsah" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "Ukázat výšku hlasového rozsahu na začátku notové osnovy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Nastavit, kolik oddělených hlasů chcete mít na každé notové osnově." - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "Toto je užitečné zejména, když píšete polyfonní hudbu, jakou je fuga." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Pravá ruka:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Levá ruka:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Názvy akordů" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "Zde následují akordy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Akordový styl:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "německý" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "na půl německý" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "italský" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "francouzský" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Kytarové hmaty" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" -"Ukázat přednastavené kytarové hmaty pod názvy akordů (LilyPond 2.12 a a " -"vyšší)." - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Číslovaný bas (generální bas, basso continuo)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "Zde následují čísla." - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "Použít pomocné linky" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Housle" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Housle|Hle." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Viola" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Viola|Vla.|" - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Violoncello" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Violoncello|Vlo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Kontrabas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Kontrabas|Kbas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Generální bas (Basso continuo)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Generální bas (Basso continuo)|G. b." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Mandolína" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandolína|Mna" - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Ladění mandolíny" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Bendžo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Bendžo|Bžo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "Otevřít ladění v G (aDGBD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "Ladění v C (gCGBD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "Modální ladění (gDGCD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "Otevřít ladění v D (aDF#AD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "Otevřít ladění v D moll (aDFAD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Čtyři smyčce (namísto pěti)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Klasická kytara" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Kytara|Kra." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Kytarové ladění" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "Otevřít ladění v G" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Džezová kytara" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Džezová kytara|Dž. kra." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Basová kytara|Bs. kra." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "Basové ladění" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Elektrická basová kytara" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Elektrická basová kytara|El. bs. kra." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Harfa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Harfa|Hfa." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "Horní notová osnova:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "Dolní notová osnova:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Flétna" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Flétna|Fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Pikola" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Pikola|Pik." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Basová flétna" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Basová flétna|Bs. fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Hoboj" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Hoboj|Hob." - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Hoboj d'amore" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Hoboj d'amore|Hob. d'am." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "Anglický roh" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "Anglický roh|A. roh" - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Fagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Fagot|Fag." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Kontrafagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Kontrafagot|Kfag." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Klarinet" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Klarinet|Kl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Sopraninový saxofon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Sopraninový saxofon|Snino Sax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Sopránový saxofon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Sopránový saxofon|Sno Sax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Altový saxofon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Altový saxofon|A. Sax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Tenorový saxofon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Tenorový saxofon|T. Sax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Barytonový saxofon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Barytonový saxofon|Bar. Sax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Basový saxofon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Basový saxofon|Bas. Sax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Sopránová zobcová flétna" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Sopránová zobcová flétna|S. z. fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Altová zobcová flétna" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Altová zobcová flétna|A. z. fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Tenorová zobcová flétna" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Tenorová zobcová flétna|T. z. fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Basová zobcová flétna" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Basová zobcová flétna|Bas. z. fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Trubka v F" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Trubka v F|Tr. F" - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Trubka v C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Trubka v C|Tr. C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Trubka v B" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Trubka v B|Tr. B|" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Pozoun" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Pozoun|Poz" - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Basová tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Basová tuba|B.Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Soprán" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Soprán|S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Mezzosoprán" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzosoprán|Ms." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Alt|A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Tenor|T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Bas|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Hlavní list" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" -"Hlavní list poskytuje notovou osnovu s názvy akordů nad ní a slovy písně pod " -"ní. Druhá notová osnova je volitelná." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Přidat notovou osnovu hudebního doprovodu" - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" -"Přidá notovou osnovu hudebního doprovodu a rovněž vloží doprovodný hlas do " -"horní notové osnovy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Sbor" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" -"Vyberte, prosím, hlasy pro sbor. Použijte písmena S, A, T, nebo B. Spojovník " -"označuje novou notovou osnovu." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "Rada: Můžete použít dva sborové hlasy pro zdvojený sbor." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Úprava barvy zvuku " - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -msgid "Lyrics:" -msgstr "Slova písně:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Všechny pěvecké hlasy mají stejná slova písně" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -msgid "A set of the same lyrics is placed between all staves." -msgstr "Soubor stejných slov písně je umístěn mezi všechny notové osnovy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Každý pěvecký hlas má stejná slova písně" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "" -"Every voice gets its own lyrics, using the same text as the other voices." -msgstr "" -"Každý pěvecký hlas dostává svá vlastní slova písně za použití stejného " -"textu, jaký mají jiné pěvecké hlasy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Každý pěvecký hlas má jiná slova písně" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Každý pěvecký hlas dostává jiný soubor se slovy písně." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "Umístit sloky" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -msgid "One set of stanzas is distributed across the staves." -msgstr "Jeden soubor slok je umístěn mezi všechny notové osnovy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "Klavírní výtah" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "Přidá automaticky vytvořené klavírní výtah." - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "Zkušební soubory MIDI" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "" -"Vytvoří zkušební soubor MIDI pro každý hlas, i když pro hlavní notový zápis " -"není vytvořen žádný výstup MIDI." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Sbor|Sb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "Zkušební soubory MIDI:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Klavír" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Klavír|Klav." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Cembalo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Cembalo|Cem." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Clavichord" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Clavichord|Clv." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Varhany" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Varhany|Var." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Pedál:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Nastavit na nulu pro úplné znemožnění pedálu." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Celesta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Celesta|Cel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Kotle" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Kotle|Kot." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Xylofon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Xylofon|Xyl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Marimba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Vibrafon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Vibrafon|Vib." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Trubkové zvony" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Trubkové zvony|Tru. zv." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Zvonkohra" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Zvonkohra|Zvo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Bubny" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Bubny|Bub." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "Zde následují bubny." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "Udržovat trochu odstup." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Styl:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Bubny (pět linek, výchozí)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Styl timbále (dvě linky)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Styl konga (dvě linky; vysoký a úzký buben, na který se hraje dlaněmi)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Styl bonga (dvě linky; buben)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Styl bicí (dvě linky)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Odstranit nožky not" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Odstranit nožky z not pro bicí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Smyčcové nástroje" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Drnkací smyčcové nástroje" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Dřevěné dechové nástroje" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Žesťové nástroje" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "Zpěv" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Klávesové nástroje" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Speciální" - -#~ msgid "&Generated Files" -#~ msgstr "&Vytvořené soubory" - -#~ msgid "Open PDF" -#~ msgstr "Otevřít PDF" - -#~ msgid "Play MIDI" -#~ msgstr "Přehrát MIDI" - -#~ msgid "Email..." -#~ msgstr "E-mail..." - -#~ msgid "The document has been sent to the printer." -#~ msgstr "Dokument byl poslán do tiskárny." - -#~ msgid "" -#~ "Printing failed: %1\n" -#~ "\n" -#~ "The print command %2 does probably not exist. Please check your settings." -#~ msgstr "" -#~ "Tisk selhal: %1\n" -#~ "\n" -#~ "Pravděpodobně neexistuje příkaz pro tisk %2. Zkontrolujte, prosím, vaše " -#~ "nastavení." - -#~ msgid "The print command contains errors. Please check your settings." -#~ msgstr "" -#~ "Příkaz pro tisk obsahuje chyby. Zkontrolujte, prosím, vaše nastavení." - -#~ msgid "Overwrite File?" -#~ msgstr "Přepsat soubor?" - -#~ msgid "&Overwrite" -#~ msgstr "&Přepsat" - -#~ msgid "Directly print on default printer" -#~ msgstr "Tisknout přímo na výchozí tiskárně" - -#~ msgid "Space above:" -#~ msgstr "Mezera nad:" - -#~ msgid "The direction to use for the articulations." -#~ msgstr "Směr, který bude použit pro artikulace." - -#~ msgid "Your document has been modified, please save first." -#~ msgstr "Váš dokument byl upraven. Nejprve jej, prosím, uložte." - -#~ msgid "Disable the built-in PDF preview" -#~ msgstr "Znemožnit vestavěný náhled PDF" - -#~ msgid "Name or full path of the convert-ly program." -#~ msgstr "Název nebo úplná cesta k programu convert-ly" - -#~ msgid "" -#~ "Command to print a PDF file, for example lpr or kprinter. You may add " -#~ "some arguments, e.g. lpr -P myprinter." -#~ msgstr "" -#~ "Příkaz pro tisk PDF souboru; například lpr nebo kprinter. Můžete přidat " -#~ "některé nezávisle proměnné; např. lpr -P myprinter." - -#~ msgid "LilyPond documentation:" -#~ msgstr "Dokumentace k LilyPondu:" - -#~ msgid "Expand" -#~ msgstr "Rozšířit" - -#, fuzzy -#~ msgid "Could not understand the entered pitches." -#~ msgstr "Z LilyPond procesu nešlo číst." - -#~ msgid "Dock" -#~ msgstr "Vplout do doku" - -#~ msgid "Show" -#~ msgstr "Ukázat" - -#, fuzzy -#~ msgid "Paper Size A4" -#~ msgstr "Velikost papíru:" - -#, fuzzy -#~ msgid "Paper Size A5" -#~ msgstr "Velikost papíru:" - -#, fuzzy -#~ msgid "Paper Size Letter" -#~ msgstr "Velikost papíru:" - -#, fuzzy -#~ msgid "Stem Up" -#~ msgstr "Udělat krok" - -#, fuzzy -#~ msgid "Stem Down" -#~ msgstr "Dolů" - -#, fuzzy -#~ msgid "Lyric Stanza" -#~ msgstr "Sloka:" - -#, fuzzy -#~ msgid "Score section" -#~ msgstr "Nastavení notového zápisu" - -#, fuzzy -#~ msgid "Layout Section" -#~ msgstr "Výběr jazyka" - -#, fuzzy -#~ msgid "Midi section" -#~ msgstr "Věnování" - -#, fuzzy -#~ msgid "With: instrumentName" -#~ msgstr "Názvy nástrojů" - -#, fuzzy -#~ msgid "With: shortInstrumentName" -#~ msgstr "Názvy nástrojů" - -#, fuzzy -#~ msgid "Modern 2/2 Time Signature" -#~ msgstr "Předznamenání času:" - -#, fuzzy -#~ msgid "Modern 4/4 Time Signature" -#~ msgstr "Předznamenání času:" - -#, fuzzy -#~ msgid "New Lyrics" -#~ msgstr "Slova písně" - -#~ msgid "Your document currently has no filename, please save first." -#~ msgstr "Váš dokument v současnosti nemá název. Nejprve jej, prosím, uložte." - -#~ msgid "" -#~ "Sorry, support for remote files is not yet implemented.\n" -#~ "Please save your document to a local file." -#~ msgstr "" -#~ "Promiňte, ale podpora vzdálených souborů ještě není uskutečněna.\n" -#~ "Uložte, prosím, váš dokument jako místní soubor." - -#~ msgid "Already Running" -#~ msgstr "Již běží" diff -Nru frescobaldi-1.2.0/po/de.po frescobaldi-2.0.0/po/de.po --- frescobaldi-1.2.0/po/de.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/de.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,4303 +0,0 @@ -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Georg Hennig , 2009, 2010. -msgid "" -msgstr "" -"Project-Id-Version: frescobaldi 1.1.7\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-11-09 09:51+0100\n" -"PO-Revision-Date: 2010-12-12 12:34+0100\n" -"Last-Translator: Georg Hennig \n" -"Language-Team: German \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# de.po (frescobaldi 1.1.7) #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 1.1\n" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "LilyPond Musik-Editor" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Georg Hennig" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "georg.hennig@web.de" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Sitzung" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Starte neue Instanz" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Encoding" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Zeilennummer, beginnend mit 1" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Spalte, beginnend mit 0" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Versuche, intelligente Zeilen- und Spaltennummer zu benutzen" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "LilyPond-Dateien, können auch Textedit URLs sein" - -#: dummy.py:5 -msgid "&Insert" -msgstr "&Einfügen" - -#: dummy.py:6 -msgid "&Document" -msgstr "&Dokument" - -#: dummy.py:7 -msgid "&LilyPond" -msgstr "&LilyPond" - -#: dummy.py:8 -msgid "&Sessions" -msgstr "&Sitzung" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "Ton&lage" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "&Text" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "&Rhythmus" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "&Quell-Dokument" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "S&pezielle Werkzeuge" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "Gewidmet" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Titel" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Untertitel" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "zweiter Untertitel" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Instrument" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Komponist" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Arrangeur" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Dichter" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Metrum" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Stück" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Opus" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Copyright" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Tagline" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "Dur" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "Moll" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "Ionisch" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "Dorich" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "Phrygisch" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "Lydisch" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "Mixolydisch" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "Aeolisch" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "Lokrisch" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Artikulation" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Akzent" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Marcato" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Staccatissimo" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Staccato" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Portato" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Tenuto" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Ornamente" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Triller" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Pralltriller" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Mordent" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Doppelschlag" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "Doppelter Pralltriller" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "Pralltriller Mordent" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "Pralltriller aufwärts" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "Pralltriller abwärts" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "Mordent aufwärts" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "Mordent abwärts" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "Pralltriller aufwärts" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "Pralltriller abwärts" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "Pralltriller" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Umkehrung" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "Zeichen" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Fermate" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Kurze Fermate" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Lange Fermate" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Sehr lange Fermate" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Segno" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Varcoda" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "Signumcongruentiae" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Andere" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Oberbogen" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Unterbogen" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "Bartók-Pizzicato" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "Offen (z.B. Bläser)" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "Gestopft (z.B. Bläser)" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Flageolet" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Daumen" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Linke Ferse" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Rechte Ferse" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "Linke Fußspitze" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Rechte Fußspitze" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "Halb offen (z.B. Hi-Hat)" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Ein unbekannter Fehler ist aufgetreten:" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "Interner Fehler" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Fehlerbericht per Email senden..." - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "Beschreiben Sie, was Sie getan haben (optional):" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Linke Seitenleiste" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Rechte Seitenleiste" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Obere Seitenleiste" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Untere Seitenleiste" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "Andere Dokumente schließen" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Zeige Pfad" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Zeige Dokumenten-Reiter" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "Werkzeugansich&t" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "Neu..." - -#: ../python/kateshell/mainwindow.py:240 -msgid "Manage Sessions..." -msgstr "Sitzungen verwalten..." - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" -"Konnte den XMLGUI-Container \"%1\" nicht finden.\n" -"\n" -"Möglicherweise enthält die lokale ui.rc-Datei Fehler. Es wird empfohlen, " -"diese Datei zu löschen, weil Teile der Benutzeroberfläche fehlen werden. " -"Vollständiger Pfad der Datei:\n" -"\n" -"%2\n" - -#: ../python/kateshell/mainwindow.py:325 -msgid "No Session" -msgstr "Keine Sitzung" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Bitte wählen Sie zuerst Text aus." - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "geändert" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Zeile: %1 Spalte: %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "BLOCK" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Block-Auswahlmodus" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "ZEILE" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Zeilen-Auswahlmodus" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Alle Dateien" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Öffne Datei" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "Rechts klicken für Reiter-Optionen" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Verschiebe nach" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Entdocken" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "Konnte %1 nicht laden" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Bitte installieren Sie %1" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "Tastatur-Kurzbefehle festlegen" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "Knopf drücken um Tastatur-Kurzbefehle einzurichten für:" - -#: ../python/kateshell/sessions.py:41 -msgid "Manage Sessions" -msgstr "Sitzungen verwalten" - -#: ../python/kateshell/sessions.py:99 -msgid "Session" -msgstr "Sitzung" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "Eigenschaften dieser Sitzung" - -#: ../python/kateshell/sessions.py:105 -msgid "Name:" -msgstr "Name:" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "Immer die Liste der Dokumente in dieser Sitzung speichern" - -#: ../python/kateshell/sessions.py:115 -msgid "Base directory:" -msgstr "Basis-Verzeichnis:" - -#: ../python/kateshell/sessions.py:128 -msgid "Edit session: %1" -msgstr "Bearbeite Sitzung: %1" - -#: ../python/kateshell/sessions.py:135 -msgid "Edit new session" -msgstr "Neue Sitzung bearbeiten" - -#: ../python/kateshell/sessions.py:171 -msgid "Please enter a session name." -msgstr "Bitte Namen für die Sitzung eingeben." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "Bitte nicht den Namen '%1' benutzen." - -#: ../python/kateshell/sessions.py:187 -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "Bitte nicht das Zeichen 'Und' (&) in einem Sitzungsnamen verwenden." - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" -"Eine andere Sitzung mit dem Namen %1 existiert bereits.\n" -"\n" -"Wollen Sie sie überschreiben?" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "Öffne %1 in externem Betrachter" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "Spiele %1" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "(Keine aktuellen MIDI- oder PDF-Dateien verfügbar.)" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "" -"Es sind keine aktuellen MIDI- oder PDF-Dateien verfügbar. Bitte LilyPond " -"starten, umd eine oder mehr Ausgabe-Dateien zu erzeugen." - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "Es gibt keine Dateien, die via Email verschickt werden können." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "Keine Dateien zu verschicken" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" -"Es sind keine PDF-Dokumente zum Drucken verfügbar.\n" -"\n" -"Sie müssen möglicherweise LilyPond starten, um ein PDF-Dokument zu erzeugen " -"oder zu aktualisieren. Falls Sie MIDI-Dateien erzeugen, sorgen Sie dafür, " -"dass sich ein \"\\layout { }\"-Abschnitt in der Partitur befindet, " -"andernfalls wird LilyPond keine PDF-Datei erzeugen." - -#: ../python/frescobaldi_app/actions.py:146 -msgid "No files to print" -msgstr "Keine Dateien zu drucken" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "Email-Dokumente" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Bitte wählen Sie die Dateien aus, die Sie verschicken wollen:" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" -"Das sind die Dateien, die aktuell sind (also neuer als das LilyPond " -"Quellcode-Dokument). Es werden auch LilyPond-Dateien angezeigt, die vom " -"Quellcode eingebettet werden." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -"Diese PDF-Datei wurde mit Point-And-Click-URLs erstellt (im Vorschau-Modus), " -"was die Dateigröße stark erhöht. Es ist besser, die Datei ohne Point-And-" -"Click-URLs zu erstellen, weil die PDF-Datei dann kleiner ist." -msgstr[1] "" -"Diese PDF-Dateien wurden mit Point-And-Click-URLs erstellt (im Vorschau-" -"Modus), was die Dateigröße stark erhöht. Es ist besser, die Dateien ohne " -"Point-And-Click-URLs zu erstellen, weil die PDF-Dateien dann kleiner sind." -"fortfahren?" - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "" -"Bitte beachten: Falls keine PDF- und MIDI-Dateien existieren, müssen Sie " -"möglicherweise LilyPond starten, um diese Dateien zu aktualisieren, bevor " -"Sie das Email verschicken." - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "Alle auswählen" - -#: ../python/frescobaldi_app/actions.py:249 -msgid "Print documents" -msgstr "Dokumente drucken" - -#: ../python/frescobaldi_app/actions.py:252 -msgid "Please select the files you want to print:" -msgstr "Bitte wählen Sie die Dateien aus, die Sie drucken wollen:" - -#: ../python/frescobaldi_app/actions.py:256 -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" -"Das sind die PDF-Dateien, die aktuell sind (also neuer als das LilyPond " -"Quellcode-Dokument). Bitte die Dokumente auswählen, die Sie drucken wollen." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "Drucke %1" - -#: ../python/frescobaldi_app/actions.py:340 -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "Drucke 1 Datei" -msgstr[1] "Drucke %1 Dateien" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "" -"Auf Ihrem System konnte kein Druckbefehl (wie 'lpr' oder 'lp') gefunden " -"werden." - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "Der Befehl '%1' konnte auf Ihrem System nicht gefunden werden." - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" -"Der unten stehende Befehl wurde ausgeführt, wurde aber mit Rückgabewert %1 " -"beendet.\n" -"\n" -"%2" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "Erzeuge leeres Notenpapier" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "Art:" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "Aktion:" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "" -"Bitte wählen Sie aus, welche Art leerer Notenzeilen Sie erzeugen wollen." - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "Aktion auswählen, die ausgeführt wird, wenn \"Ok\" angeklickt wird." - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "Vorschau des leeren Notenpapiers anzeigen." - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "Anklicken für weitere Einstellungen." - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "Papier" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "Einstellungen" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Papier-Format:" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "Standard" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "Notenzeilen-Größe:" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "Gesamte Seitenzahl:" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Lösche Standard-Tagline" - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "Erzeuge Taktstriche" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "Takte pro Zeile:" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "Erzeuge Seitenzahlen" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "Beginne mit:" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "Vorschau des Papiers mit leeren Notenzeilen" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "PDF wurde nicht erzeugt." - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "Öffne im PDF-Betrachter" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "Speichere PDF unter..." - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "PDF-Dateien" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "Speichere PDF" - -#: ../python/frescobaldi_app/blankpaper.py:365 -msgid "Print..." -msgstr "Drucken..." - -#: ../python/frescobaldi_app/blankpaper.py:371 -msgid "Print staff paper" -msgstr "Drucke Notenpapier" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "Kopiere LilyPond-Code in den Editor" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "Notenzeilen pro Seite:" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "Schlüssel:" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "Einzelne Notenzeile" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "Systeme pro Seite:" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "Schlüssel" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "Klavier-Notenzeilen" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "Orgel-Notenzeilen" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "Notenzeilen pro System:" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "Schlüssel:" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" -"Geben Sie so viele Buchstaben (S, A, T oder B) wie es Notenzeilen gibt.\n" -"Benutzen Sie die \"Was ist das\"-Hilfe für weitere Informationen." - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" -"Um Schlüssel einzurichten, wählen Sie zuerst die Zahl der Notenzeilen pro " -"System. Dann geben Sie so viele Buchstaben (S, A, T oder B) ein wie es " -"Notenzeilen gibt.\n" -"\n" -"S oder A: Violinschlüssel,\n" -"T: Violinschlüssel mit einer \"8\" darunter,\n" -"B: Bassschlüssel\n" -"\n" -"Wenn Sie also eine Seite mit vierstimmigem gemischten Chor erzeugen wollen, " -"setzen Sie zuerst die Anzahl der Notenzeilen pro System auf 4. Dann geben " -"Sie \"SATB\" (ohne die Anführungsstriche) hier ein." - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "Chor-Notenzeilen" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Nichts" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "Eigene Notenzeilen" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "Notenzeile" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "Platz darunter:" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "Geschweifte Klammer" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "Runde Klammer" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "Eckige Klammer" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "Verbinde Taktstriche" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "Besondere Zeichen" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "unbekannt" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" -"Kann die angeforderte Übersetzung nicht durchführen.\n" -"\n" -"Die Musik enthält Viertelton-Schritte, die in der Tonlagensprache \"%1\" " -"nicht verfügbar sind." - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" -"Die Tonlagensprache des ausgewählten Textes wurde aktualisiert, Sie müssen " -"aber den folgenden Befehl zu Ihrem Dokument hinzufügen:" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "(für LilyPond älter als 2.14), oder" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "(für LilyPond 2.14 und neuer.)" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Sprache für Tonlagen" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "" -"Bitte geben Sie den Namen der Variable ein, der der ausgewählte Text " -"zugewiesen werden soll:" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Ausschneiden und zuweisen" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "Öffne %1" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "" -"Bitte Musik auswählen, die in << ... >> oder { ... } eingeschlossen ist." - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" -"Konnte die eingegebenen Tonarten nicht verstehen.\n" -"\n" -"Bitte benutzen Sie nur Tonartnamen in der Sprache \"%1\"." - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" -"Kann die angeforderte Transponierung nicht durchführen.\n" -"\n" -"Die transponierte Musik enthielte Viertelton-Schritte, die in der " -"Tondarstellung \"%1\" nicht verfügbar sind." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "Transponieren" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "Bitte geben Sie eine Start- und eine Ziel-Tonart ein:" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "Transponiere von:" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "nach:" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "Installieren" - -#: ../python/frescobaldi_app/download.py:56 -msgid "Download LilyPond" -msgstr "LilyPond herunterladen" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "" -"Mit diesem Werkzeug können Sie LilyPond als Pakete für Ihr Betriebssystem " -"herunterladen." - -#: ../python/frescobaldi_app/download.py:68 -msgid "Select the LilyPond version you want to download." -msgstr "" -"Bitte wählen Sie die LilyPond-Version aus, die Sie herunterladen wollen." - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Version:" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" -"Ein Verzeichnis mit Schreibzugriff auswählen, in das Sie LilyPond " -"installieren wollen.\n" -"(Ein Verzeichnis mit Versionsnummer wird in diesem Verzeichnis erzeugt.)" - -#: ../python/frescobaldi_app/download.py:81 -msgid "Install into:" -msgstr "Installiere nach:" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "Details" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "Die Website, auf der LilyPond-Pakete heruntergeladen werden können." - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "Herunterladen von:" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "Machinentyp:" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" -"Das ist die URL des Pakets, das heruntergeladen und installiert wird.\n" -"Sie können auch an anderen suchen, um ein LilyPond-Paket auszuwählen." - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "Paket-URL:" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "Lade Ordnerinhalt herunter..." - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "Keine Pakete gefunden. Sie können manuell ein Paket auswählen." - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "Neueste Entwicklerversion (%1)" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "Neueste stabile Version (%1)" - -#: ../python/frescobaldi_app/download.py:241 -msgid "Downloading %1..." -msgstr "Lade %1 herunter..." - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "Herunterladen abgebrochen." - -#: ../python/frescobaldi_app/download.py:263 -msgid "Download failed: %1" -msgstr "Herunterladen fehlgeschlagen: %1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" -"LilyPond %1 scheint bereits in %2 installiert zu sein.\n" -"\n" -"Wollen Sie es benutzen, oder entfernen und neu installieren?" - -#: ../python/frescobaldi_app/download.py:284 -msgid "Use existing LilyPond" -msgstr "Vorhandenes LilyPond benutzen" - -#: ../python/frescobaldi_app/download.py:285 -msgid "Remove and re-install" -msgstr "Entfernen und neu installieren" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "Entpacke %1..." - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "Entpacken beendet." - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -msgid "Unpacking failed." -msgstr "Entpacken fehlgeschlagen." - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "" -"Ein Fehler ist aufgetreten:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Erweiterungsmanager" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Suche..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "Name" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Beschreibung" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Verknüpfung" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" -"Das ist die Liste voreingestellter Erweiterungen.\n" -"\n" -"Klicken Sie auf eine Zeile um den verknüpften Text zu sehen oder um ihn zu " -"ändern. Doppelklicken Sie auf eine Verknüpfung oder ihre Beschreibung, um " -"sie zu ändern. Sie können auch F2 drücken, um die aktuelle Verknüpfung zu " -"bearbeiten.\n" -"\n" -"Benutzen Sie die Knöpfe unten, um Erweiterungen hinzuzufügen oder zu " -"entfernen.\n" -"\n" -"Erweiterungen können auf zwei Wegen benutzt werden: entweder das Kürzel im " -"Text eingeben und dann die Erweiterungs-Funktion aufrufen, oder einfach die " -"Erweiterung-Funktion aufrufen (Standard-Verknüpfung: Ctrl+.), die " -"Erweiterung aus der Liste auswählen und Enter oder OK anklicken." - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" -"Dieser Text ist mit dem ausgewählten Kürzel verknüpft. Einige Buchstaben " -"haben besondere Bedeutung:" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "Den Cursor an diesem Punkt plazieren." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Verschiebe die folgende Tonlage." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Neues Objekt" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"Eine andere Erweiterung benutzt bereits diesen Namen.\n" -"\n" -"Bitte benutzen Sie einen anderen Namen." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "" -"Benutzen Sie bitte nur Buchstaben, Zahlen und Unterstriche im Namen für die " -"Erweiterung." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "Bitte lassen Sie diese Beschreibung nicht leer." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" -"Konnte kein Wörterbuch für Silbentrennung finden.\n" -"\n" -"Bitte installieren Sie eines, und/oder richten Sie den Such-Pfad von " -"Frescobaldi entsprechend ein (unter Einstellungen, \"Pfade\")." - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Trennungsstriche für Text einfügen" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Bitte wählen Sie eine Sprache:" - -#: ../python/frescobaldi_app/kmid.py:68 -msgid "Pause" -msgstr "Pause" - -#: ../python/frescobaldi_app/kmid.py:85 -msgid "Volume" -msgstr "Band" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "Nach Hause" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "Größerer Text" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "Kleinerer Text" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "Erste Seite:" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Vorherige" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "Eine Stufe nach oben" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Nächste" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "Inhaltsverzeichnis" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "Index" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Kopiere L&ink" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Öffne Link in &neuem Fenster" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Kopieren" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Öffne Dokument in N&euem Fenster" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "Lade..." - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "Nicht verfügbar" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "Notationsreferenz" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "LilyPond-Befehlsindex" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "Anleitung für Einsteiger" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "Index der Anleitung für Einsteiger" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -msgid "Internals Reference" -msgstr "Interne Referenz" - -#: ../python/frescobaldi_app/lilydoc.py:877 -msgid "The %1 context" -msgstr "Der %1-Kontext" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "Das %1-Layout-Objekt" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "LilyPond-&Hilfe" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Richtung:" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Oben" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Neutral" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Unten" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "" -"Wo Artikulationen usw. hinzuzufügen sind: über oder unter der Zeile oder an " -"der Standard-Position." - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "Richte Tastatur-Kurzbefehl ein (%1)" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Artikulationszeichen" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Unterschiedliche Artikulationszeichen und andere Zeichen." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Artikulationszeichen anklicken, um es dem Dokument hinzuzufügen." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" -"Wenn Sie zuerst einige Noten auswählen, wird das Artikulationszeichen zu " -"allen Noten in der Auswahl hinzugefügt." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Erlaube Kürzel" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "Benutze kurze Notation für einige Artikulationszeichen wie Staccato." - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "Dynamik" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "Dynamik-Symbole." - -#: ../python/frescobaldi_app/lqi.py:267 -msgid "Click a dynamic sign to add it to your document." -msgstr "Dynamikzeichen anklicken, um es dem Dokument hinzuzufügen." - -#: ../python/frescobaldi_app/lqi.py:268 -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "" -"Wenn Sie zuerst einige Noten auswählen, werden dynamische Strecker zu diesem " -"Notenfragment hinzugefügt." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "" -"Falls Sie einige Noten ausgewählt haben und auf ein Zeichen nach dem " -"Strecker klicken, wird dieses Zeichen den Strecker beenden." - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "Dynamikzeichen %1" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "Strecker" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "Haarnadel-Crescendo" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "Crescendo" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "Haarnadel-Diminuendo" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "Diminuendo" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "Decrescendo" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -msgid "Bar Lines" -msgstr "T&aktstriche" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "Taktstriche, Atemzeichen, usw." - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Doppelter Taktstrich" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "Schlussstrich" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "Gepunkteter Taktstrich" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "Gestrichelter Taktstrich" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Unsichtbarer Taktstrich" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "Wiederholungsanfang" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "Wiederhole beide" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "Wiederholungsende" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "Wiederhole beide (alt)" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "Wiederhole beide (klassisch)" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "Häkchen-Taktstrich" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "Einzelner Taktstrich" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "Schmaler-breiter-schmaler Taktstrich" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "Breiter-schmaler Taktstrich" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "Taktstrich doppelter Breite" - -#: ../python/frescobaldi_app/lqi.py:354 -msgid "Segno bar line" -msgstr "Segno-Taktstrich" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "Atemzeichen" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "Standard-Atemzeichen" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "Gerades Atemzeichen" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "Gebogene Zäsur" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "Gerade Zäsur" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "Bindebögen, Strecker, usw." - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "Für diese Strecker muss ein Musikabschnitt ausgewählt sein." - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "Bindebogen" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "Phrasierungsbogen" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "Balken" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "Arpeggios" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "Arpeggios werden mit Akkorden mit mehreren Noten benutzt." - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "Arpeggio" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "Arpeggio mit Pfeil nach oben" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "Arpeggio mit Pfeil nach unten" - -#: ../python/frescobaldi_app/lqi.py:445 -msgid "Bracket Arpeggio" -msgstr "Eckige-Klammer-Arpeggio" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "Runde-Klammer-Arpeggio" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "Glissandos" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "" -"Glissandos are attached to a note and automatically extend to the next note." -msgstr "" -"Glissandos werden an eine Note angefügt und automatisch zur nächsten Note " -"verlängert." - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "Glissando" - -#: ../python/frescobaldi_app/lqi.py:466 -msgid "Dashed Glissando" -msgstr "Gestricheltes Glissando" - -#: ../python/frescobaldi_app/lqi.py:467 -msgid "Dotted Glissando" -msgstr "Gepunktetes Glissando" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "Zickzack-Glissando" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "Glissando mit Triller" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "LilyPond-Dateien" - -#: ../python/frescobaldi_app/mainapp.py:170 -msgid "Print Source..." -msgstr "Quelltext drucken..." - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Neue Partitur vorbereiten..." - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "Starte LilyPond (Vorschau)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "Starte LilyPond (Veröffentlichung)" - -#: ../python/frescobaldi_app/mainapp.py:488 -msgid "Run LilyPond (custom)..." -msgstr "Starte LilyPond (eigene Einstellung)" - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "Unterbreche LilyPond-Job" - -#: ../python/frescobaldi_app/mainapp.py:502 -msgid "Print Music..." -msgstr "Musik drucken..." - -#: ../python/frescobaldi_app/mainapp.py:508 -msgid "Email Documents..." -msgstr "Email-Dokumente..." - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "Schneide Auswahl aus und weise sie einer LilyPond-Variable zu." - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Wiederhole letzte Note oder Akkord" - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Wiederhole den letzten musikalischen Ausdruck (Note oder Akkord)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "Erweiterungen einfügen oder verwalten..." - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Erweitere das letzte Wort oder öffne den Erweiterungsdialog." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "Besondere Zeichen..." - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "Füge besondere Zeichen ein." - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "Zu Erweiterungen hinzufügen" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Nächste Leerzeile" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Gehe zur nächsten leeren Zeile." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Vorherige Leerzeile" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Gehe zur vorherigen leeren Zeile." - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "Wähle nächste Leerzeile aus" - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "" -"Wähle Text von der aktuellen Position einschließlich bis zur nächsten " -"Leerzeile aus." - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "Wähle vorherige Leerzeile aus" - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "" -"Wähle den Text von der aktuellen Position hinauf einschließlich bis zur " -"nächsten vorherigen Leerzeile aus." - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "Verschiebe Auswahl zur nächsten Leerzeile" - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "Verschiebe ausgewählten Block zur nächsten Leerzeile." - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "Verschiebe Auswahl zur vorherigen Leerzeile" - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "Verschiebe ausgewählten Block zur vorherigen Leerzeile." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "Abspielen/Anzeigen" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "" -"Ändere die LilyPond-Sprache, die für die Tonlagen in diesem Dokument oder in " -"der Auswahl benutzt werden soll." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "Wandle relative in a&bsolute Tonhöhen um" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" -"Wandle die Noten im ganzen Dokument oder der Auswahl von relativen in " -"absolute Tonhöhen um." - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "Wandle absolute in re&lative Tonhöhen um" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "" -"Wandelt die Noten im gesamten Dokument oder in der Auswahl von absoluten zu " -"relativen Tonhöhen." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "Transponieren..." - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "Transponiere alle Noten im gesamten Dokument oder der Auswahl." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Notenlängen verdoppeln" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Verdopple alle Notenlängen in der Auswahl." - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Notenlängen halbieren" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Halbiere alle Notenlängen in der Auswahl." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Notenlängen punktieren" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Alle Notenlängen in der Auswahl punktieren." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Punktierung aller Notenlängen entfernen" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Entferne Punktierung von allen Werten der Auswahl." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Entferne Skalierung" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "Entferne alle Normierungen (*n/m) von den Notenlängen in der Auswahl." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Notenlängen entfernen" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "Entferne alle Notenlängen der Auswahl." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Implizit machen" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "Gib Notenlängen implizit an (wiederholte Werte entfernen)." - -#: ../python/frescobaldi_app/mainapp.py:713 -msgid "Make implicit (per line)" -msgstr "Implizit machen (pro Zeile)" - -#: ../python/frescobaldi_app/mainapp.py:714 -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "" -"Notenlängen implizit angeben (wiederholte Werte entfernen), außer für die " -"erste Notenlänge pro Zeile." - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Explizit machen" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "" -"Gib Notenlängen explizit an (der Note wird auch dann eine Länge zugeordnet, " -"wenn es die gleiche ist wie die vorhergehende)." - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Rhytmus anwenden..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Wende den eingegebenen Rhythmus auf die ausgewählte Musik an." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Rhytmus kopieren" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Kopiere den Rhythmus der ausgewählten Musik." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Rhythmus einfügen" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Füge Rhythmus in die ausgewählte Musik ein." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Entferne Trennungsstriche" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "Kopiere Text ohne Silbentrennzeichen" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Einfache Anführungsstriche" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Doppelte Anführungszeichen" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Ausrichten" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "Füge LilyPond-Version ein" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "Mittels convert-ly aktualisieren" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Öffne aktuellen Ordner" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "Wiederhole ausgewählte Musik" - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "Füge Klammern-Paar ein" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" -"Ihr Dokument wurde verändert und muss gespeichert werden, bevor LilyPond " -"gestartet werden kann.\n" -"\n" -"Das Dokument jetzt speichern?" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "Es läuft bereits ein LilyPond-Job für dieses Dokument." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "Kann Dokument nicht verarbeiten" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "Trotzdem fortfahren?" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "" -"Sie wollen LilyPond im Vorschau-Modus starten (mit \"Point and Click\"), " -"aber Ihr Dokument enthält einen Befehl, der \"Point and Click\" abschaltet." - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" -"Sie wollen LilyPond im Veröffentlichungs-Modus starten (ohne \"Point and " -"Click\"), aber Ihr Dokument enthält einen Befehl, der \"Point and Click\" " -"anschaltet." - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Breche den laufenden LilyPond-Prozess ab" - -#: ../python/frescobaldi_app/mainapp.py:917 -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "" -"Starte LilyPond im Vorschau-Modus (Umschalten + Klicken für speziellen " -"Dialog)" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Schnell einfügen" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "LilyPond hat %1 erfolgreich kompiliert." - -#: ../python/frescobaldi_app/mainapp.py:956 -msgid "LilyPond exited with an error compiling %1." -msgstr "LilyPond wurde beim Kompilieren von %1 mit Fehler beendet." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Rhythmus anwenden" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Rhythmus eingeben:" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "" -"Rhythmus mit von Leerzeichen getrennten Werten eingeben (z.B. 8. 16 8 4 8)" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Terminal" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "S&ynchronisiere Terminal mit aktuellem Dokument" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "MIDI-Player" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" -"Konte KMid-Part nicht laden.\n" -"Bitte KMid 2.4.0 oder neuer installieren." - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "PDF-Vorschau" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "Zeige PDF-Navigationspanel" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "Zeige PDF-Minipager" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Konfiguriere Okular..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "S&ynchronisiere Vorschau mit aktuellem Dokument" - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "Neu laden" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "LilyPond-Log" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "Kein Log" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "Zeige nur bei aufgetretenen Fehlern" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "LilyPond-Dokumentation" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" -"Das Metrum. 'Auto' lässt Frescobaldi das Metrum aus dem LilyPond-Dokument " -"bestimmen." - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Quantisiere:" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "Kürzester zu benutzender Notenwert." - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Schritt" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Nehme LilyPond-Input Note für Note auf, ohne Notenlängen." - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Mono" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Nehme einstimmig auf, ohne Akkorde." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" -"Anzahl der Vorzeichen. Negative Nummern bedeuten Bs. 'Auto' lässt " -"Frescobaldi die Vorzeichen aus dem LilyPond-Dokument bestimmen." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Tempo:" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Metrum:" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Tonart:" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Konfiguriere..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "Mehr Einstellungen, wie z.B. MIDI-Eingang und -Ausgabe." - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Speichern" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Speichere diese Einstellungen als Standard-Einstellung." - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Rumor Version %1 gefunden." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "Konnte Rumor nicht finden: %1" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "Voreinstellungen wurden gespeichert." - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Aufnahme" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Starte oder stoppe Rumor MIDI-Aufnahme." - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Rumor nimmt auf, drücken Sie ESC zum Stoppen." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor angehalten." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "Starte oder stoppe den TiMidity-ALSA-MIDI-Client." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Rumor Voreinstellungen" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "OSS-Gerät %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Keyboard" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "MIDI-Eingang:" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" -"Zu benutzende MIDI-Quelle. Wählen Sie 'Keyboard', wenn Sie auf der Tastatur " -"ihres Rechners spielen möchten." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "MIDI-Ausgabe:" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "Zu benutzende MIDI-Ausgabe." - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Sprache:" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "Die LilyPond-Sprache, in der Rumor die Tonstufen ausgeben soll." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Explizite Notenlängen" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" -"Die Notenlänge nach jeder Note einfügen, auch wenn es die selbe ist wie die " -"vorhergehende." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Absolute Tonlage" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "Benutze alsolute Tonhöhen statt relativer." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Keine Taktstriche" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Filtere die Taktstriche aus der Ausgabe von Rumor." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Keine Punktierung" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "Benutze keine punktierten Noten sondern Bindebögen." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Legato" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "Benutze keine Pausen, sondern gib allen Noten die maximale Länge." - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Pausen abschneiden" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Schneide Pausen am Anfang und am Ende ab." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Guile-Scripts, die geladen werden sollen:" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "" -"Hier können Sie auswählen, welche Guile-Skripte von Rumor geladen werden " -"sollen. Siehe auch \"Was ist das\" für mehr Informationen." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" -"Hier können Sie auswählen, welche Guile-Skripte von Rumor geladen werden " -"sollen. Sie können Ihre eigenen Skripte hinzufügen, indem Sie sie in %1 " -"angeben. Wenn die erste Zeile Ihres Skripts mit einem Semicolor (;) startet, " -"wird die Zeile als Beschreibung hergenommen." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "Auto" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "Vorschau-Modus" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "Veröffentlichungs-Modus" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "LilyPond %1 [%2] startet (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "LilyPond [%1] startet (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "LilyPond [%1] wurde mit dem Return-Code %2 beendet." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "LilyPond [%1] wurde mit dem Exit-Status %2 beendet." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] ist fertig (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "" -"Konnte LilyPond nicht starten. Bitte überprüfen Sie Pfad und Berechtigungen." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "Konnte Ausgabe des LilyPond-Prozesses nicht lesen." - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Ein unbekannter Fehler ist aufgetreten." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -msgid "Run LilyPond" -msgstr "LilyPond starten" - -#: ../python/frescobaldi_app/runlily.py:257 -msgid "Select which LilyPond version you want to run:" -msgstr "Bitte LilyPond-Version auswählen, die Sie starten wollen:" - -#: ../python/frescobaldi_app/runlily.py:265 -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "LilyPond im Vorschau-Modus starten (mit \"Point and Click\")" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "LilyPond mit geschwätziger Ausgabe starten" - -#: ../python/frescobaldi_app/runlily.py:310 -msgid "Command" -msgstr "Befehl" - -#: ../python/frescobaldi_app/runlily.py:317 -msgid "LilyPond %1" -msgstr "LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:318 -msgid "Use LilyPond version %1" -msgstr "Benutze LilyPond-Version %1" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -msgid "default" -msgstr "Standard" - -#: ../python/frescobaldi_app/runlily.py:322 -msgid "Default LilyPond Version." -msgstr "Standard-LilyPond-Version" - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "automatisch" - -#: ../python/frescobaldi_app/runlily.py:325 -msgid "Automatic LilyPond Version (determined from document)." -msgstr "Automatische LilyPond-Version (bestimmt aus dem Dokument)." - -#: ../python/frescobaldi_app/runlily.py:330 -msgid "Path: %1" -msgstr "Pfad: %1" - -#: ../python/frescobaldi_app/runlily.py:334 -msgid "LilyPond (version unknown)" -msgstr "LilyPond (Version unbekannt)" - -#: ../python/frescobaldi_app/runlily.py:335 -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "" -"Benutze LilyPond (Version unbekannt)\n" -"Pfad: %1" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Klicken, um Datei zu bearbeiten" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "Speichere LilyPond-Log unter" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"Konnte LilyPond-Log nicht speichern:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -msgid "LilyPond-related settings" -msgstr "Einstellungen zu LilyPond" - -#: ../python/frescobaldi_app/sessions.py:44 -msgid "LilyPond version to use:" -msgstr "Zu nutzende LilyPond-Version:" - -#: ../python/frescobaldi_app/sessions.py:48 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" -"Hier können Sie eine feste LilyPond-Version auswählen, die für Dokumente in " -"dieser Sitzung benutzt wird.\n" -"Siehe \"Was ist das?\"-Hilfe (Umschalten + F1) für mehr Informationen." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" -"Hier können Sie eine feste LilyPond-Version auswählen, die für Dokumente in " -"dieser Sitzung benutzt wird.\n" -"\n" -"Die ausgewählte LilyPond-Version wird standardmäßig für Ihre Dokumente " -"benutzt, und wird auch beim \"Versionsnummer einfügen\"-Befehl benutzt." - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Konfigurieren" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Allgemeine Einstellungen" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Allgemeine Einstellungen von Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -msgid "LilyPond Preferences" -msgstr "LilyPond-Einstellungen" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Pfade" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Pfade zu den Programmen oder Daten, die von Frescobaldi benutzt werden" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "Rumor-MIDI-Eingang" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Einstellungen für Rumor-MIDI-Eingabe-Plugin" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Editor-Komponente" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Einstellungen der Editor-Komponente" - -#: ../python/frescobaldi_app/settings.py:298 -msgid "Running LilyPond" -msgstr "LilyPond starten" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "Erlaube LilyPond, die temporären Output-Dateien zu löschen" - -#: ../python/frescobaldi_app/settings.py:310 -msgid "LilyPond include path:" -msgstr "LilyPond-Include-Verzeichnis:" - -#: ../python/frescobaldi_app/settings.py:336 -msgid "When saving documents" -msgstr "Speichern von Dokumenten" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "Speichere Cursor-Positionen, Bookmarks, usw." - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Standard-Verzeichnis:" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "Der Standard-Ordner der LilyPond-Dokumente (optional)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "" -"Die LilyPond-Versionsnummer, die für neue Dokumente benutzt werden soll" - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Benutze Versionsnummer der LilyPond-Installation" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Benutze Versionsnummer der letzten convert-ly Regel" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Benutze eigene Versionsnummer:" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Eine gültige LilyPond-Versionsnummer eingeben, z.B. 2.12.0" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "Warnungen und Benachrichtigungen" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "" -"Warnen, wenn ein Dokument einen Konflikt bei der \"Point and Click\"-" -"Einstellung enthält" - -#: ../python/frescobaldi_app/settings.py:438 -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "" -"Warne, wenn ein Dokument gespeichert werden muss, bevor LilyPond ausgeführt " -"wird" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "" -"Warne, wenn das Speichern einer Sitzung eine andere überschreiben würde" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "\"Point and Click\"" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "\"Point and Click\" anschalten" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "" -"Diesen Knopf drücken, falls \"Point and Click\" nicht funktioniert. Siehe " -"\"Was ist das?\"-Hilfe (Umschalten + F1) für mehr Informationen." - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside " -"Okular. This works best when all instances of Okular are closed and the PDF " -"preview has not yet been opened." -msgstr "" -"Beim ersten Start versucht Frescobaldi, Okuklar (das für die PDF-Vorschau " -"zuständig ist) automatisch zu konfigurieren, so dass Frescobaldi aufgerufen " -"wird, wenn ein klickbares Objekt angeklickt wird.\n" -"\n" -"Wenn Sie Frescobaldi in einen anderen Ordner verschieben oder Okular von " -"anderen Programmen neu konfiguriert wird, geht diese Konfiguration " -"verloren.\n" -"\n" -"Klicken Sie diesen Knopf, um Frescobaldi als 'nutzerspezifischen Editor' " -"innerhalb von Okular einzurichten. Das funktioniert am besten, wenn alle " -"Instanzen von Okular geschlossen sind und die PDF-Vorschau noch nicht " -"geöffnet wurde." - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" -"Die Einstellungen zur Okular-PDF-Vorschau wurden geändert.\n" -"\n" -"Falls Sie die PDF-Vorschau bereits geöffnet haben, starten Sie Frescobaldi " -"neu, um die neuen Einstellungen zu übernehmen." - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "Hilfsprogramme" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "PDF-Betrachter:" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "PDF-Betrachter" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "(leer lassen für Standardeinstellung des Betriebssystems)" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "MIDI-Player:" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "URL:" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "URL oder Pfad zur LilyPond-Dokumentation." - -#: ../python/frescobaldi_app/settings.py:563 -msgid "Lyrics Hyphenation" -msgstr "Text-Silbentrennung" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" -"Orte, an denen nach Silbentrennungswörterbüchern (Hyphenation) von " -"OpenOffice.org, Scribus, KOffice, etc, gesucht werden soll, je einer pro " -"Zeile. Wenn Sie den Schrägstrich am Anfang weglassen, werden die Pfade aus " -"der KDEDIRS-Variable benutzt." - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Befehle, die vom Rumor-MIDI-Eingabe-Modul benutzt werden" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Name oder vollständiger Pfad des Programms Rumor." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" -"Name oder vollständiger Pfad des Programms aconnect (Teil von ALSA, für MIDI-" -"Input und Abspielen mit Rumor)." - -#: ../python/frescobaldi_app/settings.py:615 -msgid "" -"Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" -"Vollständiger Befehl zum Starten von Timidity (oder einem anderen Programm) " -"als ALSA-MIDI-Client." - -#: ../python/frescobaldi_app/settings.py:648 -msgid "LilyPond versions to use:" -msgstr "Zu nutzende LilyPond-Versionen:" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "" -"Enable automatic version selection (choose LilyPond version from document)" -msgstr "" -"Automatische Versionserkennung aktivieren (bestimme LilyPond-Version aus dem " -"Dokument)" - -#: ../python/frescobaldi_app/settings.py:710 -msgid "Document Tabs" -msgstr "Dokumenten-Reiter" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "Schließen-Knopf" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "Große Dokumenten-Reiter" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "Reiter können verschoben werden" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "Convert-ly:" - -#: ../python/frescobaldi_app/settings.py:778 -msgid "Lilypond-book:" -msgstr "LilyPond-Buch:" - -#: ../python/frescobaldi_app/settings.py:809 -msgid "Path" -msgstr "Pfad" - -#: ../python/frescobaldi_app/settings.py:810 -msgid "Version" -msgstr "Version" - -#: ../python/frescobaldi_app/settings.py:813 -msgid "Can't determine LilyPond version." -msgstr "Kann LilyPond-Version nicht bestimmen." - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "Herunterladen..." - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "Neue LilyPond-Pakete herunterladen." - -#: ../python/frescobaldi_app/settings.py:842 -msgid "LilyPond Command:" -msgstr "LilyPond-Befehl:" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "Name oder vollständiger Pfad des LilyPond-Programms." - -#: ../python/frescobaldi_app/settings.py:847 -msgid "LilyPond Command" -msgstr "LilyPond-Befehl" - -#: ../python/frescobaldi_app/settings.py:860 -msgid "Set as default" -msgstr "Als Standardeinstellung speichern" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "In automatische Versionsauswahl einschließen" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "" -"Sitzung, die geladen wird, wenn Frescobaldi ohne Argumente gestarted wird" - -#: ../python/frescobaldi_app/settings.py:903 -msgid "Start with no session" -msgstr "Starte ohne Sitzung" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "Starte mit zuletzt geöffneter Sitzung" - -#: ../python/frescobaldi_app/settings.py:905 -msgid "Start with session:" -msgstr "Starte mit Sitzung:" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "Eine Sitzung auswählen." - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "Auswählen..." - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "Die LilyPond-Version Ihres Dokuments ist bereits festgelegt." - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "Version bereits festgelegt" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "" -"Konnte die LilyPond-Version nicht entdecken. Bitte kontrollieren Sie Ihre " -"Installation." - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" -"Konnte die LilyPond-Version nicht entdecken. Bitte fügen Sie eine \\version " -"Deklaration mit der korrekten Version hinzu." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "Dieses LilyPond-Dokument ist bereits auf dem neuesten Stand." - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" -"Das Dokument wurde mit convert-ly verarbeitet. Sie finden die Meldungen von " -"convert-ly in einem Kommentar-Block am Ende. Sie müssen vielleicht noch " -"einige Teile manuell bearbeiten." - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" -"Das Dokument wurde mit convert-ly verarbeitet, blieb aber unverändert. Das " -"ist die Meldung von convert-ly: %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "Konnte convert-ly nicht starten: %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Tap" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Klicken Sie auf diesen Knopf, um das Tempo einzustellen." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "Das Tempo in BPM (beats per minute)." - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "Sopran" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Alt" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Tenor" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "Sopran 8" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Bass" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Schlagzeug" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "Tab-Schlüssel" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "Kein Schlüssel" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Assistent zum Erstellen einer Partitur" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Titel und Kopfzeilen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Klicken, um Wert einzugeben." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "Fußzeile der ersten Seite" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "Fußzeile der letzten Seite" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Teile" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Verfügbare Teile:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Füge ausgewählten Teil der Partitur hinzu." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Partitur:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Partitur-Einstellungen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Allgemeine Einstellungen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Instrumentennamen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Tonart:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Taktart:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Auftakt:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Metronom-Markierung:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Tempo-Bezeichnung:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Eine Tempo-Bezeichnung, z.B. \"Allegro.\"" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Sprache für die Name der Tonlagenn:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "Die LilyPond-Sprache für die Namen der Tonlagen." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "Die LilyPond-Version für dieses Dokument." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Benutze typografische Anführungszeichen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "" -"Ersetze normale Anführungszeichen in Titeln durch schöne typografische." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Unterdrücke LilyPond-Standard-Tagline." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Lösche Taktzahlen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "" -"Suppress the display of measure numbers at the beginning of every system." -msgstr "Unterdrücke Taktzahlen am Anfang jedes Systems." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "MIDI-Ausgabe erstellen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "Zusätzlich zum PDF eine MIDI-Datei erstellen." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Metronom-Markierung anzeigen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" -"Wenn ausgewählt, Metronom-Markierung am Anfang der Partitur anzeigen. Die " -"MIDI-Ausgabe nutzt ebenfalls die Mentronom-Einstellungen." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "Partitur in einen \\book-Block einbetten" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "" -"Falls aktiviert, wird der \\score-Block in einen \\book-Block eingebettet." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Quer" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "Erstes System:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Lang" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Kurz" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "Benutze lange oder kurze Instrumentennamen vor dem ersten System." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Andere Systeme:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "" -"Füge kurze, lange oder keine Instrumentennamen vor dem nächsten System ein." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "Welche Sprache für die Instrumentennamen benutzt werden sollen." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Voreingestellte LilyPond-Tagline entfernen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "Keine Einstellungen vorhanden." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Stimmen:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "Wie viele Stimmen in diese Notenzeile gehören." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "Musik folgt hier." - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Notenzeilen-Typ:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Normale Notenzeilen" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Tabulatur" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Beides" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Stimmung:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "Text folgt hier." - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Strophen:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Die Anzahl der Strophen." - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Tonumfang" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "Zeige den Tonumfang jeder Stimme am Anfang jedes Systems." - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Passen Sie die Anzahl separater Stimmen pro Zeile an." - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "" -"Das ist vor allem dann nützlich, wenn Sie polyphone Musik schreiben, wie z." -"B. eine Fuge." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Rechte Hand:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Linke Hand:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Akkord-Namen" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "Akkorde folgen hier." - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Akkord-Stil:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "Deutsch" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "Halb-Deutsch" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "Italienisch" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "Französisch" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Gitarren-Bund-Diagramme" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" -"Zeige voreingestellte Gitarren-Bund-Diagramme unter den Akkord-Namen " -"(LilyPond 2.12 und neuer)." - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Firgurierter Bass" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "Figur folgt hier." - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "Benutzer erweiterte Linien" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Violine" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Violine|Vl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Bratsche" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Bratsche|Bra." - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Cello" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Cello|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Konrabass" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Kontrabass|Kb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Basso Continuo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Basso Continuo|B.C." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Mandoline" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandoline|Mdl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Mandoline-Stimmung" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Banjo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Banjo|Bj." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "Offene G-Stimmung (aDGBD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "C-Stimmung (gCGBD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "Modale Stimmung (gDGCD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "Offene D-Stimmung (aDF#AD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "Offene D-moll-Stimmung (aDFAD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Vier Streicher (statt fünf)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Klassische Gitarre" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Gitarre|Gt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Gitarren-Stimmung" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "Offene G-Stimmung" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Jazz-Gitarre" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Jazz-Gitarre|J.Gt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Bass|Bs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "Bas- Stimmung" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Elektrischer Bass" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Elektrischer Bass|E.Bs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Harfe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Harfe|Hf." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "Obere Notenzeile:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "Untere Notenzeile:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Flöte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Flöte|Fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Piccolo-Flöte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Piccolo-Flöte|Pic." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Bass-Flöte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Bass-Flöte|Bfl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Oboe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Oboe|Ob." - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Oboe d'Amore" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Oboe d'amore|Ob.d'am." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "English Horn" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "English horn|Eng.h." - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Fagott" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Fagott|Fg." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Kontra-Fagott" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Kontra-Fagott|K.Fg." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Klarinette" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Klarinette|Kl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Sopranino Saxophon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Sopranino Saxophon|SiSax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Sopransaxophon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Sopransaxophon|SoSax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Altsaxophon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Altsaxophon|ASax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Tenorsaxophon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Tenorsaxophon|TSax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Baritonsaxophon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Baritonsaxophon|BSax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Basssaxophon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Basssaxophon|BsSax." - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Sopran-Blockflöte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Sopran-Blockflöte|S.Bl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Alt-Blocklöte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Alt-Blockflöte|A.Bl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Tenor-Blockflöte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Tenor-Blockflöte|T.Bl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Bass-Blockflöte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Bass-Blockflöte|B.Bl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Horn in F" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Horn in F|Hn.F." - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Trompete in C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Trompete in C|Tr.C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Trompete in B" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Trompete in B|Tr.B" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Posaune" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Posaune|Pos." - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Bass Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Bass Tuba|B.Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Sopran" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Sopran|S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Mezzosopran" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzosopran|Ms." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Alt|A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Tenor|T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Bass|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Leadsheet" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" -"Das erste Blatt hat eine Zeile mit Akkord-Namen darüber und Text drunter. " -"Eine zweite Zeile ist optional." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Zeile für Begleitung hinzufügen" - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" -"Fügt eine Zeile für die Begleitung hinzu und ebenso eine Begleitstimme in " -"der oberen Zeile." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Chor" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" -"Bitte wählen Sie die Stimmen für den Chor aus. Benutzen Sie die Buchstaben " -"S, A, T, oder B. Ein Bindestrich markiert eine neue Zeile." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "Tipp: Für einen Doppelchor können Sie zwei Chorteile einrichten." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Stimmen:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -msgid "Lyrics:" -msgstr "Text:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Alle Stimmen mit gleichem Text" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -msgid "A set of the same lyrics is placed between all staves." -msgstr "Ein Set gleichen Textes wird zwischen allen Notenzeilen plaziert." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Jede Stimme mit gleichem Text" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "" -"Every voice gets its own lyrics, using the same text as the other voices." -msgstr "" -"Jede Stimme hat ihren eigenen Text, benutzt aber den selben Text wie die " -"anderen Stimmen." - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Jede Stimme mit unterschiedlichem Text" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Jede Stimme hat ein unterschiedliches Set Textes." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "Strophen verteilen" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -msgid "One set of stanzas is distributed across the staves." -msgstr "Ein Set von Strophen wird über alle Notenzeilen verteilt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "Klavierauszug" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "Fügt einen automatisch erzeugten Klavierauszug hinzu." - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "MIDI-Dateien zum Proben" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "" -"Erzeugt eine MIDI-Datei für jede Stimme, selbst wenn keine MIDI-Ausgabe der " -"Hauptpartitur erzeugt wird." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Chor|Ch." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "MIDI-Dateien zum Proben:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Klavier" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Klavier|Klav." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Harfe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Harfe|Hrf." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Spinnett" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Spinnett|Spin." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Orgel" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Orgel|Org." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Pedal:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Auf 0 setzen, um das Pedal abzuschalten." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Celesta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Celesta|Cel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Pauken" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Pauken|Pk." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Xylofon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Xylofon|Xyl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Marimba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Vibrafon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Vibrafon|Vib." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Röhrenglocken" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Röhrenglocken|Röh." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Glockenspiel" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Glockenspiel|Gls." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Schlagzeug" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Schlagzeug|Schl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "Schlagzeug folgt hier." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "Halte etwas Abstand." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Stil:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Schlagzeug (5 Linien, Voreinstellung)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Kesselpauken-Stil (2 Linien)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Conga-Stil (2 Linien)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Bongo-Stil (2 Linien)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Percussion-Stil (1 Linie)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Entferne Notenhälse" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Entferne Notenhälse von den Schlagzeugnoten." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Streicher" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Gezupfte Streicher" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Holzbläser" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Bläser" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "Vokal" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Tasteninstrumente" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Spezial" - -#~ msgid "Open PDF" -#~ msgstr "Öffne PDF" - -#~ msgid "Print" -#~ msgstr "Drucken" - -#~ msgid "Play MIDI" -#~ msgstr "Spiele MIDI" - -#~ msgid "Email..." -#~ msgstr "Email..." - -#~ msgid "Disable the built-in PDF preview" -#~ msgstr "Schalte eingebettete PDF-Vorschau ab" - -#~ msgid "The direction to use for the articulations." -#~ msgstr "Die Richtung für die Artikulationszeichen." - -#~ msgid "&Generated Files" -#~ msgstr "Erzeu>e Dateien" - -#~ msgid "Your document has been modified, please save first." -#~ msgstr "Ihr Dokument wurde verändert, bitte speichern Sie es zuerst ab." - -#~ msgid "LilyPond documentation:" -#~ msgstr "LilyPond-Dokumentation:" - -#~ msgid "The document has been sent to the printer." -#~ msgstr "Das Dokument wurde zum Drucker geschickt." - -#~ msgid "" -#~ "Printing failed: %1\n" -#~ "\n" -#~ "The print command %2 does probably not exist. Please check your settings." -#~ msgstr "" -#~ "Drucken fehlgeschlagen: %1\n" -#~ "\n" -#~ "Der Druckbefehl %2 existiert vielleicht nicht. Bitte überprüfen Sie die " -#~ "Einstellungen." - -#~ msgid "The print command contains errors. Please check your settings." -#~ msgstr "" -#~ "Der Druckbefehl ist fehlerhaft. Bitte überprüfen Sie die Einstellungen." - -#~ msgid "Directly print on default printer" -#~ msgstr "Mit Standard-Drucker direkt drucken" - -#, fuzzy -#~ msgid "Notify when a document has been sent to the printer" -#~ msgstr "Das Dokument wurde zum Drucker geschickt." - -#~ msgid "Printcommand:" -#~ msgstr "Druckbefehl:" - -#~ msgid "" -#~ "Command to print a PDF file, for example lpr or kprinter. You may add " -#~ "some arguments, e.g. lpr -P myprinter." -#~ msgstr "" -#~ "Befehl, um ein PDF zu drucken, z.B. lpr oder kprinter. Sie können auch " -#~ "weitere Argumente hinzufügen, beispielsweise lpr -P meindrucker." - -#~ msgid "Space above:" -#~ msgstr "Platz darüber:" - -#~ msgid "Name or full path of the convert-ly program." -#~ msgstr "Name oder vollständiger Pfad des convert-ly-Programms." - -#~ msgid "Expand" -#~ msgstr "Erweitere" - -#, fuzzy -#~ msgid "Could not understand the entered pitches." -#~ msgstr "Konnte Ausgabe des LilyPond-Prozesses nicht lesen." - -#~ msgid "Dock" -#~ msgstr "Dock" - -#~ msgid "Show" -#~ msgstr "Zeigen" - -#, fuzzy -#~ msgid "Paper Size A4" -#~ msgstr "Papier-Format:" - -#, fuzzy -#~ msgid "Paper Size A5" -#~ msgstr "Papier-Format:" - -#, fuzzy -#~ msgid "Paper Size Letter" -#~ msgstr "Papier-Format:" - -#, fuzzy -#~ msgid "Stem Up" -#~ msgstr "Schritt" - -#, fuzzy -#~ msgid "Stem Down" -#~ msgstr "Unten" - -#, fuzzy -#~ msgid "Lyric Stanza" -#~ msgstr "Strophen:" - -#, fuzzy -#~ msgid "Score section" -#~ msgstr "Partitur-Einstellungen" - -#, fuzzy -#~ msgid "Layout Section" -#~ msgstr "Sprach-Auswahl" - -#, fuzzy -#~ msgid "Midi section" -#~ msgstr "Gewidmet" - -#, fuzzy -#~ msgid "With: instrumentName" -#~ msgstr "Instrumentennamen" - -#, fuzzy -#~ msgid "With: shortInstrumentName" -#~ msgstr "Instrumentennamen" - -#, fuzzy -#~ msgid "Modern 2/2 Time Signature" -#~ msgstr "Taktart:" - -#, fuzzy -#~ msgid "Modern 4/4 Time Signature" -#~ msgstr "Taktart:" - -#, fuzzy -#~ msgid "New Lyrics" -#~ msgstr "Text" - -#~ msgid "Your document currently has no filename, please save first." -#~ msgstr "" -#~ "Ihr Dokument hat zur Zeit keinen Namen. Bitte speichern Sie es zunächst " -#~ "ab." - -#~ msgid "" -#~ "Sorry, support for remote files is not yet implemented.\n" -#~ "Please save your document to a local file." -#~ msgstr "" -#~ "Remote-Files werden noch nicht unterstützt.\n" -#~ "Bitte speichern Sie Ihr Dokument lokal ab." - -#~ msgid "Already Running" -#~ msgstr "Läuft bereits" - -#, fuzzy -#~ msgid "Untitled" -#~ msgstr "Untertitel" - -#, fuzzy -#~ msgid "LilyPond crashed." -#~ msgstr "LilyPond" - -#~ msgid "" -#~ "A LilyPond Kate/Pate plugin.\n" -#~ "\n" -#~ "This is LilyKDE, a plugin to make it easy to run the LilyPond music " -#~ "typesetter from within Kate.\n" -#~ "\n" -#~ "Version: $version\n" -#~ "Homepage: $homepage\n" -#~ msgstr "" -#~ "Ein LilyPond Kate/Pate Plugin.\n" -#~ "\n" -#~ "Hier ist LilyKDE, ein Plugin zum einfachen Editieren von LilyPond-Dateien " -#~ "mit Hilfe von Kate. \n" -#~ "\n" -#~ "Version: $version\n" -#~ "Homepage: $homepage\n" - -#~ msgid "LilyPond [$filename] was terminated by signal $signal." -#~ msgstr "LilyPond [$filename] wurde von Signal $signal beendet." - -#~ msgid "LilyPond [$filename] exited abnormally." -#~ msgstr "LilyPond [$filename] wurde vorzeitig beendet." - -#~ msgid "LilyPond did not write a PDF. You probably forgot \\layout?" -#~ msgstr "" -#~ "LilyPond hat kein PDF erzeugt. Möglicherweise haben Sie \\layout " -#~ "vergessen?" - -#~ msgid "Clear LilyPond Log" -#~ msgstr "Räume LilyPond-Logfile auf" - -#~ msgid "Record MIDI with Rumor" -#~ msgstr "Nehme MIDI mit Rumor auf" - -#~ msgid "Dock/Undock PDF preview" -#~ msgstr "PDF-Vorschau andocken/abdocken " - -#~ msgid "PDF" -#~ msgstr "PDF" - -#~ msgid "Name or full path of the pdftk program (see %s)." -#~ msgstr "Name oder vollständiger Pfad des Programms pdftk (siehe %s)." - -#~ msgid "" -#~ "Check the actions you want to display (if applicable) after LilyPond has " -#~ "successfully compiled your document." -#~ msgstr "" -#~ "Wählen Sie die Aktionen aus, die nach Abschluss der Übersetzung durch " -#~ "LilyPond angezeigt werden sollen." - -#~ msgid "Keep undocked windows on top of Kate" -#~ msgstr "Abgedockte Fenster über Kate halten" - -#~ msgid "Force reload of PDF preview when LilyPond has run" -#~ msgstr "Neuladen der PDF-Vorschau forcieren nach Ablauf von LilyPond" - -#~ msgid "Always embed LilyPond source files in published PDF" -#~ msgstr "Quellcode der LilyPond-Dateien immer in die PDF-Dateien einbetten" - -#~ msgid "TiMidity successfully started." -#~ msgstr "TiMidity erfolgreich gestartet." - -#~ msgid "TiMidity stopped." -#~ msgstr "TiMidity gestoppt." - -#~ msgid "" -#~ "Could not start TiMidity. Please try the command %s in a terminal to find " -#~ "out what went wrong." -#~ msgstr "" -#~ "Konnte TiMidity nicht starten. Starten Sie den Befehl %s in einer " -#~ "Konsole, um herauszufinden, was falsch gelaufen ist." - -#~ msgid "REC" -#~ msgstr "REC" - -#~ msgid "Configure %s" -#~ msgstr "Konfiguriere %s" - -#~ msgid "Remove selected part from your score." -#~ msgstr "Ausgewählten Teil der Partitur löschen." - -#~ msgid "Move selected part up." -#~ msgstr "Ausgewählten Teil hoch schieben." - -#~ msgid "Move selected part down." -#~ msgstr "Ausgewählten Teil herunter schieben" - -#~ msgid "Italian names" -#~ msgstr "Italienische Namen" - -#~ msgid "" -#~ "Choose standard Italian instrument names, like '%s' instead of 'Organ.'" -#~ msgstr "Italienische Instrumentennamen, wie %s, statt 'Orgel'." - -#~ msgid "Could not start Pdftk: %s" -#~ msgstr "Konnte Pdftk nicht starten: %s" - -#~ msgid "Embedded file %s in PDF." -#~ msgid_plural "Embedded files %s in PDF." -#~ msgstr[0] "Datei %s in PDF eingebettet." -#~ msgstr[1] "Dateien %s in PDF eingebettet." - -#~ msgid "Embedding files in PDF failed." -#~ msgstr "Einbetten von Dateien ins PDF missglückt." - -#~ msgid "Return code: %i" -#~ msgstr "Return-Code: %i" - -#~ msgid "Open the folder containing the LilyPond and PDF documents." -#~ msgstr "Öffene das Verzeichnis mit den LilyPond und PDF-Dokumenten" - -#~ msgid "Open the generated PDF file with the default PDF viewer." -#~ msgstr "Öffne das generierte PDF mit dem voreingestellten Anzeigeprogramm." - -#~ msgid "" -#~ "Print the PDF using the print command set in the Commands settings page." -#~ msgstr "Drucke das PDF mit dem angegebenen Druckbefehl." - -#~ msgid "Email PDF" -#~ msgstr "Verschicke PDF per Email" - -#~ msgid "Attach the PDF to an email message." -#~ msgstr "PDF als Email-Anhang." - -#~ msgid "" -#~ "Play the generated MIDI files using the default MIDI player (Timidity++ " -#~ "is recommended)." -#~ msgstr "Spiele das generierte MIDI mit dem voreingestellten MIDI-Player." - -#~ msgid "Embed source" -#~ msgstr "Quelle einbetten" - -#~ msgid "Embed the LilyPond source files in the published PDF (using pdftk)." -#~ msgstr "LilyPond-Quelldatei in das PDF einbetten (mit pdfk)" - -#~ msgid "Different tools to edit durations." -#~ msgstr "Verschiedene Werkzeuge zum Editieren von Tonlängen." - -#~ msgid "Durations" -#~ msgstr "Werte" - -#~ msgid "Apply" -#~ msgstr "Anwenden" - -#~ msgid "" -#~ "Press to apply the entered rhythm to the selected music. This will delete " -#~ "previously entered durations." -#~ msgstr "" -#~ "Drücken, um den eingegebenen Rhytmus der ausgewählten Musik zuzufügen. " -#~ "Dieslöscht zuvor eingegebe Werte." - -#~ msgid "One document failed." -#~ msgid_plural "$count documents failed." -#~ msgstr[0] "Ein Dokument hat es nicht geschafft." -#~ msgstr[1] "$count Dokumente haben es nicht geschafft." - -#~ msgid "LilyKDE servicemenu helper" -#~ msgstr "LilyKDE Servicemenü-Hilfe" - -#~ msgid "LilyPond [$filename] starting ($mode)..." -#~ msgstr "LilyPond [$filename] startet ($mode)..." - -#~ msgid "Could not start LilyPond." -#~ msgstr "Konnte LilyPond nicht starten." - -#~ msgid "LilyPond [$filename] exited with return code $retcode." -#~ msgstr "LilyPond [$filename] wurde mit dem Return-Code $retcode beendet." - -#~ msgid "LilyPond [$filename] finished." -#~ msgstr "LilyPond [$filename] ist fertig." - -#~ msgid "" -#~ "The document has been processed with convert-ly, but remained unchanged. " -#~ "This is the message given by convert-ly: %s" -#~ msgstr "" -#~ "Das Dokument wurde mit convert-ly verarbeitet, aber blieb unverändert. " -#~ "Das ist die meldung von convert-ly: %s" - -#~ msgid "Could not start convert-ly: %s" -#~ msgstr "Konnte convert-ly nicht starten: %s" - -#~ msgid "Start or stop Rumor" -#~ msgstr "Starte oder stoppe Rumor" - -#~ msgid "" -#~ "The meter to use. Leave 'Auto' to let LilyKDE determine the meter from " -#~ "the LilyPond document." -#~ msgstr "" -#~ "Das Metrum. 'Auto' lässt LilyKDE das Metrum vom LilPond-Dokument " -#~ "bestimmen." - -#~ msgid "" -#~ "The number of accidentals. A negative number designates flats. Leave " -#~ "'Auto' to let LilyKDE determine the key signature from the LilyPond " -#~ "document." -#~ msgstr "" -#~ "Anzahl der Vorzeichen. Negative Nummern bedeuten Bs. 'Auto' lässt LilyKDE " -#~ "die Vorzeichen aus dem LilyPond-Dokument bestimmen." - -#~ msgid "Found rumor version $version." -#~ msgstr "Rumor Version $version gefunden." - -#~ msgid "Could not find Rumor: %s" -#~ msgstr "Konnte Rumor nicht finden: %s" - -#~ msgid "OSS device %d" -#~ msgstr "OSS Gerät %d" - -#~ msgid "" -#~ "Here you can select which Guile scripts you want Rumor to load. You can " -#~ "add your own scripts by putting them in %s. If the first line of your " -#~ "script starts with a semicolon (;) that line will be shown as description." -#~ msgstr "" -#~ "Hier können Sie auswählen, welche Guile-Skripte von Rumor geladen werden " -#~ "sollen. Sie können Ihre eigenen Skripte hinzufügen, indem Sie sie in %s " -#~ "angeben. Wenn die erste Zeile Ihres Skripts mit einem Semicolor (;) " -#~ "startet, wird die Zeile als Beschreibung hergenommen." - -#~ msgid "Use no, short or long instrument names before the next systems." -#~ msgstr "Keine, kurze oder lange Instrumentennamen vor dem nächsten System." - -#~ msgid "Rhythm" -#~ msgstr "Rhythmus" - -#~ msgid "LilyPond files to convert" -#~ msgstr "LilyPont files, die konvertiert werden" - -#~ msgctxt "NAME OF TRANSLATORS" -#~ msgid "Set this to your name" -#~ msgstr "Henrik Evers" diff -Nru frescobaldi-1.2.0/po/dummy.py frescobaldi-2.0.0/po/dummy.py --- frescobaldi-1.2.0/po/dummy.py 2010-08-31 07:43:57.000000000 +0000 +++ frescobaldi-2.0.0/po/dummy.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -# dummy python script containing strings -# to translate in .rc and .desktop files - -# frescobaldiui.rc : -i18n("&Insert") -i18n("&Document") -i18n("&LilyPond") -i18n("&Sessions") -i18n("&Pitch") -i18n("&Lyrics") -i18n("&Rhythm") -i18n("&Source Document") -i18n("&Extra Tools") - -# frescobaldi.desktop : -i18n("Frescobaldi") -i18n("LilyPond Music Editor") diff -Nru frescobaldi-1.2.0/po/es.po frescobaldi-2.0.0/po/es.po --- frescobaldi-1.2.0/po/es.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/es.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,3848 +0,0 @@ -# translation of es.po to Español -# Header entry was created by KBabel! -# -# Francisco Vila , 2008, 2009, 2010. -msgid "" -msgstr "" -"Project-Id-Version: es\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-11-09 09:51+0100\n" -"PO-Revision-Date: 2010-12-16 12:29+0100\n" -"Last-Translator: Francisco Vila \n" -"Language-Team: Spanish\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# es.po (es) #-#-#-#-#\n" -"X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "Editor de música para LilyPond" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Francisco Vila" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "francisco.vila@hispalinux.es" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Sesión que iniciar" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Iniciar una instancia nueva" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Codificación que usar" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Número de línea al que saltar, empezando por 1" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Columna a la que ir, empezando por 0" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Tratar de usar números inteligentes de línea y columna" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "Archivos de LilyPond que abrir, también pueden ser URLs de textedit" - -#: dummy.py:5 -msgid "&Insert" -msgstr "&Insertar" - -#: dummy.py:6 -msgid "&Document" -msgstr "&Documento" - -#: dummy.py:7 -msgid "&LilyPond" -msgstr "&LilyPond" - -#: dummy.py:8 -msgid "&Sessions" -msgstr "&Sesiones" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "&Altura" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "&Letra" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "&Duraciones" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "&Documento fuente" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "Herramientas adicional&es" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "Dedicatoria" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Título" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Subtítulo" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "Sub-subtítulo" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Instrumento" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Compositor" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Arreglista" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Poeta" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Compás" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Pieza" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Número de Opus" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Copyright" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Pie de página" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "Mayor" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "Menor" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "Jónico" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "Dórico" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "Frigio" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "Lidio" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "Mixolidio" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "Eolio" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "Locrio" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Articulación" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Acento" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Marcato" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Staccatissimo" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Picado" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Portato" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Tenuto" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Adornos" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Trino" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Semitrino" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Mordente" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Grupeto" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "Semitrino largo" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "Semitrino con resolución" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "Semitrino ascendente" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "Semitrino descendente" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "Mordente ascendente" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "Mordente descendente" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "Semitrino con final ascendente" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "Semitrino con final descendente" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "Semitrino lineal" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Grupeto invertido" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "Símbolos" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Calderón" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Calderón corto" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Calderón largo" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Calderón muy largo" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Segno" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Varcoda" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "Signumcongruentiae" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Otros" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Arco arriba" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Arco abajo" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "Snappizzicato" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "Abierto (p.ej. metales)" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "Tapada (p.ej. metales)" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Flageolet (armónico)" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Pulgar" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Tacón izquierdo" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Tacón derecho" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "Punta izquierda" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Punta derecha" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "Semi-abierto (p.ej. hi-hat)" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Se ha producido un error interno:" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "Error interno" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Enviar informe de fallo..." - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "Opcionalmente, describa aquí lo que estaba haciendo:" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Barra lateral izquierda" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Barra lateral derecha" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Barra superior" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Barra inferior" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "Cerrar otros documentos" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Mostrar ruta" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Mostrar solapas del documento" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "Vistas de herramien&tas" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "Nuevo..." - -#: ../python/kateshell/mainwindow.py:240 -msgid "Manage Sessions..." -msgstr "Gestionar sesiones..." - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" -"No se encontró el contenedor XMLGUI \"%1\".\n" -"\n" -"Probablemente el archivo local rc de ui contiene errores. Se recomienda borrar este archivo porque faltarán algunos elementos de la interfaz de usuario. Ésta es la ruta completa del archivo:\n" -"\n" -"%2\n" - -#: ../python/kateshell/mainwindow.py:325 -msgid "No Session" -msgstr "Ninguna sesión" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Seleccione primero algo de texto." - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "modificado" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Línea: %1 Columna: %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "BLOQUE" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Modo de selección de bloques" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "LÍNEA" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Modo de selección de líneas" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Todos los archivos" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Abrir archivo" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "Clic derecho para opciones de solapas" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Mover a" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Desempotrar" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "No se ha podido cargar %1" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Instale %1" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "Configurar tecla rápida" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "Pulse el botón para el que quiere configurar una tecla rápida:" - -#: ../python/kateshell/sessions.py:41 -msgid "Manage Sessions" -msgstr "Gestionar sesiones" - -#: ../python/kateshell/sessions.py:99 -msgid "Session" -msgstr "Sesión" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "Propiedades de esta sesión" - -#: ../python/kateshell/sessions.py:105 -msgid "Name:" -msgstr "Nombre:" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "Guardar siempre la lista de documentos en esta sesión" - -#: ../python/kateshell/sessions.py:115 -msgid "Base directory:" -msgstr "Directorio base:" - -#: ../python/kateshell/sessions.py:128 -msgid "Edit session: %1" -msgstr "Editar sesión: %1" - -#: ../python/kateshell/sessions.py:135 -msgid "Edit new session" -msgstr "Editar sesión nueva" - -#: ../python/kateshell/sessions.py:171 -msgid "Please enter a session name." -msgstr "Introduzca un nombre para la sesión." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "No utilice el nombre '%1'." - -#: ../python/kateshell/sessions.py:187 -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "No utilice el carácter ampersand (&) en el nombre de una sesión." - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" -"Ya existe otra sesión con el nombre %1 .\n" -"\n" -"¿Quiere sobreescribirla?" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "Abrir %1 en un visor externo" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "Reproducir %1" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "(No está disponible ningún archivo MIDI ni PDF.)" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "No está disponible ningún archivo MIDI ni PDF. Ejecute LilyPond para crear uno o más archivos de salida." - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "No hay ningún archivo para mandar por correo-e." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "No hay ningún archivo que enviar" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" -"No hay ningún documento PDF para imprimir.\n" -"\n" -"Probablemente necesite ejecutar LilyPond para crear o actualizar un documento PDF. Si está creando archivos MIDI, asegúrese de introducir también una sección \\layout { } en la partitura, pues en caso contrario LilyPond no creará un PDF." - -#: ../python/frescobaldi_app/actions.py:146 -msgid "No files to print" -msgstr "No hay ningún archivo que imprimir" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "Enviar documentos por correo-e" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Seleccione los archivos que quiere enviar:" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" -"Estos son los archivos que están al día (es decir, que son más recientes que " -"el documento fuente de LilyPond). También se muestran los archivos de " -"LilyPond incluidos por el documento fuente." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -"Nota: este archivo PDF se ha creado con direcciones URL incrustadas de " -"apuntar y pulsar (modo de vista previa), que aumenta mucho el tamaño del " -"archivo. Considere la posibilidad de volver a construir el archivo en el " -"modo de publicación, porque el archivo PDF es mucho más pequeño." -msgstr[1] "" -"Nota: estos archivos PDF se han creado con direcciones URL incrustadas de " -"apuntar y pulsar (modo de vista previa), que aumenta mucho el tamaño del " -"archivo. Considere la posibilidad de volver a construir los archivos en el " -"modo de publicación, porque los archivos PDF son mucho más pequeños." - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "Nota: si no hay ningún archivo PDF ni MIDI, probablemente necesite ejecutar LilyPond para actualizar esos archivos, antes de enviar el mensaje de correo electrónico." - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "Seleccionar todo" - -#: ../python/frescobaldi_app/actions.py:249 -msgid "Print documents" -msgstr "Imprimir documentos" - -#: ../python/frescobaldi_app/actions.py:252 -msgid "Please select the files you want to print:" -msgstr "Seleccione los archivos que quiere imprimir:" - -#: ../python/frescobaldi_app/actions.py:256 -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" -"Estos son los archivos PDF que están al día (es decir, que son más recientes que " -"el documento fuente de LilyPond). Compruebe los documentos que quiere enviar a la impresora." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "Imprimir %1" - -#: ../python/frescobaldi_app/actions.py:340 -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "Imprimir 1 archivo" -msgstr[1] "Imprimir %1" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "No se ha encontrado ninguna instrucción de impresión (como 'lpr' o 'lp') en el sistema." - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "No se ha encontrado la instrucción '%1' en el sistema." - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" -"Se ha ejecutado la instrucción siguiente, pero devolvió un código de retorno %1.\n" -"\n" -"%2" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "Crear papel de música en blanco" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "Tipo:" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "Acción:" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "Seleccione el número de pautas vacías que quiere crear." - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "Seleccione qué acción ocurre al pulsar \"Aceptar\"." - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "Vista previa del papel de música vacío." - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "Pulse para ver más opciones." - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "Papel" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "Opciones" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Tamaño del papel:" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "Predeterminado" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "Tamaño del pentagrama:" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "Número de páginas:" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Quitar el pie de página predeterminado" - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "Imprimir líneas divisorias" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "Compases por línea:" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "Imprimir números de página" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "Empezar en:" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "Vista previa del papel pautado" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "No se ha creado ningún PDF." - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "Abrir en el visor de PDF" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "Guardar PDF como..." - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "Archivos PDF" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "Guardar PDF" - -#: ../python/frescobaldi_app/blankpaper.py:365 -msgid "Print..." -msgstr "Imprimir..." - -#: ../python/frescobaldi_app/blankpaper.py:371 -msgid "Print staff paper" -msgstr "Imprimir papel de música en blanco" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "Copiar código de LilyPond al editor" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "Pentagramas por página:" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "Clave:" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "Pentagrama sencillo" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "Sistemas por página:" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "Claves" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "Sistema de piano" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "Sistema de órgano" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "Pentagramas por sistema:" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "Claves:" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" -"Introduzca tantas letras (S, A, T ó B) como pentagramas.\n" -"Véase \"Qué es esto\" para mayor información." - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" -"Para configurar las claves, en primer lugar establezca el número de " -"pentagramas por sistema. Luego escriba tantas letras (S, A, T ó B) como " -"pentagramas.\n" -"\n" -"S ó A: clave de Sol,\n" -"T: clave de Sol octava baja,\n" -"B: clave de Fa\n" -"\n" -"Así, cuando quiera crear papel pautado para un coro mixto a cuatro voces, " -"establezca primero el número de pentagramas por sistema a 4, y luego escriba " -"aquí \"SATB\" (sin las comillas)." - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "Sistema de coro" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Ninguno" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "Pentagrama personalizado" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "Pentagrama" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "Espacio por debajo:" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "Llave curva" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "Corchete" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "Llave recta" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "Conectar las divisorias" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "Caracteres especiales" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "desconocido" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" -"No se pudo realizar la traducción solicitada.\n" -"\n" -"La música contiene alteraciones de cuartos de tono, pero no están " -"disponibles en el idioma de notas \"%1\"." - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" -"El idioma de notas del texto seleccionado se ha actualizado, pero debe " -"añadir manualmente la siguiente instrucción al documento:" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "(para LilyPond inferior a 2.14), o" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "(para LilyPond 2.14 y superior.)" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Idioma de las notas" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "Introduzca el nombre de la variable para asignarle el texto seleccionado:" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Cortar y asignar" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "Abrir %1" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "Seleccione una expresión musical, encerrada en << ... >> ó { ... }." - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" -"No se entienden las alturas introducidas.\n" -"\n" -"Asegúrese de que usa nombres de notas en el idioma \"%1\"." - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" -"No se pudo realizar la transposición solicitada.\n" -"\n" -"La música contiene alteraciones de cuartos de tono que no están disponibles " -"en el idioma de notas \"%1\"." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "Transportar" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "Introduzca una nota de origen y una nota de destino:" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "Transportar desde:" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "a:" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "Instalar" - -#: ../python/frescobaldi_app/download.py:56 -msgid "Download LilyPond" -msgstr "Descargar LilyPond" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "Con esta herramienta puede descargar las versiones binarias empaquetadas de LilyPond para su sistema operativo." - -#: ../python/frescobaldi_app/download.py:68 -msgid "Select the LilyPond version you want to download." -msgstr "Seleccione la versión de LilyPond que quiere descargar." - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Versión:" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" -"Seleccione una carpeta que pueda escribir y en donde quiera instalar LilyPond.\n" -"(Se creará una carpeta con la numeración de la versión dentro de este directorio.)" - -#: ../python/frescobaldi_app/download.py:81 -msgid "Install into:" -msgstr "Instalar en:" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "Detalles" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "La página web de donde se pueden descargar los binarios de LilyPond." - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "Descargar de:" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "Tipo de máquina:" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" -"Ésta es la URL del paquete que se va a descargar e instalar.\n" -"También puede navegar a otras páginas para seleccionar un paquete de LilyPond." - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "URL del paquete:" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "Descarga del contenido del directorio..." - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "No se ha encontrado ningún paquete. Puede navegar a un paquete de forma manual." - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "Última versión de desarrollo (%1)" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "Última versión estable (%1)" - -#: ../python/frescobaldi_app/download.py:241 -msgid "Downloading %1..." -msgstr "Descargando %1..." - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "Descarga cancelada." - -#: ../python/frescobaldi_app/download.py:263 -msgid "Download failed: %1" -msgstr "La descarga ha fallado: %1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" -"Parece que LilyPond %1 ya está instalado en %2.\n" -"\n" -"¿Quiere usarlo, o borrarlo e instalarlo de nuevo?" - -#: ../python/frescobaldi_app/download.py:284 -msgid "Use existing LilyPond" -msgstr "Usar LilyPond existente" - -#: ../python/frescobaldi_app/download.py:285 -msgid "Remove and re-install" -msgstr "Eliminar y reinstalar" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "Descomprimiendo %1..." - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "Descompresión finalizada." - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -msgid "Unpacking failed." -msgstr "Descompresión fallida." - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "" -"Se ha producido un error:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Gestor de expansiones" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Buscar..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "Nombre" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Descripción" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Abreviatura" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" -"Lista de expansiones definidas.\n" -"\n" -"Pulse sobre una fila para ver o cambiar el texto asociado. Haga doble click " -"sobre una abreviatura o su descripción para modificarla. También puede " -"pulsar F2 para editar la abreviatura actual.\n" -"\n" -"Use los bostones de abajo para añadir o eliminar expansiones.\n" -"\n" -"Existen dos formas de utilizar la expansión: teclee la abreviatura en el " -"texto y llame a la función Expandir, o llame a la función Expandiror (el " -"atajo de teclado predeterminado es Ctrl+.), seleccione la expansión de la " -"lista y pulse Enter o elija el botón Aceptar." - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" -"Este es el texto asociado a la abreviatura seleccionada. Ciertos caracteres " -"tienen un significado especial:" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "Situar el cursor sobre este punto." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Traducir la siguiente nota." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Elemento nuevo" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"El nombre está siendo utilizado por otra expansión.\n" -"\n" -"Utilice un nombre distinto." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "" -"Utilice exclusivamente letras, número y el guión bajo en el nombre de la " -"expansión." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "No deje la descripción en blanco." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" -"No se han encontrado diccionarios de enguionado.\n" -"\n" -"Instale un paquete que los contenga y/o configure la ruta de búsqueda para localizarlo dentro de los ajustes de Frescobaldi bajo \"Rutas.\"" - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Enguionar el texto de la letra" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Seleccione un idioma:" - -#: ../python/frescobaldi_app/kmid.py:68 -msgid "Pause" -msgstr "Pausa" - -#: ../python/frescobaldi_app/kmid.py:85 -msgid "Volume" -msgstr "Volumen" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "Inicio" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "Texto más grande" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "Texto más pequeño" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "Primera página" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Anterior" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "Subir un nivel" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Siguiente" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "Tabla de contenidos" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "índice" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Copiar en&lace" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Abrir enlace en ventana &nueva" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Copiar" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Abrir documento en ventana &nueva" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "Cargando..." - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "No disponible" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "Referencia de la notación" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "Índice de instrucciones de LilyPond" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "Manual de aprendizaje" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "Índice del manual de aprendizaje" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -msgid "Internals Reference" -msgstr "Referencia de funcionamiento interno" - -#: ../python/frescobaldi_app/lilydoc.py:877 -msgid "The %1 context" -msgstr "El contexto %1" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "El objeto de presentación %1" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "A&yuda deLilyPond" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Dirección:" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Arriba" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Neutro" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Abajo" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "Dónde añadir las articulaciones y otros: por encima o por debajo del pentagrama o en la posición predeterminada." - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "Configurar tecla rápida (%1)" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Articulaciones" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Distintos tipos de articulaciones y otros símbolos." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Pulse sobre una articulación para insertarla en el documento." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" -"Si selecciona un bloque de música previamente, se añade la articulación a " -"todas las notas de la selección." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Permitir abreviaturas" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "Utilizar notación corta para ciertas articulaciones como el picado." - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "Indicaciones dinámicas" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "Símbolos de dinámica." - -#: ../python/frescobaldi_app/lqi.py:267 -msgid "Click a dynamic sign to add it to your document." -msgstr "Pulse sobre una indicación de matiz para insertarla en el documento." - -#: ../python/frescobaldi_app/lqi.py:268 -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "Si selecciona un bloque de música previamente, se añaden extensiones de matiz al fragmento seleccionado." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "Si ha seleccionado música y pulsa un signo después de un objeto de extensión, el signo termina el objeto de extensión." - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "Indicación de matiz dinámico %1" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "Extensores" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "Regulador crescendo" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "Crescendo" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "Regulador diminuendo" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "Diminuendo" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "Decrescendo" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -msgid "Bar Lines" -msgstr "Barras de compás" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "Barras de compás, sisnos de respiración, etc." - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Doble barra" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "Doble barra final" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "Barra punteada" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "Barra discontinua" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Barra invisible" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "Inicio de repetición" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "Repecición doble" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "Fin de repetición" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "Repetición doble (antigua)" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "Repetición doble (clásica)" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "Línea divisoria corta" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "Línea divisoria simple" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "Barra fina-gruesa-fina" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "Barra gruesa-fina" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "Barra gruesa doble" - -#: ../python/frescobaldi_app/lqi.py:354 -msgid "Segno bar line" -msgstr "Barra de compás en forma de Segno" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "Signos de respiración" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "Signo de respiración predeterminado" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "Signo de respiración recto" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "Cesura curva" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "Cesura recta" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "Ligaduras, extensiones de texto, etc." - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "Estos objetos de extensión requieren seleccionar un fragmento de música." - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "Ligadura de expresión" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "Ligadura de fraseo" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "Barra" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "Acordes arpegiados" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "Los arpegios se usan con acordes de varias notas." - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "Acorde arpegiado" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "Arpegio con flecha arriba" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "Arpegio con flecha abajo" - -#: ../python/frescobaldi_app/lqi.py:445 -msgid "Bracket Arpeggio" -msgstr "Arpegio de corchete" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "Arpegio de paréntesis" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "Glissandos" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "Glissandos are attached to a note and automatically extend to the next note." -msgstr "Los glissandos se unen a una nota y se extienden automáticamente hasta la nota siguiente." - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "Glissando" - -#: ../python/frescobaldi_app/lqi.py:466 -msgid "Dashed Glissando" -msgstr "Glissando discontinuo" - -#: ../python/frescobaldi_app/lqi.py:467 -msgid "Dotted Glissando" -msgstr "Glissando de puntos" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "Glissando en zig-zag" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "Glissando de trino" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "Archivos de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:170 -msgid "Print Source..." -msgstr "Imprimir fuente..." - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Preparar partitura nueva..." - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "Ejecutar LilyPond (vista previa)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "Ejecutar LilyPond (publicar)" - -#: ../python/frescobaldi_app/mainapp.py:488 -msgid "Run LilyPond (custom)..." -msgstr "Ejecutar LilyPond (personalizado)" - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "Interrumpir la tarea de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:502 -msgid "Print Music..." -msgstr "Imprimir la música..." - -#: ../python/frescobaldi_app/mainapp.py:508 -msgid "Email Documents..." -msgstr "Enviar documentos por correo-e..." - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "Cortar la selección y asignarla a una variable de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Repetir la última nota o acorde" - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Repetir la última expresión musical (nota o acorde)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "Insertar o gestionar las expansiones..." - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Expandir la última palabra o abrir el diálogo de expansiones." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "Caracteres especiales..." - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "Insertar caracteres especiales." - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "Añadir a expansiones" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Línea en blanco siguiente" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Ir a la siguiente línea en blanco." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Línea en blanco anterior" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Ir a la anterior línea en blanco." - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "Seleccionar hasta la siguiente línea en blanco" - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "" -"Selecciona texto desde la posición actual hasta la siguiente línea en " -"blanco, incluida." - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "Seleccionar hasta lalínea en blanco anterior" - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "" -"Selecciona texto desde la posición actual hasta justo antes de la línea en " -"blanco anterior." - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "Mover la selección a la siguiente línea en blanco" - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "Mover el bloque seleccionado a la siguiente línea en blanco." - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "Mover la selección a la línea en blanco anterior" - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "Mover el bloque seleccionado a la línea en blanco anterior." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "Reproducir/Ver" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "" -"Cambiar el idioma de LilyPond que se usa para los nombres de las notas en " -"este documento o en la selección." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "Convertir relativo en &absoluto" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" -"Convierte las notas del documento o la selección de alturas relativas a " -"absolutas." - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "Convertir absoluto a &relativo" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "" -"Convierte las notas del documento o selección de alturas absolutas a " -"relativas." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "Transportar..." - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "Trnasporta todas las notas del documento o selección." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Doblar duraciones" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Duplicar todas las duraciones de la selección." - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Reducir a la mitad" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Reducir a la mitad todas las duraciones de la selección." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Duraciones con puntillo" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Añadir puntillo a todas las duraciones de la selección." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Quitar puntillos" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Quitar un puntillo de todas las duraciones de la selección." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Quitar escalado" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "" -"Eliminar todos los factores de escala (*n/m) de las duraciones de la " -"selección." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Quitar duraciones" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "Quitar todas las duraciones de la selección." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Hacer implícitas" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "Hacer que las duraciones sean implícitas (quitar las duraciones repetidas)." - -#: ../python/frescobaldi_app/mainapp.py:713 -msgid "Make implicit (per line)" -msgstr "Hacer implícitas (línea a línea)" - -#: ../python/frescobaldi_app/mainapp.py:714 -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "Hacer que las duraciones sean implícitas (quitar las duraciones repetidas), excepto para la primera duración de cada línea." - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Hacer explícitas" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "" -"Hacer explícitas las duraciones (escribir la duración después de cada nota, " -"incluso cuando es la misma que la de la nota anterior)." - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Aplicar ritmo..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Aplicar unas duraciones dadas a la música seleccionada." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Copiar duraciones" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Copiar las duraciones de la música seleccionada." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Pegar duraciones" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Pegar duraciones a la música seleccionada." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Quitar el enguionado" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "Copiar la letra sin los separadores de sílabas" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Comilla simple" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Comilla doble" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Alinear" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "Introducir la versión de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "Actualizar mediante convert-ly" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Abrir carpeta actual" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "Repetir la música seleccionada" - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "Insertar par de llaves" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" -"El documento ha sido modificado y debe guardarse antes de que LilyPond pueda iniciarse.\n" -"\n" -"¿Guardar el documento ahora?" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "Ya está funcionando una tarea de LilyPond para este archivo." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "No se puede procesar el documento" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "¿Continuar de todas formas?" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "Usted desea ejecutar LilyPond en el modo de vista previa (con la opción de apuntar y pulsar activada), pero el documento contiene una instrucción para desactivar la opción de apuntar y pulsar." - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" -"Usted quiere ejecutar LilyPond en el modo de publicación (con la opción de apuntar y pulsar desactivada), " -"pero el documento contiene una instrucción para activar la opción de apuntar y pulsar." - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Interrumpir el proceso de LilyPond en ejecución" - -#: ../python/frescobaldi_app/mainapp.py:917 -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "Ejecutar LilyPond en el modo de vista previa (Mays.+clic para activar el diálogo de opciones personalizadas)" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Inserción rápida" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "LilyPond ha compilado %1 con éxito." - -#: ../python/frescobaldi_app/mainapp.py:956 -msgid "LilyPond exited with an error compiling %1." -msgstr "LilyPond ha terminado con un error al compilar %1." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Aplicar ritmo" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Introduzca unas duraciones:" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "" -"Introducir un ritmo utilizando valores de duración separados por espacios (p." -"ej. 8. 16 8 4 8)" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Terminal" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "&Sincronizar el terminal con el documento actual" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "Reproductor MIDI" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" -"No se ha podido cargar la parte KMid.\n" -"Instale KMid 2.4.0 o superior." - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "Vista previa del PDF" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "Mostrar el panel de navegación de PDF" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "Mostrar el mini-paginador de PDF" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Configurar Okular..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "&Sincronizar la vista previa con el documento actual" - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "Recargar" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "Registro de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "no guardar registro" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "Mostrar sólo si hay errores" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "Documentación de LilyPond" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" -"Compás que usar. Déjelo en 'Automático' para que Frescobaldi determine el " -"compás a partir del documento de LilyPond." - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Cuantizar:" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "Duración de la nota más corta que se va a usar." - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Paso a paso" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Grabar la entrada de LilyPond nota a nota, sin las duraciones." - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Mono" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Grabar una entrada monofónica, sin acordes." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" -"Número de alteraciones. Un número negativo significa bemoles. Déjelo en " -"'Automático' para que Frescobaldi determine la tonalidad a partir del " -"documento de LilyPond." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Tempo:" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Compás:" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Tonalidad:" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Configurar..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "Configurar más ajustes, como la entrada y salida de MIDI." - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Grabar" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Establecer estos ajustes como predeterminados." - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Se ha encontrado la versión %1 de Rumor." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "No se ha encontrado Rumor: %1" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "Los ajustes se han grabado." - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Grabar" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Iniciar o detener la grabación MIDI de Rumor." - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Rumor está grabando, pulse ESCAPE para parar." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor detenido." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "Iniciar o detener el cliente MIDI de ALSA TiMidity." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Configuración de Rumor" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "Dispositivo OSS %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Teclado" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "Entrada de MIDI:" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" -"La entrada de MIDI que se va a usar. Seleccione Teclado si quiere tocar en " -"el teclado del ordenador." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "Salida de MIDI:" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "La salida de MIDI que se va a usar." - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Idioma:" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "El idioma de LilyPond en el que quiere que Rumor grabe las notas." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Duraciones explícitas" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" -"Escribir la duración después de cada nota, incluso cuando es la misma que la " -"de la nota anterior." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Altura absoluta" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "Utilizar alturas absolutas en vez de relativas." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Sin divisorias" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Filtrar las barras de compás de la salida de Rumor." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Sin puntillos" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "No utilizar notas con puntillo, sino ligaduras de unión." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Legato" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "No usar silencios, sino que todas las notas tengan la máxima longitud." - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Recortar silencios" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Recortar los silencios inicial y final de la salida." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Cargar guiones de Guile:" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "" -"Aquí puede elegir los guiones de Guile que quere que Rumor cargue. Compruebe " -"la salida de \"Qué es esto\" para más información." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" -"Aquí puede elegir los guiones de Guile que quiere que Rumor cargue. Puede " -"añadir sus propios guiones colocándolos en %1. Si la primera línea de su " -"guión comienza en un símbolo de punto y coma (;) esa línea se mostrará como " -"descripción." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "Automático" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "modo de vista previa" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "modo de publicación" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "LilyPond %1 [%2] iniciando (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "LilyPond [%1] iniciando (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "LilyPond [%1] devolvió al salir el código %2." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "LilyPond [%1] devolvió al salir el código %2." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] ha terminado (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "No se ha podido iniciar LilyPond. Compruebe la ruta y los permisos." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "No se ha podido leer a partir del proceso LilyPond." - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Se ha producido un error desconocido." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -msgid "Run LilyPond" -msgstr "Ejecutar LilyPond" - -#: ../python/frescobaldi_app/runlily.py:257 -msgid "Select which LilyPond version you want to run:" -msgstr "Seleccione la versión de LilyPond que quiere ejecutar:" - -#: ../python/frescobaldi_app/runlily.py:265 -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "Ejecutar LilyPond en el modo de vista previa (con Apuntar y Pulsar)" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "Ejecutar LilyPond con salida prolija" - -#: ../python/frescobaldi_app/runlily.py:310 -msgid "Command" -msgstr "Instrucción" - -#: ../python/frescobaldi_app/runlily.py:317 -msgid "LilyPond %1" -msgstr "LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:318 -msgid "Use LilyPond version %1" -msgstr "Usar la versión de LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -msgid "default" -msgstr "predeterminado" - -#: ../python/frescobaldi_app/runlily.py:322 -msgid "Default LilyPond Version." -msgstr "Versión predeterminada de LilyPond." - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "automática" - -#: ../python/frescobaldi_app/runlily.py:325 -msgid "Automatic LilyPond Version (determined from document)." -msgstr "Versión de LilyPond automática (determinada a partir del documento)." - -#: ../python/frescobaldi_app/runlily.py:330 -msgid "Path: %1" -msgstr "Ruta: %1" - -#: ../python/frescobaldi_app/runlily.py:334 -msgid "LilyPond (version unknown)" -msgstr "LilyPond (versión desconocida)" - -#: ../python/frescobaldi_app/runlily.py:335 -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "" -"Usar LilyPond (versión desconocida)\n" -"Ruta: %1" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Pulse para editar este archivo" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "Guardar registro de LilyPond como" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"No se ha podido guardar el registro de LilyPond:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -msgid "LilyPond-related settings" -msgstr "Ajustes de LilyPond" - -#: ../python/frescobaldi_app/sessions.py:44 -msgid "LilyPond version to use:" -msgstr "Versión de LilyPond que usar:" - -#: ../python/frescobaldi_app/sessions.py:48 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" -"Aquí puede establecer una versión fija de LilyPond para ejecutarla sobre los documentos dentro de esta sesión.\n" -"Selecciones Qué es esto (Mays.+F1) para ver más información." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" -"Aquí puede establecer una versión fija de LilyPond para ejecutarla sobre los documentos dentro de esta sesión.\n" -"\n" -"La versión de LilyPond que está seleccionada aquí se ejecuta de forma predeterminada sobre los documentos, y se usa también por parte de la instrucción \"Insertar versión\"." - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Configurar" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Preferencias generales" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Preferencias generales de Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -msgid "LilyPond Preferences" -msgstr "Preferencias de LilyPond" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Rutas" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Rutas a programas o datos usados por Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "Entrada MIDI de Rumor" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Ajustes del complemento de entrada MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Componente del editor" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Opciones del componente del editor" - -#: ../python/frescobaldi_app/settings.py:298 -msgid "Running LilyPond" -msgstr "Ejecutar LilyPond" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "Permitir a LilyPond borrar los archivos de salida intermedios" - -#: ../python/frescobaldi_app/settings.py:310 -msgid "LilyPond include path:" -msgstr "Ruta de inclusión para LilyPond:" - -#: ../python/frescobaldi_app/settings.py:336 -msgid "When saving documents" -msgstr "Al guardar los documentos" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "Recordar la posición del cursor, marcadores, etc." - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Directorio predeterminado:" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "La carpeta predeterminada para los documentos de LilyPond (opcional)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "La versión de LilyPond que se va a usar para los documentos nuevos" - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Usar el número de la versión de LilyPond instalada" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Usar el número de la versión de la última regla de convert-ly" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Usar número de versión personalizado:" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Escriba un número de versión de LilyPond válido, p.ej.: 2.12.0" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "Advertencias y avisos" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "Avisar si el documento contiene un ajuste conflictivo para la opción Apuntar y Pulsar" - -#: ../python/frescobaldi_app/settings.py:438 -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "Avisar si el documento necesita guardarse antes de ejecutar LilyPond" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "Avisar si al guardar la sesión se sobreescribe otra" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "Apuntar y Pulsar" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "Activar la opción Apuntar y Pulsar" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "Pulse el botón si la opción Apuntar y Pulsar no funciona. Véase Mays.+F1 (Qué es esto) para más información." - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside " -"Okular. This works best when all instances of Okular are closed and the PDF " -"preview has not yet been opened." -msgstr "" -"En la primera ejecución, Frescobaldi trata de auto-configurar Okular (que aporta la vista previa del PDF) para que llame a Frescobaldi cuando se pulsa sobre un objeto que contiene un enlace.\n" -"\n" -"Sin embargo, este ajuste puede perderse si mueve Frescobaldi a un lugar distinto o cuando otras aplicaciones reconfiguran Okular.\n" -"\n" -"Pulse este botón para configurar Frescobaldi como 'editor personalizado' dentro de Okular. Esto funciona mejor si todas las instancias de Okular están cerradas y aún no se ha abierto la vista previa del PDF." - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" -"Se ha reconfigurado la vista previa de PDF de Okular.\n" -"\n" -"Si ya ha abierto la vista previa de PDF, reinicie Frescobaldi para que tengan efecto los nuevos ajustes." - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "Aplicaciones de apoyo" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "Visor de PDF:" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "Visor de PDF" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "(dejar en blanco para la opción predeterminada del sistema operativo)" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "Reproductor MIDI:" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "URL:" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "Dirección o ruta d la documentación de LilyPond." - -#: ../python/frescobaldi_app/settings.py:563 -msgid "Lyrics Hyphenation" -msgstr "Separación de sílabas" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" -"Rutas de búsqueda para los diccionarios de enguionado de OpenOffice.org, " -"Scribus, KOffice, etc, uno por cada línea. Si deja la barra inicial, se " -"antepondrán los prefijos tomados de la variable de entorno KDEDIRS." - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Instrucciones empleadas por el módulo de entrada MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Nombre o ruta completa del programaRumor." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" -"Nombre o ruta completa del programa aconnect (parte de ALSA, para la entrada " -"y reproducción de MIDI utilizando Rumor)." - -#: ../python/frescobaldi_app/settings.py:615 -msgid "Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" -"Instrucción completa para iniciar Timidity (o cualquier otro programa) como " -"cliente de MIDI ALSA." - -#: ../python/frescobaldi_app/settings.py:648 -msgid "LilyPond versions to use:" -msgstr "Versiones de LilyPond que usar:" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "Enable automatic version selection (choose LilyPond version from document)" -msgstr "Activar la selección automática de la versión de LilyPond (determinarla a partir del documento)" - -#: ../python/frescobaldi_app/settings.py:710 -msgid "Document Tabs" -msgstr "Solapas de documento" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "Botón de cierre" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "Solapas grandes" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "Las solapas se pueden mover" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "Convert-ly:" - -#: ../python/frescobaldi_app/settings.py:778 -msgid "Lilypond-book:" -msgstr "Lilypond-book:" - -#: ../python/frescobaldi_app/settings.py:809 -msgid "Path" -msgstr "Ruta" - -#: ../python/frescobaldi_app/settings.py:810 -msgid "Version" -msgstr "Versión" - -#: ../python/frescobaldi_app/settings.py:813 -msgid "Can't determine LilyPond version." -msgstr "No puede determinarse la versión de LilyPond." - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "Descargar..." - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "Descargar versiones nuevas del binario de LilyPond." - -#: ../python/frescobaldi_app/settings.py:842 -msgid "LilyPond Command:" -msgstr "Instrucción de LilyPond:" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "El nombre o la ruta completa del programa LilyPond." - -#: ../python/frescobaldi_app/settings.py:847 -msgid "LilyPond Command" -msgstr "Instrucción de LilyPond" - -#: ../python/frescobaldi_app/settings.py:860 -msgid "Set as default" -msgstr "Establecer como predeterminados" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "Incluir en la selección automática de la versión" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "Sesión que cargar si Frescobaldi se inicia sin argumentos" - -#: ../python/frescobaldi_app/settings.py:903 -msgid "Start with no session" -msgstr "Iniciar sin ninguna sesión" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "Iniciar con la última sesión utilizada" - -#: ../python/frescobaldi_app/settings.py:905 -msgid "Start with session:" -msgstr "Iniciar con la sesión:" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "Seleccione una sesión." - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "Seleccionar..." - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "El documento ya tiene una declaración de la versión de LilyPond." - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "Versión ya establecida" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "" -"No es posible determinar la versión de LilyPond. Revise la instalación de " -"LilyPond." - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" -"No es posible determinar la versión de LilyPond del documento actual. " -"Escriba una declaración \\version con la versión correcta." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "Este documento de LilyPond ya está actualizado." - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" -"El documento se ha procesado con convert-ly. Podrá encontrar los mensajes de " -"convert-ly en un bloque de comentario al final. Posiblemente tenga que " -"editar algunas partes de forma manual." - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" -"El documento ha sido procesado con convert-ly, pero ha permanecido sin " -"cambios. Éste es el mensaje que ha dado convert-ly: %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "No ha sido posible iniciar convert-ly: %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Marcar" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Pulse este botón varias veces para establecer el tempo." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "El tempo en pulsos por minuto." - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "Tiple" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Alto" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Tenor" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "Tiple 8" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Bajo" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Percusión" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "Clave de tablatura" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "Sin clave" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Asistente de partitura" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Títulos y encabezamientos" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Pulse para introducir un valor." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "final de la primera página" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "final de la última página" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Partes" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Partes disponibles:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Añadir la parte seleccionada a la partitura." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Partitura:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Configuración de la partitura" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Preferencias generales" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Nombres de instrumentos" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Armadura de la tonalidad:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Compás:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Compás de anacrusa:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Indicación metronómica:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Indicación de tempo:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Una indicación de tempo, como \"Allegro\"." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Idioma de los nombres de nota:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "El idioma de LilyPond en que quiere escribir los nombres de las notas." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "La versión de LilyPond que se va a usar para este documento." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Utilizar comillas tipográficas" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "Sustituir las comillas normales con las vistosas comillas tipográficas." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Eliminar el pie de página predeterminado que LilyPond produce." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Quitar números de compás" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "Suppress the display of measure numbers at the beginning of every system." -msgstr "" -"Eliminar la numeración de compases que aparece a la izquierda de los " -"sistemas." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "Producir salida de MIDI" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "Crear un archivo MIDI además del archivo PDF." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Imprimir metrónomo" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" -"Si se encuentra seleccionado, imprimir una indicación metronómica al " -"principio de la partitura. La salida MIDI también usa este ajuste de " -"metrónomo." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "Encerrar la partitura dentro de un bloque \\book" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "Si está activado, encierra el bloque \\score dentro de un bloque \\book." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Apaisado" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "Primer sistema:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Completo" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Abreviado" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "" -"Utilizar un nombre corto o largo para el instrumento antes del primer " -"sistema." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Otros sistemas:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "" -"Usar los nombres de instrumento corto, largo o ninguno a la izquierda de los " -"siguientes sistemas." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "El idioma que quiere usar para los nombres de instrumento." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Eliminar el pie de página predeterminado de LilyPond" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "No hay ajustes disponibles." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Voces:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "Cuántas voces poner en este pentagrama." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "La música continúa aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Tipo de pentagrama:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Normal" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Tablatura" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Ambos" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Afinación:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "La letra sigue aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Estrofas:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Número de estrofas." - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Ámbito" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "Mostrar la tesitura de la voz al principio del pentagrama" - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Configurar el número de voces distintas deseado en cada pentagrama." - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "Esto es de utilidad sobre todo al escribir música polifónica como una fuga." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Mano derecha:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Mano izquierda:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Nombres de acorde" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "Los acordes continúan aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Estilo de acordes:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "Alemán" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "Semi alemán" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "Italiano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "Francés" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Diagramas de posiciones de acorde" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" -"Mostrar diagramas de posiciones de guitarra predefinidos debajo de los " -"nombres de acorde (LilyPond 2.12 o superior)." - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Bajo cifrado" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "Las cifras van aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "Usar líneas de extensión" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Violín" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Violín|Vln." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Viola" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Viola|Vla." - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Violoncello" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Violoncello|Vclo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Contrabajo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Contrabajo|Cbjo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Bajo continuo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Bajo continuo|B.c." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Mandolina" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandolina|Mna." - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Afinación de la mandolina" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Banjo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Banjo|Bjo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "Afinación de Sol al aire (la-Re-Sol-Si-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "Afinación de Do (sol-Do-Sol-Si-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "Afinación modal (sol-Re-Sol-Do-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "Ainfación de Re al ailre (la-Re-Fa#-La-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "Afinación de Re menor al aire (la-Re-Fa-La-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Cuatro cuerdas (en vez de cinco)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Guitarra clásica" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Guitarra|G." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Afinación de la guitarra" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "Afinación de Sol al aire" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Guitarra de jazz" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Guitarra de jazz|G.jz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Bajo|Bj." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "Afinación del bajo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Bajo eléctrico" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Bajo eléctrico|Bj.E." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Arpa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Arpa|Ar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "Pentagrama superior:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "Pentagrama inferior:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Flauta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Flauta|Fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Flautín" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Flautín|Fltn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Flauta baja" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Flauta baja|Fl.B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Oboe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Oboe|Ob." - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Oboe d'Amore" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Oboe d'amore|Ob.d'am." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "Corno inglés" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "Corno inglés|Co.ing." - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Fagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Fagot|Fg." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Contrafagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Contrafagot|Cfg." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Clarinete" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Clarinete|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Saxofón sopranino" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Saxofón sopranino|SxSn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Saxofón soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Saxofón soprano|SxSo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Saxofón alto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Saxofón alto|SxA." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Saxofón tenor" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Saxofón tenor|SxT." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Saxofón barítono" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Saxofón barítono|SxB." - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Saxofón bajo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Saxofón bajo|SxBj." - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Flauta dulce soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Flauta dulce soprano|Fl.d.s." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Flauta dulce alto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Flauta dulce alto|Fl.d.A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Flauta dulce tenor" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Flauta dulce tenor|Fl.d.T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Flauta dulce baja" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Flauta dulce baja|Fl.d.B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Trompa en Fa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Trompa en Fa|Tpa." - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Trompeta en Do" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Trompeta en Do|Tpta.Do" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Trompeta en Sib" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Trompeta en Sib|Tpta.Sib" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Trombón" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Trombón|Tbn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|Tba." - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Tuba baja" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Tuba baja|Tba.B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Soprano|S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Mezzosoprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzosoprano|Mezz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Alto|A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Tenor|T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Bajo|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Hoja guía de acordes" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" -"La hoja guía proporciona un pentagrama con nombres de acorde encima y letra " -"debajo. Es opcional un segundo pentagrama." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Añadir pentagrama de acompañamiento" - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" -"Añade un pentagrama de acompañamiento y pone una voz de acompañamiento en el " -"pentagrama superior." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Coro" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" -"Seleccione las voces para el coro. Use las letras S, A, T o B. Un guión " -"denota un pentagrama nuevo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "Consejo: para doble coro puede usar dos partes de coro." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Canto:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -msgid "Lyrics:" -msgstr "Letra:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Misma letra en todas las voces" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -msgid "A set of the same lyrics is placed between all staves." -msgstr "Se coloca el mismo conjunto de letras entre todos los pentagramas." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Misma letra todas las voces" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "Every voice gets its own lyrics, using the same text as the other voices." -msgstr "Cada letra tiene su voz, usando el mismo texto que las otras voces." - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Cada voz tiene diferente letra" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Cada una de las voces recibe un bloque de letras distinto." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "Distribuir las estrofas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -msgid "One set of stanzas is distributed across the staves." -msgstr "Se distribuye un conjunto de estrofas a través de los pentagramas." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "Reducción de piano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "Añade una reducción de piano generada automáticamente." - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "Archivos MIDI para ensayo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "Crea un archivo MIDI de ensayo para todas las voces, incluso si no se genera ninguna salida MIDI para la partitura principal." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Coro|Co." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "Archivos MIDI de ensayo:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Piano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Piano|P." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Clave" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Clave|Clav." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Clavicordio" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Clavicordio|Clvc." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Órgano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Órgano|Org." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Pedal:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Establezca a 0 para desactivar el pedal." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Celesta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Celesta|Cel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Timbales" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Timbales|Tmb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Xilófono" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Xilófono|Xil." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Marimba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Vibráfono" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Vibráfono|Vib." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Campanas tubulares" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Campanas tubulares|Ca.T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Carrillón" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Carrillón|Carr." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Percusión" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Percusión|Perc." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "La percusión continúa aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "guardar una distancia." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Estilo:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Tambores (5 líneas, predeterminado)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Estilo de timbales (2 líneas)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Estilo de congas (2 líneas)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Estilo de bongos (2 líneas)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Estilo de percusión (1 línea)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Eliminar plicas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Quitar las plicas de las notas de percusión." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Instrumentos de cuerda" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Cuerda pulsada" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Instrumentos de viento" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Viento metal" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "Vocal" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Teclados" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Especial" - diff -Nru frescobaldi-1.2.0/po/frescobaldi.pot frescobaldi-2.0.0/po/frescobaldi.pot --- frescobaldi-1.2.0/po/frescobaldi.pot 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/frescobaldi.pot 1970-01-01 00:00:00.000000000 +0000 @@ -1,3676 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: frescobaldi 1.2.0\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-12-26 07:36+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "" - -#: dummy.py:5 -msgid "&Insert" -msgstr "" - -#: dummy.py:6 -msgid "&Document" -msgstr "" - -#: dummy.py:7 -msgid "&LilyPond" -msgstr "" - -#: dummy.py:8 -msgid "&Sessions" -msgstr "" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "" - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "" - -#: ../python/kateshell/mainwindow.py:240 -msgid "Manage Sessions..." -msgstr "" - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" - -#: ../python/kateshell/mainwindow.py:325 -msgid "No Session" -msgstr "" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "" - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "" - -#: ../python/kateshell/sessions.py:41 -msgid "Manage Sessions" -msgstr "" - -#: ../python/kateshell/sessions.py:99 -msgid "Session" -msgstr "" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "" - -#: ../python/kateshell/sessions.py:105 -msgid "Name:" -msgstr "" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "" - -#: ../python/kateshell/sessions.py:115 -msgid "Base directory:" -msgstr "" - -#: ../python/kateshell/sessions.py:128 -msgid "Edit session: %1" -msgstr "" - -#: ../python/kateshell/sessions.py:135 -msgid "Edit new session" -msgstr "" - -#: ../python/kateshell/sessions.py:171 -msgid "Please enter a session name." -msgstr "" - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "" - -#: ../python/kateshell/sessions.py:187 -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "" - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:146 -msgid "No files to print" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -msgstr[1] "" - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:249 -msgid "Print documents" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:252 -msgid "Please select the files you want to print:" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:256 -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:340 -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "" -msgstr[1] "" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:365 -msgid "Print..." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:371 -msgid "Print staff paper" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "" - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "" - -#: ../python/frescobaldi_app/download.py:56 -msgid "Download LilyPond" -msgstr "" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "" - -#: ../python/frescobaldi_app/download.py:68 -msgid "Select the LilyPond version you want to download." -msgstr "" - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:81 -msgid "Install into:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "" - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "" - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:241 -msgid "Downloading %1..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "" - -#: ../python/frescobaldi_app/download.py:263 -msgid "Download failed: %1" -msgstr "" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" - -#: ../python/frescobaldi_app/download.py:284 -msgid "Use existing LilyPond" -msgstr "" - -#: ../python/frescobaldi_app/download.py:285 -msgid "Remove and re-install" -msgstr "" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "" - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -msgid "Unpacking failed." -msgstr "" - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "" - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "" - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "" - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "" - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "" - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "" - -#: ../python/frescobaldi_app/kmid.py:68 -msgid "Pause" -msgstr "" - -#: ../python/frescobaldi_app/kmid.py:85 -msgid "Volume" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -msgid "Internals Reference" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:877 -msgid "The %1 context" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:267 -msgid "Click a dynamic sign to add it to your document." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:268 -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -msgid "Bar Lines" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:354 -msgid "Segno bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:445 -msgid "Bracket Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "" -"Glissandos are attached to a note and automatically extend to the next note." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:466 -msgid "Dashed Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:467 -msgid "Dotted Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:170 -msgid "Print Source..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:488 -msgid "Run LilyPond (custom)..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:502 -msgid "Print Music..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:508 -msgid "Email Documents..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:713 -msgid "Make implicit (per line)" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:714 -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:917 -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:956 -msgid "LilyPond exited with an error compiling %1." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -msgid "Run LilyPond" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:257 -msgid "Select which LilyPond version you want to run:" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:265 -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:310 -msgid "Command" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:317 -msgid "LilyPond %1" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:318 -msgid "Use LilyPond version %1" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -msgid "default" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:322 -msgid "Default LilyPond Version." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:325 -msgid "Automatic LilyPond Version (determined from document)." -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:330 -msgid "Path: %1" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:334 -msgid "LilyPond (version unknown)" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:335 -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" - -#: ../python/frescobaldi_app/sessions.py:39 -msgid "LilyPond-related settings" -msgstr "" - -#: ../python/frescobaldi_app/sessions.py:44 -msgid "LilyPond version to use:" -msgstr "" - -#: ../python/frescobaldi_app/sessions.py:48 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -msgid "LilyPond Preferences" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:298 -msgid "Running LilyPond" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:310 -msgid "LilyPond include path:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:336 -msgid "When saving documents" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:438 -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside " -"Okular. This works best when all instances of Okular are closed and the PDF " -"preview has not yet been opened." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:563 -msgid "Lyrics Hyphenation" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:615 -msgid "" -"Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:648 -msgid "LilyPond versions to use:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "" -"Enable automatic version selection (choose LilyPond version from document)" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:710 -msgid "Document Tabs" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:778 -msgid "Lilypond-book:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:809 -msgid "Path" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:810 -msgid "Version" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:813 -msgid "Can't determine LilyPond version." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:842 -msgid "LilyPond Command:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:847 -msgid "LilyPond Command" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:860 -msgid "Set as default" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:903 -msgid "Start with no session" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:905 -msgid "Start with session:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "" - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "" - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "" - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "" - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "" -"Suppress the display of measure numbers at the beginning of every system." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -msgid "Lyrics:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -msgid "A set of the same lyrics is placed between all staves." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "" -"Every voice gets its own lyrics, using the same text as the other voices." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -msgid "One set of stanzas is distributed across the staves." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "" diff -Nru frescobaldi-1.2.0/po/fr.po frescobaldi-2.0.0/po/fr.po --- frescobaldi-1.2.0/po/fr.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/fr.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,4040 +0,0 @@ -# translation of fr.po to French -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# SVP utiliser pology pour vérifier vos traductions, voir le site web de -# l'équipe de traduction francophone KDE pour plus de détails. -- RK -# -# Valentin Villenave , 2008, 2010. -# BOURIAUD , 2009. -# Ryan Kavanagh , 2009, 2010. -msgid "" -msgstr "" -"Project-Id-Version: nl\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-11-09 09:51+0100\n" -"PO-Revision-Date: 2010-12-11 16:55-0500\n" -"Last-Translator: Ryan Kavanagh \n" -"Language-Team: French \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# fr.po (nl) #-#-#-#-#\n" -"X-Generator: Lokalize 1.1\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "Éditeur de musique LilyPond" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010 par Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Valentin Villenave,David Bouriaud,Ryan Kavanagh" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "valentin@villenave.net,david.bouriaud@ac-rouen.fr,ryanakca@kubuntu.org" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Session à ouvrir" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Ouvrir une nouvelle instance" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Encodage à utiliser" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Numéro de ligne à atteindre, en partant de 1" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Numéro de colonne à atteindre, en partant de 0" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Essayer de numéroter intelligemment les lignes et colonnes" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "Fichiers Lilypond à ouvrir, ou adresses textedit://" - -#: dummy.py:5 -msgid "&Insert" -msgstr "&Insérer" - -#: dummy.py:6 -msgid "&Document" -msgstr "&Document" - -#: dummy.py:7 -msgid "&LilyPond" -msgstr "&LilyPond" - -#: dummy.py:8 -msgid "&Sessions" -msgstr "&Sessions" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "&Hauteur" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "&Paroles" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "&Rythme" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "Document &source" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "&Outils supplémentaires" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "Dédicace" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Titre" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Sous-titre" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "Sous-sous-titre" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Instrument" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Compositeur" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Arrangeur" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Parolier" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Mètre" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Pièce" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Opus" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Copyright" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Pied de page (dernière page)" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "majeur" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "mineur" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "ionien" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "dorien" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "phrygien" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "lydien" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "mixolydien" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "éolien" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "locrien" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Articulation" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Accent" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Marcato" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Staccatissimo" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Staccato" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Portato" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Tenuto" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Ornements" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Trille" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Mordant" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Mordant barré" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Grupetto" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "Double Mordant" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "Mordant puis mordant barré" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "Mordant amorcé par le haut" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "Mordant amorcé par le bas" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "Mordant barré montant" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "Mordant barré descendant" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "Mordant montant" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "Mordant descendant" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "Mordant en ligne" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Grupetto inversé" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "Symboles" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Point d'orgue" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Point d'orgue court" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Point d'arrêt" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Point d'arrêt long" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Segno" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Coda alternative" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "Signumcongruentiae" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Autre" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Poussé" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Tiré" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "Snappizzicato" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "Ouvert (ex. cuivres)" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "Bouché (ex. cuivres)" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Flageolet" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Pouce" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Talon gauche" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Talon droit" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "Pointe gauche" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Pointe droite" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "Demi-ouvert (ex. cymb. charleston)" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Une erreur interne est survenue :" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "Erreur interne" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Envoyer un rapport de bug..." - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "(Facultatif) Décrivez ce que vous faisiez ci-dessous :" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Panneau de gauche" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Panneau de droite" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Panneau du haut" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Panneau du bas" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "Fermer les autres documents" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Afficher l'emplacement" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Afficher les onglets" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "Voir les &outils" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "Nouveau..." - -#: ../python/kateshell/mainwindow.py:240 -msgid "Manage Sessions..." -msgstr "Gérer les sessions..." - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" -"Impossible de trouver l'encadrement XMLGUI « %1 »\n" -"\n" -"Le fichier local ui.rc contient probablement des erreurs. Il est recommandé " -"de supprimer ce fichier, sans quoi des éléments de l'interface ne " -"s'afficheront pas. Voici l'emplacement de ce fichier :\n" -"\n" -"%2\n" - -#: ../python/kateshell/mainwindow.py:325 -msgid "No Session" -msgstr "Aucune session" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Sélectionnez d'abord du texte." - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "modifié" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Ligne : %1 Col. : %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "BLOC" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Mode sélection de blocs" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "LIGNE" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Mode sélection de ligne" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Tous les fichiers" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Ouvrir Fichier" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "Clic droit : options de l'onglet" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Aller à" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Détacher" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "Ne peut ouvrir %1" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Veuillez installer %1" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "Configurer un raccourci" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "Configurer le raccourci clavier pour :" - -#: ../python/kateshell/sessions.py:41 -msgid "Manage Sessions" -msgstr "Gérer les sessions" - -#: ../python/kateshell/sessions.py:99 -msgid "Session" -msgstr "Session" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "Propriétés de cette session" - -#: ../python/kateshell/sessions.py:105 -msgid "Name:" -msgstr "Nom :" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "Toujours enregistrer la liste des documents dans cette session" - -#: ../python/kateshell/sessions.py:115 -msgid "Base directory:" -msgstr "Dossier de base :" - -#: ../python/kateshell/sessions.py:128 -msgid "Edit session: %1" -msgstr "Modifier la session %1" - -#: ../python/kateshell/sessions.py:135 -msgid "Edit new session" -msgstr "Nouvelle session" - -#: ../python/kateshell/sessions.py:171 -msgid "Please enter a session name." -msgstr "Veuillez indiquer un nom de session." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "N'utilisez pas le nom « %1 »." - -#: ../python/kateshell/sessions.py:187 -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "N'utilisez pas l'esperluette (&) dans un nom de session." - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" -"Une autre session avec le nom %1 existe déjà.\n" -"\n" -"Voulez-vous l'écraser ?" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "Ouvrir %1 dans l'afficheur externe" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "Jouer %1" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "(Pas de fichier MIDI ou PDF à-jour disponible.)" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "" -"Aucun fichier MIDI ou PDF n'est disponible. Lancez Lilypond afin de créer un " -"ou plus de fichiers de rendu." - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "Pas de fichier à envoyer par courriel." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "Pas de fichier à envoyer" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" -"Aucun fichier PDF à imprimer.\n" -"\n" -"Vous devez probablement lancer Lilypond pour créer ou mettre à jour un " -"document PDF. Si vous cherchez à créer des fichiers MIDI, incluez également " -"un bloc \\layout { } dans votre partition, sans quoi Lilypond ne créera pas " -"de fichier PDF." - -#: ../python/frescobaldi_app/actions.py:146 -msgid "No files to print" -msgstr "Pas de fichier à imprimer" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "Envoyer les documents par courriel" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Veuillez choisir les fichiers à envoyer :" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" -"Voici les fichiers à jour (c'est-à-dire plus récents que le code source " -"LilyPond). Les fichiers LilyPond inclus dans le document source sont " -"également affichés." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -"Remarque : ce document PDF contient des liens point-and-click (mode aperçu), " -"ce qui accroît considérablement la taille du fichier. En recompilant votre " -"code en mode publication, vous obtiendrez un fichier PDF sera bien plus léger." -msgstr[1] "" -"Remarque : ces documents PDF contiennent des liens point-and-click (mode " -"aperçu), ce qui accroît considérablement la taille du fichier. En " -"recompilant votre code en mode publication, vous obtiendrez des fichiers PDF " -"bien plus légers." - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "" -"Remarque : s'il n'existe pas de fichier PDF ni MIDI, vous devez probablement " -"lancer LilyPond pour mettre à jour ces fichiers avant d'envoyer le courriel." - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "Tout sélectionner" - -#: ../python/frescobaldi_app/actions.py:249 -msgid "Print documents" -msgstr "Imprimer les documents" - -#: ../python/frescobaldi_app/actions.py:252 -msgid "Please select the files you want to print:" -msgstr "Veuillez choisir les fichiers à imprimer :" - -#: ../python/frescobaldi_app/actions.py:256 -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" -"Voici les fichiers à jour (c'est-à-dire plus récents que le code source " -"LilyPond). Vérifiez les documents que vous voulez envoyer à l'imprimante." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "Imprimer %1" - -#: ../python/frescobaldi_app/actions.py:340 -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "Imprimer 1 fichier" -msgstr[1] "Imprimer %1 fichiers" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "" -"Impossible de trouver une commande d'impression (telle que « lpr » ou " -"« lp ») sur votre système." - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "Impossible de trouver la commande « %1 » sur votre système." - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" -"La commande suivante a été lancée, mais s'est terminée avec un code %1.\n" -"\n" -"%2" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "Créer du papier à musique vierge" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "Type :" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "Action :" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "Veuillez choisir le type de portées vides à créer." - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "" -"Veuillez choisir l'action à accomplir lorsque vous cliquerez sur « Ok »." - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "Aperçu du papier à musique vierge." - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "Afficher plus de réglages." - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "Papier" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "Réglages" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Taille du papier :" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "Par défaut" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "Taille des portées :" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "Nombre de pages :" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Enlever le pied de page par défaut." - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "Imprimer les barres de mesures" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "Mesures par ligne :" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "Imprimer les numéros de page" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "Commencer avec :" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "Aperçu du papier à musique vierge" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "Aucun PDF n'a été créé." - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "Ouvrir avec l'afficheur PDF" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "Enregistrer le PDF sous..." - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "Fichiers PDF" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "Enregistrer le PDF" - -#: ../python/frescobaldi_app/blankpaper.py:365 -msgid "Print..." -msgstr "Imprimer..." - -#: ../python/frescobaldi_app/blankpaper.py:371 -msgid "Print staff paper" -msgstr "Imprimer du papier à musique vierge" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "Copier le code LilyPond dans l'éditeur" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "Portées par page :" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "Clé :" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "Portée seule" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "Systèmes par page :" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "Clés" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "Portée de piano" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "Portée d'orgue" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "Portées par système :" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "Clés :" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" -"Saisissez autant de lettres (S, A, T ou B) qu'il y a de portées.\n" -"Voir « Qu'est-ce que c'est ? » pour plus de détails." - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" -"Pour configurer les clés, saisissez le nombre de portées par système. " -"Ensuite saisissez autant de lettres (S, A, T ou B) qu'il y a de portées.\n" -"\n" -"S ou A : clé de sol,\n" -"T : clé de sol 8va bassa,\n" -"B : clé de fa.\n" -"\n" -"Ainsi, pour créer du papier à musique pour un chœur à quatre voix, " -"définissez d'abord 4 portées par système, puis saisissez « SATB » (sans les " -"guillemets)." - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "Portée de chœur" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Aucun" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "Portée personnalisée" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "Portée" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "Espace en dessous :" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "Accolade" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "Crochet" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "Crochet carré" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "Joindre les barres de mesures" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "Caractères spéciaux" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "inconnu" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" -"Impossible d'effectuer la traduction demandée.\n" -"\n" -"La partition contient des altérations en quarts de ton qui ne sont pas " -"disponibles avec les noms de note « %1 »." - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" -"La langue des noms de notes a été mise à jour dans le code sélectionné. Vous " -"devez maintenant ajouter manuellement la commande suivante dans votre " -"document :" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "(pour Lilypond antérieur à 2.14), ou" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "(pour LilyPond 2.14 et ultérieur.)" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Langue pour le nom des notes" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "" -"Veuillez saisir le nom de la variable à laquelle vous souhaitez assigner le " -"texte sélectionné :" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Couper et assigner" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "Ouvrir %1" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "" -"Veuillez sélectionner une expression musicale, contenue dans un bloc << … >> " -"ou { … }." - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" -"Impossible de reconnaître les hauteurs saisies.\n" -"\n" -"Veillez à utiliser les noms de notes de la langue « %1 »." - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" -"Impossible d'effectuer la transposition demandée.\n" -"\n" -"La musique transposée contiendrait des altérations en quarts de ton qui ne " -"sont pas disponibles avec la langue « %1 »." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "Transposer" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "Veuillez indiquer la hauteur de départ et la hauteur d'arrivée :" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "Transposer à partir de :" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "vers :" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "Installer" - -#: ../python/frescobaldi_app/download.py:56 -msgid "Download LilyPond" -msgstr "Télécharger LilyPond" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "" -"Cet outil vous permet de télécharger une version toute-prête de LilyPond " -"adaptée à votre système d'exploitation." - -#: ../python/frescobaldi_app/download.py:68 -msgid "Select the LilyPond version you want to download." -msgstr "Choisissez la version de LilyPond que vous voulez utiliser." - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Version :" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" -"Choisissez l'emplacement où vous voulez installer LilyPond.\n" -"(Un sous-dossier sera créé avec le numéro de version.)" - -#: ../python/frescobaldi_app/download.py:81 -msgid "Install into:" -msgstr "Installer dans :" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "Détails" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "Le site de LilyPond d'où télécharger les fichiers." - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "Télécharger de :" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "Type d'ordinateur :" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" -"Ceci est l'adresse du paquetage qui sera téléchargé et installé. Il vous " -"est\n" -"également possible de choisir un paquetage à partir d'un autre emplacement." - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "URL du paquetage :" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "Téléchargement de la liste des paquetages..." - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "Aucun paquetage trouvé. Veuillez choisir un paquetage manuellement." - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "Dernière version de développement (%1)" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "Dernière version stable (%1)" - -#: ../python/frescobaldi_app/download.py:241 -msgid "Downloading %1..." -msgstr "Téléchargement de %1..." - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "Téléchargement annulé." - -#: ../python/frescobaldi_app/download.py:263 -msgid "Download failed: %1" -msgstr "Le téléchargement a échoué : %1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" -"Il semble que LilyPond %1 soit déjà installé dans %2.\n" -"\n" -"Voulez-vous utiliser cette version ou la supprimer pour réinstaller ?" - -#: ../python/frescobaldi_app/download.py:284 -msgid "Use existing LilyPond" -msgstr "Utiliser la version existante" - -#: ../python/frescobaldi_app/download.py:285 -msgid "Remove and re-install" -msgstr "Enlever et réinstaller" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "Décompression de %1..." - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "Décompression terminée." - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -msgid "Unpacking failed." -msgstr "La décompression a échoué." - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "" -"Une erreur est survenue :\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Gestionnaire d'abréviations" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Chercher..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "Nom" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Description" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Abréviation" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" -"Voici la liste des abréviations définies.\n" -"\n" -"Cliquez sur une ligne pour voir ou changer le texte associé. Double-cliquez " -"sur une abréviation ou sa description pour la modifier, ou appuyez sur F2 " -"pour éditer l'abréviation sélectionnée.\n" -"\n" -"Utilisez les boutons ci-dessous pour ajouter ou enlever des abréviations.\n" -"\n" -"Les abréviations peuvent être utilisées de deux façons : saisissez-les dans " -"le code puis en utilisez la fonction Développer, ou appelez directement la " -"fonction Développer (raccourci par défaut : Ctrl+.), puis choisissez une " -"abréviation dans la liste et appuyez sur Entrée ou cliquez sur Ok." - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" -"Ceci est le texte associé à l'abréviation sélectionnée. Certains caractères " -"ont un sens particulier :" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "Placez le curseur sur ce point." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Traduire la hauteur suivante." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Nouvel élément" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"Une autre abréviation emploie déjà ce nom.\n" -"\n" -"Utilisez un autre nom." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "" -"N'utilisez que des lettres, chiffres ou le caractère souligné dans le nom de " -"l'abréviation." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "Ne laissez pas la description vide." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" -"Impossible de trouver un dictionnaire de césure.\n" -"\n" -"Vous devez soit en installer un, soit configurer l'emplacement de recherche " -"de Frescobaldi, dans « Emplacements. »" - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Séparer les syllabes des paroles" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Choisissez une langue :" - -#: ../python/frescobaldi_app/kmid.py:68 -msgid "Pause" -msgstr "Pause" - -#: ../python/frescobaldi_app/kmid.py:85 -msgid "Volume" -msgstr "Volume" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "Dossier personnel" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "Agrandir le texte" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "Réduire le texte" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "Première page" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Précédent" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "Remonter d'un niveau" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Suivant" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "Table des matières" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "Index" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Copier le &lien" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Ouvrir le lien dans une &nouvelle fenêtre" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Copier" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Ouvrir le document dans une &nouvelle fenêtre" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "Chargement..." - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "Indisponible" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "Manuel de notation" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "Index des commandes LilyPond" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "Manuel d'apprentissage" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "Index du manuel d'apprentissage" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -msgid "Internals Reference" -msgstr "Référence internes" - -#: ../python/frescobaldi_app/lilydoc.py:877 -msgid "The %1 context" -msgstr "Le contexte %1" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "Le %1 objet de disposition" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "&Aide LilyPond" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Direction :" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Haut" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Neutre" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Bas" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "" -"Où ajouter les articulations et autres : en-dessus, en-dessous de la portée, " -"ou avec le placement par défaut." - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "Configurer le raccourci clavier (%1)" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Articulations" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Diverses sortes d'articulations et de symboles." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Cliquez sur une articulation pour l'ajouter dans votre document." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" -"Si vous sélectionnez d'abord un fragment, l'articulation sera ajoutée à " -"toutes les notes de la sélection." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Autoriser les raccourcis" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "Utiliser la notation rapide pour les ponctuations." - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "Nuances" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "Symboles pour les nuances." - -#: ../python/frescobaldi_app/lqi.py:267 -msgid "Click a dynamic sign to add it to your document." -msgstr "Cliquez sur une nuance pour l'ajouter dans votre document." - -#: ../python/frescobaldi_app/lqi.py:268 -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "" -"Si vous sélectionnez d'abord un fragment, des nuances progressives seront " -"ajoutées au fragment sélectionné." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "" -"Si vous avez sélectionné un fragment et que vous choisissez un symbole après " -"une nuance progressive, cette nuance s'achèvera sur ce symbole." - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "Nuance %1" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "Nuances progressives" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "Crescendo graphique" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "Crescendo" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "Diminuendo graphique" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "Diminuendo" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "Decrescendo" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -msgid "Bar Lines" -msgstr "Barres de mesure" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "Barres de mesure, respirations, …" - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Double barre de mesure" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "Double barre de fin" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "Barre de mesure pointillée" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "Barre de mesure en tirets" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Barre de mesure invisible" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "Début de reprise" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "Reprise dans les deux sens" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "Fin de reprise" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "Reprise dans les deux sens (ancien)" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "Reprise dans les deux sens (classique)" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "Barre de mesure style « tic »" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "Barre de mesure simple" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "Barre de mesure fine-épaisse-fine" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "Barre de mesure fine-épaisse" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "Double barre épaisse" - -#: ../python/frescobaldi_app/lqi.py:354 -msgid "Segno bar line" -msgstr "Barre de mesure segno" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "Respirations" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "Virgule" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "Virgule droite" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "Césure courbée" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "Césure droite" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "Liaisons, indications étendues, …" - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "" -"Il est requis de sélectionner un fragment pour ces indications étendues." - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "Liaison" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "Liaison de phrasé" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "Ligature" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "Arpèges" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "Les arpèges sont utilisés avec des accords" - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "Arpège" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "Arpège vers le haut" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "Arpège vers le bas" - -#: ../python/frescobaldi_app/lqi.py:445 -msgid "Bracket Arpeggio" -msgstr "Arpège en crochet" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "Arpège en parenthèse" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "Glissandos" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "" -"Glissandos are attached to a note and automatically extend to the next note." -msgstr "" -"Les glissandos sont attachés à une note, et s'étendent automatiquement " -"jusqu'à la prochaine." - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "Glissando" - -#: ../python/frescobaldi_app/lqi.py:466 -msgid "Dashed Glissando" -msgstr "Glissando en tirets" - -#: ../python/frescobaldi_app/lqi.py:467 -msgid "Dotted Glissando" -msgstr "Glissando en pointillés" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "Glissando en zigzag" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "Glissando en trille" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "Fichiers LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:170 -msgid "Print Source..." -msgstr "Imprimer le document source..." - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Commencer une nouvelle partition..." - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "Lancer LilyPond (aperçu)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "Lancer LilyPond (publication)" - -#: ../python/frescobaldi_app/mainapp.py:488 -msgid "Run LilyPond (custom)..." -msgstr "Lancer LilyPond (personnalisé)..." - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "Interrompre le processus Lilypond" - -#: ../python/frescobaldi_app/mainapp.py:502 -msgid "Print Music..." -msgstr "Imprimer la partition..." - -#: ../python/frescobaldi_app/mainapp.py:508 -msgid "Email Documents..." -msgstr "Envoyer les documents..." - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "Couper la sélection et l'assigner à une variable LilyPond." - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Répéter la dernière note ou accord." - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Répéter la dernière expression musicale (notes ou accords)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "Insérer ou gérer les abréviations..." - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Développer le dernier mot ou ouvrir la fenêtre des abréviations." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "Caractères spéciaux..." - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "Insérer des caractères spéciaux." - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "Ajouter aux abréviations" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Ligne vide suivante" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Aller à la prochaine ligne vide." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Ligne vide précédente" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Aller à la ligne vide précédente." - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "Sélectionner jusqu'à la prochaine ligne vide" - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "" -"Sélectionne le texte de la position courante jusqu'à la prochaine ligne " -"vide, incluse." - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "Sélectionner jusqu'à la ligne vide précédente" - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "" -"Sélectionne le texte de la position courante jusqu'à après la ligne vide " -"précédente." - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "Déplacer la sélection vers la prochaine ligne vide" - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "Déplace le bloc sélectionné vers la prochaine ligne vide." - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "Déplacer la sélection vers la ligne vide précédente" - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "Déplace le bloc sélectionné vers la ligne vide précédente." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "Jouer/Afficher" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "" -"Changer la langue des noms de notes LilyPond dans ce document ou dans la " -"sélection." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "Convertir du mode Relative au mode &Absolu" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" -"Convertit les notes dans le document ou la sélection du mode de hauteurs " -"relatives au mode absolu." - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "Convertir du mode Absolu au mode &Relative" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "" -"Convertit les notes dans le document ou la sélection du mode de hauteurs " -"absolues au mode relative." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "Transposer..." - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "Transpose toutes les notes dans le document ou la sélection." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Doubler les durées" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Doubler toutes les durées dans la sélection." - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Diviser les durées" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Diviser par deux les durées dans la sélection." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Durées pointées" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Ajouter un point à toutes les durées dans la sélection." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Enlever les points" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Enlever un point à toutes les durées de la sélection." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Enlever les multiplicateurs" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "Enlever tous les multiplicateurs des durées dans la sélection." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Enlever les durées" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "Enlever toutes les durées de la sélection." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Durées implicites" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "Rendre les durées implicites (enlever les durées répétées)." - -#: ../python/frescobaldi_app/mainapp.py:713 -msgid "Make implicit (per line)" -msgstr "Durées implicites ligne par ligne" - -#: ../python/frescobaldi_app/mainapp.py:714 -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "" -"Rendre les durées implicites (enlever les durées répétées), sauf au début de " -"chaque ligne." - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Durées explicites" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "" -"Rendre les durées explicites (ajouter une durée à chaque note, même si une " -"valeur est répétée)." - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Appliquer un rythme..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Appliquer un rythme saisi à la musique sélectionnée." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Copier le rythme" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Copier le rythme de la musique sélectionnée." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Coller le rythme" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Coller le rythme de la musique sélectionnée." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Réunir les syllabes des paroles" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "Copier les paroles avec les syllabes réunies" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Guillemets simples" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Guillemets doubles" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Aligner" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "Insérer la version de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "Mettre à jour avec convert-ly" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Ouvrir le dossier courant" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "Répéter la musique sélectionnée." - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "Insérer une paire d'accolades" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" -"Votre document a été modifié et doit être enregistré avant de lancer " -"Lilypond.\n" -"\n" -"Enregistrer le document maintenant ?" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "LilyPond traite déjà ce document." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "Impossible de traiter le document" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "Continuer quand même ?" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "" -"Vous souhaitez lancer LilyPond en mode aperçu (avec l'option point-and-" -"click), mais votre document contient une commande qui désactive le point-and-" -"click." - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" -"Vous souhaitez lancer LilyPond en mode publication (sans l'option point-and-" -"click), mais votre document contient une commande qui active le point-and-" -"click." - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Mettre fin au processus Lilypond en cours d'exécution" - -#: ../python/frescobaldi_app/mainapp.py:917 -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "Lancer LilyPond en mode aperçu (Maj-clic pour personnaliser)" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Insertion rapide" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "LilyPond a correctement compilé %1." - -#: ../python/frescobaldi_app/mainapp.py:956 -msgid "LilyPond exited with an error compiling %1." -msgstr "La compilation de %1 s'est arrêtée avec une erreur." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Appliquer un rythme" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Saisissez un rythme :" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "Saisissez des durées séparées par des espaces (ex. : 8. 16 8 4 8)" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Terminal" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "S&ynchronise le terminal avec le document courant" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "Lecteur MIDI" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" -"Impossible de charger le module KMid.\n" -"Veuillez installer KMid 2.4.0 ou plus récent." - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "Aperçu PDF" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "Afficher le panneau de navigation PDF" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "Afficher les miniatures du PDF." - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Configurer Okular..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "S&ynchroniser l'aperçu avec le document courant" - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "Recharger" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "Messages de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "pas de messages" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "N'afficher qu'en cas d'erreurs." - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "Documentation LilyPond" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" -"Chiffre de mesure. Laissez « Auto » pour que Frescobaldi le détermine à " -"partir du document LilyPond." - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Quantifier :" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "La plus courte valeur à autoriser." - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Unité" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Enregistrer le code LilyPond note par note, sans durées." - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Mono" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Enregistrer du code LilyPond monophonique, sans accords." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" -"Nombre d'altérations (un nombre négatif désigne des bémols). Laissez " -"« Auto » pour que Frescobaldi le détermine à partir du document." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Tempo :" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Chiffre de mesure :" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Tonalité :" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Réglages..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "Réglages avancés, tels que l'entrée et sortie MIDI." - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Enregistrer" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Enregistrer ces réglages en tant que défaut." - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Trouvé Rumor version %1." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "Impossible de trouver Rumor : %1" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "Les réglages ont été enregistrés." - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Enregistre" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Lancer ou arrêter l'enregistrement MIDI Rumor." - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Rumor enregistre, appuyez sur ESC pour l'arrêter." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor arrêté." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "Lancer ou arrêter le client ALSA TiMidity." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Réglages de Rumor" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "Périphérique OSS %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Clavier" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "Entrée MIDI :" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" -"Entrée MIDI à utiliser. Choisissez « Clavier » pour jouer sur le clavier de " -"votre ordinateur." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "Sortie MIDI :" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "Sortie MIDI à utiliser." - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Langue :" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "Langue du nom des notes pour la saisie par Rumor." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Durées explicites" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" -"Ajouter une durée à chaque note, même si une valeur identique est répétée." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Hauteurs absolues" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "Utiliser des hauteurs absolues, et non relatives." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Pas de barres de mesures" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Enlever les barres de mesures de la saisie par Rumor." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Pas de points" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "Utiliser des notes liées et non pointées." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Legato" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "Donner à chaque note sa durée maximale, en supprimant les silences." - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Enlever les silences" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Enlever les silences d'introduction et de fin." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Scripts Guile à charger :" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "" -"Sélectionnez ici des scripts Guile que vous voulez charger dans Rumor. Voir " -"« Qu'est-ce que c'est » pour plus d'informations." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" -"Sélectionnez ici des scripts Guile que vous voulez charger dans Rumor. Vous " -"pouvez ajouter vos propres scripts dans %1. Si la première ligne de votre " -"script commence par un point-virgule (;), cette ligne sera affichée comme " -"description." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "Auto" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "mode aperçu" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "mode publication" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "LilyPond %1 [%2] : lancement (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "LilyPond [%1] : lancement (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "LilyPond [%1] : interruption avec le code %2." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "LilyPond [%1] : interruption avec le code %2." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] : traitement achevé (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "" -"Impossible de lancer LilyPond. Veuillez vérifier l'emplacement et les " -"permissions." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "Impossible de lire à partir du processus LilyPond." - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Une erreur inconnue est survenue." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -msgid "Run LilyPond" -msgstr "Lancer LilyPond" - -#: ../python/frescobaldi_app/runlily.py:257 -msgid "Select which LilyPond version you want to run:" -msgstr "Choisissez la version de LilyPond que vous voulez utiliser :" - -#: ../python/frescobaldi_app/runlily.py:265 -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "Lancer LilyPond en mode aperçu (avec l'option point-and-click)" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "Lancer LilyPond avec des messages détaillés" - -#: ../python/frescobaldi_app/runlily.py:310 -msgid "Command" -msgstr "Commande" - -#: ../python/frescobaldi_app/runlily.py:317 -msgid "LilyPond %1" -msgstr "LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:318 -msgid "Use LilyPond version %1" -msgstr "Utiliser la version %1 de LilyPond" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -msgid "default" -msgstr "défaut" - -#: ../python/frescobaldi_app/runlily.py:322 -msgid "Default LilyPond Version." -msgstr "Version par défaut de LilyPond." - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "automatique" - -#: ../python/frescobaldi_app/runlily.py:325 -msgid "Automatic LilyPond Version (determined from document)." -msgstr "Version automatique de LilyPond (d'après le document)." - -#: ../python/frescobaldi_app/runlily.py:330 -msgid "Path: %1" -msgstr "Emplacement : %1" - -#: ../python/frescobaldi_app/runlily.py:334 -msgid "LilyPond (version unknown)" -msgstr "LilyPond (version inconnue)" - -#: ../python/frescobaldi_app/runlily.py:335 -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "" -"Utiliser LilyPond (version inconnue)\n" -"Emplacement : %1" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Cliquer pour éditer ce fichier" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "Enregistrer les messages de LilyPond sous..." - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"Impossible d'enregistrer les messages de LilyPond :\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -msgid "LilyPond-related settings" -msgstr "Préférences de LilyPond" - -#: ../python/frescobaldi_app/sessions.py:44 -msgid "LilyPond version to use:" -msgstr "Version de LilyPond à utiliser :" - -#: ../python/frescobaldi_app/sessions.py:48 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" -"Sélectionnez ici une version précise de LilyPond à utiliser pour traiter les " -"documents de cette session.\n" -"Voir « Qu'est-ce que c'est » (Maj+F1) pour plus d'informations." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" -"Sélectionnez ici une version précise de LilyPond à utiliser pour traiter les " -"documents de cette session.\n" -"\n" -"La version de LilyPond choisie ici sera utilisée par défaut sur vos " -"documents, et déterminera également la commande « Insérer version »." - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Réglages" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Préférences générales" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Préférences générales de Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -msgid "LilyPond Preferences" -msgstr "Préférences de LilyPond" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Emplacements" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Emplacements vers les programmes ou données utilisées par Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "Entrée MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Configurations du module d'entrée MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Éditeur intégré" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Réglages de l'éditeur intégré." - -#: ../python/frescobaldi_app/settings.py:298 -msgid "Running LilyPond" -msgstr "Exécution de LilyPond" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "Effacer les fichiers de rendu intermédiaires." - -#: ../python/frescobaldi_app/settings.py:310 -msgid "LilyPond include path:" -msgstr "Emplacements d'inclusion Lilypond :" - -#: ../python/frescobaldi_app/settings.py:336 -msgid "When saving documents" -msgstr "Lors de l'enregistrement des documents" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "Se rappeler la position du curseur, les signets, etc." - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Dossier par défaut :" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "Le dossier par défaut de vos documents LilyPond (facultatif)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "Quelle version de LilyPond utiliser pour les nouveaux documents." - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Utiliser le numéro de la version de LilyPond installée" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Utiliser le numéro de version de la dernière règle convert-ly" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Utiliser un numéro de version personnalisé :" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Saisissez un numéro version de LilyPond valable, par exemple 2.12.0" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "Avertissements et notifications" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "" -"Avertir lorsqu'un document contient des options point-and-click " -"contradictoires" - -#: ../python/frescobaldi_app/settings.py:438 -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "" -"Avertir lorsqu'un document doit être enregistré avant de lancer LilyPond" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "Avertir lorsqu'une session risque d'en écraser une autre" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "Point-and-click" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "Activer l'option point-and-click" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "" -"Cliquez ici si le point-and-click ne fonctionne pas. Voir Maj+F1 (« Qu'est-" -"ce que c'est ? ») pour plus de détails." - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside Okular. " -" This works best when all instances of Okular are closed and the PDF preview " -"has not yet been opened." -msgstr "" -"Lors de la première compilation, Frescobaldi essaye de configurer l'aperçu " -"des PDF dans Okular, pour que les liens des objets cliquables renvoient vers " -"Frescobaldi.\n" -"\n" -"Cependant, ce réglage peut être perdu si Frescobaldi est déplacé ou si " -"d'autres applications reconfigurent Okular.\n" -"\n" -"Cliquez ici pour faire de Frescobaldi l'« éditeur personnalisé » d'Okular. " -"Ce changement ne sera pris en compte que si aucune fenêtre d'Okular n'est " -"ouverte, et si l'aperçu PDF n'a pas encore été activé." - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" -"L'aperçu PDF dans Okular a été reconfiguré.\n" -"\n" -"Si vous avez déjà ouvert l'aperçu PDF, redémarrez Frescobaldi pour que les " -"nouveaux réglages soient pris en compte." - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "Applications auxiliaires" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "Lecteur PDF :" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "Lecteur PDF" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "(laissez vide pour le réglage par défaut de votre système)" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "Lecteur MIDI :" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "URL :" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "URL ou emplacement complet de la documentation de LilyPond." - -#: ../python/frescobaldi_app/settings.py:563 -msgid "Lyrics Hyphenation" -msgstr "Césure des paroles" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" -"Emplacements à parcourir pour les dictionnaires de césure d'OpenOffice.org, " -"Scribus, KOffice, … (un seul par ligne). Tout emplacement ne commençant pas " -"par une barre oblique sera parcouru à partir de la variable d'environnement " -"KDEDIRS." - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Commandes utilisées par le module d'entrée MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Nom ou emplacement complet de l'exécutable Rumor." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" -"Nom ou emplacement de l'exécutable aconnect (inclus dans ALSA, pour entrée " -"et sortie MIDI via Rumor)." - -#: ../python/frescobaldi_app/settings.py:615 -msgid "" -"Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" -"Commande complète de lancement de TiMidity (ou autre) en tant que client " -"MIDI pour ALSA." - -#: ../python/frescobaldi_app/settings.py:648 -msgid "LilyPond versions to use:" -msgstr "Versions de LilyPond à utiliser :" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "" -"Enable automatic version selection (choose LilyPond version from document)" -msgstr "" -"Activer la sélection de version automatique (la version de LilyPond sera " -"choisie d'après le document)." - -#: ../python/frescobaldi_app/settings.py:710 -msgid "Document Tabs" -msgstr "Onglets des documents" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "Bouton de fermeture" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "Grands onglets" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "Les onglets peuvent êtres déplacés" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "Convert-ly :" - -#: ../python/frescobaldi_app/settings.py:778 -msgid "Lilypond-book:" -msgstr "LilyPond-book :" - -#: ../python/frescobaldi_app/settings.py:809 -msgid "Path" -msgstr "Emplacement" - -#: ../python/frescobaldi_app/settings.py:810 -msgid "Version" -msgstr "Version" - -#: ../python/frescobaldi_app/settings.py:813 -msgid "Can't determine LilyPond version." -msgstr "Impossible de déterminer la version de LilyPond." - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "Téléchargement..." - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "Télécharger de nouvelles versions de LilyPond." - -#: ../python/frescobaldi_app/settings.py:842 -msgid "LilyPond Command:" -msgstr "Commande de LilyPond :" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "Nom ou emplacement complet de l'exécutable LilyPond." - -#: ../python/frescobaldi_app/settings.py:847 -msgid "LilyPond Command" -msgstr "Commande de LilyPond" - -#: ../python/frescobaldi_app/settings.py:860 -msgid "Set as default" -msgstr "Définir en tant que défaut" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "Inclure dans la sélection automatique de version." - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "Session à charger si Frescobaldi est lancé sans arguments" - -#: ../python/frescobaldi_app/settings.py:903 -msgid "Start with no session" -msgstr "Démarrer sans session" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "Démarrer avec la dernière session utilisée" - -#: ../python/frescobaldi_app/settings.py:905 -msgid "Start with session:" -msgstr "Démarrer avec la session :" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "Choisir une session." - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "Choisissez..." - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "Ce document comprend déjà une indication de version." - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "Version déjà définie" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "" -"Impossible de déterminer la version de LilyPond. Veuillez vérifier votre " -"installation." - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" -"Impossible de déterminer la version de LilyPond utilisée dans ce document. " -"Ajoutez une indication de \\version correcte." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "Ce document est déjà à jour." - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" -"Ce document a été mis à jour par convert-ly. Vous trouverez à la fin les " -"messages de convert-ly, en commentaire. Certains endroits peuvent nécessiter " -"des modifications manuelles." - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" -"Ce document a été traité par convert-ly, mais n'a subi aucun changement. " -"Voici le message rapporté par convert-ly : %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "Impossible de lancer convert-ly : %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Pulsation" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Cliquez plusieurs fois sur ce bouton pour régler le tempo." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "Tempo, en pulsations par minute." - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "Clé de sol" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Alto" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Ténor" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "Clé de sol 8" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Basse" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Percussions" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "Tablature" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "Pas de clé" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Assistant de création de partition." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Titres et En-têtes" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Cliquez pour saisir une valeur." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "bas de la première page" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "bas de la dernière page" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Parties" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Parties disponibles :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Ajouter la partie sélectionnée à votre partition." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Partition :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Réglages de la partition" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Préférences générales" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Noms des instruments" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Armure :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Chiffre de mesure :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Anacrouse :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Indication métronomique :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Indication de tempo :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Indiquez le tempo, par exemple « Allegro »." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Langue pour le nom des notes :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "Langue du nom des notes dans le code LilyPond." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "Version de LilyPond utilisée pour ce document." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Utiliser des guillemets typographiques" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "Remplacer les guillemets standard par des guillemets typographiques." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Enlever le pied de page ajouté par défaut à la dernière page." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Enlever les numéros de mesure" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "" -"Suppress the display of measure numbers at the beginning of every system." -msgstr "Empêcher l'affichage de numéros de mesure au début de chaque système." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "Créer un rendu MIDI" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "Créer un fichier MIDI en plus du rendu PDF." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Afficher l'indication de métronome" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" -"Cochez cette case pour afficher une indication métronomique au début de la " -"partition ; elle sera également utilisée dans la sortie MIDI." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "Inclure la partition dans un bloc \\book" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "Si activé, le bloc \\score sera inclus dans un bloc \\book." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Paysage" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "Premier système :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Long" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Court" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "" -"Utiliser des noms d'instruments longs ou abrégés avant le premier système." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Autres systèmes :" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "" -"Utiliser ou non des noms d'instruments, longs ou courts, avant le prochain " -"système." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "Quel langue utiliser pour les noms d'instruments." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Enlever le pied de page par défaut" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "Pas de réglages possibles." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Voix :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "Nombre de voix sur cette portée." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "En avant la musique !" - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Type de portée :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Portée standard" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Tablature" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Mixte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Accord :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "Ajouter ici des paroles." - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Couplets :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Nombre de couplets." - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Ambitus" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "Afficher la tessiture de la voix au début de la portée." - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Indiquez le nombre de voix distinctes prévues par portée." - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "C'est surtout utile dans de la musique polyphonique (fugue, …)." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Main droite :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Main gauche :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Chiffrages d'accords" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "Ajouter ici des chiffrages." - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Styles d'accords :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "Allemand" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "Semi-Allemand" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "Italien" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "Français" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Diagrammes d'accords de guitare" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" -"Afficher les diagrammes d'accords sous le nom de l'accord (Lilypond 2.12 et " -"plus récent). " - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Basse chiffrée" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "Ajouter des chiffrages ici." - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "Utiliser des lignes d'extension" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Violon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Violon|Vl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Alto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Alto|Alt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Violoncelle" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Violoncelle|Vlc." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Contrebasse" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Contrebasse|Cb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Basse Continue" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Basse continue|Cont." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Mandoline" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandoline|Mdl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Accord de mandoline" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Banjo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Banjo|Bj." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "Accord en Sol ouvert (la Ré Sol Si Ré)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "Accord en Do (sol Do Sol Si Ré)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "Accord modal (sol Ré Sol Do Ré)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "Accord en Ré ouvert (la Ré Fad La Ré)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "Accord en Ré mineur (la Ré Fa La Ré)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Quatre cordes (au lieu de cinq)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Guitare Classique" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Guitare|Gtr." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Accord de Guitare" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "Accord de Sol ouvert" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Guitare Jazz" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Guitare Jazz|Gtr.J." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Basse|Bas." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "Accord de basse" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Basse électrique" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Basse électrique|Bas.E." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Harpe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Harpe|Hp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "Portée supérieure :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "Portée inférieure :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Flûte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Flûte|Fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Piccolo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Piccolo|Pic." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Flûte Basse" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Flûte Basse|Fl.B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Hautbois" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Hautbois|Htb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Hautbois d'amour" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Hautbois d'amour|Htb.d'am." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "Cor Anglais" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "Cor Anglais|C.Angl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Basson" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Basson|Bn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Contrebasson" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Contrebasson|C.Bn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Clarinette" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Clarinette|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Saxophone Sopranino" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Saxophone Sopranino|SaxSnn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Saxophone Soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Saxophone Soprano|SaxSpn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Saxophone Alto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Saxophone Alto|SaxAlt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Saxophone Ténor" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Saxophone Ténor|SaxTén." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Saxophone Baryton" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Saxophone Baryton|SaxBar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Saxophone Basse" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Saxophone Basse|SaxBas." - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Flûte à bec Soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Flûte à bec Soprano|Fl.S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Flûte à bec Alto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Flûte à bec Alto|Fl.A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Flûte à bec Ténor" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Flûte à bec Ténor|Fl.T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Flûte à bec Basse" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Flûte à bec Basse|Fl.B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Cor en Fa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Cor en Fa|C.Fa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Trompette en Ut" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Trompette en Ut|Tr.Ut" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Trompette en Sib" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Trompette en Sib|Tr.Sib." - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Trombone" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Trombone|Tbn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Tuba Basse" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Tuba Basse|Tb.B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Soprano|Sopr." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Mezzo Soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzo-soprano|Mezz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Alto|Alt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Ténor|Tén." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Basse|Bas." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Song book" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" -"Un Song book s'écrit sur une portée, entourée de chiffrages d'accords et de " -"paroles. Une seconde portée peut être ajoutée." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Ajouter une portée d'accompagnement." - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" -"Ajoute une portée d'accompagnement, et une voix d'accompagnement à la portée " -"du haut." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Chœur" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" -"Veuillez choisir les voix du chœur, au moyen des lettres S A T B. Ajoutez " -"des tirets pour délimiter les portées." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "Astuce : un double chœur peut s'écrire avec deux parties de chœur." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Harmonisation :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -msgid "Lyrics:" -msgstr "Paroles :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Mêmes paroles pour toutes les voix" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -msgid "A set of the same lyrics is placed between all staves." -msgstr "L'ensemble des paroles est imprimé entre toutes les portées." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Mêmes paroles pour chaque voix" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "" -"Every voice gets its own lyrics, using the same text as the other voices." -msgstr "" -"Chaque voix a ses propres paroles, mais le texte est le même pour toutes." - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Différentes paroles pour chaque voix" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Chaque voix a son propre texte." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "Répartir les couplets" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -msgid "One set of stanzas is distributed across the staves." -msgstr "L'ensemble des couplets est réparti entre les portées." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "Réduction pour piano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "Ajoute une réduction pour piano générée de façon automatique." - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "Fichiers MIDI de répétitions" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "" -"Génère un fichier MIDI pour répéter voix par voix, même si aucun MIDI n'est " -"généré pour la partition d'ensemble." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Chœur|Ch." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "Fichiers MIDI pour répétitions :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Piano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Piano|Pno." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Clavecin" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Clavecin|Clav." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Clavicorde" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Clavicorde|Clav." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Orgue" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Orgue|Org." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Pédale :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Définir à 0 pour désactiver la pédale." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Célesta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Célesta|Cél." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Timbales" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Timbales|Tmb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Xylophone" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Xylophone|Xyl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Marimba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Vibraphone" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Vibraphone|Vib." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Cloches tubulaires" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Cloches tubulaires|Cl.Tub." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Glockenspiel" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Glockenspiel|Gls." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Percussions" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Percussions|Perc." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "Ajouter notation de percussions." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "maintenir de l'espace" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Style :" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Percussions standard (5 lignes)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Timbales (2 lignes)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Congas (2 lignes)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Bongos (2 lignes)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Percussion simple (1 ligne)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Ôter les hampes" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Enlever les hampes des notes de percussion." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Cordes" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Cordes pincées" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Bois" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Cuivres" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "Section vocale" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Claviers" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Spécial" - -#~ msgid "Open PDF" -#~ msgstr "Ouvrir PDF" - -#~ msgid "Print" -#~ msgstr "Imprimer" - -#~ msgid "Play MIDI" -#~ msgstr "Jouer MIDI" - -#~ msgid "Email..." -#~ msgstr "Envoyer..." - -#~ msgid "Disable the built-in PDF preview" -#~ msgstr "Désactiver l'aperçu PDF intégré" - -#~ msgid "The direction to use for the articulations." -#~ msgstr "Direction à utiliser pour les articulations." - -#~ msgid "&Generated Files" -#~ msgstr "Fichiers &générés" - -#~ msgid "Your document has been modified, please save first." -#~ msgstr "Ce document a été modifié. Veuillez l'enregistrer." - -#~ msgid "LilyPond documentation:" -#~ msgstr "Documentation LilyPond :" - -#~ msgid "The document has been sent to the printer." -#~ msgstr "Le document a été envoyé à l'imprimante." - -#~ msgid "" -#~ "Printing failed: %1\n" -#~ "\n" -#~ "The print command %2 does probably not exist. Please check your settings." -#~ msgstr "" -#~ "L'impression a échoué : %1\n" -#~ "\n" -#~ "La commande d'impression %2 n'existe probablement pas. Veuillez vérifier " -#~ "vos réglages." - -#~ msgid "The print command contains errors. Please check your settings." -#~ msgstr "" -#~ "La commande d'impression contient des erreurs. Veuillez vérifier vos " -#~ "réglages." - -#~ msgid "Directly print on default printer" -#~ msgstr "Imprimer directement avec l'imprimante par défaut" - -#, fuzzy -#~ msgid "Notify when a document has been sent to the printer" -#~ msgstr "Le document a été envoyé à l'imprimante." - -#~ msgid "Printcommand:" -#~ msgstr "Commande d'impression :" - -#~ msgid "" -#~ "Command to print a PDF file, for example lpr or kprinter. You may add " -#~ "some arguments, e.g. lpr -P myprinter." -#~ msgstr "" -#~ "Commande d'impression des fichiers PDF, telle que lpr ou kprinter. Des " -#~ "arguments peuvent être ajoutés, tels que lpr -P Imprimante." - -#~ msgid "Space above:" -#~ msgstr "Espace au-dessus :" - -#~ msgid "Name or full path of the convert-ly program." -#~ msgstr "Nom ou emplacement complet de l'exécutable convert-ly." - -#~ msgid "Expand" -#~ msgstr "Abréviation" - -#~ msgid "Could not understand the entered pitches." -#~ msgstr "Impossible de comprendre les hauteurs saisies." - -#~ msgid "Dock" -#~ msgstr "Ancrer" - -#~ msgid "Show" -#~ msgstr "Afficher" - -#~ msgid "Paper Size A4" -#~ msgstr "Format A4" - -#~ msgid "Paper Size A5" -#~ msgstr "Format A5" - -#~ msgid "Paper Size Letter" -#~ msgstr "Format Letter" - -#~ msgid "Stem Up" -#~ msgstr "Hampes vers le haut" - -#~ msgid "Stem Down" -#~ msgstr "Hampes vers le bas" - -#~ msgid "Lyric Stanza" -#~ msgstr "Couplet" - -#~ msgid "Score section" -#~ msgstr "Section Score (partition)" - -#~ msgid "Layout Section" -#~ msgstr "Section Layout (mise en page)" - -#~ msgid "Midi section" -#~ msgstr "Section Midi" - -#~ msgid "With: instrumentName" -#~ msgstr "Avec instrumentName (nom de l'instrument)" - -#~ msgid "With: shortInstrumentName" -#~ msgstr "Avec shortInstrumentName (abbréviation)" - -#~ msgid "Modern 2/2 Time Signature" -#~ msgstr "Chiffre de mesure 2/2 moderne" - -#~ msgid "Modern 4/4 Time Signature" -#~ msgstr "Chiffre de mesure 4/4 moderne" - -#~ msgid "New Lyrics" -#~ msgstr "Nouveau Lyrics (paroles)" - -#~ msgid "Your document currently has no filename, please save first." -#~ msgstr "Votre document n'a pas de nom, veuillez d'abord l'enregistrer." - -#~ msgid "" -#~ "Sorry, support for remote files is not yet implemented.\n" -#~ "Please save your document to a local file." -#~ msgstr "" -#~ "Le traitement de fichiers distants n'est pas encore pris en charge.\n" -#~ "Enregistrez ce document dans un fichier local." - -#~ msgid "Already Running" -#~ msgstr "Déjà en cours" diff -Nru frescobaldi-1.2.0/po/gl.po frescobaldi-2.0.0/po/gl.po --- frescobaldi-1.2.0/po/gl.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/gl.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,3961 +0,0 @@ -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Manuel A. Vazquez , 2009. -msgid "" -msgstr "" -"Project-Id-Version: frescobaldi 0.7.17\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-11-09 09:51+0100\n" -"PO-Revision-Date: 2009-12-30 10:14+0100\n" -"Last-Translator: Manuel A. Vazquez \n" -"Language-Team: Galician \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.0\n" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "Editor de música para LilyPond" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Manuel A. Vázquez" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "xixirei@yahoo.es" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Sesión para iniciar" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Iniciar unha nova instancia" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Codificación para usar" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Número de liña ao que saltar, comezando por 1" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Columna á que ir, comezando por 0" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Tartar de empregar números intelixentes de liña e columna" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "Ficheiro de Lilypond para abrir, tamén poden ser URLs de texedit" - -#: dummy.py:5 -msgid "&Insert" -msgstr "&Inserir" - -#: dummy.py:6 -msgid "&Document" -msgstr "&Documento" - -#: dummy.py:7 -#, fuzzy -msgid "&LilyPond" -msgstr "LilyPond" - -#: dummy.py:8 -#, fuzzy -msgid "&Sessions" -msgstr "Sesión para iniciar" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "&Altura" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "&Letra" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "Du&racións" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "&Código fonte do documento" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "Ferramentas &adicionais" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "Dedicatoria" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Título" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Subtítulo" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "Sub-subtítulo" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Instrumento" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Compositor" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Autor/a dos arranxos" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Poeta" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Compás" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Peza" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Opus" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Copyright" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Pé de páxina" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "Maior" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "Menor" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "Xónico" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "Dórico" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "Frixio" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "Lidio" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "Mixolidio" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "Eolio" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "Locrio" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Articulación" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Acento" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Marcato" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Staccatissimo" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Picado" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Portato" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Tenuto" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Ornamentos" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Trino" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Semitrino" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Mordente" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Grupeto" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "Semitrino longo" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "Semitrino con resolución" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "Semitrino ascendente" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "Semitrino descendente" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "Mordente ascendente" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "Mordente descendente" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "Semitrino con final ascendente" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "Semitrino con final descendente" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "Semitrino liñal" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Grupeto invertido" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "Símbolos" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Caldeirón" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Caldeirón curto" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Caldeirón longo" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Caldeirón moi longo" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Segno" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Varcoda" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "Signumcongruentiae" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Outro" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Arco arriba" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Arco abaixo" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "Aberto (ex. metais)" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "Tapado (ex. metais)" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Flageolet (harmónico)" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Polgar" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Talón esquerdo" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Talón dereito" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "Punta esquerda" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Punta dereita" - -#: ../python/ly/articulation.py:82 -#, fuzzy -msgid "Half open (e.g. hi-hat)" -msgstr "Aberto (ex. metais)" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Houbo un erro interno:" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "Erro interno" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Enviar informe de erro..." - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "Opcionalmente, describe aquí o que estaba a facer:" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Barra lateral esquerda" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Barra lateral dereita" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Barra superior" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Barra inferior" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Amosar a ruta" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Amosar separadores do documento" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "Vistas de ferramen&tas" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "" - -#: ../python/kateshell/mainwindow.py:240 -#, fuzzy -msgid "Manage Sessions..." -msgstr "Inserir ou xestionar expansións..." - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" - -#: ../python/kateshell/mainwindow.py:325 -#, fuzzy -msgid "No Session" -msgstr "Percusión" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Seleccione primeiro algo de texto." - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "modificado" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Liña: %1 Columna: %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "BLOQUE" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Modo de selección de bloques" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "LIÑA" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Modo de selección de liñas" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Todos os ficheiros" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Abrir ficheiro" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "Clic dereito para opcións dos separadores" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Mover a" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Desacoplar" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "Non se puido cargar %1" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Instale %1" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "" - -#: ../python/kateshell/sessions.py:41 -#, fuzzy -msgid "Manage Sessions" -msgstr "Inserir ou xestionar expansións..." - -#: ../python/kateshell/sessions.py:99 -#, fuzzy -msgid "Session" -msgstr "Sesión para iniciar" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "" - -#: ../python/kateshell/sessions.py:105 -#, fuzzy -msgid "Name:" -msgstr "Nome" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "" - -#: ../python/kateshell/sessions.py:115 -#, fuzzy -msgid "Base directory:" -msgstr "Directorio predeterminado:" - -#: ../python/kateshell/sessions.py:128 -#, fuzzy -msgid "Edit session: %1" -msgstr "Comezar en:" - -#: ../python/kateshell/sessions.py:135 -#, fuzzy -msgid "Edit new session" -msgstr "Comezar en:" - -#: ../python/kateshell/sessions.py:171 -#, fuzzy -msgid "Please enter a session name." -msgstr "Empregue só letras, números e o guión baixo no nome da expansión." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "" - -#: ../python/kateshell/sessions.py:187 -#, fuzzy -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "Empregue só letras, números e o guión baixo no nome da expansión." - -#: ../python/kateshell/sessions.py:195 -#, fuzzy -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" -"Xa existe un ficheiro chamado \"%1\". Est´a seguro de querer sobrescribilo?" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "Abrir %1 nun visor externo" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "Reproducir %1" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "Non hai ningún ficheiro para enviar por correo-e." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "Non hai ningún ficheiro que enviar" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:146 -#, fuzzy -msgid "No files to print" -msgstr "Non hai ningún ficheiro que enviar" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "Documentos por correo electrónico" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Seleccione os ficheiros que quere enviar:" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" -"Estes son os ficheiros que están actualizados (é dicir, que son máis " -"recentes que o documento fonte de LilyPond). Tamén se amosan os ficheiros de " -"LilyPond incluídos polo documento fonte." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -"Nota: este ficheiro PDF foi creado con enderezos URL inscrustados de apuntar " -"e premer (modo vista previa), que aumenta moito o tamaño do ficheiro. " -"Considere a posibilidade de volver construír o ficheiro no modo publicación, " -"porque o ficheiro PDF é moito máis pequeno." -msgstr[1] "" -"Nota: estes ficheiros PDF foron creados con enderezos URL inscrustados de " -"apuntar e premer (modo vista previa), que aumenta moito o tamaño do " -"ficheiro. Considere a posibilidade de volver construír os ficheiros no modo " -"publicación, porque os ficheiros PDF son moito máis pequenos." - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:249 -#, fuzzy -msgid "Print documents" -msgstr "Documentos por correo electrónico" - -#: ../python/frescobaldi_app/actions.py:252 -#, fuzzy -msgid "Please select the files you want to print:" -msgstr "Seleccione os ficheiros que quere enviar:" - -#: ../python/frescobaldi_app/actions.py:256 -#, fuzzy -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" -"Estes son os ficheiros que están actualizados (é dicir, que son máis " -"recentes que o documento fonte de LilyPond). Tamén se amosan os ficheiros de " -"LilyPond incluídos polo documento fonte." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "Imprimir %1" - -#: ../python/frescobaldi_app/actions.py:340 -#, fuzzy -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "Imprimir %1" -msgstr[1] "Imprimir %1" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "Crear papel de música en branco" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "Tipo:" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "Acción:" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "Seleccione o número de pautas baleiras que quere crear." - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "Seleccione a acción que vai suceder ao premer en \"Aceptar\"." - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "Vista previa do papel de música baleiro." - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "Prema para ver máis opcións." - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "Papel" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "Configuración" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Tamaño do papel:" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "Predeterminado" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "Tamaño do pentagrama" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "Número de páxinas:" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Eliminar o pé de páxina predeterminado" - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "Imprimir liñas divisorias" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "Compases por liña:" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "Imprimir os números de páxina" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "Comezar en:" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "Vista previa do papel pautado" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "Non se creou ningún PDF." - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "Abrir no visor de PDF" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "Gardar PDF como..." - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "Ficheiros PDF" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "Gardar PDF" - -#: ../python/frescobaldi_app/blankpaper.py:365 -#, fuzzy -msgid "Print..." -msgstr "Imprimir" - -#: ../python/frescobaldi_app/blankpaper.py:371 -#, fuzzy -msgid "Print staff paper" -msgstr "Crear papel de música en branco" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "Copiar o código de LilyPond ao editor" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "Pentagramas por páxina:" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "Clave:" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "Pentagrama sinxelo" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "Sistemas por páxina:" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "Claves" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "Sistema para piano" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "Sistema para órgano" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "Pentagramas por sistema:" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "Claves:" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" -"Introduza tantas letras (S, A, T ou B) como pentagramas haxa.\n" -"Consulte \"Que é isto\" para máis información." - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" -"Para configurar as claves, en primeiro lugar estableza o número de " -"pentagramas por sistema. Despois, escriba tantas letras (S, A, T ou B) como " -"pentagramas.\n" -"\n" -"S ou A: clave de sol,\n" -"T: clave de sol en oitava baixa,\n" -"B: clave de fa\n" -"\n" -"Deste xeito, cando queira crear papel pautado para un coro mixto a catro " -"voces, estableza primeiro o número de pentagramas por sistema a 4 e logo " -"escriba \"SATB\" (sen as comiñas)." - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "Sistema para coro" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Ningún" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "Pentagrama personalizado" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "Pentagrama" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "Espazo por debaixo:" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "Chave curva" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "Corchete" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "Corchete" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "Conectar as liñas divisorias" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" -"Non se puido realizar a tradución solicitada.\n" -"\n" -"A música contén alteracións de cuartos de ton, pero non están dispoñibles no " -"idioma de notas \"%1\"." - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" -"Actualizouse o idioma de notas do texto seleccionado, pero debe engadir " -"manualmente a seguinte orde ao documento:" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Idioma das notas" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "Introduza o nome da variábel para asignarlle o texto seleccionado:" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Cortar e asignar" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "Abrir %1" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "Seleccione unha expresión musical, pechada entre << ... >> ou { ... }." - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" -"Non se entenden as alturas introducidas.\n" -"\n" -"Asegúrese que emprega nomes de notas no idioma \"%1\"." - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" -"Non se puido realizar a transposición solicitada.\n" -"\n" -"A música contén alteracións de cuartos de ton que non están dispoñibles no " -"idioma das notas \"%1\"." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "Transportar" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "Introduza unha nota de orixe e unha nota de destino:" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "Transportar desde:" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "a:" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "" - -#: ../python/frescobaldi_app/download.py:56 -#, fuzzy -msgid "Download LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "" - -#: ../python/frescobaldi_app/download.py:68 -#, fuzzy -msgid "Select the LilyPond version you want to download." -msgstr "Seleccione os ficheiros que quere enviar:" - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Versión:" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:81 -#, fuzzy -msgid "Install into:" -msgstr "Italiano" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "" - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "" - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:241 -#, fuzzy -msgid "Downloading %1..." -msgstr "A cargar..." - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "" - -#: ../python/frescobaldi_app/download.py:263 -#, fuzzy -msgid "Download failed: %1" -msgstr "Fallou a impresión: %1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" - -#: ../python/frescobaldi_app/download.py:284 -#, fuzzy -msgid "Use existing LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/download.py:285 -#, fuzzy -msgid "Remove and re-install" -msgstr "Eliminar duracións" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "" - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -#, fuzzy -msgid "Unpacking failed." -msgstr "Fallou a impresión: %1" - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -#, fuzzy -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "Houbo un erro descoñecido." - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Xestor de expansións" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Procurar..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "Nome" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Descrición" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Atallo" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" -"Lista de expansións definidas.\n" -"\n" -"Prema sobre una fila para ver ou cambiar o texto asociado. Faga dobre clic " -"sobre unha abreviatura ou a súa descrición para modificala. Tamén pode " -"premer F2 para editar a abreviatura actual.\n" -"\n" -"Use os bostóns de abaixo para engadir ou eliminar expansións.\n" -"\n" -"Existen dous xeitos de utilizar a expansión: teclee a abreviatura no texto e " -"chame á función Expandir ou chame á función Expandir (o atallo " -"predeterminado é Ctrl+.), seleccione a expansión da lista e prema Enter ou " -"prema Aceptar." - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" -"Este é o texto asociado á abreviatura seleccionada. Algúns caracteres teñen " -"un significado especial:" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "Situar o cursor sobre este punto." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Traducir a seguinte nota." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Elemento novo" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"O nome está a ser empregado por outra expansión.\n" -"\n" -"Empregue un nome distinto." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "Empregue só letras, números e o guión baixo no nome da expansión." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "Non deixe baleira a descrición." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Guionizar o texto da letra" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Seleccione un idioma:" - -#: ../python/frescobaldi_app/kmid.py:68 -#, fuzzy -msgid "Pause" -msgstr "Papel" - -#: ../python/frescobaldi_app/kmid.py:85 -#, fuzzy -msgid "Volume" -msgstr "Inicio" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "Inicio" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "Texto máis grande" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "Texto máis pequeno" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "Primeira páxina" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Anterior" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "Subir un nivel" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Seguinte" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "Táboa de contidos" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "Índice" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Copiar &ligazón" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Abrir a ligazón nunha &nova fiestra" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Copiar" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Abrir o documento nunha &nova fiestra" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "A cargar..." - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "Non dispoñible" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "Referencia da notación" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "Índice de ordes de LilyPond" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "Manual de aprendizaxe" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "Índice do manual de aprendizaxe" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -#, fuzzy -msgid "Internals Reference" -msgstr "Preferencias xerais" - -#: ../python/frescobaldi_app/lilydoc.py:877 -#, fuzzy -msgid "The %1 context" -msgstr "Táboa de contidos" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "A&xuda de LilyPond" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Dirección:" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Arriba" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Neutro" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Abaixo" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Articulacións" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Diferentes tipos de articulacións e outros símbolos." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Prema sobre unha articulación para inserila no documento." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" -"Se selecciona un bloque de música primeiro, engádese a articulación a todas " -"as notas da selección." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Permitir abreviaturas" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "Empregar notación curta para certas articulacións como picado." - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:267 -#, fuzzy -msgid "Click a dynamic sign to add it to your document." -msgstr "Prema sobre unha articulación para inserila no documento." - -#: ../python/frescobaldi_app/lqi.py:268 -#, fuzzy -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "" -"Se selecciona un bloque de música primeiro, engádese a articulación a todas " -"as notas da selección." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -#, fuzzy -msgid "Bar Lines" -msgstr "&Barras de compás" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Dobre barra" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "Dobre barra final" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "Barra con puntos de repetición" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "Barra descontinua" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Barra invisible" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "Inicio de repetición" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "Repetición dobre" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "Fin de repetición" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "Repetición dobre (vella)" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "Repetición dobre (clásica)" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "Liña divisoria curta" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "Liñas divisoria simple" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "Barra fina-grosa-fina" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "Barra grosa-fina" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "Barra grosa dobre" - -#: ../python/frescobaldi_app/lqi.py:354 -#, fuzzy -msgid "Segno bar line" -msgstr "Liñas divisoria simple" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:445 -#, fuzzy -msgid "Bracket Arpeggio" -msgstr "Corchete" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "" -"Glissandos are attached to a note and automatically extend to the next note." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:466 -#, fuzzy -msgid "Dashed Glissando" -msgstr "Barra descontinua" - -#: ../python/frescobaldi_app/lqi.py:467 -#, fuzzy -msgid "Dotted Glissando" -msgstr "Barra con puntos de repetición" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "Ficheiros de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:170 -#, fuzzy -msgid "Print Source..." -msgstr "Imprimir" - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Configurar unha nova partitura..." - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "Executar LilyPond (vista previa)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "Executar LilyPond (publicar)" - -#: ../python/frescobaldi_app/mainapp.py:488 -#, fuzzy -msgid "Run LilyPond (custom)..." -msgstr "Executar LilyPond (publicar)" - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "Interromper a tarefa de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:502 -#, fuzzy -msgid "Print Music..." -msgstr "Imprimir" - -#: ../python/frescobaldi_app/mainapp.py:508 -#, fuzzy -msgid "Email Documents..." -msgstr "Documentos por correo electrónico" - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "Cortar a selección e asignala a unha variable de LilyPond." - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Repetir a última nota ou acorde" - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Repetir a última expresión musical (nota ou acorde)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "Inserir ou xestionar expansións..." - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Expandir a última palabra ou abrir o diálogo de expansións." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:531 -#, fuzzy -msgid "Insert special characters." -msgstr "Inserir par de chaves" - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "Engadir a expansións" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Liña en branco seguinte" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Ir á seguinte liña en branco." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Liña en branco anterior" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Ir á anterior liña en branco." - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "Seleccionar até a seguinte liña en branco" - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "" -"Selecciona texto desde a posición actual ata a seguinte liña en branco " -"incluída." - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "Seleccionar até a liña en branco anterior" - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "" -"Selecciona texto desde a posición actual ata xusto antes da liña en branco " -"anterior." - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "Mover á selección até a seguinte liña en branco" - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "Mover o bloque seleccionado ata a seguinte liña en branco." - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "Mover a selección á liña anterior en branco" - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "Mover o bloque seleccionado á liña anterior en branco." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "" -"Mudar o idioma de LilyPond que se emprega para os nomes das notas neste " -"documento ou na selección." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "Converter relativo en &absoluto" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" -"Converte as notas do documento ou a selección de alturas relativas a " -"absolutas." - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "Converter absoluto a &relativo" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "" -"Converte as notas do documento ou a selección de alturas absolutas a " -"relativas." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "Transportar..." - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "Transporta todas as notas do documento ou da selección." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Duplicar duracións" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Duplicar todas as duracións na selección." - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Reducir á metade" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Reducir á metade todas as duracións na selección." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Duracións con punto" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Engadir punto a todas as duracións na selección." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Quitar puntos" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Eliminar o punto de todas as duracións da selección." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Eliminar escalado" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "" -"Eliminar todos os factores de escala (*n/m) das duracións da selección." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Eliminar duracións" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "Eliminar todas as duracións da selección." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Facer implícitas" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "" -"Facer que as duracións sexan implícitas (eliminar as duracións repetidas)." - -#: ../python/frescobaldi_app/mainapp.py:713 -#, fuzzy -msgid "Make implicit (per line)" -msgstr "Facer implícitas" - -#: ../python/frescobaldi_app/mainapp.py:714 -#, fuzzy -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "" -"Facer que as duracións sexan implícitas (eliminar as duracións repetidas)." - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Facer explícitas" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "" -"Facer explícitas as duracións (escribir a duración despois de cada nota, " -"incluso cando é a mesma que a da nota anterior)." - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Aplicar ritmo..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Aplicar unhas duracións dadas á música seleccionada." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Copiar duracións" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Copiar as duracións da música seleccionada." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Pegar duracións" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Pegar duracións á música seleccionada." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Eliminar a guionización" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Comiña simple" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Comiña dobre" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Aliñar" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "Inserir a versión de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "Actualizar mediante convert-ly" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Abrir o cartafol actual" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "Repetir a música seleccionada" - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "Inserir par de chaves" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "Xa está en execución unha tarefa de LilyPond para este documento." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "Non se pode procesar o documento" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Abortar o proceso de LilyPond en execución" - -#: ../python/frescobaldi_app/mainapp.py:917 -#, fuzzy -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "Executar LilyPond en modo vista previa" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Inserción rápida" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:956 -#, fuzzy -msgid "LilyPond exited with an error compiling %1." -msgstr "LilyPond [%1] devolveu ao saír o código %2." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Aplicar ritmo" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Introduza unhas duracións:" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "" -"Introducir un ritmo empregando valores de duración separados por espazos " -"(ex. 8. 16 8 4 8)" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Terminal" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "&Sincronizar o terminal co documento actual" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "Reprodutor MIDI" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "Vista previa do PDF" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "Amosar o panel de navegación do PDF" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "Amosar o mini-paxinador de PDF" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Configurar Okular..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "&Sincronizar a vista previa co documento actual" - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "Cargar de novo" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "Rexistro de LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "sen rexistro" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "Amosar só se hai erros" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "Documentación de LilyPond" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" -"Compás a empregar. Déixeo en 'Automático' para que Frescobladi determine o " -"compás a partires do documento de LilyPond." - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Cuantizar:" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "Duración da nota máis curta que se vai usar." - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Pasos" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Gravar a entrada de LilyPond nota a nota, sen as duracións." - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Mono" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Gravar unha entrada monofónica, sen acordes." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" -"Número de alteracións. Un número negativo significa bemois. Déixeo en " -"'Automático' para que Frescobaldi determine a tonalidade a partires do " -"documento de LilyPond." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Tempo:" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Compás:" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Tonalidade:" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Configurar..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "Configurar máis axustes, como a entrada e saída MIDI." - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Gardar" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Establecer estes axustes como predeterminados." - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Atopouse a versión %1 de Rumor." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "Non se atopou Rumor: %1" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "Gardáronse os axustes." - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Gravar" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Iniciar ou deter a gravación MIDI de Rumor." - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Rumor está a gravar, prema ESC para deter." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor detido." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "Iniciar ou deter o cliente MIDI de ALSA TiMidity." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Configuración de Rumor" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "Dispositivo OSS %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Teclado" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "Entrada de MIDI:" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" -"A entrada MIDI que vai empregar. Escolla 'Teclado' se quere tocar no teclado " -"do seu computador." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "Saída de MIDI:" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "Saída MIDI para empregar." - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Idioma:" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "O idioma de LilyPond no que quere que Rumor grave as notas." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Duracións explícitas" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" -"Engadir a duración despois de cada nota, aínda que sexa a mesma que a da " -"nota anterior." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Altura absoluta" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "Empregar alturas absolutas en vez de relativas." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Sen liñas divisorias" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Filtrar as barras de compás da saída de Rumor." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Sen puntos" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "" -"Non empregar notas con punto, no seu lugar, empregar ligaduras de unión." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Legato" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "Non usar silencios, todas as notas teñen a máxima lonxitude." - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Quitar silencios" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Quitar os silencios inicial e final da saída." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Cargar scripts de Guile:" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "" -"Aquí pode elexir os scripts de Guile que quere que Rumor cargue. Comprobe a " -"saída de \"Que é isto\" para obter máis información." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" -"Aquí pode elexir os scripts de Guile que quere que Rumor cargue. Pode " -"engadir os seus propios scripts situándoos en %1. Se a primeira liña do " -"script comeza por punto e coma (;), esa liña amosarase coma unha descrición." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "Automático" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "Modo vista previa" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "Modo publicación" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "LilyPond %1 [%2] iniciando (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "LilyPond [%1] iniciando (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "LilyPond [%1] devolveu ao saír o código %2." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "LilyPond [%1] devolveu ao saír o código %2." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] rematou (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "Non se puido iniciar LilyPond. Comprobe a ruta e os permisos." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "Non se puido ler a partires do proceso LilyPond." - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Houbo un erro descoñecido." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -#, fuzzy -msgid "Run LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/runlily.py:257 -#, fuzzy -msgid "Select which LilyPond version you want to run:" -msgstr "Seleccione os ficheiros que quere enviar:" - -#: ../python/frescobaldi_app/runlily.py:265 -#, fuzzy -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "Executar LilyPond en modo vista previa" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "Executar LilyPond con saída detallada" - -#: ../python/frescobaldi_app/runlily.py:310 -#, fuzzy -msgid "Command" -msgstr "Orde de impresión:" - -#: ../python/frescobaldi_app/runlily.py:317 -#, fuzzy -msgid "LilyPond %1" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/runlily.py:318 -#, fuzzy -msgid "Use LilyPond version %1" -msgstr "Inserir a versión de LilyPond" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -#, fuzzy -msgid "default" -msgstr "Predeterminado" - -#: ../python/frescobaldi_app/runlily.py:322 -#, fuzzy -msgid "Default LilyPond Version." -msgstr "Inserir a versión de LilyPond" - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:325 -#, fuzzy -msgid "Automatic LilyPond Version (determined from document)." -msgstr "A versión de LilyPond que se vai empregar para os documentos novos" - -#: ../python/frescobaldi_app/runlily.py:330 -#, fuzzy -msgid "Path: %1" -msgstr "Reproducir %1" - -#: ../python/frescobaldi_app/runlily.py:334 -#, fuzzy -msgid "LilyPond (version unknown)" -msgstr "Inserir a versión de LilyPond" - -#: ../python/frescobaldi_app/runlily.py:335 -#, fuzzy -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "Inserir a versión de LilyPond" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Prema para editar este ficheiro" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "Gardar rexistro de LilyPond como" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"Non se puido gardar o rexistro de LilyPond:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -#, fuzzy -msgid "LilyPond-related settings" -msgstr "Ficheiros de LilyPond" - -#: ../python/frescobaldi_app/sessions.py:44 -#, fuzzy -msgid "LilyPond version to use:" -msgstr "Inserir a versión de LilyPond" - -#: ../python/frescobaldi_app/sessions.py:48 -#, fuzzy -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" -"Aquí pode elexir os scripts de Guile que quere que Rumor cargue. Comprobe a " -"saída de \"Que é isto\" para obter máis información." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Configurar" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Preferencias xerais" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Preferencias xerais de Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -#, fuzzy -msgid "LilyPond Preferences" -msgstr "Ficheiros de LilyPond" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Rutas" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Rutas a programas ou a datos usados por Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "Entrada MIDI de Rumor" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Axustes da extensión de entrada MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Compoñente do editor" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Opcións do compoñente do editor" - -#: ../python/frescobaldi_app/settings.py:298 -#, fuzzy -msgid "Running LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "Permitir a LilyPond eliminar os ficheiros de saída intermedios" - -#: ../python/frescobaldi_app/settings.py:310 -#, fuzzy -msgid "LilyPond include path:" -msgstr "Ficheiros de LilyPond" - -#: ../python/frescobaldi_app/settings.py:336 -#, fuzzy -msgid "When saving documents" -msgstr "Documentos por correo electrónico" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "Lembrar a posición do cursor, marcadores, etc." - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Directorio predeterminado:" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "O cartafol predeterminado para os documentos de LilyPond (opcional)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "A versión de LilyPond que se vai empregar para os documentos novos" - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Usar o número da versión de LilyPond instalada" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Usar o número da versión da última regra de convert-ly" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Usar número de versión personalizado:" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Escriba o número de versión de LilyPond válido, ex. 2.12.0" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:438 -#, fuzzy -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "Gardar o documento ao executar LilyPond" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside " -"Okular. This works best when all instances of Okular are closed and the PDF " -"preview has not yet been opened." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "Visor de PDF:" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "Visor de PDF" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "(deixar baleiro para a opción predeterminada do sistema operativo)" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "Reprodutor MIDI:" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "Url ou ruta da documentación de Lilypond" - -#: ../python/frescobaldi_app/settings.py:563 -#, fuzzy -msgid "Lyrics Hyphenation" -msgstr "Eliminar a guionización" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" -"Rutas de procura para os dicionarios de guionización de OpenOffice.org, " -"Scribus, KOffice, etc, un por cada liña. Se deixa a barra inicial, poñeranse " -"diante os prefixos collidos da variable de contorno KDEDIRS." - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Ordes empregadas polo módulo de entrada MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Nome ou ruta completa do aplicativo Rumor." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" -"Nome e ruta do programa aconnect (parte de ALSA, para a entrada e " -"reprodución MIDI utilizando Rumor)." - -#: ../python/frescobaldi_app/settings.py:615 -msgid "" -"Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" -"Orde completa para iniciar Timidity (ou calquera outro programa) coma un " -"cliente de MIDI ALSA." - -#: ../python/frescobaldi_app/settings.py:648 -#, fuzzy -msgid "LilyPond versions to use:" -msgstr "Inserir a versión de LilyPond" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "" -"Enable automatic version selection (choose LilyPond version from document)" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:710 -#, fuzzy -msgid "Document Tabs" -msgstr "Amosar separadores do documento" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:778 -#, fuzzy -msgid "Lilypond-book:" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/settings.py:809 -#, fuzzy -msgid "Path" -msgstr "Rutas" - -#: ../python/frescobaldi_app/settings.py:810 -#, fuzzy -msgid "Version" -msgstr "Versión:" - -#: ../python/frescobaldi_app/settings.py:813 -#, fuzzy -msgid "Can't determine LilyPond version." -msgstr "Inserir a versión de LilyPond" - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:842 -#, fuzzy -msgid "LilyPond Command:" -msgstr "Índice de ordes de LilyPond" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "O nome ou a ruta completa do aplicativo LilyPond." - -#: ../python/frescobaldi_app/settings.py:847 -#, fuzzy -msgid "LilyPond Command" -msgstr "Índice de ordes de LilyPond" - -#: ../python/frescobaldi_app/settings.py:860 -#, fuzzy -msgid "Set as default" -msgstr "Establecer estes axustes como predeterminados." - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:903 -#, fuzzy -msgid "Start with no session" -msgstr "Comezar en:" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:905 -#, fuzzy -msgid "Start with session:" -msgstr "Comezar en:" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "" - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "O documento xa ten unha declaración da versión de LilyPond." - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "Versión xa definida" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "" -"Non se pode determinar a versión de LilyPond. Revise a instalación de " -"LilyPond." - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" -"Non é posible determinar a versión de LilyPond do documento actual. Escriba " -"unha declaración \\version coa versión correcta." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "Este documento de LilyPond xa está actualizado." - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" -"O documento foi procesado con convert-ly. Poderá atopar as mensaxes de " -"convert-ly nun bloque de comentario ao final. Igual ten que editar algunhas " -"partes de xeito manual." - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" -"O documento foi procesado con convert-ly, pero permaneceu sen modificacións. " -"Esta é a mensaxe que deu convert-ly: %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "Non foi posible iniciar convert-ly: %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Marcar" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Prema neste botón varias veces para establecer o tempo." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "O tempo en pulsos por minuto." - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "Tiple" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Alto" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Tenor" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "Tiple 8" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Baixo" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Percusión" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "Clave de tabulatura" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "Sen clave" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Asistente de configuración de partitura" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Títulos e encabezamentos" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Prema para introducir un valor." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "final da primeira páxina" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "final de última páxina" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Partes" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Partes dispoñibles:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Engadir a parte seleccionada á partitura." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Partitura:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Configuración da partitura" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Preferencias xerais" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Nomes de instrumentos" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Armadura da tonalidade:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Compás:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Compás de anacruse:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Marca de metrónomo:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Indicación de tempo:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Unha indicación de tempo, ex. \"Allegro\"." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Idioma dos nomes de nota:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "Idioma de Lilypond no que quere escribir os nomes das notas." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "A versión de LilyPond que se vai empregar para este documento." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Empregar comiñas tipográficas" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "Substituír as comiñas normais polas vistosas comiñas tipográficas." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Eliminar o pé de páxina predeterminado que LilyPond produce." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Eliminar números de compás" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "" -"Suppress the display of measure numbers at the beginning of every system." -msgstr "" -"Eliminar a numeración de compases que se amosa á esquerda dos sistemas." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "Crear saída de MIDI" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "Crear un ficheiro MIDI ademais do ficheiro PDF." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Amosar marca de metrónomo" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" -"Se está seleccionado, imprimir unha marca de metrónomo ao comezo da " -"partitura. A saída MIDI tamén usa este axuste metronómico." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Apaisado" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "Primeiro sistema:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Completo" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Breve" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "" -"Empregar un nome curto ou longo para o instrumento antes do primeiro sistema." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Outros sistemas:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "" -"Empregar os nomes de instrumento curto, longo ou ningún á esquerda dos " -"seguintes sistemas:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "Idioma que desexa empregar para os nomes de instrumento." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Eliminar o pé de páxina predeterminado de LilyPond" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "Non hai axustes dispoñibles." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Voces:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "Cantas voces se poñen neste pentagrama." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "A música continúa aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Tipo de pentagrama:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Normal" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Tabulatura" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Ambos" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Afinación:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "A letra segue aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Estrofas:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Número de estrofas." - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Ámbito" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "Amosar a tesitura da voz ao principio do pentagrama." - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Configurar o número de voces distintas desexado en cada pentagrama." - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "" -"Isto é moi útil sobre todo ao escribir música polifónica como unha fuga." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Man dereita:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Man esquerda:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Nomes de acorde" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "Os acordes continúa aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Estilo de acordes:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "Alemán" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "Semi-alemán" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "Italiano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "Francés" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Diagramas de posición de acorde" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" -"Amosar os diagramas de posicións de guitarra predeterminados debaixo dos " -"nomes de acorde (LilyPond 2.12 ou superior)." - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Baixo cifrado" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "As cifras van aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "Usar liñas de extensión" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Violín" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Violín|Vl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Viola" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Viola|Vla." - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Violoncello" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Violoncello|Vclo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Contrabaixo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Contrabaixo|Cb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Baixo continuo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Baixo continuo|B.c." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Mandolina" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandolina|Mna." - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Afinación da mandolina" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Banxo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Banxo|Bxo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "Afinación de Sol ao aire (la-Re-Sol-Si-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "Afinación de Do (sol-Do-Sol-Si-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "Afinación modal (sol-Re-Sol-Do-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "Afinación de re maior ao aire (la-Re-Fa#-La-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "Afinación de re menor ao aire (la-Re-Fa-La-Re)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Catro cordas (en vez de cinco)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Guitarra clásica" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Guitarra|Gt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Afinación da guitarra" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "Afinación de sol ao aire" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Guitarra de jazz" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Guitarra de jazz|G.jz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Baixo|Bx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "Afinación do baixo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Baixo eléctrico" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Baixo eléctrico|E. Bx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Arpa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Arpa|Ar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "Pentagrama superior:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "Pentagrama inferior" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Frauta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Frauta|Fr." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Frautín" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Frautín|Frtn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Frauta baixa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Frauta baixa|Fr.B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Óboe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Óboe|Ób" - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Óboe d'amore" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Óboe d'amore|Ób.d'am." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "Corno inglés" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "Corno inglés|Cor.Ing." - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Fagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Fagot|Fg." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Contrafagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Contrafagot|Cfg." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Clarinete" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Clarinete|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Saxofón sopranino" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Saxofón sopranino|SxSn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Saxofón soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Saxofón soprano|SxSo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Saxofón alto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Saxofón alto|SxA." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Saxofón tenor" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Saxofón tenor|SxT." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Saxofón barítono" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Saxofón barítono|SxB." - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Saxofón baixo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Saxofón bajo|SxBx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Frauta doce soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Frauta doce soprano|Fr.d.s." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Frauta doce alto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Frauta doce alto|Fr.d.A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Frauta doce tenor" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Frauta doce tenor|Fr.d.T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Frauta doce baixo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Frauta doce baixo|Fr.d.B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Trompa en Fa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Trompa en Fa|Tpa." - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Trompeta en Do" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Trompeta en Do|Tpta.Do" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Trompeta en Sib" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Trompeta en Sib|Tpta.Sib" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Trombón" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Trombón|Tbn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Tuba baixa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Tuba baixa|Tba.B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Soprano|S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Mezzosoprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzosoprano|Mezz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Alto|A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Tenor|T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Baixo|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Folla guía de acordes" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" -"A folla guía fornece un pentagrama con nomes de acorde enriba e letra " -"debaixo. É opcional un segundo pentagrama." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Engadir pentagrama de acompañamento" - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" -"Engade un pentagrama de acompañamento e pon unha voz de acompañamento no " -"pentagrama superior." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Coro" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" -"Seleccione as voces para o coro. Empregue as letras S, A, T ou B. Un guión " -"indica un pentagrama novo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "Suxestión: para dobre coro pode empregar dúas partes de coro." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Canto:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -#, fuzzy -msgid "Lyrics:" -msgstr "Letra" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Mesma letra en todas as voces" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -#, fuzzy -msgid "A set of the same lyrics is placed between all staves." -msgstr "Colócase un bloque de letra único entre todos os pentagramas." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Mesma letra todas as voces" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "" -"Every voice gets its own lyrics, using the same text as the other voices." -msgstr "Cada voz ten a súa letra, emprégase o mesmo texto ca as outras voces." - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Cada voz ten diferente letra" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Cada unha das voces recibe un bloque de letras distinto." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -#, fuzzy -msgid "One set of stanzas is distributed across the staves." -msgstr "Colócase un bloque de letra único entre todos os pentagramas." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "Redución de piano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "Engade unha redución de piano xerada automaticamente." - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Coro|Co." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Piano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Piano|Pno." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Clave" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Clave|Clav." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Clavicordio" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Clavicordio|Clvc." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Órgano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Órgano|Org." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Pedal:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Estableza a 0 para desactivar o pedal." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Celesta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Celesta|Cel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Timbais" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Timbais|Tmb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Xilófono" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Xilófono|Xil." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Marimba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Vibráfono" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Vibráfono|Vib." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Campás tubulares" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Campás tubulares|Tub." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Carillón" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Carillón|Car." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Percusión" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Percusión|Perc." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "A percusión continúa aquí." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "gardar algunha distancia." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Estilo:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Percusión (5 liñas, predeterminado)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Estilo timbais (2 liñas)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Estilo congas (2 liñas)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Estilo bongos (2 liñas)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Estilo-percusión (1 liña)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Eliminar as plicas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Eliminar as plicas das notas de percusión." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Instrumentos de corda" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Corda pulsada" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Vento madeira" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Vento metal" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "Vocal" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Teclados" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Especial" - -#~ msgid "Open PDF" -#~ msgstr "Abrir PDF" - -#~ msgid "Print" -#~ msgstr "Imprimir" - -#~ msgid "Play MIDI" -#~ msgstr "Reproducir MIDI" - -#~ msgid "Email..." -#~ msgstr "Correo-e..." - -#~ msgid "Disable the built-in PDF preview" -#~ msgstr "Desactivar a vista previa de PDF incorporada" - -#~ msgid "The direction to use for the articulations." -#~ msgstr "Dirección para usar nas articulacións." - -#~ msgid "&Generated Files" -#~ msgstr "Ficheiros &xerados" - -#~ msgid "Your document has been modified, please save first." -#~ msgstr "O documento foi modificado, gárdeo primeiro" - -#~ msgid "LilyPond documentation:" -#~ msgstr "Documentación de LilyPond:" - -#~ msgid "The document has been sent to the printer." -#~ msgstr "Enviouse o documento á impresora." - -#~ msgid "" -#~ "Printing failed: %1\n" -#~ "\n" -#~ "The print command %2 does probably not exist. Please check your settings." -#~ msgstr "" -#~ "Fallou a impresión: %1\n" -#~ "\n" -#~ "A orde de impresión %2 é posible que non exista. Comprobe a configuración." - -#~ msgid "The print command contains errors. Please check your settings." -#~ msgstr "A orde de imprimir ten erros. Comprobe a configuración." - -#~ msgid "Directly print on default printer" -#~ msgstr "Imprimir directamente na impresora predeterminada" - -#, fuzzy -#~ msgid "Notify when a document has been sent to the printer" -#~ msgstr "Enviouse o documento á impresora." - -#~ msgid "Printcommand:" -#~ msgstr "Orde de impresión:" - -#~ msgid "" -#~ "Command to print a PDF file, for example lpr or kprinter. You may add " -#~ "some arguments, e.g. lpr -P myprinter." -#~ msgstr "" -#~ "Orde para imprimir un ficheiro PDF, por exemplo, lpr ou kprinter. Pode " -#~ "engadirlle argumentos, ex. lpr -P a_miña_impresora." - -#~ msgid "Space above:" -#~ msgstr "Espazo por enriba:" - -#~ msgid "Overwrite File?" -#~ msgstr "Sobrescribir ficheiro?" - -#~ msgid "&Overwrite" -#~ msgstr "&Sobreescribir" - -#~ msgid "Name or full path of the convert-ly program." -#~ msgstr "O nome ou a ruta completa do aplicativo convert-ly." diff -Nru frescobaldi-1.2.0/po/it.po frescobaldi-2.0.0/po/it.po --- frescobaldi-1.2.0/po/it.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/it.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,4024 +0,0 @@ -# translation of it.po to Italiano -# translation of it.po to -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Gianluca D'Orazio , 2008, 2009, 2010. -msgid "" -msgstr "" -"Project-Id-Version: it\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-11-09 09:51+0100\n" -"PO-Revision-Date: 2010-05-23 15:13+0200\n" -"Last-Translator: Gianluca D'Orazio \n" -"Language-Team: Italian <>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# it.po (it) #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 1.0\n" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "Editor musicale per LilyPond" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Gianluca D'Orazio" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "gianluca.dorazio@gmail.com" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Sessione da avviare" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Avvia una nuova istanza" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Codifica da usare" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Numero di riga a cui andare, partendo da 1" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Colonna a cui andare, partendo da 0" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Prova ad usare la numerazione intelligente per righe e colonne" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "Documenti LilyPond da aprire, possono essere anche URL textedit" - -#: dummy.py:5 -msgid "&Insert" -msgstr "&Inserimento" - -#: dummy.py:6 -msgid "&Document" -msgstr "&Documento" - -#: dummy.py:7 -#, fuzzy -msgid "&LilyPond" -msgstr "LilyPond" - -#: dummy.py:8 -#, fuzzy -msgid "&Sessions" -msgstr "Sessione da avviare" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "&Note" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "&Parole" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "&Ritmo" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "&Documento sorgente" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "&Altri strumenti" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "Dedica" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Titolo" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Sottotitolo" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "Sotto-sottotitolo" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Strumento" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Compositore" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Arrangiatore" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Paroliere" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Metro" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Brano" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Opera" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Copyright" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Tagline" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "Maggiore" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "Minore" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "Ionico" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "Dorico" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "Frigio" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "Lidio" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "Misolidio" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "Eolio" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "Ipofrigio" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Fraseggio" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Accento" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Marcato" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Staccatissimo" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Staccato" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Portato" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Tenuto" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Abbellimenti" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Trillo" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Mordente superiore" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Mordente inferiore" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Gruppetto" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "Doppio mordente" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "Doppio mordente" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "Mordente dal basso" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "Mordente dall'acuto" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "Mordente inf. dal basso" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "Mordente inf. dall'acuto" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "Mordente con risoluzione" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "Mordente con risoluzione" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "Mordente con appoggiatura" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Gruppetto rovesciato" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "Segni di abbreviazione" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Corona" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Corona breve" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Corona lunga" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Corona lunghissima" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Segno" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Var. Coda" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "Signum congruentiae" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Altro" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Arcata in su" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Arcata in giù" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "Snappizzicato" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "Aperto (come per gli ottoni, ad. es.)" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "Chiuso (come per gli ottoni, ad. es.)" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Flageolet" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Pollice" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Tacco sinistro" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Tacco destro" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "Punta sinistra" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Punta destra" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "Mezzo aperto (hi-hat, ad es.)" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Si è verificato un errore interno:" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "Errore interno" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Spedisci una segnalazione di bug..." - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "È possibile descrivere sotto quel che si stava facendo:" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Barra sinistra" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Barra destra" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Barra superiore" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Barra inferiore" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Mostra percorso" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Mostra le linguette dei documenti" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "&Finestre degli strumenti" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "" - -#: ../python/kateshell/mainwindow.py:240 -#, fuzzy -msgid "Manage Sessions..." -msgstr "Aggiungi o modifica le scorciatoie..." - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" - -#: ../python/kateshell/mainwindow.py:325 -#, fuzzy -msgid "No Session" -msgstr "Percussioni" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Selezionare il testo prima." - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "modificato" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Riga: %1 Col: %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "BLOCCO" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Modalità di selezione a blocchi" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "RIGA" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Modalità di selezione a righe" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Tutti i file" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Apri file" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "Click destro per le opzioni delle linguette" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Sposta" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Sgancia" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "Impossibile caricare %1" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Installare %1" - -#: ../python/kateshell/shortcut.py:163 -#, fuzzy -msgid "Configure Keyboard Shortcut" -msgstr "Configura la scorciatoia (%1)" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "" - -#: ../python/kateshell/sessions.py:41 -#, fuzzy -msgid "Manage Sessions" -msgstr "Aggiungi o modifica le scorciatoie..." - -#: ../python/kateshell/sessions.py:99 -#, fuzzy -msgid "Session" -msgstr "Sessione da avviare" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "" - -#: ../python/kateshell/sessions.py:105 -#, fuzzy -msgid "Name:" -msgstr "Nome" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "" - -#: ../python/kateshell/sessions.py:115 -#, fuzzy -msgid "Base directory:" -msgstr "Cartella predefinita:" - -#: ../python/kateshell/sessions.py:128 -#, fuzzy -msgid "Edit session: %1" -msgstr "Inizia da:" - -#: ../python/kateshell/sessions.py:135 -#, fuzzy -msgid "Edit new session" -msgstr "Inizia da:" - -#: ../python/kateshell/sessions.py:171 -#, fuzzy -msgid "Please enter a session name." -msgstr "" -"Nell'abbreviazione della scorciatoia si possono usare solo lettere, numeri e " -"il trattino basso (underscore)." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "" - -#: ../python/kateshell/sessions.py:187 -#, fuzzy -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "" -"Nell'abbreviazione della scorciatoia si possono usare solo lettere, numeri e " -"il trattino basso (underscore)." - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "Apri %1 in un visualizzatore esterno" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "Suona %1" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "Non ci sono documenti da spedire." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "Nessun documento da spedire" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:146 -#, fuzzy -msgid "No files to print" -msgstr "Nessun documento da spedire" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "Spedisci documenti" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Scegliere i documenti da spedire:" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" -"Questi sono i file aggiornati (cioè più recenti del documento Lilypond " -"sorgente). Inoltre sono visualizzati anche i file inclusi tramite il " -"documento sorgente." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -"Questo PDF è stato creato inserendo link per il point-and-click (modalità " -"anteprima) questo aumenta di molto la dimensione del file. È meglio spedire " -"documenti senza link per il point-and-click (modalità pubblicazione) perché " -"sono molto piú piccoli. Continuare comunque?" -msgstr[1] "" -"Questi PDF sono stati creati inserendo link per il point-and-click (modalità " -"anteprima): questo aumenta di molto la dimensione dei file. È meglio spedire " -"documenti senza link per il point-and-click (modalità pubblicazione) perché " -"sono molto piú piccoli. Continuare comunque?" - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:249 -#, fuzzy -msgid "Print documents" -msgstr "Spedisci documenti" - -#: ../python/frescobaldi_app/actions.py:252 -#, fuzzy -msgid "Please select the files you want to print:" -msgstr "Scegliere i documenti da spedire:" - -#: ../python/frescobaldi_app/actions.py:256 -#, fuzzy -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" -"Questi sono i file aggiornati (cioè più recenti del documento Lilypond " -"sorgente). Inoltre sono visualizzati anche i file inclusi tramite il " -"documento sorgente." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "Stampa %1" - -#: ../python/frescobaldi_app/actions.py:340 -#, fuzzy -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "Stampa %1" -msgstr[1] "Stampa %1" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "Crea foglio di carta da musica" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "Tipo:" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "Azione:" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "Scegliere il tipo di righi da creare." - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "Scegliere come proseguire dopo aver fatto click su \"Ok\"." - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "Anteprima della carta da musica." - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "Fare click per vedere ulteriori impostazioni." - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "Carta" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "Impostazioni" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Dimensione del foglio:" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "Predefinita" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "Dimensione del rigo:" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "Numero di pagine:" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Togli la tagline predefinita" - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "Stampa le stanghette" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "Battute per rigo:" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "Stampa i numeri di pagina" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "Inizia da:" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "Anteprima della carta da musica:" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "Non è stato generato nessun PDF." - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "Apri il PDF con il visualizzatore" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "Salva il PDF come..." - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "File PDF" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "Salva il PDF" - -#: ../python/frescobaldi_app/blankpaper.py:365 -#, fuzzy -msgid "Print..." -msgstr "Stampa" - -#: ../python/frescobaldi_app/blankpaper.py:371 -#, fuzzy -msgid "Print staff paper" -msgstr "Crea foglio di carta da musica" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "Copia il codice LilyPond nell'editor" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "Righi per pagina:" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "Chiave:" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "Rigo singolo" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "Sistemi per pagina:" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "Chiavi" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "Rigo per pianoforte" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "Rigo per organo" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "Righi per sistema:" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "Chiavi:" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" -"Inserire una lettera (S, A, T o B) per ogni rigo.\n" -"Vedere \"Che cos'è?\" per ulteriori informazioni." - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" -"Per configurare le chiavi, fissare prima il numero di righi per sistema, " -"poiinserire una lettera (S, A, T o B) per ogni rigo.\n" -"\n" -"S o A: chiave di violino,\n" -"T: chiave di violino con \"8\" in basso,\n" -"B: chiave di basso\n" -"\n" -"Ad esempio, per creare carta da musica per la partitura di un coro a quattro " -"voci miste, fissare prima a 4 il numero di righi per sistema,poi digitare " -"\"SATB\" (senza virgole) qui." - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "Rigo per coro" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Niente" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "Rigo personalizzato" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "Rigo" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "Spazio sotto:" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "Graffa" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "Quadra" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "Quadra dritta" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "Unisci le stanghette" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "Caratteri speciali" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "sconosciuto" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" -"Impossibile eseguire la traduzione richiesta.\n" -"\n" -"La musica contiene alterazioni da un quarto di tono che non sono disponibili " -"nella lingua selezionata: \"%1\"." - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" -"I nomi delle note nel testo selezionato sono stati aggiornati, ma è " -"necessario aggiungere a mano nel documento il seguente comando:" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Lingua per i nomi delle note" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "Inserire il nome della variabile a cui assegnare il testo selezionato:" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Taglia e assegna" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "Apri %1" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "Selezionare un'espressione musicale racchiusa tra << ... >> o { ... }." - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" -"Impossibile determinare i nomi delle note.\n" -"\n" -"Controllare di aver usato i nomi nella lingua \"%1\"." - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" -"Impossibile eseguire la trasposizione richiesta.\n" -"\n" -"La musica trasposta conterrebbe alterazioni da un quarto di tono che non " -"sono disponibili nella lingua \"%1\" delle note." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "Trasporre" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "Inserire la nota di partenza e la nota di arrivo:" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "Trasporre da:" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "a:" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "" - -#: ../python/frescobaldi_app/download.py:56 -#, fuzzy -msgid "Download LilyPond" -msgstr "Esegui LilyPond" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "" - -#: ../python/frescobaldi_app/download.py:68 -#, fuzzy -msgid "Select the LilyPond version you want to download." -msgstr "Scegliere quale versione di LilyPond eseguire:" - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Versione:" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:81 -#, fuzzy -msgid "Install into:" -msgstr "Italiana" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "" - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "" - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:241 -#, fuzzy -msgid "Downloading %1..." -msgstr "Caricamento..." - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "" - -#: ../python/frescobaldi_app/download.py:263 -#, fuzzy -msgid "Download failed: %1" -msgstr "Stampa non riuscita: %1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" - -#: ../python/frescobaldi_app/download.py:284 -#, fuzzy -msgid "Use existing LilyPond" -msgstr "Esegui LilyPond" - -#: ../python/frescobaldi_app/download.py:285 -#, fuzzy -msgid "Remove and re-install" -msgstr "Togli le durate" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "" - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -#, fuzzy -msgid "Unpacking failed." -msgstr "Stampa non riuscita: %1" - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -#, fuzzy -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "Si è verificato un errore sconosciuto." - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Gestore delle scorciatoie" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Cerca..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "Nome" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Descrizione" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Scorciatoia" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" -"Questo è l'elenco delle scorciatie.\n" -"\n" -"Fare clic su una riga per vedere o modificare il testo associato, fare " -"doppio clic sull'abbreviazione o sulla descrizione per modificarla oppure " -"premere F2 per modificare l'abbreviazione selezionata.\n" -"\n" -"Usare i pulsanti in basso per aggiungere o rimuovere scorciatoie.\n" -"\n" -"Ci sono due modi per usare le scorciatoie: scrivere l'abbreviazione " -"direttamente nel testo e richiamare la funzione di espansione (combinazione " -"di tasti predefinita: Ctrl+.), oppure richiamare il Gestore delle " -"scorciatoie (sempre con Ctrl+.), scegliere la scorciatoia dall'elenco e " -"premere Invio o fare clic su Ok." - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" -"Questo è il testo associato all'abbreviazione selezionata. Alcuni caratteri " -"hanno un significato particolare:" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "Mette il cursore in questo punto." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Traduce il nome della nota che segue." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Nuovo elemento" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"Un'altra scorciatoia usa già quest'abbreviazione.\n" -"\n" -"Sceglierne una diversa." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "" -"Nell'abbreviazione della scorciatoia si possono usare solo lettere, numeri e " -"il trattino basso (underscore)." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "Non lasciare vuota la descrizione." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" -"Impossibile trovare un dizionario per la divisione in sillabe.\n" -"\n" -"Installare un pacchetto che ne contenga uno e/o configurare il percorso di " -"ricerca per i dizionari nelle impostazioni di Frescobaldi alla voce " -"\"Percorsi.\"" - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Dividi in sillabe le parole" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Scegliere la lingua:" - -#: ../python/frescobaldi_app/kmid.py:68 -#, fuzzy -msgid "Pause" -msgstr "Carta" - -#: ../python/frescobaldi_app/kmid.py:85 -#, fuzzy -msgid "Volume" -msgstr "Home" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "Home" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "Ingrandisci caratteri" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "Riduci caratteri" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "Prima pagina" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Indietro" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "Su di un livello" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Avanti" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "Indice" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "Indice analitico" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Copia il &collegamento" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Apri il collegamento in una &nuova finestra" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Copia" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Apri il documento in una &nuova finestra" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "Caricamento..." - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "Non disponibile" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "Guida all'inserimento delle note" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "Indice dei comandi LilyPond" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "Guida di base" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "Indice della Guida di base" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -#, fuzzy -msgid "Internals Reference" -msgstr "Opzioni generali" - -#: ../python/frescobaldi_app/lilydoc.py:877 -#, fuzzy -msgid "The %1 context" -msgstr "Indice" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "Aiuto su &LilyPond" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Posizione:" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Sopra" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Indifferente" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Sotto" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "Configura la scorciatoia (%1)" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Segni" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Vari tipi di indicazione per il fraseggio e altro." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Fare click su un segno per aggiungerlo al documento." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" -"Se si seleziona prima un passaggio, il segno sarà aggiunto a tutte le note " -"selezionate." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Permetti abbreviazioni" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "Usa la forma breve per alcuni segni come lo staccato." - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:267 -#, fuzzy -msgid "Click a dynamic sign to add it to your document." -msgstr "Fare click su un segno per aggiungerlo al documento." - -#: ../python/frescobaldi_app/lqi.py:268 -#, fuzzy -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "" -"Se si seleziona prima un passaggio, il segno sarà aggiunto a tutte le note " -"selezionate." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -#, fuzzy -msgid "Bar Lines" -msgstr "&Stanghette" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Doppia stanghetta" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "Stanghetta finale" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "Stanghetta punteggiata" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "Stanghetta tratteggiata" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Stanghetta invisibile" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "Inizio ritornello" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "Doppio ritornello" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "Fine ritornello" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "Doppio ritornello (antico)" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "Doppio ritornello (classico)" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "Stanghetta corta" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "Stanghetta semplice" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "Stanghetta sottile-grossa-sottile" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "Stanghetta grossa-sottile" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "Doppia stanghetta grossa" - -#: ../python/frescobaldi_app/lqi.py:354 -msgid "Segno bar line" -msgstr "Stanghetta con l'indicazione \"segno\"" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:445 -#, fuzzy -msgid "Bracket Arpeggio" -msgstr "Quadra" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "" -"Glissandos are attached to a note and automatically extend to the next note." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:466 -#, fuzzy -msgid "Dashed Glissando" -msgstr "Stanghetta tratteggiata" - -#: ../python/frescobaldi_app/lqi.py:467 -#, fuzzy -msgid "Dotted Glissando" -msgstr "Stanghetta punteggiata" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "Documenti LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:170 -#, fuzzy -msgid "Print Source..." -msgstr "Stampa" - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Crea un nuovo spartito..." - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "Esegui LilyPond (anteprima)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "Esegui LilyPond (pubblicazione)" - -#: ../python/frescobaldi_app/mainapp.py:488 -msgid "Run LilyPond (custom)..." -msgstr "Esegui LilyPond (a scelta)..." - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "Interrompi l'esecuzione di LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:502 -#, fuzzy -msgid "Print Music..." -msgstr "Stampa" - -#: ../python/frescobaldi_app/mainapp.py:508 -#, fuzzy -msgid "Email Documents..." -msgstr "Spedisci documenti" - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "Taglia la selezione e la assegna ad una variabile LilyPond." - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Ripeti l'ultima nota o l'ultimo accordo" - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Ripete l'ultima espressione musicale (nota o accordo)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "Aggiungi o modifica le scorciatoie..." - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Espande l'ultima parola o apre il Gestore delle scorciatoie." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "Caratteri speciali..." - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "Inserisci caratteri speciali." - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "Aggiungi alle scorciatoie" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Linea vuota successiva" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Va alla prima linea vuota che segue." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Linea vuota precedente" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Va alla prima linea vuota all'indietro." - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "Seleziona fino alla riga vuota successiva" - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "" -"Seleziona il testo dalla posizione attuale fino alla successiva linea vuota " -"inclusa." - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "Seleziona fino alla alla riga vuota precedent" - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "" -"Seleziona il testo dalla posizione attuale fino alla precedenta riga vuota " -"inclusa." - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "Sposta la selezione alla riga vuota successiva" - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "Sposta il blocco selezionato alla riga vuota successiva." - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "Sposta la selezione alla riga vuota precedente" - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "Sposta il blocco selezionato alla riga vuota precedente." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "" -"Cambia la lingua usata da LilyPond per i nomi delle note nel documento o " -"nella selezione." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "Converti Relative in &Absolute" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" -"Converte le note nel documento o nella selezione dalla notazione " -"relativadelle altezze a quella assoluta." - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "Converti Absolute in &Relative" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "" -"Converte le note nel documento o nella selezione dalla notazione assoluta " -"delle altezze a quella relativa." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "Trasponi..." - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "Traspone tutte le note nel documento o nella selezione." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Raddoppia le durate" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Raddoppia tutte le durate nella selezione." - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Dimezza le durate" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Dimezza tutte le durate nella selezione." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Punto di valore" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Aggiunge un punto di valore a tutte le durate nella selezione." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Togli un punto di val." - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Toglie un punto di valore da tutte le durate nella selezione." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Togli i gruppi irregolari" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "Toglie tutti i gruppi irregolari (*n/m) dalle durate nella selezione." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Togli le durate" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "Toglie tutte le indicazioni di durata dalla selezione." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Nascondi le durate" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "Toglie la durata dopo una nota se è la stessa della nota precedente." - -#: ../python/frescobaldi_app/mainapp.py:713 -#, fuzzy -msgid "Make implicit (per line)" -msgstr "Nascondi le durate" - -#: ../python/frescobaldi_app/mainapp.py:714 -#, fuzzy -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "Toglie la durata dopo una nota se è la stessa della nota precedente." - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Mostra le durate" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "" -"Aggiunge la durata dopo ogni nota anche se è la stessa della nota precedente." - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Applica uno schema ritmico..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Applica lo schema ritmico inserito alla musica selezionata." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Copia lo schema ritmico" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Copia lo schema ritmico della musica selezionata." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Incolla lo schema ritmico" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Incolla lo schema ritmico alla musica selezionata." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Rimuovi la sillabazione" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "Copia le parole senza la divisione in sillabe" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Virgoletta singola" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Virgolette doppie" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Allinea" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "Inserisci la versione di LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "Aggiorna con convert-ly" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Apri la cartella attuale" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "Ripeti la musica selezionata" - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "Inserisci coppia di graffe" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "È già in esecuzione un processo LilyPond per questo documento." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "Impossibile elaborare il documento" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "Continuare comunque?" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "" -"Si sta per eseguire LilyPond in modalità anteprima (con il point-and-click " -"abilitato) ma il documento contiene un comando per disabilitare il point-and-" -"click." - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" -"Si sta per eseguire LilyPond in modalità pubblicazione (con il point-and-" -"click disabilitato) ma il documento contiene un comando per abilitare il " -"point-and-click." - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Ferma il processo LilyPond in esecuzione" - -#: ../python/frescobaldi_app/mainapp.py:917 -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "" -"Esegui LilyPond in modalità anteprima (Shift-click per la finestra di " -"configurazione)" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Inserimento veloce" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:956 -#, fuzzy -msgid "LilyPond exited with an error compiling %1." -msgstr "LilyPond [%1] è uscito con il codice %2." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Applica uno schema ritmico" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Inserire uno schema ritmico:" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "" -"Inserire uno schema ritmico usando i valori delle durate separati da uno " -"spazio (ad es. 8. 16 8 4 8)" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Terminale" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "S&incronizza il terminale con il documento attuale" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "Lettore MIDI" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "Anteprima PDF" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "Mostra il pannello di navigazione del PDF" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "Mostra le miniature del PDF" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Configura Okular..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "S&incronizza l'anteprima con il documento attuale" - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "Ricarica" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "LilyPond log" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "nessun log presente" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "Mostra solo in caso di errori" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "Documentazione LilyPond" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" -"Il metro da usare. Lasciare \"Auto\" per far dedurre a Frescobaldi il metro " -"dal documento LilyPond." - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Approssimazione:" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "La durata più breve da usare per le note." - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Nota per nota" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Registra l'input LilyPond nota per nota, senza durate." - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Mono" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Registra in monofonia, senza accordi." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" -"Il numero di accidenti. I numeri negativi indicano i bemolli. Lasciare \"Auto" -"\" perché Frescobaldi deduca la tonalità dal documento LilyPond." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Velocità:" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Metro:" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Tonalità:" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Configura..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "Configura altre opzioni, come l'ingresso e l'uscita MIDI." - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Salva" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Usa queste impostazioni come predefinite." - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Trovata la versione %1 di Rumor." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "Impossibile trovare Rumor: %1" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "Le impostazioni sono state salvate." - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Registra" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Avvia o ferma la registrazione MIDI di Rumor." - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Rumor sta registrando, premere ESC per fermarlo." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor fermato." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "Avvia o ferma TiMidity, il client MIDI per ALSA." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Configurazione di Rumor" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "Dispositivo OSS %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Tastiera" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "Ingresso MIDI:" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" -"L'ingresso MIDI da usare. Scegliere \"Tastiera\" se si vuole suonare sulla " -"tastiera del computer." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "Uscita MIDI:" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "L'uscita MIDI da usare." - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Lingua:" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "La lingua in cui Rumor scriverà le note nel sorgente LilyPond." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Aggiungi tutte le durate" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" -"Aggiunge la durata dopo ogni nota, anche se è la stessa della nota " -"precedente." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Altezza assoluta" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "Usa altezze assolute al posto delle relative." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Niente stanghette" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Toglie le stanghette di battuta dall'output di Rumor." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Niente punti di valore" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "Usa le legature al posto dei punti di valore." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Legato" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "Non usa pause ma dà a tutte le note la massima durata." - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Togli le pause" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Toglie le pause iniziali e finali dall'output." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Script Guile da caricare:" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "" -"Qui si possono scegliere gli script Guile da far caricare a Rumor. " -"Consultare \"Cos'è questo\" per ulteriori ragguagli." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" -"Qui si possono scegliere gli script Guile da far caricare a Rumor. È " -"possibile aggiungere i propri script copiandoli in %1. Se la prima linea " -"dello script inizia con un punto e virgola (;) quella linea sarà mostrata " -"come descrizione." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "Auto" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "modalità anteprima" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "modalità pubblicazione" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "LilyPond %1 [%2] in esecuzione (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "LilyPond [%1] in esecuzione (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "LilyPond [%1] è uscito con il codice %2." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "LilyPond [%1] è uscito con lo stato %2." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] terminato (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "Impossibile avviare LilyPond. Controllare il percorso e i permessi." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "Impossibile avere informazioni dal processo LilyPond." - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Si è verificato un errore sconosciuto." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -msgid "Run LilyPond" -msgstr "Esegui LilyPond" - -#: ../python/frescobaldi_app/runlily.py:257 -msgid "Select which LilyPond version you want to run:" -msgstr "Scegliere quale versione di LilyPond eseguire:" - -#: ../python/frescobaldi_app/runlily.py:265 -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "Esegui LilyPond in modalità anteprima (con Point and Click)" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "Esegui LilyPond con output molto dettagliato" - -#: ../python/frescobaldi_app/runlily.py:310 -msgid "Command" -msgstr "Comando" - -#: ../python/frescobaldi_app/runlily.py:317 -msgid "LilyPond %1" -msgstr "LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:318 -msgid "Use LilyPond version %1" -msgstr "Usa la versione di LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -msgid "default" -msgstr "predefinita" - -#: ../python/frescobaldi_app/runlily.py:322 -msgid "Default LilyPond Version." -msgstr "Versione predefinita di LilyPond." - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "automatica" - -#: ../python/frescobaldi_app/runlily.py:325 -msgid "Automatic LilyPond Version (determined from document)." -msgstr "Versione di LilyPond automatica (determinata dal documento)." - -#: ../python/frescobaldi_app/runlily.py:330 -msgid "Path: %1" -msgstr "Percorso: %1" - -#: ../python/frescobaldi_app/runlily.py:334 -msgid "LilyPond (version unknown)" -msgstr "LilyPond (versione sconosciuta)" - -#: ../python/frescobaldi_app/runlily.py:335 -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "" -"Usa LilyPond (versione sconosciuta)\n" -"Percorso: %1" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Fare clic per modificare questo file" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "Salva il log di LilyPond come" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"Impossibile salvare il log di Lilypond:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -#, fuzzy -msgid "LilyPond-related settings" -msgstr "Documenti LilyPond" - -#: ../python/frescobaldi_app/sessions.py:44 -#, fuzzy -msgid "LilyPond version to use:" -msgstr "Versioni di LilyPond da usare:" - -#: ../python/frescobaldi_app/sessions.py:48 -#, fuzzy -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" -"Qui si possono scegliere gli script Guile da far caricare a Rumor. " -"Consultare \"Cos'è questo\" per ulteriori ragguagli." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Configura" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Opzioni generali" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Opzioni generali di Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -#, fuzzy -msgid "LilyPond Preferences" -msgstr "Documenti LilyPond" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Percorsi" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Percorsi ai programmi o ai dati usati da Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "Ingresso MIDI di Rumor" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Impostazioni dei plugin di ingresso MIDI di Rumor" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Componente editor" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Opzioni del componente editor" - -#: ../python/frescobaldi_app/settings.py:298 -#, fuzzy -msgid "Running LilyPond" -msgstr "Esegui LilyPond" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "Lascia che LilyPond cancelli i file di output intermedi" - -#: ../python/frescobaldi_app/settings.py:310 -#, fuzzy -msgid "LilyPond include path:" -msgstr "Documenti LilyPond" - -#: ../python/frescobaldi_app/settings.py:336 -#, fuzzy -msgid "When saving documents" -msgstr "Spedisci documenti" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "Ricorda la posizione del cursore, i segnalibri, ecc." - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Cartella predefinita:" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "La cartella predefinita dei documenti LilyPond (facoltativo)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "Versione di LilyPond da usare per i nuovi documenti" - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Usa il numero di versione dell'eseguibile LilyPond installato" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Usa il numero di versione dell'ultima regola di convert-ly" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Usa il seguente numero di versione:" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Inserire un numero di versione LilyPond corretto, ad esempio 2.12.0" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "Avvertimenti e segnalazioni" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "" -"Avvisa quando un documento contiene comandi per il point-and-click\n" -"in conflitto con le impostazioni di esecuzione di LilyPond" - -#: ../python/frescobaldi_app/settings.py:438 -#, fuzzy -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "Salva il documento quando si esegue LilyPond" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside " -"Okular. This works best when all instances of Okular are closed and the PDF " -"preview has not yet been opened." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "Visualizzatore PDF:" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "Visualizzatore PDF" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "(lasciare vuoto per usare quello predefinito dal sistema operativo)" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "Lettore MIDI:" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "Url o percorso completo alla documentazione LilyPond." - -#: ../python/frescobaldi_app/settings.py:563 -#, fuzzy -msgid "Lyrics Hyphenation" -msgstr "Copia le parole senza la divisione in sillabe" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" -"Percorsi di ricerca per i dizionari di sillabazione di OpenOffice.org, " -"Scribus, KOffice, ecc., uno per riga. Senza la barra a inizio riga vengono " -"aggiunti automaticamente i prefissi contenuti nella variabile d'ambiente " -"KDEDIRS." - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Comandi per il modulo di input MIDI di Rumor" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Nome o percorso completo dell'eseguibile di Rumor." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" -"Nome o percorso completo di aconnect (componente ALSA per l'inserimento e " -"l'esecuzione MIDI tramite Rumor)." - -#: ../python/frescobaldi_app/settings.py:615 -msgid "" -"Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" -"Comando completo per avviare TiMidity (o un altro programma) come client " -"MIDI per ALSA." - -#: ../python/frescobaldi_app/settings.py:648 -msgid "LilyPond versions to use:" -msgstr "Versioni di LilyPond da usare:" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "" -"Enable automatic version selection (choose LilyPond version from document)" -msgstr "" -"Abilita la selezione automatica della versione (ricava la versione di " -"LilyPond dal documento)" - -#: ../python/frescobaldi_app/settings.py:710 -#, fuzzy -msgid "Document Tabs" -msgstr "Mostra le linguette dei documenti" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "Convert-ly:" - -#: ../python/frescobaldi_app/settings.py:778 -msgid "Lilypond-book:" -msgstr "LilyPond-book:" - -#: ../python/frescobaldi_app/settings.py:809 -msgid "Path" -msgstr "Percorso" - -#: ../python/frescobaldi_app/settings.py:810 -msgid "Version" -msgstr "Versione" - -#: ../python/frescobaldi_app/settings.py:813 -msgid "Can't determine LilyPond version." -msgstr "Impossibile determinare la versione di LilyPond." - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:842 -msgid "LilyPond Command:" -msgstr "Comando LilyPond:" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "Nome o percorso completo dell'eseguibile di LilyPond." - -#: ../python/frescobaldi_app/settings.py:847 -msgid "LilyPond Command" -msgstr "Comando LilyPond" - -#: ../python/frescobaldi_app/settings.py:860 -msgid "Set as default" -msgstr "Imposta come predefinita" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "Abilita per la selezione automatica della versione" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:903 -#, fuzzy -msgid "Start with no session" -msgstr "Inizia da:" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:905 -#, fuzzy -msgid "Start with session:" -msgstr "Inizia da:" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "" - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "" -"Il documento contiene già la dichiarazione del numero di versione di " -"LilyPond." - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "La versione è già stata aggiunta" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "" -"Impossibile determinare la versione di LilyPond: controllare che " -"l'installazione di Lilypond sia corretta." - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" -"Impossibile determinare il numero di versione di LilyPond per il documento " -"in uso. Aggiungere la dichiarazione con il numero di versione corretto." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "Questo documento LilyPond è già aggiornato all'ultima versione." - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" -"Il documento è stato elaborato con convert-ly. I messaggi di convert-ly si " -"trovano in un blocco di commento alla fine del file; potrebbe essere " -"necessario modificare a mano alcune parti." - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" -"Il documento è stato elaborato con convert-ly ma non è stato modificato." -"Questo è il messaggio di uscita di convert-ly: %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "Impossibile avviare convert-ly: %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Tap" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Fare clic a tempo su questo pulsante per impostare la velocità." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "Il tempo in battiti al minuto." - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "Violino" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Contralto" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Tenore" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "Violino con \"8\" sotto" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Basso" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Percussioni" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "Chiave per intavolatura" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "Nessuna chiave" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Configurazione assistita di un nuovo spartito" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Titoli e Intestazioni" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Fare clic per inserire un valore." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "in fondo alla prima pagina" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "in fondo all'ultima pagina" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Parti" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Parti disponibili:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Aggiungi la parte selezionata allo spartito." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Spartito:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Impostazioni spartito" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Preferenze generali" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Nomi degli strumenti" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Tonalità:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Indicazione di tempo:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Battuta in levare:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Indicazione per il metronomo:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Indicazione di movimento:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Un'indicazione di movimento, ad es. \"Allegro.\"" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Lingua per il nome delle note:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "La lingua da usare per le altezze delle note nel sorgente LilyPond." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "La versione di LilyPond che sarà usata per questo documento." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Usa virgolette tipografiche" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "" -"Sostituisce le virgolette normali con quelle tipografiche, di più bel " -"aspetto." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Elimina la tagline predefinita di LilyPond." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Togli i numeri di battuta" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "" -"Suppress the display of measure numbers at the beginning of every system." -msgstr "" -"Elimina la visualizzazione dei numeri di battuta all'inizio di ogni sistema." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "Genera MIDI" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "Genera anche un file MIDI oltre al PDF." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Mostra l'indicazione per il metronomo" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" -"Se selezionato, mostra l'indicazione per il metronomo all'inizio dello " -"spartito. Anche l'output MIDI userà la stessa indicazione." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "Racchiudi la sezione \\score in un blocco \\book" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "Se selezionato, racchiude la sezione \\score in un blocco \\book." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Orizzontale" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "Primo sistema:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Per esteso" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Abbreviato" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "" -"Usa il nome dello strumento abbreviato o per esteso davanti al primo sistema." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Gli altri sistemi:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "" -"Usa il nome per esteso, abbreviato o non usa i nomi degli strumenti davanti " -"agli altri sistemi." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "La lingua da usare per i nomi degli strumenti." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Elimina la tagline predefinita di LilyPond" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "Nessuna configurazione disponibile." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Voci:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "Numero di voci da mettere in questo rigo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "Qui segue la musica." - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Tipo di rigo:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Rigo normale" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Intavolatura" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Entrambi" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Accordatura:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "Qui seguono le parole." - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Strofe:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Numero delle strofe." - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Ambitus" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "Mostra l'estensione della voce all'inizio del rigo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Imposta il numero di voci indipendenti per ciascun rigo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "" -"Questo è utile soprattutto nella scrittura di musica polifonica, come una " -"fuga." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Mano destra:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Mano sinistra:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Sigle accordi" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "Qui seguono gli accordi." - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Notazione degli accordi:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "Tedesca" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "Semi-tedesca" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "Italiana" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "Francese" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Grafici degli accordi per chitarra" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" -"Mosta i grafici predefiniti degli accordi per chitarra sotto il nome degli " -"accordi (LilyPond 2.12 e superiori)." - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Basso cifrato" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "Qui segue la cifratura." - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "Usa le linee di estensione" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Violino" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Violino|Vl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Viola" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Viola|V.la" - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Violoncello" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Violoncello|Vlc." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Contrabbasso" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Contrabbasso|Cb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Basso continuo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Basso continuo|Bc." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Mandolino" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandolino|Mand." - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Accordatura per mandolino" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Banjo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Banjo|Banj." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "Accordatura Open G (sol-RE-SOL-SI-RE)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "Accordatura in do (sol-DO-SOL-SI-RE)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "Accordatura modale (sol-RE-SOL-DO-RE)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "Accordatura Open D (la-RE-FA#-LA-RE)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "Accordatura Open Dm (la-RE-FA-LA-RE)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Quattro corde (al posto di cinque)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Chitarra classica" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Chitarra|Chit." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Accordatura per chitarra" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "Accordatura Open G" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Chitarra jazz" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Chitarra jazz|Chit. j." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Basso|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "Accordatura per basso" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Basso elettrico" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Basso elettrico|B. el." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Arpa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Arpa|Arp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "Rigo superiore:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "Rigo inferiore:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Flauto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Flauto|Fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Ottavino" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Ottavino|Ott." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Flauto basso" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Flauto basso|Fl. b." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Oboe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Oboe|Ob." - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Oboe d'amore" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Oboe d'amore|Ob. am." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "Corno inglese" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "Corno inglese|Cor. ing." - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Fagotto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Fagotto|Fag." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Controfagotto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Controfagotto|Cfag." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Clarinetto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Clarinetto|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Sassofono sopranino" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Sassofono sopranino|Sax. s.no" - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Sassofono soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Sassofono soprano|Sax. s." - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Sassofono contralto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Sassofono contralto|Sax. a." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Sassofono tenore" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Sassofono tenore|Sax. t." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Sassofono baritono" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Sassofono baritono|Sax. br." - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Sassofono basso" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Sassofono basso|Sax. b." - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Flauto dolce soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Flauto dolce soprano|Rec. s." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Flauto dolce contralto" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Flauto dolce contralto|Rec. a." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Flauto dolce tenore" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Flauto dolce tenore|Rec. t." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Flauto dolce basso" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Flauto dolce basso|Rec. b." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Corno in Fa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Corno in fa|Cor, in fa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Tromba in do" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Tromba in do|Tr. in do" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Tromba in sib" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Tromba in sib|Tr. in sib" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Trombone" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Trombone|Trb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|T.ba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Basso tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Basso tuba|T.ba b." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Soprano|S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Mezzosoprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzosoprano|Mzs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Contralto|A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Tenore|T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Basso|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Spartito semplificato" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" -"Uno spartito semplificato (\"lead sheet\" in inglese) è composto da un rigo " -"musicale per la melodia, con sopra le sigle degli accordi e sotto le parole. " -"Si può aggiungere anche un secondo rigo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Aggiungi rigo di accompagnamento" - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" -"Aggiunge un rigo di accompagnamento e, nel rigo superiore, una voce di " -"accompagnamento." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Coro" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" -"Scegliere le voci del coro. Usare le lettere S, A, T o B. Un trattino indica " -"un nuovo rigo." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "Consiglio: Per un doppio coro, usare due cori." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Voci:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -msgid "Lyrics:" -msgstr "Parole:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Stesse parole per tutte le voci" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -msgid "A set of the same lyrics is placed between all staves." -msgstr "Un blocco delle stesse parole sarà stampato fra tutti i righi." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Stesse parole per ogni voce" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "" -"Every voice gets its own lyrics, using the same text as the other voices." -msgstr "" -"Ogni voce avrà il suo blocco di parole, con le stesse parole per ogni voce." - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Parole diverse per ciascuna voce" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Ogni voce avrà un proprio blocco di parole." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "Distribuisci le strofe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -msgid "One set of stanzas is distributed across the staves." -msgstr "Distribuisce strofe diverse fra i vari righi." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "Riduzione per pianoforte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "Aggiunge una riduzione per pianoforte generata automaticamente." - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "MIDI file di controllo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "" -"Crea un MIDI file di controllo per ogni voce, anche se non è generato nessun " -"MIDI output per lo spartito principale." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Coro|Coro" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "MIDI file di controllo:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Pianoforte" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Pianoforte|Pf." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Cembalo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Cembalo|Cemb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Clavicordo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Clavicordo|Clvd." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Organo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Organo|Org." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Pedale:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Impostare a 0 per togliere il rigo del pedale." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Celesta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Celesta|Cel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Timpani" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Timpani|Timp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Xilofono" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Xilofono|Xil." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Marimba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Vibrafono" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Vibrafono|Vibr." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Campane tubolari" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Campane tubolari|Camp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Glockenspiel" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Glockenspiel|Glock." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Batteria" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Batteria|Batt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "Qui segue la batteria." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "distanziare un poco." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Tipo:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Batteria (5 linee, predefinito)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Tipo timbales (2 linee)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Tipo conga (2 linee)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Tipo bongo (2 linee)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Tipo percussione (1 linea)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Togli i gambi" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Toglie i gambi dalle note della batteria." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Archi" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Strumenti a pizzico" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Fiati" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Ottoni" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "Voci" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Strumenti a tastiera" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Altri" - -#~ msgid "Open PDF" -#~ msgstr "Apri PDF" - -#~ msgid "Print" -#~ msgstr "Stampa" - -#~ msgid "Play MIDI" -#~ msgstr "Esegui MIDI" - -#~ msgid "Email..." -#~ msgstr "Spedisci..." - -#~ msgid "Disable the built-in PDF preview" -#~ msgstr "Disabilita l'anteprima integrata del PDF" - -#~ msgid "The direction to use for the articulations." -#~ msgstr "La posizione dei segni rispetto al rigo." - -#~ msgid "&Generated Files" -#~ msgstr "&File generati" - -#~ msgid "Your document has been modified, please save first." -#~ msgstr "Il documento è stato modificato, salvare prima." - -#~ msgid "LilyPond documentation:" -#~ msgstr "Documentazione LilyPond:" - -#~ msgid "The document has been sent to the printer." -#~ msgstr "Il documento è stato inviato alla stampante." - -#~ msgid "" -#~ "Printing failed: %1\n" -#~ "\n" -#~ "The print command %2 does probably not exist. Please check your settings." -#~ msgstr "" -#~ "Stampa non riuscita: %1\n" -#~ "\n" -#~ "Il comando di stampa %2 probabilmente non è installato. Controllare le " -#~ "impostazioni." - -#~ msgid "The print command contains errors. Please check your settings." -#~ msgstr "Ci sono errori nel comando di stampa. Controllare le impostazioni." - -#~ msgid "Directly print on default printer" -#~ msgstr "Stampa direttamente con la stampante predefinita" - -#~ msgid "Notify when a document has been sent to the printer" -#~ msgstr "Segnala quando un documento è stato inviato alla stampante" - -#~ msgid "Printcommand:" -#~ msgstr "Comando di stampa:" - -#~ msgid "" -#~ "Command to print a PDF file, for example lpr or kprinter. You may add " -#~ "some arguments, e.g. lpr -P myprinter." -#~ msgstr "" -#~ "Comando per stampare un PDF, per esempio lpr o kprinter. Si possono far " -#~ "seguire opzioni, ad es.: lpr -P myprinter." - -#~ msgid "Space above:" -#~ msgstr "Spazio sopra:" - -#~ msgid "Name or full path of the convert-ly program." -#~ msgstr "Nome o percorso completo di convert-ly." - -#~ msgid "Expand" -#~ msgstr "Espandi" - -#, fuzzy -#~ msgid "Could not understand the entered pitches." -#~ msgstr "Impossibile avere informazioni dal processo LilyPond." - -#~ msgid "Dock" -#~ msgstr "Aggancia" - -#~ msgid "Show" -#~ msgstr "Mostra" - -#, fuzzy -#~ msgid "Paper Size A4" -#~ msgstr "Dimensione del foglio:" - -#, fuzzy -#~ msgid "Paper Size A5" -#~ msgstr "Dimensione del foglio:" - -#, fuzzy -#~ msgid "Paper Size Letter" -#~ msgstr "Dimensione del foglio:" - -#, fuzzy -#~ msgid "Stem Up" -#~ msgstr "Nota per nota" - -#, fuzzy -#~ msgid "Stem Down" -#~ msgstr "Sotto" - -#, fuzzy -#~ msgid "Lyric Stanza" -#~ msgstr "Strofe:" - -#, fuzzy -#~ msgid "Score section" -#~ msgstr "Impostazioni spartito" - -#, fuzzy -#~ msgid "Midi section" -#~ msgstr "Dedica" - -#, fuzzy -#~ msgid "With: instrumentName" -#~ msgstr "Nomi degli strumenti" - -#, fuzzy -#~ msgid "With: shortInstrumentName" -#~ msgstr "Nomi degli strumenti" - -#, fuzzy -#~ msgid "Modern 2/2 Time Signature" -#~ msgstr "Indicazione di tempo:" - -#, fuzzy -#~ msgid "Modern 4/4 Time Signature" -#~ msgstr "Indicazione di tempo:" - -#, fuzzy -#~ msgid "New Lyrics" -#~ msgstr "Parole" diff -Nru frescobaldi-1.2.0/po/nl.po frescobaldi-2.0.0/po/nl.po --- frescobaldi-1.2.0/po/nl.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/nl.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,4420 +0,0 @@ -# translation of nl.po to Nederlands -# Header entry was created by KBabel! -# -# Wilbert Berendsen , 2008. -# Wilbert Berendsen , 2008, 2009, 2010. -msgid "" -msgstr "" -"Project-Id-Version: nl\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-11-09 09:51+0100\n" -"PO-Revision-Date: 2010-11-09 09:52+0100\n" -"Last-Translator: Wilbert Berendsen \n" -"Language-Team: Dutch \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# nl.po (nl) #-#-#-#-#\n" -"X-Generator: Lokalize 1.1\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "Muziek-editor voor LilyPond" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Wilbert Berendsen" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Te starten sessie" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Een nieuw proces starten" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Te gebruiken tekenset" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Ga naar regel (start met 1)" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Ga naar kolom (start met 0)" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Probeer slimme regel- en kolomnummers te gebruiken" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "Te openen LilyPond-bestanden, mogen ook textedit URLs zijn" - -#: dummy.py:5 -msgid "&Insert" -msgstr "Inv&oegen" - -#: dummy.py:6 -msgid "&Document" -msgstr "&Document" - -#: dummy.py:7 -msgid "&LilyPond" -msgstr "&LilyPond" - -#: dummy.py:8 -msgid "&Sessions" -msgstr "&Sessies" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "&Toonhoogte" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "&Liedteksten" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "&Ritme" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "&Brondocument" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "&Extra gereedschappen" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "Opdracht" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Titel" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Subtitel" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "Subsubtitel" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Instrument" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Componist" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Arrangeur" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Dichter" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Versvoet" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Werk" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Opus" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Copyright" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Tagline" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "Majeur" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "Mineur" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "Ionisch" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "Dorisch" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "Phrygisch" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "Lydisch" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "Mixolydisch" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "Aeolisch" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "Locrisch" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Articulatie" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Accent" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Marcato" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Staccatissimo" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Staccato" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Portato" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Tenuto" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Versieringen" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Triller" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Praller" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Mordent" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Dubbelslag" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "Lange praller" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "Praller met mordent" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "Praller naar boven" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "Praller naar beneden" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "Mordent naar boven" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "Mordent naar beneden" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "Praller naar boven" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "Praller naar onder" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "Praller met lijn" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Omgekeerde dubbelslag" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "Tekens" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Fermate" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Korte fermate" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Lange fermate" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Zeer lange fermate" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Teken" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Varcoda" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "Signumcongruentiae" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Overig" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Opstreek" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Afstreek" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "Bartók pizzicato" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "Open (koper)" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "Gestopt (koper)" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Flageolet" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Duim" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Linker hak" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Rechter hak" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "Linker teen" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Rechter teen" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "Halfopen (bijv. hi-hat)" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Er is een interne fout opgetreden:" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "Interne fout" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Bugrapport emailen..." - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "Geef hier eventueel aan wat u aan het doen was:" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Linker zijbalk" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Rechter zijbalk" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Bovenste zijbalk" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Onderste zijbalk" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "Andere documenten sluiten" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Pad tonen" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Document-tabs tonen" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "&Gereedschapsweergaven" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "Nieuw..." - -#: ../python/kateshell/mainwindow.py:240 -msgid "Manage Sessions..." -msgstr "Sessies beheren..." - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" -"Kan de XMLGUI container \"%1\" niet vinden.\n" -"\n" -"Dit betekent wellicht dat het lokale ui.rc-bestand niet up-to-date is. Het " -"is aanbevolen dit bestand te verwijderen omdat elementen in de " -"gebruikersinterface anders zullen ontbreken. Dit is het volledige bestand " -"van het bestand:\n" -"\n" -"%2\n" - -#: ../python/kateshell/mainwindow.py:325 -msgid "No Session" -msgstr "Geen sessie" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Selecteer eerst de tekst waarop u de functie wilt toepassen." - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "gewijzigd" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Regel: %1 Kol: %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "BLOK" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Blokselectiemodus" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "REGEL" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Regelselectiemodus" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Alle bestanden" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Bestand openen" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "Klik rechts voor tab-opties" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Verplaatsen naar" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Losmaken" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "Kan %1 niet laden" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Installeer %1" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "Sneltoets instellen" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "Klik op de knop om de sneltoets in te stellen voor:" - -#: ../python/kateshell/sessions.py:41 -msgid "Manage Sessions" -msgstr "Sessies beheren" - -#: ../python/kateshell/sessions.py:99 -msgid "Session" -msgstr "Sessie" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "Eigenschappen van deze sessie" - -#: ../python/kateshell/sessions.py:105 -msgid "Name:" -msgstr "Naam:" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "De lijst van documenten in deze sessie altijd opslaan" - -#: ../python/kateshell/sessions.py:115 -msgid "Base directory:" -msgstr "Basismap:" - -#: ../python/kateshell/sessions.py:128 -msgid "Edit session: %1" -msgstr "Sessie bewerken: %1" - -#: ../python/kateshell/sessions.py:135 -msgid "Edit new session" -msgstr "Nieuwe sessie bewerken" - -#: ../python/kateshell/sessions.py:171 -msgid "Please enter a session name." -msgstr "Voer een sessienaam in." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "U kunt de naam '%1' niet gebruiken." - -#: ../python/kateshell/sessions.py:187 -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "U kunt het ampersand-teken (&) niet in een sessienaam gebruiken." - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" -"Er bestaat reeds een sessie met de naam %1.\n" -"\n" -"Wilt u deze overschrijven?" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "%1 openen in externe viewer" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "%1 afspelen" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "(Geen bijgewerkte MIDI- of PDF-bestanden beschikbaar.)" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "" -"Er zijn geen bijgewerkte MIDI- of PDF-bestanden beschikbaar. Start LilyPond " -"om een of meer uitvoerbestanden te verkrijgen." - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "Er zijn geen bestanden om te verzenden." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "Geen bestanden te verzenden" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" -"Er zijn geen PDF-documenten om af te drukken.\n" -"\n" -"Het is wellicht nodig om LilyPond te starten om een PDF-document aan te " -"maken of bij te werken. Als u MIDI-bestanden aanmaakt, verzeker u ervan dat " -"u ook een \\layout { } sectie in uw partituur heeft, anders zal LilyPond " -"geen PDF-bestand aanmaken." - -#: ../python/frescobaldi_app/actions.py:146 -msgid "No files to print" -msgstr "Geen bestanden af te drukken" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "Documenten verzenden" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Selecteer de bestanden die u wilt verzenden:" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" -"Dit zijn de bestanden die up-to-date zijn (later gewijzigd dan het LilyPond " -"brondocument). Ook LilyPond-bestanden die door het brondocument ge\"include" -"\"t worden zijn hier weergegeven." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -"Let op: Dit PDF-bestand is aangemaakt met ingebedde \"point-and-click\" URLs " -"(vooruitblik), waardoor het bestand veel groter is dan noodzakelijk. Het is " -"beter om het document opnieuw aan te maken via de optie 'publiceren', zodat " -"het PDF-bestand veel kleiner is." -msgstr[1] "" -"Let op: Deze PDF-bestanden zijn aangemaakt met \"point-and-click\" URLs " -"(vooruitblik), waardoor de bestanden veel groter zijn dan noodzakelijk. Het " -"is beter om de documenten opnieuw aan te maken via de optie 'publiceren', " -"zodat de PDF-bestanden veel kleiner zijn." - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "" -"Let op: Als er geen PDF- en MIDI-bestanden zijn dient u wellicht LilyPond te " -"starten om deze bestanden bij te werken, alvorens deze via e-mail te " -"verzenden." - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "Alles selecteren" - -#: ../python/frescobaldi_app/actions.py:249 -msgid "Print documents" -msgstr "Documenten afdrukken" - -#: ../python/frescobaldi_app/actions.py:252 -msgid "Please select the files you want to print:" -msgstr "Selecteer de bestanden die u wilt afdrukken:" - -#: ../python/frescobaldi_app/actions.py:256 -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" -"Dit zijn de bestanden die up-to-date zijn (later gewijzigd dan het LilyPond " -"brondocument). Kruis de bestanden aan die u wilt afdrukken." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "%1 afdrukken" - -#: ../python/frescobaldi_app/actions.py:340 -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "1 bestand afdrukken" -msgstr[1] "%1 bestanden afdrukken" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "Kan geen printcommando (zoals 'lpr' of 'lp') vinden op uw systeem." - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "Kan het commando '%1' niet vinden op uw systeem." - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" -"Het onderstaande command is gestart, maar werd beëindigd met code %1.\n" -"\n" -"%2" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "Blanco muziekpapier maken" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "Type:" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "Actie:" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "Kies welk type muziekbalken u wilt maken." - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "Kies wat er gebeurt als u op \"Ok\" klikt." - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr " Klik voor een vooruitblik." - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "Klik voor meer instellingen." - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "Papier" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "Instellingen" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Papiergrootte:" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "Standaard" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "Balkgrootte:" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "Aantal pagina's:" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Standaard-tagline verwijderen" - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "Maatstrepen afdrukken" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "Aantal maten per systeem:" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "Paginanummers afdrukken" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "Beginnen met:" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "Vooruitblik blanco muziekpapier" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "Er is geen PDF aangemaakt." - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "Openen in PDF-viewer" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "PDF opslaan als..." - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "PDF-bestanden" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "PDF opslaan" - -#: ../python/frescobaldi_app/blankpaper.py:365 -msgid "Print..." -msgstr "Afdrukken..." - -#: ../python/frescobaldi_app/blankpaper.py:371 -msgid "Print staff paper" -msgstr "Blanco muziekpapier afdrukken" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "LilyPond-code naar editor kopiëren" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "Aantal balken per pagina:" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "Sleutel:" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "Enkele balk" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "Aantal systemen per pagina:" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "Sleutels" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "Pianobalk" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "Orgelbalk" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "Aantal notenbalken per systeem:" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "Sleutels:" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" -"Voer zoveel letters (S, A, T of B) in als er balken zijn.\n" -"Zie \"Wat is dit\" voor meer informatie." - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" -"Om sleutels in te stellen, stel eerst het aantal balken per systeem in. Voer " -"dan zoveel letters (S, A, T of B) in als er balken zijn.\n" -"\n" -"S of A: vioolsleutel,\n" -"T: vioolsleutel met een \"8\" eronder,\n" -"B: bassleutel\n" -"\n" -"Dus als u muziekpapier wilt maken voor vierstemmig gemend koor, zet dan " -"eerst het aantal balken per systeem op 4. Voer dan hier \"SATB\" (zonder de " -"aanhalingstekens) in." - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "Koorbalk" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Geen" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "Aangepaste balk" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "Notenbalk" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "Ruimte eronder:" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "Accolade" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "Haak" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "Vierkante haak" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "Maatstrepen verbinden" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "Speciale tekens" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "onbekend" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" -"De gevraagde vertaling kan niet worden gemaakt.\n" -"\n" -"De muziek bevat kwarttonen, maar deze zijn niet beschikbaar in de taal \"%1" -"\"." - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" -"De taal van de nootnamen in de geselecteerde tekst is aangepast, maar u " -"dient handmatig het volgende commando aan uw document toe te voegen:" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "(voor LilyPond lager dan 2.14), of" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "(voor LilyPond 2.14 en hoger.)" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Taal voor nootnamen" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "" -"Geef de naam van de variable om de geselecteerde tekst aan toe te wijzen:" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Knippen en toewijzen" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "%1 openen" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "Selecteer een muziekexpressie, ingesloten in << ... >> of { ... }." - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" -"Kan de ingevoerde toonhoogtes niet begrijpen.\n" -"\n" -"Gebruik de nootnamen in de taal \"%1\"." - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" -"De gevraagde transpositie kan niet worden gemaakt.\n" -"\n" -"De getransponeerde muziek zou kwarttonen bevatten die niet beschikbaar zijn " -"in de taal \"%1\"." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "Transponeren" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "Geef de start- en doeltoonhoogte op:" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "Transponeren van:" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "naar:" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "Installeren" - -#: ../python/frescobaldi_app/download.py:56 -msgid "Download LilyPond" -msgstr "LilyPond downloaden" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "Met dit hulpmiddel kunt u binaire pakketten van LilyPond installeren." - -#: ../python/frescobaldi_app/download.py:68 -msgid "Select the LilyPond version you want to download." -msgstr "Selecteer de LilyPond-versie die u wilt downloaden." - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Versie:" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" -"Selecteer een beschrijfbare directory waar u LilyPond wilt installeren.\n" -"(Een versie-genummerde directory zal worden aangemaakt in deze directory.)" - -#: ../python/frescobaldi_app/download.py:81 -msgid "Install into:" -msgstr "Installeren in:" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "Details" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "" -"De website waar de LilyPond binaire pakketten kunnen worden gedownload." - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "Downloaden van:" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "Type machine:" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" -"Dit is de URL van het pakket dat zal worden gedownload en geïnstalleerd.\n" -"U kunt ook bladeren naar andere plaatsen om handmatig een LilyPond-pakket te " -"selecteren." - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "Pakket Url:" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "Lijst wordt gedownload..." - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "Geen pakketten gevonden. U kunt handmatig naar een pakket bladeren." - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "Laatste ontwikkelingsversie (%1)" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "Laatste stabiele versie (%1)" - -#: ../python/frescobaldi_app/download.py:241 -msgid "Downloading %1..." -msgstr "Downloaden van %1..." - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "Het downloaden is geannuleerd." - -#: ../python/frescobaldi_app/download.py:263 -msgid "Download failed: %1" -msgstr "Het downloaden is mislukt: %1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" -"LilyPond %1 blijkt al geïnstalleerd te zijn in %2.\n" -"\n" -"Wilt u het gebruiken of verwijderen en her-installeren?" - -#: ../python/frescobaldi_app/download.py:284 -msgid "Use existing LilyPond" -msgstr "Bestaande LilyPond gebruiken" - -#: ../python/frescobaldi_app/download.py:285 -msgid "Remove and re-install" -msgstr "Verwijderen en her-installeren" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "Uitpakken van %1..." - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "Het uitpakken is voltooid." - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -msgid "Unpacking failed." -msgstr "Het uitpakken is mislukt." - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "" -"Er is een fout opgetreden:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Snelteksten beheren" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Zoeken..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "Naam" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Omschrijving" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Sneltoets" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" -"Dit is de lijst met gedefiniëerde snelteksten.\n" -"\n" -"Klik op een regel om de bijbehorende tekst te zien or bewerken. Dubbelklik " -"een sneltekst of beschrijving om deze te veranderen. U kunt ook op F2 " -"drukken om de sneltekst aan te passen.\n" -"\n" -"Gebruik de knoppen hieronder om snelteksten toe te voegen of te " -"verwijderen.\n" -"\n" -"Er zijn twee manieren om de sneltekst-functie te gebruiken: Typ the " -"sneltekst in het document en roep dan de sneltekst-functie aan, of roep de " -"sneltekst-functie meteen aan (standaardtoets: Ctrl+.), kies de sneltekst uit " -"de lijst en druk op Enter of klik Ok." - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" -"Dit is de tekst die hoort bij de geselecteerde sneltekst. Sommige tekens " -"hebben een speciale betekenis:" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "Zet de cursor op deze plaats." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Vertaal de volgende toonhoogte." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Nieuw item" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"Er bestaat al een andere sneltekst onder deze naam.\n" -"\n" -"Gebruik a.u.b. een andere naam." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "" -"Gebruik alleen letters, cijfers en het onderstreepteken voor de sneltekst." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "U dient een omschrijving op te geven." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" -"Geen bestanden met afbreekpatronen gevonden.\n" -"\n" -"Installeer een pakket met deze bestanden en/of stel zoekpaden in om ze te " -"vinden in de Frescobaldi-instellingen onder \"Paden.\" " - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Liedteksten afbreken" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Selecteer een taal:" - -#: ../python/frescobaldi_app/kmid.py:68 -msgid "Pause" -msgstr "Pauze" - -#: ../python/frescobaldi_app/kmid.py:85 -msgid "Volume" -msgstr "Volume" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "Begin" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "Tekst vergroten" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "Tekst verkleinen" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "Eerste pagina" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Vorige" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "Een niveau hoger" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Volgende" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "Inhoudsopgave" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "Index" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Koppeling &kopiëren" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Koppeling in &nieuw venster openen" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Kopiëren" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Document in &nieuw venster openen" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "Laden..." - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "Niet beschikbaar" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "Notation Reference" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "LilyPond Commando-index" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "Learning Manual" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "Learning Manual index" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -msgid "Internals Reference" -msgstr "Internals Reference" - -#: ../python/frescobaldi_app/lilydoc.py:877 -msgid "The %1 context" -msgstr "De %1 context" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "Het %1 layout-object" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "LilyPond-&hulp" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Richting:" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Boven" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Neutraal" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Onder" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "" -"De plaats waar articulaties worden geplaatst: boven of onder de balk of in " -"de standaardpositie." - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "Sneltoets instellen (%1)" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Articulaties" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Verschillende soorten articulatie en andere tekens." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Klik op een articulatie-teken om het aan uw document toe te voegen." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" -"Als u eerst muziek selecteert, wordt het articulatie-teken aan alle noten in " -"de selectie toegevoegd." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Korte notatie" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "Korte notatie toestaan voor sommige articulaties zoals staccato." - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "Dynamiek" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "Dynamische tekens." - -#: ../python/frescobaldi_app/lqi.py:267 -msgid "Click a dynamic sign to add it to your document." -msgstr "Klik op een dynamisch teken om het aan uw document toe te voegen." - -#: ../python/frescobaldi_app/lqi.py:268 -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "" -"Als u eerst muziek selecteert, worden dynamische spanners aan alle noten in " -"de selectie toegevoegd." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "" -"Als u muziek geselecteerd heeft en u klikt op een spanner en daarna een " -"teken, dan zal het teken de spanner beëindigen." - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "Dynamisch teken %1" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "Spanners" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "Crescendo (lijnen)" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "Crescendo" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "Diminuendo (lijnen)" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "Diminuendo" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "Decrescendo" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -msgid "Bar Lines" -msgstr "Maatstrepen" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "Maatstrepen, ademhalingstekens, etc." - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Dubbele maatstreep" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "Eindmaatstreep" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "Gestippelde maatstreep" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "Gestreepte maatstreep" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Onzichtbare maatstreep" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "Start herhaling" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "Herhaal beide" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "Eind herhaling" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "Herhaal beide (oud)" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "Herhaal beide (klassiek)" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "Hoge maatstreep" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "Enkele maatstreep" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "Dun-dik-dunne maatstreep" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "Dik-dunne maatstreep" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "Dubbele dikke maatstreep" - -#: ../python/frescobaldi_app/lqi.py:354 -msgid "Segno bar line" -msgstr "Segno maatstreep" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "Ademhalingstekens" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "Standaard ademhalingsteken" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "Recht ademhalingsteken" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "Gebogen cesuur" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "Rechte cesuur" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "Bogen, spanners, etc." - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "Selecteer een muziekfragment om deze spanners te kunnen gebruiken." - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "Boogje" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "Fraseringsboog" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "Waardestreep" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "Arpeggio's" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "Arpeggio's worden gebruikt bij akkoorden met meer dan één noot." - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "Arpeggio" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "Arpeggio met pijl omhoog" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "Arpeggio met pijl naar beneden" - -#: ../python/frescobaldi_app/lqi.py:445 -msgid "Bracket Arpeggio" -msgstr "Vierkante haak-arpeggio" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "Ronde haak-arpeggio" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "Glissando's" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "" -"Glissandos are attached to a note and automatically extend to the next note." -msgstr "" -"Glissando's worden achter een noot geplaatst en wijzen automatisch naar de " -"volgende noot." - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "Glissando" - -#: ../python/frescobaldi_app/lqi.py:466 -msgid "Dashed Glissando" -msgstr "Gestreept glissando" - -#: ../python/frescobaldi_app/lqi.py:467 -msgid "Dotted Glissando" -msgstr "Gestippeld glissando" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "Zig-zag glissando" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "Triller-glissando" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "LilyPond-bestanden" - -#: ../python/frescobaldi_app/mainapp.py:170 -msgid "Print Source..." -msgstr "Brontekst afdrukken..." - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Nieuwe partituur maken..." - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "LilyPond starten (vooruitblik)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "LilyPond starten (publiceren)" - -#: ../python/frescobaldi_app/mainapp.py:488 -msgid "Run LilyPond (custom)..." -msgstr "LilyPond starten (aangepast)..." - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "LilyPond-taak afbreken" - -#: ../python/frescobaldi_app/mainapp.py:502 -msgid "Print Music..." -msgstr "Muziek afdrukken..." - -#: ../python/frescobaldi_app/mainapp.py:508 -msgid "Email Documents..." -msgstr "Documenten verzenden..." - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "" -"De geselecteerde tekst knippen en toewijzen aan een LilyPond variabele." - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Laatste noot of akkoord herhalen" - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Herhaalt de laatstgetypte muziekexpressie (noot of akkoord)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "Snelteksten invoegen of beheren..." - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Laatst getypte woord uitbreiden of de lijst met snelteksten openen." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "Speciale tekens..." - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "Speciale tekens invoegen." - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "Aan snelteksten toevoegen" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Volgende blanco regel" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Ga naar de volgende blanco regel." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Vorige blanco regel" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Ga naar de vorige blanco regel." - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "Tot volgende blanco regel selecteren" - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "" -"Selecteert tekst vanaf de huidige cursorpositie tot en met de volgende " -"blanco regel." - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "Tot vorige blanco regel selecteren" - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "" -"Selecteert tekst vanaf de huidige cursorpositie tot net na de vorige blanco " -"regel." - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "Selectie verplaatsen naar volgende blanco regel" - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "Verplaatst de geselecteerde tekst naar de volgende blanco regel." - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "Selectie verplaatsen naar vorige blanco regel" - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "Verplaatst de geselecteerde tekst naar de vorige blanco regel." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "Weergeven" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "" -"De LilyPond-taal voor de nootnamen aanpassen in het document of het " -"geselecteerde gedeelte." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "Relatief naar &absoluut omzetten" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" -"Zet de noten in het document of de selectie om van relatieve naar absolute " -"toonhoogte." - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "Absoluut naar &relatief omzetten" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "" -"Zet de noten in het document of de selectie om van absolute naar relatieve " -"toonhoogte." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "Transponeren..." - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "Transponeert alle noten in de selectie of het document." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Tijdsduur verdubbelen" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Alle nootlengtes in de selectie verdubbelen." - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Tijdsduur halveren" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Alle nootlengtes in de selectie halveren." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Punt toevoegen" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Een punt toevoegen aan alle noten in de selectie." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Punt verwijderen" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Een punt verwijderen van alle noten in de selectie." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Schaling verwijderen" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "Alle schaling (*n/m) verwijderen van de nootlengtes in de selectie." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Tijdsduur verwijderen" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "De volledige tijdsduur-informatie verwijderen uit de selectie." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Impliciet maken" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "Tijdsduren impliciet maken (herhaalde lengtes verwijderen)." - -#: ../python/frescobaldi_app/mainapp.py:713 -msgid "Make implicit (per line)" -msgstr "Impliciet maken (per regel)" - -#: ../python/frescobaldi_app/mainapp.py:714 -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "" -"Tijdsduren impliciet maken (herhaalde lengtes verwijderen), behalve de " -"eerste tijdsduur in een regel." - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Expliciet maken" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "" -"De toonduur na elke noot weergeven, ook als deze hetzelfde is als de vorige " -"noot." - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Ritme toepassen..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Een ingevoerd ritme op de geselecteerde muziek toepassen." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Ritme kopiëren" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Het ritme van de geselecteerde muziek kopiëren." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Ritme plakken" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Een ritme in de geselecteerde muziek plakken." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Liedtekst-afbreking verwijderen" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "Liedteksten kopiëren met afbreking verwijderd" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Enkel aanhalingsteken" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Dubbel aanhalingsteken" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Uitlijnen" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "LilyPond-versie invoegen" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "Bijwerken met convert-ly" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Huidige map openen" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "Geselecteerde muziek herhalen" - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "Accolades invoegen" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" -"Uw document is gewijzigd en dient opgeslagen te worden voordat LilyPond kan " -"worden gestart.\n" -"\n" -"Wilt u het document nu opslaan?" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "Er is reeds een LilyPond-proces actief voor dit document." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "Can document niet verwerken" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "Toch doorgaan?" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "" -"U wilt LilyPond starten in vooruitblik-modus (met point-and-click), maar uw " -"document bevat een commando dat point-and-click uitschakelt." - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" -"U wilt LilyPond starten in publiceer-modus (zonder point-and-click), maar uw " -"document bevat een commando dat point-and-click inschakelt." - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Het actieve LilyPond-proces afbreken" - -#: ../python/frescobaldi_app/mainapp.py:917 -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "LilyPond starten (vooruitblik, shift-klik voor dialoog)" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Quick Insert" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "LilyPond heeft %1 succesvol gecompileerd." - -#: ../python/frescobaldi_app/mainapp.py:956 -msgid "LilyPond exited with an error compiling %1." -msgstr "LilyPond stopte met een fout tijdens het compileren van %1." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Ritme toepassen" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Voer een ritme in:" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "" -"Voer een ritme in met nootlengtes en spaties ertussen (bijv. 8. 16 8 4 8)" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Terminal" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "Terminal met huidig document s&ynchroniseren" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "MIDI-speler" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" -"Kan de KMid-component niet laden.\n" -"Installeer KMid 2.4.0 of hoger." - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "PDF vooruitblik" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "PDF-navigatiepaneel tonen" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "PDF-minipager tonen" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Okular instellen..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "Vooruitblik met huidig document s&ynchroniseren" - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "Opnieuw laden" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "LilyPond-uitvoer" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "geen log" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "Alleen tonen bij fouten" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "LilyPond-documentatie" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" -"De te gebruiken maatsoort. Indien 'Auto', bepaalt Frescobaldi de maatsoort " -"uit het huidige document." - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Quantiseren:" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "De kortste toegestane toonduur." - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Stap" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Neem noot voor noot op, zonder toonduur te registreren." - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Mono" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Monofoon opnemen, zonder akkoorden." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" -"Het aantal voortekens. Een negatieve waarde duidt mollen aan. Indien 'Auto', " -"bepaalt Frescobaldi de toonsoort uit het huidige document." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Tempo:" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Maatsoort:" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Toonsoort:" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Instellen..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "Meer instellingen, zoals MIDI in- en uitvoer." - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Opslaan" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Deze instelling opslaan en standaard gebruiken." - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Rumor versie %1 gevonden." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "Kon Rumor niet vinden: %1" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "De instellingen zijn opgeslagen." - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Opnemen" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Rumor MIDI-opname starten of stoppen." - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Rumor neemt op, druk op ESC om te stoppen." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor is gestopt." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "De TiMidity ALSA MIDI-client starten of stoppen." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Rumor instellingen" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "OSS apparaat %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Toetsenbord" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "MIDI invoer:" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" -"Het te gebruiken MIDI-invoerapparaat. Kies 'Toetsenbord' om op het " -"toetsenbord van uw computer te spelen." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "MIDI uitvoer:" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "Het te gebruiken MIDI-uitvoerapparaat." - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Taal:" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "De LilyPond-taal die u wilt gebruiken voor de toonhoogtes." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Expliciete toonduur" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" -"De toonduur na elke noot weergeven, ook als deze hetzelfde is als de vorige " -"noot." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Absolute toonhoogte" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "Gebruik absolute octaafhoogte in plaats van relatieve." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Geen maatstrepen" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Verwijder de maatstrepen uit Rumor's uitvoer." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Geen punten" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "Plaats geen punt achter de noot, maar een overbindingsboogje." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Legato" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "Gebruik geen rusten maar geef alle noten de maximale lengte." - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Rusten verwijderen" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Verwijder rusten aan het begin en het einde." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Guile scripts om te laden:" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "" -"Hier kunt u selecteren welke Guile scripts u met Rumor wilt gebruiken. " -"Raadpleeg \"Wat is dit\" voor meer informatie." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" -"Hier kunt u selecteren welke Guile scripts u met Rumor wilt gebruiken. U " -"kunt uw eigen scripts toevoegen door deze in %1 te plaatsen. Als de eerste " -"regel van uw script met een puntkomma (;) begint wordt deze als omschrijving " -"weergegeven." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "Auto" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "vooruitblik" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "publiceren" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "LilyPond %1 [%2] wordt gestart (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "LilyPond [%1] wordt gestart (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "LilyPond [%1] stopte met foutcode %2." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "LilyPond [%1] stopte met status %2." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] voltooid (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "Kon LilyPond niet starten. Controleer uw installatie." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "Kan de uitvoer van het LilyPond-proces niet lezen." - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Er is een onbekende fout opgetreden." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -msgid "Run LilyPond" -msgstr "LilyPond starten" - -#: ../python/frescobaldi_app/runlily.py:257 -msgid "Select which LilyPond version you want to run:" -msgstr "Selecteer de LilyPond-versie die u wilt starten:" - -#: ../python/frescobaldi_app/runlily.py:265 -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "LilyPond starten met Point and Click (vooruitblik)" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "LilyPond starten met uitgebreide uitvoerberichten" - -#: ../python/frescobaldi_app/runlily.py:310 -msgid "Command" -msgstr "Commando" - -#: ../python/frescobaldi_app/runlily.py:317 -msgid "LilyPond %1" -msgstr "LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:318 -msgid "Use LilyPond version %1" -msgstr "LilyPond-versie %1 gebruiken" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -msgid "default" -msgstr "standaard" - -#: ../python/frescobaldi_app/runlily.py:322 -msgid "Default LilyPond Version." -msgstr "Standaard LilyPond-versie." - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "automatisch" - -#: ../python/frescobaldi_app/runlily.py:325 -msgid "Automatic LilyPond Version (determined from document)." -msgstr "Automatische LilyPond-versie (op basis van document)." - -#: ../python/frescobaldi_app/runlily.py:330 -msgid "Path: %1" -msgstr "Pad: %1" - -#: ../python/frescobaldi_app/runlily.py:334 -msgid "LilyPond (version unknown)" -msgstr "LilyPond (versie onbekend)" - -#: ../python/frescobaldi_app/runlily.py:335 -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "" -"LilyPond (versie onbekend) gebruiken\n" -"Pad: %1" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Klik om dit bestand te bewerken" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "LilyPond-uitvoer opslaan als" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"Kan LilyPond-uitvoer niet opslaan:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -msgid "LilyPond-related settings" -msgstr "LilyPond-gerelateerde instellingen" - -#: ../python/frescobaldi_app/sessions.py:44 -msgid "LilyPond version to use:" -msgstr "Te gebruiken LilyPond-versie:" - -#: ../python/frescobaldi_app/sessions.py:48 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" -"Hier kunt een vaste LilyPond-versie kiezen om te gebruiken op documenten in " -"deze sessie.\n" -"Raadpleeg \"Wat is dit\" (Shift+F1) voor meer informatie." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" -"Hier kunt een vaste LilyPond-versie kiezen om te gebruiken op documenten in " -"deze sessie.\n" -"\n" -"De versie die u hier selecteert wordt dan standaard gebruikt op uw " -"documenten, en wordt ook ingevoegd door het \"LilyPond-versie invoegen\"-" -"commando." - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Instellen" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Algemene voorkeuren" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Algemene voorkeuren voor Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -msgid "LilyPond Preferences" -msgstr "LilyPond-voorkeuren" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Paden" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Paden naar programma's of gegevens gebruikt door Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "Rumor MIDI-invoer" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Instellingen voor de Rumor MIDI-invoerplugin" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Editor-component" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Instellingen voor de editor" - -#: ../python/frescobaldi_app/settings.py:298 -msgid "Running LilyPond" -msgstr "Bij het starten van LilyPond" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "Laat LilyPond tussentijdse uitvoerbestanden verwijderen" - -#: ../python/frescobaldi_app/settings.py:310 -msgid "LilyPond include path:" -msgstr "LilyPond include-pad:" - -#: ../python/frescobaldi_app/settings.py:336 -msgid "When saving documents" -msgstr "Bij het opslaan van documenten" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "Cursorpositie, bladwijzers, etc. onthouden" - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Standaardmap:" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "De standaardmap voor uw LilyPond documenten (optioneel)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "Het te gebruiken LilyPond-versienummer voor nieuwe documenten" - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Versienummer van geïnstalleerde LilyPond gebruiken" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Versienummer van laatste convert-ly regel gebruiken" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Aangepast versienummer gebruiken:" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Voer een geldig LilyPond-versienummer in, bijv. 2.12.0" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "Waarschuwingen en notificaties" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "" -"Waarschuwing als een document een conflicterende point-and-click-instelling " -"bevat" - -#: ../python/frescobaldi_app/settings.py:438 -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "" -"Waarschuwing als een document moet worden opgeslagen voor LilyPond wordt " -"gestart" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "" -"Waarschuwing als het opslaan van een sessie een andere zou overschrijven" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "Point en Click" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "Point en Click inschakelen" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "" -"Klik op deze knop als Point en Click niet werkt. Zie Shift+F1 (Wat is dit) " -"voor meer informatie." - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside " -"Okular. This works best when all instances of Okular are closed and the PDF " -"preview has not yet been opened." -msgstr "" -"Bij de eerste start probeert Frescobaldi Okular (dat de PDF-weergave " -"verzorgt) automatisch in te stellen om Frescobaldi te starten als een " -"aanklikbaar object wordt aangeklikt.\n" -"\n" -"Deze instelling kan echter verloren raken als u Frescobaldi verplaatst naar " -"een andere directory of als andere programma's Okular anders instellen.\n" -"\n" -"Klik op deze knop om Frescobaldi als 'aangepaste editor' in te stellen in " -"Okular. Dit werkt het best als u alle vensters van Okular sluit en de PDF-" -"weergave nog niet geopend is." - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" -"De Okular PDF-weergave is opnieuw ingesteld.\n" -"\n" -"Als u de PDF-weergave al geopend had, dient u Frescobaldi te herstarten " -"zodat de nieuwe instelling in werking treedt." - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "Hulpprogramma's" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "PDF-viewer:" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "PDF-viewer" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "(als u niets opgeeft wordt de standaardapplicatie gebruikt)" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "MIDI-speler:" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "Url:" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "Url of pad naar de LilyPond-documentatie." - -#: ../python/frescobaldi_app/settings.py:563 -msgid "Lyrics Hyphenation" -msgstr "Afbreking van liedteksten" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" -"Paden om bestanden met afbreekpatronen te vinden van bijv. OpenOffice.org, " -"Scribus of KOffice, één per regel. Als u de beginslash weglaat, wordt het " -"pad gekoppeld aan alle paden in de KDEDIRS-omgevingsvariable." - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Commando's gebruikt door de Rumor MIDI-invoermodule" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Naam of pad van het Rumor programma." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" -"Naam of pad van het aconnect programma (onderdeel van ALSA, voor MIDI in- en " -"uitvoer via Rumor)." - -#: ../python/frescobaldi_app/settings.py:615 -msgid "" -"Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" -"Commandoregel om Timidity (of een ander programma) te starten als ALSA MIDI-" -"client." - -#: ../python/frescobaldi_app/settings.py:648 -msgid "LilyPond versions to use:" -msgstr "De te gebruiken LilyPond-versies:" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "" -"Enable automatic version selection (choose LilyPond version from document)" -msgstr "" -"Automatische versie-selectie inschakelen (kiest LilyPond-versie op basis van " -"document)" - -#: ../python/frescobaldi_app/settings.py:710 -msgid "Document Tabs" -msgstr "Document-tabs" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "Sluitknop" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "Brede tabs" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "Tabs kunnen worden verplaatst" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "Convert-ly:" - -#: ../python/frescobaldi_app/settings.py:778 -msgid "Lilypond-book:" -msgstr "Lilypond-book:" - -#: ../python/frescobaldi_app/settings.py:809 -msgid "Path" -msgstr "Pad" - -#: ../python/frescobaldi_app/settings.py:810 -msgid "Version" -msgstr "Versie" - -#: ../python/frescobaldi_app/settings.py:813 -msgid "Can't determine LilyPond version." -msgstr "Kan LilyPond-versie niet bepalen." - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "Downloaden..." - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "Nieuwe binaire LilyPond-releases downloaden." - -#: ../python/frescobaldi_app/settings.py:842 -msgid "LilyPond Command:" -msgstr "LilyPond-commando:" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "Naam of pad van het LilyPond programma." - -#: ../python/frescobaldi_app/settings.py:847 -msgid "LilyPond Command" -msgstr "LilyPond-commando" - -#: ../python/frescobaldi_app/settings.py:860 -msgid "Set as default" -msgstr "Als standaard instellen" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "Meenemen in automatische versie-selectie" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "Als Frescobaldi zonder argumenten wordt gestart," - -#: ../python/frescobaldi_app/settings.py:903 -msgid "Start with no session" -msgstr "Lege sessie starten" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "Laatstgebruikte sessie starten" - -#: ../python/frescobaldi_app/settings.py:905 -msgid "Start with session:" -msgstr "Met deze sessie starten:" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "Kies een sessie." - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "Kiezen..." - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "Uw document heeft reeds een LilyPond versie-commando." - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "Versie al ingesteld" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "" -"Kan de versie van LilyPond niet bepalen. Controleer uw LilyPond-installatie." - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" -"Kan de LilyPond-versie van het huidige document niet bepalen. Voeg een " -"\\version commando toe met de correcte versie van het document." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "Dit LilyPond-document is reeds bijgewerkt." - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" -"Het document is verwerkt door convert-ly. De berichten van convert-ly vindt " -"u aan het eind in een commentaarblok. Het kan zijn dat u bepaalde " -"wijzigingen nog handmatig dient door te voeren." - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" -"Het document is verwerkt door convert-ly, maar bleef ongewijzigd. Dit is de " -"melding die convert-ly gaf: %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "Kan convert-ly niet starten: %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Tik" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Klik een paar keer op deze knop om het tempo in te stellen." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "Het tempo in tellen per minuut." - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "Vioolsleutel" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Alt" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Tenor" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "Vioolsleutel met 8" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Bas" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Percussie" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "Tabulatuur" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "Geen sleutel" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Partituur opzetten" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Titels en koppen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Klik om een waarde in te voeren." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "onderaan eerste pagina" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "onderaan laatste pagina" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Partijen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Beschikbare partijen:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Geselecteerde partij aan uw partituur toevoegen." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Partituur:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Partituur-instellingen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Algemene voorkeuren" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Instrumentnamen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Toonsoort:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Maatsoort:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Opmaat:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Metronoomgetal:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Tempo-aanduiding:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Een tempo-aanduiding, zoals \"Allegro.\"" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Taal voor nootnamen:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "De LilyPond-taal die u wilt gebruiken voor de toonhoogtes." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "De LilyPond-versie die u wilt gebruiken voor dit document." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Typografische aanhalingstekens" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "" -"Vervang normale aanhalingstekens in titels met fraaie typografische " -"aanhalingstekens." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Onderdrukt de weergave van de standaard tagline door LilyPond." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Maatnummers verwijderen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "" -"Suppress the display of measure numbers at the beginning of every system." -msgstr "Onderdrukt de weergave van maatnummers aan het begin van elk systeem." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "MIDI uitvoer aanmaken" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "Maak, behalve een PDF, ook een MIDI-bestand aan." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Metronoomgetal weergeven" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" -"Indien aangekruist, toont het metronoomgetal aan het begin van de partituur. " -"De MIDI-uitvoer gebruikt deze instelling ook." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "Partituur in \\book-blok plaatsen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "Indien aangekruist, plaatst het \\score-blok in een \\book-blok." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Oblong" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "Eerste systeem:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Lang" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Kort" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "Gebruik lange of korte instrumentnamen voor het eerste systeem." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Volgende systemen:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "" -"Gebruik korte, lange of geen instrumentnamen voor de volgende systemen." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "De taal die u wilt gebruiken voor de instrumentnamen." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Standaard LilyPond-tagline verwijderen" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "Geen instellingen beschikbaar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Stemmen:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "Hoeveel stemmen u in deze balk wilt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "Muziek volgt hier." - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Type balk:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Normaal" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Tabulatuur" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Beide" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Stemming:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "Liedtekst volgt hier." - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Coupletten:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Het aantal coupletten." - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Ambitus" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "Toont het bereik van een zangstem aan het begin van de balk." - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Hier kunt u instellen hoeveel aparte stemmen u in elke balk wilt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "Dit is vooral handig als u polyfone muziek schrijft zoals een fuga." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Rechts:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Links:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Akkoordnamen" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "Akkoordnamen volgen." - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Akkoordstijl:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "Duits" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "Semi-Duits" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "Italiaans" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "Frans" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Gitaar-fretdiagrammen" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" -"Voorgedefiniëerde gitaar-fretdiagrammen afbeelden onder de akkoordnamen " -"(LilyPond 2.12 en hoger)." - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Becijferde bas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "Bas-becijfering volgt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "Extender-lijnen gebruiken" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Viool" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Viool|Vl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Altviool" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Altviool|Avl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Cello" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Cello|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Contrabas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Contrabas|Cb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Basso continuo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Basso continuo|B.c." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Mandoline" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandoline|Mdl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Mandoline-stemming" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Banjo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Banjo|Bj." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "Open G-stemming (aDGBD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "C-stemming (gCGBD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "Modale stemming (gDGCD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "Open D-stemming (aDF#AD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "Open Dm-stemming (aDFAD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Vier snaren (ipv vijf)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Klassiek gitaar" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Gitaar|Gt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Gitaarstemming" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "Open G-stemming" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Jazzgitaar" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Jazzgitaar|J.gt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Bas|Bs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "Basstemming" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Electrische bas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Electrische bas|E.Bs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Harp" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Harp|Hp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "Bovenste balk:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "Onderste balk:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Fluit" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Fluit|Fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Piccolo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Piccolo|Pic." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Basfluit" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Basfluit|Bfl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Hobo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Hobo|Hb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Liefdeshobo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Liefdeshobo|Lhb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "Althobo (Engelse hoorn)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "Althobo|Ahb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Fagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Fagot|Fag." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Contrafagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Contrafagot|Cfag." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Klarinet" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Klarinet|Klar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Sopraninosax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Sopraninosax|Sisx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Sopraansax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Sopraansax|Sosx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Altsax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Altsax|Asx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Tenorsax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Tenorsax|Tsx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Baritonsax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Baritonsax|Bsx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Bassax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Bassax|Bssx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Sopraanblokfluit" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Sopraanblokfluit|Sbfl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Altblokfluit" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Altblokfluit|Ablf." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Tenorblokfluit" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Tenorblokfluit|Tblf." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Basblokfluit" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Basblokfluit|Bblf." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Hoorn in F" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Hoorn in F|Hn.F." - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Trompet in C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Trompet in C|Tr.C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Trompet in Bes" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Trompet in Bes|Tr.Bes" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Trombone" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Trombone|Trb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Bastuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Bastuba|Btb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Sopraan" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Sopraan|S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Mezzosopraan" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzosopraan|Ms." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Alt|A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Tenor|T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Bas|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Lead-sheet" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" -"Met een \"Lead-sheet\" krijgt u een balk met akkoordnamen erboven en " -"liedteksten eronder. Een tweede balk is optioneel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Begeleidingsbalk toevoegen" - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" -"Voegt een begeleidingsbalk toe, en ook een tweede stem aan de bovenste balk." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Koor" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" -"Selecteer de stemmen voor het koor. Gebruik de letters S, A, T en/of B. Een " -"koppelteken geeft een nieuwe balk aan." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "Tip: gebruik twee koorpartijen voor een dubbelkoor." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Stemmen:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -msgid "Lyrics:" -msgstr "Liedteksten:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Alle stemmen zelfde liedtekst" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -msgid "A set of the same lyrics is placed between all staves." -msgstr "Een set van dezelfde liedteksten wordt tussen alle balken geplaatst." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Elke stem zelfde liedtekst" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "" -"Every voice gets its own lyrics, using the same text as the other voices." -msgstr "" -"Elke stem krijgt zijn eigen liedtekst, met dezelfde tekst als de andere " -"stemmen." - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Elke stem andere liedtekst" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Elke stem krijgt zijn eigen liedteksten." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "Coupletten verdelen" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -msgid "One set of stanzas is distributed across the staves." -msgstr "Een enkele set liedteksten wordt verdeeld over alle balken." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "Piano-uittreksel" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "Voegt automatisch een piano-uittreksel toe." - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "MIDI-oefenbestanden" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "" -"Genereert een MIDI-oefenbestand voor elke stem, ook als MIDI uitvoer voor de " -"hoofdpartituur is uitgeschakeld." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Koor|K." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "MIDI-oefenbestanden:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Piano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Piano|Pno." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Klavecimbel" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Klavecimbel|Kl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Clavichord" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Clavichord|Clv." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Orgel" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Orgel|Org." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Pedaal:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Stel 0 in om de pedaalbalk te verwijderen." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Celesta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Celesta|Cel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Pauken" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Pauken|Pkn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Xylofoon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Xylofoon|Xyl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Marimba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Vibrafoon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Vibrafoon|Vib." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Buisklokken" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Buisklokken|Bkl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Klokkenspel" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Klokkenspel|Kls." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Slagwerk" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Slagwerk|Slw." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "Slagwerk volgt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "houd enige afstand." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Stijl:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Drums (5 lijnen, standaard)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Timbales-stijl (2 lijnen)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Conga's-stijl (2 lijnen)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Bongo's-stijl (2 lijnen)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Percussie-stijl (1 lijn)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Stokken verwijderen" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Verwijder de stokken van de slagwerknoten." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Snaarinstrumenten" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Getokkelde instrumenten" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Houtblazers" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Koper" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "Vocaal" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Toetsinstrumenten" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Speciaal" - -#~ msgid "Open PDF" -#~ msgstr "PDF weergeven" - -#~ msgid "Print" -#~ msgstr "Afdrukken" - -#~ msgid "Play MIDI" -#~ msgstr "MIDI afspelen" - -#~ msgid "Email..." -#~ msgstr "Verzenden..." - -#~ msgid "Disable the built-in PDF preview" -#~ msgstr "De ingebouwde PDF-vooruitblik uitschakelen" - -#~ msgid "The direction to use for the articulations." -#~ msgstr "Plaatsing van de articulaties: onder of boven de balk of neutraal." - -#~ msgid "&Generated Files" -#~ msgstr "&Aangemaakte bestanden" - -#~ msgid "Your document has been modified, please save first." -#~ msgstr "Uw document is gewijzigd, gelieve het eerst op te slaan." - -#~ msgid "LilyPond documentation:" -#~ msgstr "LilyPond-documentatie:" - -#~ msgid "The document has been sent to the printer." -#~ msgstr "Het document is naar de printer gestuurd." - -#~ msgid "" -#~ "Printing failed: %1\n" -#~ "\n" -#~ "The print command %2 does probably not exist. Please check your settings." -#~ msgstr "" -#~ "Het afdrukken is mislukt: %1\n" -#~ "\n" -#~ "Het printcommando %2 bestaat waarschijnlijk niet. Controleer uw " -#~ "instellingen." - -#~ msgid "The print command contains errors. Please check your settings." -#~ msgstr "Het printcommando bevat fouten. Controleer uw instellingen." - -#~ msgid "Directly print on default printer" -#~ msgstr "Direct afdrukken op de standaardprinter" - -#~ msgid "Notify when a document has been sent to the printer" -#~ msgstr "Melding wanneer een document naar de printer is gestuurd" - -#~ msgid "Printcommand:" -#~ msgstr "Printcommando:" - -#~ msgid "" -#~ "Command to print a PDF file, for example lpr or kprinter. You may add " -#~ "some arguments, e.g. lpr -P myprinter." -#~ msgstr "" -#~ "Commando om een PDF-bestand af te drukken, bijvoorbeeld lpr of kprinter. " -#~ "U kunt opties meegeven, bijv. lpr -P kantoor." - -#~ msgid "Space above:" -#~ msgstr "Ruimte erboven:" - -#~ msgid "Name or full path of the convert-ly program." -#~ msgstr "Naam of pad van het convert-ly programma." - -#~ msgid "Expand" -#~ msgstr "Sneltekst" - -#, fuzzy -#~ msgid "Could not understand the entered pitches." -#~ msgstr "Kan de uitvoer van het LilyPond-proces niet lezen." - -#~ msgid "" -#~ "Converts the notes in the selected music expression from relative to " -#~ "absolute pitch." -#~ msgstr "" -#~ "Zet de noten in de geselecteerde muziekexpressie om naar relatieve " -#~ "toonhoogte." - -#~ msgid "Dock" -#~ msgstr "Vastmaken" - -#~ msgid "Show" -#~ msgstr "Weergeven" - -#~ msgid "Paper: indent = 0" -#~ msgstr "Papier: indent = 0" - -#~ msgid "Paper Size A4" -#~ msgstr "Papierformaat A4" - -#~ msgid "Paper Size A4 Landscape" -#~ msgstr "Papierformaat A4 oblong" - -#~ msgid "Paper Size A5" -#~ msgstr "Papierformaat A5" - -#~ msgid "Paper Size Letter" -#~ msgstr "Papierformaat Letter" - -#~ msgid "Override" -#~ msgstr "Override" - -#~ msgid "Once Override" -#~ msgstr "Once Override" - -#~ msgid "Stem Up" -#~ msgstr "Stokken omhoog" - -#~ msgid "Stem Down" -#~ msgstr "Stokken omlaag" - -#~ msgid "Relative Music" -#~ msgstr "Relatieve muziek" - -#~ msgid "Set Global Staffsize 18" -#~ msgstr "Globale balk-grootte 18" - -#~ msgid "Repeat" -#~ msgstr "Herhaling (\\repeat)" - -#~ msgid "Repeat Alternative" -#~ msgstr "Herhaling alternatief" - -#~ msgid "Header Template" -#~ msgstr "Kopregel-sjabloon" - -#~ msgid "Header: No Tagline" -#~ msgstr "Kopregels: geen tagline" - -#~ msgid "Lyric Stanza" -#~ msgstr "Couplet liedtekst" - -#~ msgid "Melody with Lyrics" -#~ msgstr "Melodie met liedtekst" - -#~ msgid "Score section" -#~ msgstr "Score sectie" - -#~ msgid "Layout Section" -#~ msgstr "Layout sectie" - -#~ msgid "Layout: No Barnumbers" -#~ msgstr "Layout: geen maatnummers" - -#~ msgid "Midi section" -#~ msgstr "Midi sectie" - -#~ msgid "Midi: Set Tempo" -#~ msgstr "Midi: tempo instellen" - -#~ msgid "With (after \\new Staff, etc.)" -#~ msgstr "With (na \\new Staff, etc.)" - -#~ msgid "With: instrumentName" -#~ msgstr "With: instrumentName" - -#~ msgid "With: shortInstrumentName" -#~ msgstr "With: shortInstrumentName" - -#~ msgid "With: Smaller Staffsize" -#~ msgstr "With: notenbalk verkleinen" - -#~ msgid "Key C major" -#~ msgstr "C-groot" - -#~ msgid "Key D major" -#~ msgstr "D-groot" - -#~ msgid "Key E major" -#~ msgstr "E-groot" - -#~ msgid "Key F major" -#~ msgstr "F-groot" - -#~ msgid "Key G major" -#~ msgstr "G-groot" - -#~ msgid "Key A major" -#~ msgstr "A-groot" - -#~ msgid "Key C minor" -#~ msgstr "C-klein" - -#~ msgid "Key D minor" -#~ msgstr "D-klein" - -#~ msgid "Key E minor" -#~ msgstr "E-klein" - -#~ msgid "Key F minor" -#~ msgstr "F-klein" - -#~ msgid "Key G minor" -#~ msgstr "G-klein" - -#~ msgid "Key A minor" -#~ msgstr "A-klein" - -#~ msgid "Modern 2/2 Time Signature" -#~ msgstr "Moderne 2/2 maat" - -#~ msgid "Modern 4/4 Time Signature" -#~ msgstr "Moderne 4/4 maat" - -#~ msgid "Tactus Major (2/half note)" -#~ msgstr "Tactus Major (2/halve noot)" - -#~ msgid "Tactus Minor (1/half note)" -#~ msgstr "Tactus Minor (1/halve noot)" - -#~ msgid "Tactus Proportionatus (1/half dot)" -#~ msgstr "Tactus Proportionatus (1/halve punt)" - -#~ msgid "Tactus Proportionatus (3/quarter note)" -#~ msgstr "Tactus Proportionatus (3/kwartnoot)" - -#~ msgid "Tempo text mark" -#~ msgstr "Tempo tekstaanduiding" - -#~ msgid "Two voices" -#~ msgstr "Twee stemmen" - -#~ msgid "Two voices (long)" -#~ msgstr "Twee stemmen (lang)" - -#~ msgid "New Lyrics" -#~ msgstr "Nieuwe liedtekst (Lyrics)" - -#~ msgid "Your document currently has no filename, please save first." -#~ msgstr "Uw document heeft geen bestandsnaam, gelieve het eerst op te slaan." - -#~ msgid "" -#~ "Sorry, support for remote files is not yet implemented.\n" -#~ "Please save your document to a local file." -#~ msgstr "" -#~ "Helaas, netwerkbestanden worden nog niet ondersteund.\n" -#~ "Gelieve uw document naar een locaal bestand op te slaan." - -#~ msgid "&Source Text" -#~ msgstr "&Brontekst" - -#~ msgid "Already Running" -#~ msgstr "Reeds actief" - -#, fuzzy -#~ msgid "Save File" -#~ msgstr "Bestand openen" - -#~ msgid "Untitled" -#~ msgstr "Naamloos" - -#~ msgid "LilyPond crashed." -#~ msgstr "LilyPond is gecrashed." - -#~ msgid "" -#~ "A LilyPond Kate/Pate plugin.\n" -#~ "\n" -#~ "This is LilyKDE, a plugin to make it easy to run the LilyPond music " -#~ "typesetter from within Kate.\n" -#~ "\n" -#~ "Version: $version\n" -#~ "Homepage: $homepage\n" -#~ msgstr "" -#~ "Een Kate/Pate-plugin voor LilyPond.\n" -#~ "\n" -#~ "Dit is LilyKDE, een plugin waarmee het eenvoudig is om het LilyPond " -#~ "muziekgraveer-programma vanuit Kate te gebruiken.\n" -#~ "\n" -#~ "Versie: $version\n" -#~ "Homepage: $homepage\n" - -#~ msgid "LilyPond [$filename] starting ($mode)..." -#~ msgstr "LilyPond [$filename] wordt gestart ($mode)..." - -#~ msgid "Could not start LilyPond." -#~ msgstr "Kan LilyPond niet starten." - -#~ msgid "LilyPond [$filename] was terminated by signal $signal." -#~ msgstr "LilyPond [$filename] werd beëindigd door signaal $signal." - -#~ msgid "LilyPond [$filename] exited with return code $retcode." -#~ msgstr "LilyPond [$filename] stopte met foutcode $retcode." - -#~ msgid "LilyPond [$filename] finished." -#~ msgstr "LilyPond [$filename] voltooid." - -#~ msgid "LilyPond [$filename] exited abnormally." -#~ msgstr "LilyPond [$filename] werd afgebroken." - -#~ msgid "LilyPond did not write a PDF. You probably forgot \\layout?" -#~ msgstr "" -#~ "LilyPond heeft geen PDF-bestand geschreven. Waarschijnlijk bent u " -#~ "\\layout vergeten?" - -#~ msgid "Clear LilyPond Log" -#~ msgstr "LilyPond uitvoer wissen" - -#~ msgid "Record MIDI with Rumor" -#~ msgstr "MIDI opnemen met Rumor" - -#~ msgid "Quick Insert Panel" -#~ msgstr "Quick Insert-paneel" - -#~ msgid "Toggle PDF navigation panel" -#~ msgstr "PDF-navigatiepaneel tonen of verbergen" - -#~ msgid "Dock/Undock PDF preview" -#~ msgstr "PDF-weergave los- of aankoppelen" - -#~ msgid "Dock/Undock Quick Insert Panel" -#~ msgstr "Quick Insert-paneel los- of aankoppelen" - -#~ msgid "" -#~ "The document has been processed with convert-ly, but remained unchanged. " -#~ "This is the message given by convert-ly: %s" -#~ msgstr "" -#~ "Het document is verwerkt door convert-ly, maar bleef ongewijzigd. Dit is " -#~ "de melding die convert-ly gaf: %s" - -#~ msgid "Could not start convert-ly: %s" -#~ msgstr "Kan convert-ly niet starten: %s" - -#~ msgid "PDF" -#~ msgstr "PDF" - -#~ msgid "Name or full path of the pdftk program (see %s)." -#~ msgstr "Naam of pad van het pdftk programma (zie %s)." - -#~ msgid "" -#~ "Check the actions you want to display (if applicable) after LilyPond has " -#~ "successfully compiled your document." -#~ msgstr "" -#~ "Selecteer de acties die u wilt laten weergeven (indien van toepassing) " -#~ "nadat LilyPond uw document succesvol heeft verwerkt." - -#~ msgid "Keep undocked windows on top of Kate" -#~ msgstr "Ontkoppelde vensters boven Kate houden" - -#~ msgid "Clear log before LilyPond is started" -#~ msgstr "Log wissen als LilyPond wordt gestart" - -#~ msgid "Force reload of PDF preview when LilyPond has run" -#~ msgstr "PDF-weergave herladen nadat LilyPond is gestart" - -#~ msgid "Always embed LilyPond source files in published PDF" -#~ msgstr "LilyPond-bronbestanden altijd in gepubliceerde PDF inbedden" - -#~ msgid "TiMidity successfully started." -#~ msgstr "TiMidity is gestart." - -#~ msgid "TiMidity stopped." -#~ msgstr "TiMidity is gestopt." - -#~ msgid "" -#~ "Could not start TiMidity. Please try the command %s in a terminal to find " -#~ "out what went wrong." -#~ msgstr "" -#~ "Kon TiMidity niet starten. Probeer de commandoregel %s in een terminal om " -#~ "uit te vinden wat er verkeerd ging." - -#~ msgid "REC" -#~ msgstr "REC" - -#~ msgid "Start or stop Rumor" -#~ msgstr "Rumor starten of stoppen" - -#~ msgid "" -#~ "The meter to use. Leave 'Auto' to let LilyKDE determine the meter from " -#~ "the LilyPond document." -#~ msgstr "" -#~ "De te gebruiken maatsoort. Indien 'Auto', bepaalt LilyKDE de maatsoort " -#~ "uit het huidige document." - -#~ msgid "" -#~ "The number of accidentals. A negative number designates flats. Leave " -#~ "'Auto' to let LilyKDE determine the key signature from the LilyPond " -#~ "document." -#~ msgstr "" -#~ "Het aantal voortekens. Een negatieve waarde duidt mollen aan. Indien " -#~ "'Auto', bepaalt LilyKDE de toonsoort uit het huidige document." - -#~ msgid "Found rumor version $version." -#~ msgstr "Rumor versie $version gevonden." - -#~ msgid "Could not find Rumor: %s" -#~ msgstr "Kon Rumor niet vinden: %s" - -#~ msgid "OSS device %d" -#~ msgstr "OSS apparaat %d" - -#~ msgid "" -#~ "Here you can select which Guile scripts you want Rumor to load. You can " -#~ "add your own scripts by putting them in %s. If the first line of your " -#~ "script starts with a semicolon (;) that line will be shown as description." -#~ msgstr "" -#~ "Hier kunt u selecteren welke Guile scripts u met Rumor wilt gebruiken. U " -#~ "kunt uw eigen scripts toevoegen door deze in %s te plaatsen. Als de " -#~ "eerste regel van uw script met een puntkomma (;) begint wordt deze als " -#~ "omschrijving weergegeven." - -#~ msgid "Configure %s" -#~ msgstr "%s instellen" - -#~ msgid "Remove selected part from your score." -#~ msgstr "Geselecteerde partij uit uw partituur verwijderen." - -#~ msgid "Move selected part up." -#~ msgstr "Geselecteerde partij omhoog verplaatsen." - -#~ msgid "Move selected part down." -#~ msgstr "Geselecteerde partij omlaag verplaatsen." - -#~ msgid "Use no, short or long instrument names before the next systems." -#~ msgstr "" -#~ "Gebruik geen, korte of lange instrumentnamen voor de volgende systemen." - -#~ msgid "Italian names" -#~ msgstr "Italiaanse namen" - -#~ msgid "" -#~ "Choose standard Italian instrument names, like '%s' instead of 'Organ.'" -#~ msgstr "" -#~ "Kies standaard Italiaanse instrumentnamen, zoals '%s' in plaats van " -#~ "'Orgel.'" - -#~ msgid "Could not start Pdftk: %s" -#~ msgstr "Kan Pdftk niet starten: %s" - -#~ msgid "Embedded file %s in PDF." -#~ msgid_plural "Embedded files %s in PDF." -#~ msgstr[0] "Bestand %s ingebed in PDF." -#~ msgstr[1] "Bestanden %s ingebed in PDF." - -#~ msgid "Embedding files in PDF failed." -#~ msgstr "Het inbedden van de bestanden in de PDF is mislukt." - -#~ msgid "Return code: %i" -#~ msgstr "Foutcode: %i" - -#~ msgid "Open the folder containing the LilyPond and PDF documents." -#~ msgstr "Map met de LilyPond- en PDF-documenten openen." - -#~ msgid "Open the generated PDF file with the default PDF viewer." -#~ msgstr "" -#~ "Het aangemaakte PDF-bestand met het standaard weergaveprogramma bekijken." - -#~ msgid "" -#~ "Print the PDF using the print command set in the Commands settings page." -#~ msgstr "" -#~ "De PDF afdrukken met het printcommando dat onder Commando's is ingesteld." - -#~ msgid "Email PDF" -#~ msgstr "PDF e-mailen" - -#~ msgid "Attach the PDF to an email message." -#~ msgstr "Het PDF-bestand bij een e-mailbericht voegen." - -#~ msgid "" -#~ "Play the generated MIDI files using the default MIDI player (Timidity++ " -#~ "is recommended)." -#~ msgstr "" -#~ "De aangemaakte MIDI-bestanden afspelen met de standaard MIDI-speler " -#~ "(Timidity++ is aanbevolen)." - -#~ msgid "Embed source" -#~ msgstr "Bron inbedden" - -#~ msgid "Embed the LilyPond source files in the published PDF (using pdftk)." -#~ msgstr "" -#~ "De LilyPond bronbestanden in de gepubliceerde PDF inbedden (gebruikmakend " -#~ "van pdftk)." - -#~ msgid "Rhythm" -#~ msgstr "Ritme" - -#~ msgid "Different tools to edit durations." -#~ msgstr "Hulpmiddelen voor het bewerken van tijdsduren." - -#~ msgid "Durations" -#~ msgstr "Tijdsduren" - -#~ msgid "Apply" -#~ msgstr "Toepassen" - -#~ msgid "" -#~ "Press to apply the entered rhythm to the selected music. This will delete " -#~ "previously entered durations." -#~ msgstr "" -#~ "Klik om het ingevoerde ritme aan de geselecteerde muziek toe te voegen. " -#~ "Eerder ingevoerde ritmiek gaat hierdoor verloren." - -#~ msgid "One document failed." -#~ msgid_plural "$count documents failed." -#~ msgstr[0] "Eén document gefaald." -#~ msgstr[1] "$count documenten gefaald." - -#~ msgid "Finished" -#~ msgstr "Beëindigd" - -#~ msgid "LilyKDE servicemenu helper" -#~ msgstr "LilyKDE servicemenu hulpprogramma" - -#~ msgid "LilyPond files to convert" -#~ msgstr "Te converteren LilyPond-bestanden" - -#~ msgctxt "NAME OF TRANSLATORS" -#~ msgid "Set this to your name" -#~ msgstr "Wilbert Berendsen" - -#~ msgid "&Lyrics" -#~ msgstr "&Liedteksten" - -#~ msgid "English" -#~ msgstr "Engels" - -#~ msgid "" -#~ "Whether you want instrument names to be standard Italian (like 'Organo' " -#~ "for 'Organ'), English or in your own language." -#~ msgstr "" -#~ "Of u instrumentnamen in standaard Italiaans wilt (bijv. 'Organo' voor " -#~ "'Orgel'), in het Engels of in uw eigen taal." - -#~ msgid "Your language" -#~ msgstr "Uw eigen taal" diff -Nru frescobaldi-1.2.0/po/pl.po frescobaldi-2.0.0/po/pl.po --- frescobaldi-1.2.0/po/pl.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/pl.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,3987 +0,0 @@ -# Polish translation for Frescobaldi -# Copyright (c) 2008-2009, Wilbert Berendsen -# This file is distributed under the same license as the Frescobaldi package. -# -# Piotr Komorowski, , 2009, 2010. -msgid "" -msgstr "" -"Project-Id-Version: frescobaldi 0.1\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-11-09 09:51+0100\n" -"PO-Revision-Date: 2010-12-23 10:52+0100\n" -"Last-Translator: Piotr Komorowski \n" -"Language-Team: Polish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.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" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "Edytor nutowy LilyPond" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Piotr Komorowski" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "i18n@frescobaldi.org" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Sesja początkowa" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Rozpocznij nowy przykład" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Używane kodowanie" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Do której linii dojść, zaczynając w 1" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Do której kolumny dojść, zaczynając w 0" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Spróbuj użyć linii i numerów kolumn" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "Plik LilyPonda, lub tekstowy URL do otwarcia " - -#: dummy.py:5 -msgid "&Insert" -msgstr "&Wstaw " - -#: dummy.py:6 -msgid "&Document" -msgstr "&Dokument " - -#: dummy.py:7 -msgid "&LilyPond" -msgstr "&LilyPond" - -#: dummy.py:8 -msgid "&Sessions" -msgstr "&Sesja początkowa" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "&Dźwięki" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "&Tekst" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "&Rytm" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "&Źródłowy dokument" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "&Ekstra narzędzia" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "Dedykacja" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Tytuł" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Podtytuł" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "Podpodtytuł" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Instrument" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Kompozytor" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Aranżer" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Autor tekstu" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Licznik" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Utwór" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Opus" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Copyright" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Przypis" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "Dur" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "Moll" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "Jońska" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "Dorycka" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "Frygijska" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "Lidyjska" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "Miksolidyjska" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "Eolska" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "Lokryjska" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Artykulacja" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Akcent" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Marcato" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Staccatissimo" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Staccato" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Portato" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Tenuto" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Ozdobniki" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Tryl" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Mordent" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Mordent przekreślony" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Obiegnik" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Obiegnik odwrócony" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "Symbole" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Fermata" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Krótka fermata" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Długa fermata" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Bardzo długa fermata" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Segno" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Varcoda" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "Signumcongruetiae" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Inne" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Smyczek do góry" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Smyczek na dół" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "Otwarty (np.dęte)" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "Zakryty (np. dęte)" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Flażolet" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Kciuk" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Lewa pięta" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Prawa pięta" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "Lewy nos" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Prawy nos" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "Pół otwarty (np. hi-hat)" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Pojawił się błąd wewnętrzny:" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "Błąd wewnętrzny " - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Wyślij raport o błędzie..." - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "Opisz co zrobiłeś, gdy pojawił się błąd:" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Lewy panel" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Prawy panel" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Górny panel" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Dolny panel" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "Zamknij inne dokumenty" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Pokaż ścieżkę" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Pokaż zakładki dokumentów" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "&Widok narzędzi" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "Nowa..." - -#: ../python/kateshell/mainwindow.py:240 -msgid "Manage Sessions..." -msgstr "Zarządzaj sesjami..." - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" -"Nie można odnaleźć kontenera XMLGUI \"%1\".\n" -"\n" -"Prawdopodobnie lokalny plik ui.rc zawiera błędy. Zalecane jest usunięcie " -"tego pliku, ponieważ w przeciwnym przypadku elementy interfejsu użytkownika " -"(ui) zostaną utracone. Oto pełna ścieżka do tego pliku:\n" -"\n" -"%2\n" - -#: ../python/kateshell/mainwindow.py:325 -msgid "No Session" -msgstr "Brak sesji" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Proszę najpierw wybrać tekst" - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "zmieniony" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Linia: %1 Kol: %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "Blok" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Tryb wyboru blokowego" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "Linia" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Tryb wyboru liniowego" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Wszystkie pliki" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Otwórz plik" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "Prawy klik dla opcji zakładek" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Skocz do" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Wyładuj" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "Nie można wczytać %1" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Proszę zainstalować %1" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "Konfiguruj skróty klawiszowe" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "Wciśnij klawisz, aby ustalić skrót dla:" - -#: ../python/kateshell/sessions.py:41 -msgid "Manage Sessions" -msgstr "Zarządzaj sesjami" - -#: ../python/kateshell/sessions.py:99 -msgid "Session" -msgstr "Sesja " - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "Właściwości tej sesji" - -#: ../python/kateshell/sessions.py:105 -msgid "Name:" -msgstr "Nazwa:" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "Zawsze zapisuj listę dokumentów w tej sesji" - -#: ../python/kateshell/sessions.py:115 -msgid "Base directory:" -msgstr "Katalog główny:" - -#: ../python/kateshell/sessions.py:128 -msgid "Edit session: %1" -msgstr "Edytuj sesję: %1" - -#: ../python/kateshell/sessions.py:135 -msgid "Edit new session" -msgstr "Edytuj nową sesję" - -#: ../python/kateshell/sessions.py:171 -msgid "Please enter a session name." -msgstr "Proszę wpisać nazwę sesji." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "Proszę nie używać nazwy '%1'." - -#: ../python/kateshell/sessions.py:187 -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "Proszę nie używać znaku & w nazwie sesji." - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" -"Inna sesja o nazwie %1 już istnieje.\n" -"\n" -"Czy chcesz ją nadpisać?" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "Otwórz %1 w przeglądarce zewnętrznej" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "Graj %1" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "(Brak zaktualizowanych plików MIDI, lub PDF.)" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "" -"Brak zaktualizowanych plików MIDI, lub PDF. Proszę najpierw uruchomić " -"LiliPonda, aby stworzyć te pliki." - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "Brak plików do wysłania przez e-mail." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "Brak plików do wysłania" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" -"Brak dokumentu PDF do wydrukowania.\n" -"\n" -"Prawdopodobnie należy uruchomić LilyPonda, aby stworzyć lub zaktualizować " -"dokument PDF. Jeśli tworzysz plik MIDI, upewnij się, że dodałeś sekcję " -"\\layout { } do swojej partytury, w przeciwnym wypadku LilyPond nie utworzy " -"pliku PDF." - -#: ../python/frescobaldi_app/actions.py:146 -msgid "No files to print" -msgstr "Brak plików do wydrukowania" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "Wyślij dokumenty e-mailem" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Proszę wybrać pliki do wysłania:" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" -"To są zaktualizowane pliki (tj. nowsze niż dokument źródłowy LilyPonda). " -"Pokazane są również pliki zawarte w dokumencie źródłowym." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -"Uwaga:ten plik PDF został stworzony w trybie podglądu i zawiera punkty URLs, " -"co znacznie zwiększa jego objętość.Proszę rozważyć zamianę na tryb wydruku, " -"co spowoduję znaczne zmniejszenie objętości pliku." -msgstr[1] "" -"Uwaga:ten plik PDF został stworzony w trybie podglądu i zawiera punkty URLs, " -"co znacznie zwiększa jego objętość.Proszę rozważyć zamianę na tryb wydruku, " -"co spowoduję znaczne zmniejszenie objętości pliku." -msgstr[2] "" -"Uwaga:ten plik PDF został stworzony w trybie podglądu i zawiera punkty URLs, " -"co znacznie zwiększa jego objętość.Proszę rozważyć zamianę na tryb wydruku, " -"co spowoduję znaczne zmniejszenie objętości pliku." - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "" -"Uwaga: Jeśli brak plików PDF, lub MIDI znaczy to prawdopodobnie, że należy " -"uruchomić LilyPonda, aby zaktualizować te pliki, zanim zostaną wysłane e-" -"mailem." - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "Zaznacz wszystko" - -#: ../python/frescobaldi_app/actions.py:249 -msgid "Print documents" -msgstr "Wydrukuj dokument " - -#: ../python/frescobaldi_app/actions.py:252 -msgid "Please select the files you want to print:" -msgstr "Proszę wybrać pliki do drukowania:" - -#: ../python/frescobaldi_app/actions.py:256 -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" -"To są dokumenty PDF, które są zaktualizowane (tj. nowsze niż źródłowy " -"dokument LilyPonda). Sprawdź dokumenty, które chcesz wysłać do drukarki." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "Drukuj %1" - -#: ../python/frescobaldi_app/actions.py:340 -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "Drukuj 1 plik " -msgstr[1] "Drukuj %1" -msgstr[2] "Drukuj %1" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "" -"Polecenie drukowania (tj. 'lpr' lub 'lp') nie zostało znalezione w Twoim " -"systemie." - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "Polecenie '%1' nie zostało odnalezione w Twoim systemie." - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" -"Poniższe polecenie zostało uruchomione, ale zwróciło kod %1.\n" -"\n" -"%2" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "Utwórz pusty papier nutowy" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "Typ:" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "Akcja:" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "Wybierz rodzaj pustej pięciolinii do utworzenia." - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "Wybierz rodzaj akcji dla przycisku \"Ok\"." - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "Podgląd pustego papieru nutowego." - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "Kliknij, aby zobaczyć więcej ustawień." - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "Papier" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "Ustawienia" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Rozmiar papieru:" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "Domyślny" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "Rozmiar pięciolinii:" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "Numery stron:" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Usuń domyślną stopkę" - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "Drukuj kreski taktowe" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "Ilość taktów na linię:" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "Drukuj numery stron" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "Zacznij od:" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "Podgląd pustego papieru nutowego" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "Nie utworzono pliku PDF." - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "Otwórz w przeglądarce PDF" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "Zapisz PDF jako..." - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "Pliki PDF" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "Zapisz PDF" - -#: ../python/frescobaldi_app/blankpaper.py:365 -msgid "Print..." -msgstr "Drukuj..." - -#: ../python/frescobaldi_app/blankpaper.py:371 -msgid "Print staff paper" -msgstr "Drukuj papier nutowy" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "Kopiuj kod LilyPonda do edytora" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "Ilość pięciolinii na stronie:" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "Klucz:" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "Pojedyncza pięciolinia" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "Ilość systemów na stronie:" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "Klucze" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "System fortepianowy" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "System organowy" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "Ilość pięciolinii na system:" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "Klucze:" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" -"Wstaw tyle liter (S, A, T lub B), ile jest pięciolinii.\n" -"Zobacz \"Co to jest\", by uzyskać więcej informacji." - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" -"Aby ustalić klucze, najpierw ustaw liczbę pięciolinii dla danego systemu. " -"Następnie wprowadź tyle liter (S, A, T lub B), ile jest pięciolinii.\n" -"\n" -"S lub A: klucz wiolinowy,\n" -"T: klucz wiolinowy 8va bassa,\n" -"B: klucz basowy.\n" -" \n" -"Jeśli chcesz utworzyć papier nutowy dla 4-ro głosowego chóru mieszanego, " -"najpierw ustal liczbę pięciolinii na 4. Następnie wprowadź \"SATB\"(bez " -"czudzysłowu)." - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "System chóralny" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Brak" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "System użytkownika" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "Pięciolinia:" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "Przestrzeń poniżej:" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "Klamra" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "Klamra" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "Klamra kwadratowa" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "Łącz kreski taktowe" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "Znaki specjalne" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "nieznany" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" -"Przetłumaczenie nie powiodło się.\n" -"\n" -"Muzyka zawiera ćwierćtonowe znaki chromatyczne, które nie są dostępne w tym " -"języku \"%1\"." - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" -"Język nazw dźwięków w zaznaczonym obszarze został zaktualizowany, musisz " -"jednak ręcznie dodać do swojego dokumentu następujące polecenie: " - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "(dla LilyPonda poniżej 2.14) lub" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "(dla Lilyponda 2.14 lub wyższego)." - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Język nazw dźwięków" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "" -"Proszę wybrać nazwę dla zmniennej przyporządkowanej do wybranego tekstu:" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Wytnij i przyporządkuj" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "Otwórz %1" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "Proszę zaznaczyć oznaczenie wykonawcze w klamrach <<...>>lub {...}." - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" -"Wpisane wysokości dźwięków są niezrozumiałe.\n" -"\n" -"Proszę upewnij się, że używasz nazw dźwięków w języku \"%1\". " - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" -"Nie można wykonać żądanej transpozycji.\n" -"\n" -"Muzyka może zawierać ćwierćtonowe znaki chromatyczne, które nie są dostępne " -"języku \"%1\"." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "Transponuj" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "Proszę wprowadzić wysokość wyjściową i docelową:" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "Transponuj z:" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "do:" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "Instaluj" - -#: ../python/frescobaldi_app/download.py:56 -msgid "Download LilyPond" -msgstr "Pobierz LilyPond" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "" -"Narzędzie to umożliwia pobranie spakowanej wersji binarnej wydania LilyPonda " -"dla twojego systemu operacyjnego." - -#: ../python/frescobaldi_app/download.py:68 -msgid "Select the LilyPond version you want to download." -msgstr "Proszę wybrać, którą wersję Lilyponda pobrać." - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Wersja:" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" -"Wybierz katalog z prawem do zapisu, w którym chcesz zainstalować LilyPonda.\n" -"(W katalogu tym zostanie utworzony katalog oznaczony numerem wersji)." - -#: ../python/frescobaldi_app/download.py:81 -msgid "Install into:" -msgstr "Zainstaluj w:" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "Szczegóły" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "Strona internetowa gdzie można pobrać pakiety binarne Lilyponda." - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "Pobierz z:" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "Rodzaj maszyny:" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" -"To jest URL do pakietu, który zostanie pobrany i zainstalowany.\n" -"Możesz również przejść do innego miejsca, aby wybrać pakiet z Lilypondem." - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "Url pakietu:" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "Pobieranie listingu katalogów..." - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "Nie znaleziono pakietów. Możesz spróbować znaleźć je samemu." - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "Ostania wersja rozwojowa (%1)" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "Ostatnia wersja stabilna (%1)" - -#: ../python/frescobaldi_app/download.py:241 -msgid "Downloading %1..." -msgstr "Pobieranie %1..." - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "Pobieranie anulowane." - -#: ../python/frescobaldi_app/download.py:263 -msgid "Download failed: %1" -msgstr "Pobieranie nie powiodło się: %1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" -"LilyPond %1 jest już prawdopodobnie zainstalowany w %2.\n" -"\n" -"Czy chcesz go użyć, czy usunąć go i zainstalować ponownie?" - -#: ../python/frescobaldi_app/download.py:284 -msgid "Use existing LilyPond" -msgstr "Użyj istniejącego Lilyponda" - -#: ../python/frescobaldi_app/download.py:285 -msgid "Remove and re-install" -msgstr "Usuń i zainstaluj ponownie" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "Rozpakowywanie %1..." - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "Rozpokowywanie ukończone." - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -msgid "Unpacking failed." -msgstr "Rozpakowywanie nie powiodło się." - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "" -"Pojawił się błąd:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Menadżer rozszerzeń" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Szukaj..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "Nazwa" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Opis" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Skrót" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" -"To jest lista zdefiniowanych rozszerzeń.\n" -"\n" -"Kliknij na wybrany rząd, aby zobaczyć lub zmienić skojarzony z nim tekst. " -"Kliknij dwukrotnie na skrót lub jego opis, aby go zmnienić. Możesz również " -"wcisnąć F2, żeby edytować obecny skrót.\n" -"\n" -"Użyj przycisków poniżej, aby dodać lub usunąć rozszerzenia.\n" -"\n" -"Rozszerzeń można używać na dwa sposoby: wystukując nazwę skrótu na " -"klawiaturze, a następnie przywołując funkcję Rozszerzenia, bądź przywołując " -"funkcję (skrót: Ctrl+.) i wybierając rozszerzenie z listy (zatwierdzając " -"Enter lub OK)." - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" -"To jest tekst skojarzony z wybranym skrótem. Niektóry znaki posiadają " -"specjalne znaczenie:" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "Umieść kursor w tym miejscu." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Przetłumacz daną nazwę dźwięku." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Nowy objekt." - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"Inne rozszerzenie korzysta już z tej nazwy.\n" -"\n" -"Proszę użyć innej nazwy." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "" -"Proszę używać wyłącznie liter, liczb i znaków podkreślenia w nazwie " -"rozszerzeń." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "Proszę nie zostawiać pustego pola opisu." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" -"Nie znaleziono żadnych słowników z regułami dzielenia wyrazów.\n" -"\n" -"Proszę zainstalować pakiet zawierający taki słownik, lub skonfigurować " -"ścieżkę do tego pakietu ustawieniach programu Frescobaldi o nazwie \"Ścieżki" -"\". " - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Rozdziel tekst myślnikami" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Proszę wybrać język:" - -#: ../python/frescobaldi_app/kmid.py:68 -msgid "Pause" -msgstr "Pauza" - -#: ../python/frescobaldi_app/kmid.py:85 -msgid "Volume" -msgstr "Głośność" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "Home" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "Większy tekst" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "Mniejszy tekst" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "Pierwsza strona" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Poprzedni" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "Do góry o jeden poziom" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Następny" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "Spis treści" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "Indeks" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Kopiuj &Odnośnik" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Otwórz Odnośnik w &Nowym Oknie" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Kopiuj" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Otwórz Dokument w &Nowym Oknie" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "Ładowanie..." - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "Niedostępne" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "Słownik notacji" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "Indeks poleceń LilyPonda" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "Podręcznik użytkownika" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "Indeks podręcznika użytkownika" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -msgid "Internals Reference" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:877 -msgid "The %1 context" -msgstr "%1 spis treści" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "&Pomoc LilyPond" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Kierunek:" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Do góry" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Neutralnie" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Na dół" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "" -"Miejsce dodania artykulacji etc.: powyżej lub poniżej pięciolinii lub też w " -"pozycji domyślnej." - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "Konfiguracja skrótów klawiszowych (%1)" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Artykulacja" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Różne rodzaje artykulacji i inne znaki." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Kliknij oznaczenie artykulacyjne, aby dodać je do Twojego dokumentu." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" -"Jeśli najpierw zaznaczysz fragment muzyki, artykulacja zostanie dodana do " -"wszystkich nut w danym obszarze." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Pozwól na stenografowanie" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "Użyj skrótowej notacji dla artykulacji takich jak staccato" - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "Dynamika" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "Symbole dynamiki." - -#: ../python/frescobaldi_app/lqi.py:267 -msgid "Click a dynamic sign to add it to your document." -msgstr "Kliknij oznaczenie dynamiki, aby dodać je do Twojego dokumentu." - -#: ../python/frescobaldi_app/lqi.py:268 -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "" -"Jeśli najpierw zaznaczysz fragment muzyki, symbol dynamiki zostanie dodany " -"do zaznaczonego obszaru." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "" -"Jeśli zaznaczyłeś fragment muzyczny i klikniesz na znak za linią dynamiki, " -"znak ten ustawi miejsce zakończenia linii dynamiki (cresc., dim.)." - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "Oznaczenie dynamiki %1" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "Linie" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "Linia crescendo" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "Crescendo" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "Linia diminuendo" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "Diminuendo" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "Decrescendo" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -msgid "Bar Lines" -msgstr "Kreski taktowe" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "Kreski taktowe, znaki oddechów, etc." - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Podwójna kreska taktowa" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "Końcowa kreska taktowa" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "Kropkowana kreska taktowa" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "Przerywana kreska taktowa" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Niewidzialna kreska taktowa" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "Powtórz początek" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "Powtórz obydwa" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "Powtórz koniec" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "Powtórz obydwa (stary)" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "Powtórz obydwa (klasyczny)" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "Bez kresek taktowych (apostrofy)" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "Pojedyncza kreska taktowa" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "Potrójna kreska taktowa" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "Podwójna kreska taktowa" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "Kreska taktowa o podwójnej szerokości" - -#: ../python/frescobaldi_app/lqi.py:354 -msgid "Segno bar line" -msgstr "Kreska taktowe Segno" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "Znaki oddechów" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "Dymyślny znak oddechu" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "Znak oddechu - prosty" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "Caesura - łuk" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "Caesura - prosta" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "Łuki, linie, etc." - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "Użycie tych linii wymaga uprzedniego zaznaczenia fragmentu muzyki." - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "Łuk" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "Łuk frazowy" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "Belka" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "Arpeggia" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "Arpeggia używa się do akordów." - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "Arpeggio" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "Arpeggio ze strzałką w górę" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "Arpeggio ze strzałką na dół" - -#: ../python/frescobaldi_app/lqi.py:445 -msgid "Bracket Arpeggio" -msgstr "Arpeggio z klamrą" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "Arpeggio w nawiasie" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "Glissanda" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "" -"Glissandos are attached to a note and automatically extend to the next note." -msgstr "" -"Glissanda dodawane są do nuty i automatycznie rozciągane do następnej nuty." - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "Glissando" - -#: ../python/frescobaldi_app/lqi.py:466 -msgid "Dashed Glissando" -msgstr "Glissando przerywane" - -#: ../python/frescobaldi_app/lqi.py:467 -msgid "Dotted Glissando" -msgstr "Glissando kropkowane" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "Glissando zygzak" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "Glissando tryl" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "Pliki LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:170 -msgid "Print Source..." -msgstr "Drukuj źródło..." - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Stwórz Nową Partyturę..." - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "Uruchom LilyPonda (podgląd)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "Uruchom LiliPonda (do druku)" - -#: ../python/frescobaldi_app/mainapp.py:488 -msgid "Run LilyPond (custom)..." -msgstr "Uruchom LiliPonda (użytkownik)..." - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "Przerwij działanie LilyPonda" - -#: ../python/frescobaldi_app/mainapp.py:502 -msgid "Print Music..." -msgstr "Drukuj muzykę...." - -#: ../python/frescobaldi_app/mainapp.py:508 -msgid "Email Documents..." -msgstr "Wyślij dokumenty e-mailem..." - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "Wytnij fragment i przyporządkuj go do zmiennej LilyPonda." - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Powtórz ostatnią nutę lub akord." - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Powtórz ostatnie wyrażenie (nutę lub akord)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "Wstaw lub zarządzaj rozszerzeniami..." - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Rozszerz ostatni wyraz lub otwórz okno dialogowe rozszerzeń." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "Znaki specjalne..." - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "Wstaw znaki specjalne." - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "Dodaj do Rozszerzeń" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Następna pusta linia" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Przejdź do następnej pustej lini." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Poprzednia pusta linia." - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Przejdź do poprzedniej pustej lini." - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "Zaznacz do następnej pustej linii." - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "" -"Zaznacza tekst od obecnej pozycji aż do (i razem z) następnej pustej linii." - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "Zaznacz do poprzedniej pustej linii." - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "" -"Zaznacza tekst od obecnej pozycji, aż do miejsca zaraz za poprzednią pustą " -"linią." - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "Przenieś zaznaczenie do następnej pustej linii." - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "Przenieś zaznaczony blok do następnej pustej linii." - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "Przenieś zaznaczenie do poprzedniej pustej linii." - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "Przenieś zaznaczony blok do poprzedniej pustej linii." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "Graj/Oglądaj" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "" -"Zmień języku używany przez LilyPonda dla nazw dźwięków dla tego dokumentu, " -"lub w danym zaznaczeniu." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "Konwertuj Relatywne do &Absolutnych" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" -"Konwertuje nuty w danym dokumencie lub fragmencie z wysokości relatywnych do " -"absolutnych." - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "Konwertuj Absolutne do &Relatywnych" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "" -"Zmienia nuty w danym dokumencie, lub fragmencie z zapisu absolutnego na " -"relatywny." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "Transponuj" - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "Transponuje wszystkie nuty w danym dokumencie, lub jego fragmencie." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Zdubluj wartości" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Zdubluj wartości w danym fragmencie. " - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Zmniejsz wartości o połowę" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Zmniejsz wartości o połowę w danym fragmencie." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Dodaj kropkę" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Dodaj kropkę do wszystkich wartości w danym fragmencie." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Odejmij kropkę" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Usuń po jednej kropce z wszystkich nut w danym fragmencie." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Usuń skalowanie" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "Usuń skalowanie (*n/m) z wartości rytmicznych w tym fragmencie." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Wyczyść wartości" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "Wyczyść wszystkie wartości w danym fragmencie." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Ukryj wartości rytmiczne" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "Ukryj symbole wartości rytmicznych (ukryj powtarzające się wartości)." - -#: ../python/frescobaldi_app/mainapp.py:713 -msgid "Make implicit (per line)" -msgstr "Ukryj wartości (w linii)" - -#: ../python/frescobaldi_app/mainapp.py:714 -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "" -"Ukryj symbole wartości rytmicznych (usuń powtarzające się wartości), z " -"wyjątkiem pierwszej w każdej z linii." - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Pokaż wartości rytmiczne" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "" -"Pokaż wszystkie wartości rytmiczne (pokazuje wartość rytmiczną przy każdej " -"nuty, nawet jeśli jest taka sama jak poprzednia)." - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Dodaj rytm..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Dodaj podany rytm do zaznaczonego fragmentu muzyki." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Kopiuj rytm" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Kopiuj rytm z zaznaczonego fragmentu muzyki." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Wklej rytm" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Wklej rytm do wybranego fragmentu muzyki." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Usuń rozdzielenie tekstu myślnikami" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "Kopiuj słowa bez podziału wyrazów" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Cudzysłów pojedynczy" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Cudzysłów podwójny" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Wyrównaj" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "Wstaw wersję LilyPonda" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "Uaktualnij z convert-ly" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Otwórz obecny folder" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "Powtórz zaznaczony fragment muzyki" - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "Wstaw klamrę" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" -"Twój dokument został zmieniony i musi być zapisany zanim zostanie " -"uruchomiony LilyPond.\n" -"\n" -"Czy zapisać dokument teraz?" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "LilyPond już pracuje nad tym dokumentem." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "Nie można przetworzyć dokumentu" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "Czy mimo to kontynuować?" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "" -"Chcesz uruchomić LilyPonda w trybie podglądu (z opcją point and click), ale " -"Twój dokument zawiera polecenia wyłączenia tej opcji." - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" -"Chcesz uruchomić LilyPonda w trybie do druku (bez opcji point and click), " -"ale Twój dokument zawiera polecenia włączenia tej opcji." - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Przerwij działanie LilyPonda" - -#: ../python/frescobaldi_app/mainapp.py:917 -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "Uruchom LilyPonda w trybie podglądu (Shift-klik dla okna użytkownika)" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Szybkie wstawianie" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "Lilypond poprawnie skompilował %1." - -#: ../python/frescobaldi_app/mainapp.py:956 -msgid "LilyPond exited with an error compiling %1." -msgstr "LilyPond zakończył z błędem kompilacji %1." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Dodaj rytm" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Wprowadź rytm:" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "Wprowadź rytm używając wartości oddzielonych spacją (np. 8. 16 8 4 8)" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Terminal" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "S&ynchronizuj Terminal z obecnym dokumentem" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "Odtwarzacz MIDI" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" -"Nie można wczytać części KMid.\n" -"Proszę zainstalować KMid 2.4.0 lub wyższy." - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "Podgląd PDF" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "Pokaż panel nawigacyjny PDF" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "Pokaż minipodgląd PDF" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Ustawienia Okular..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "S&ynchronizuj podgląd z obecnym dokumentem" - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "Odśwież" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "LilyPond Log" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "no log" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "Pokazuj tylko przy błędzie" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "Dokumentacja LilyPonda" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" -"Ustawienie tempa. Pozostaw 'Auto', aby Frescobaldi określił tempo na " -"podstawie danych dokumentu LilyPonda" - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Kwantyzuj:" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "Najkrótsza użyta wartość" - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Krok" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Nagrywaj nuta po nucie, bez wartości rytmicznych." - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Mono" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Nagrywaj jednogłosowo, bez akordów." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" -"Ilość znaków chromatycznych. Liczba negatywna oznacza bemole. Pozostaw " -"'Auto',aby pozwolić Frescobaldiemu\n" -" \n" -"ustalić tonację na podstawie dokumentu LilyPonda." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Tempo:" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Licznik:" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Tonacja:" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Ustawienia..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "Więcej ustawień, np. wejścia i wyjścia MIDI. " - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Zapisz" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Ustaw jako domyślne." - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Znaleziono rumor w wersji %1." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "Nie znaleziono Rumora :%1" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "Ustawienia zostały zapisane." - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Nagrywaj" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Zacznij lub skończ nagrywanie MIDI z Rumorem" - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Rumor nagrywa, naciśnij ESC by zakończyć." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor zatrzymany." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "Zacznij lub zakończ TiMidity jako klienta ALSA MIDI." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Ustawienia Rumora" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "Urządzenie OSS %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Klawiatura" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "Wejście MIDI:" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" -"Wejście MIDI. Wybierz 'Keybourd', jeśli chcesz grać na klawiaturze komputera." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "Wyjście MIDI:" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "Wyjście MIDI do wykorzystania" - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Język:" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "Ustawienie języka LilyPond, w którym Rumor zapisze nagrywane nuty." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Uwidocznione wartości rytmiczne" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" -"Dodaj wartość do każdej nuty, nawet jeśli jest taka sama jak poprzednia." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Absolutne wysokości" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "Używaj absolutnych nazw wysokości, zamiast relatywnych." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Bez kresek taktowych" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Filtruj kreski taktowe z wyjścia Rumora." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Bez kropek" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "Zamiast kropek używaj wiązań." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Legato" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "Zamiast pauz, wydłużaj wartości nut" - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Usuń pauzy" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Usuń pauzy na początku i końcu pliku wyjściowego." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Skrypt Guile do załadowania:" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "" -"Tu możesz wybrać skrypt Guile, jakiego ma używać Rumor. Sprawdź \"Co to jest" -"\", by uzyskać więcej informacji." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" -"Tu możesz wybrać, który skrypt Guile ma być użytu przez Rumor. Możesz dodać " -"własne skrypty, umieszczając je w %1. Jeśli pierwsza linijka twojego skryptu " -"rozpoczyna się średnikiem, będzie ona pokazywana jako opis." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "Auto" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "tryb podglądu" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "tryb wydruku" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "LilyPond %1 [%2] zaczyna (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "LilyPond [%1] zaczyna (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "LilyPond [%1] zakończył z kodem %2." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "LilyPond [%1] zakończył ze statusem %2." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] zakończył (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "Nie można uruchomić LilyPonda. Sprawdź scieżkę oraz pozwolenia." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "Nie można odczytać z tego przebiegu LilyPonda." - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Pojawił się nieznany błąd." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -msgid "Run LilyPond" -msgstr "Uruchom LilyPonda" - -#: ../python/frescobaldi_app/runlily.py:257 -msgid "Select which LilyPond version you want to run:" -msgstr "Proszę wybrać, którą wersję Lilyponda uruchomić:" - -#: ../python/frescobaldi_app/runlily.py:265 -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "Uruchom LilyPonda w trybie podglądu (z funkcją Point and Click)" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "Uruchom LilyPonda z wyświetlaniem szczegółów" - -#: ../python/frescobaldi_app/runlily.py:310 -msgid "Command" -msgstr "Polecenie" - -#: ../python/frescobaldi_app/runlily.py:317 -msgid "LilyPond %1" -msgstr "LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:318 -msgid "Use LilyPond version %1" -msgstr "Użyj LilyPonda w wersji %1" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -msgid "default" -msgstr "domyślny" - -#: ../python/frescobaldi_app/runlily.py:322 -msgid "Default LilyPond Version." -msgstr "Domyślna wersja LilyPonda." - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "automatycznie" - -#: ../python/frescobaldi_app/runlily.py:325 -msgid "Automatic LilyPond Version (determined from document)." -msgstr "Wersja LilyPond jakiej użyjesz dla tego dokumentu." - -#: ../python/frescobaldi_app/runlily.py:330 -msgid "Path: %1" -msgstr "Ścieżka: %1" - -#: ../python/frescobaldi_app/runlily.py:334 -msgid "LilyPond (version unknown)" -msgstr "LilyPond (wersja nieznana)" - -#: ../python/frescobaldi_app/runlily.py:335 -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "" -"Użyj LilyPonda (nieznana wersja)\n" -"Ścieżka: %1" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Kliknij by rozpocząć edycję pliku" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "Zapisz LilyPond Log jako" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"Nie można zapisać logu LilyPonda:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -msgid "LilyPond-related settings" -msgstr "Ustawienia związane z LilyPondem" - -#: ../python/frescobaldi_app/sessions.py:44 -msgid "LilyPond version to use:" -msgstr "Używana wersja LilyPonda:" - -#: ../python/frescobaldi_app/sessions.py:48 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" -"Tu możesz ustalić stałą wersję LilyPonda, używaną dla dokumentów w tej sesji." -"\n" -"Zobacz Co to jest (Shift+F1), aby uzyskać więcej informacji." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" -"Tu możesz ustawić stałą wersję LilyPonda, używaną dla dokumentów w tej sesji." -"\n" -"\n" -"Wersja LilyPonda wybrana tutaj używana jest domyślnie do Twoich dokumentów i " -"używana jest także przez polecenie \"Wstaw wersję\"." - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Ustaw" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Ustawienia ogólne" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Ustawienia ogólne Frescobaldiego" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -msgid "LilyPond Preferences" -msgstr "Ustawienia LilyPonda " - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Ścieżki" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Ścieżka do programów lub danych używanych przez Frescobaldiego" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "Wejście MIDI Rumora" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Ustawienia wtyczki wejścia MIDI Rumora" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Edytor komponentów" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Opcje edytora komponentów" - -#: ../python/frescobaldi_app/settings.py:298 -msgid "Running LilyPond" -msgstr "Uruchamianie LilyPonda" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "Pozwól, by LilyPond usuwał wynikowe pliki pośrednie" - -#: ../python/frescobaldi_app/settings.py:310 -msgid "LilyPond include path:" -msgstr "Ścieżka LilyPonda:" - -#: ../python/frescobaldi_app/settings.py:336 -msgid "When saving documents" -msgstr "Podczas zapisywania dokumentów" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "Zapamietaj pozycje kursora, zakładki, itd." - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Domyślna lokalizacja:" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "Domyślny folder dla Twoich dokumentów LilyPonda (do wyboru)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "Wersja LilyPond jakiej użyjesz dla tego dokumentu." - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Użyj numeru wersji LilyPonda, która jest zainstalowana" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Użyj numeru wersji z ostaniej dostępnej reguły convert-ly" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Użyj wersji użytkownika:" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Wprowadź poprawną wersję LilyPonda, np. 2.12.0" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "Ostrzeżenia i powiadomienia" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "" -"Ostrzegaj kiedy dokument zawiera wywołujące konflikty ustawienia point and " -"click" - -#: ../python/frescobaldi_app/settings.py:438 -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "" -"Ostrzegaj kiedy dokument musi być zapisany przed uruchomieniem Lilyponda" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "Ostrzegaj gdy zapisywanie sesji może nadpisać inną sesję" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "Point and Click" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "Włącz Point and Click" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "" -"Kliknij ten przycisk, gdy Point and Click nie działa. Sprawdź Shift+F1 (Co " -"to jest?), aby uzyskać więcej informacji." - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside " -"Okular. This works best when all instances of Okular are closed and the PDF " -"preview has not yet been opened." -msgstr "" -"Podczas pierwszego uruchomienia Frescobaldi próbuje automatycznie " -"skonfigurować Okular (jest to przeglądarka PDF) w taki sposób, aby wywoływał " -"Frescobaldi przy każdym kliknięciu na odpowiedni obiekt (funkcja Point and " -"Click).\n" -"\n" -"Ustawienie to może jednak zostać zmienione, gdy Frescobaldi zostanie " -"przeniesiony w inne miejsce, lub gdy inna aplikacja zrekonfiguruje Okular.\n" -"\n" -"Kliknij ten przycisk, aby skonfigurować Frescobaldi jako 'edytor " -"użytkownika' dla Okulara. Ta funkcja działa najlepiej gdy Okular jest " -"zamknięty, a podgląd PDF nie został jeszcze otwarty." - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" -"Podgląd PDF w Okularze został zrekonfigurowany.\n" -"\n" -"Jeśli już otworzyłeś podgląd PDF, zrestartuj Frescobaldiego, aby nowe " -"ustawienia zostały włączone." - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "Pomocne programy" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "Przeglądarka PDF:" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "Przeglądarka PDF" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "(pozostaw puste dla domyślnych wartości systemu operacyjnego)" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "Odtwarzacz MIDI:" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "Url:" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "Url lub ścieżka do dokumentacji LilyPonda." - -#: ../python/frescobaldi_app/settings.py:563 -msgid "Lyrics Hyphenation" -msgstr "Rozdzielanie słów myślnikami" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" -"Ścieżki do reguł rozdzielania wyrazów ze słowników OpenOffice.org, Scribus, " -"KOffice, itd., (po jednej na linię). Jeśli pozostawisz początkowy lewy " -"ukośnik, użyte zostaną prefiksy dla zmiennych środowiskowych z KDEDIRS. " - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Polecenia używane przez moduł wejścia MIDI Rumora" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Nazwa lub pełna ścieżka programu Rumor." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" -"Nazwa lub pełna ścieżka do programu aconnect (część ALSA, dla wejść i wyjść " -"MIDI przy użyciu Rumora)." - -#: ../python/frescobaldi_app/settings.py:615 -msgid "" -"Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" -"Pełne polecenie rozpoczynające Timidity (lub inny program), jako klienta " -"MIDI dla ALSA." - -#: ../python/frescobaldi_app/settings.py:648 -msgid "LilyPond versions to use:" -msgstr "Używana wersja LilyPonda:" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "" -"Enable automatic version selection (choose LilyPond version from document)" -msgstr "" -"Włącz automatyczny wybór wersji LilyPonda (wybór wersji użytej w danym " -"dokumencie)" - -#: ../python/frescobaldi_app/settings.py:710 -msgid "Document Tabs" -msgstr "Karty dokumentów" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "Przycisk zamykania" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "Duże karty" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "Karty mogą być przesuwane" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "Convert-ly" - -#: ../python/frescobaldi_app/settings.py:778 -msgid "Lilypond-book:" -msgstr "LilyPond-book:" - -#: ../python/frescobaldi_app/settings.py:809 -msgid "Path" -msgstr "Ścieżka" - -#: ../python/frescobaldi_app/settings.py:810 -msgid "Version" -msgstr "Wersja" - -#: ../python/frescobaldi_app/settings.py:813 -msgid "Can't determine LilyPond version." -msgstr "Nie można ustalić wersji LilyPonda." - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "Pobierz..." - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "Pobierz nową binarne wydanie Lilyponda." - -#: ../python/frescobaldi_app/settings.py:842 -msgid "LilyPond Command:" -msgstr "Polecenie LilyPonda:" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "Nazwa lub pełna ścieżka do programu LilyPond." - -#: ../python/frescobaldi_app/settings.py:847 -msgid "LilyPond Command" -msgstr "Polecenie LilyPonda" - -#: ../python/frescobaldi_app/settings.py:860 -msgid "Set as default" -msgstr "Ustaw jako domyślne" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "Dołącz do automatycznego wyboru wersji" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "" -"Jaką sesję otworzyć, gdy Frescobaldi zostanie uruchomiony bez dodatkowych " -"argumentów" - -#: ../python/frescobaldi_app/settings.py:903 -msgid "Start with no session" -msgstr "Startuj bez żadnej sesji" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "Startuj z ostatnią używaną sesją" - -#: ../python/frescobaldi_app/settings.py:905 -msgid "Start with session:" -msgstr "Startuj z sesją:" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "Wybierz sesję." - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "Wybierz..." - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "Twój dokument ma już oznaczenie wersji LilyPonda." - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "Wersja jest już ustalona" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "" -"Nie można ustalić wersji LilyPonda. Proszę sprawdzić czy jest zainstalowany." - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" -"Nie można ustalić wersji LilyPonda dla obecnego dokumentu. Proszędodać " -"wyrażenie \\version z poprawnym numerem wersji." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "Ten dokument LilyPonda jest już w najnowszej wersji." - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" -"Ten dokument był przetwarzany przy użyciu convert-ly. Informacje o tym " -"znajdziesz w komentarzu na końcu pliku. Nadal możesz pracawać nad " -"niektórymipartiami ręcznie." - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" -"Ten dokument był przetwarzany przez convert-ly, ale pozostał niezmieniony.To " -"jest wiadomość od convert-ly: %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "Nie można rozpocząć konwersji przy użyciu convert-ly: %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Wystukaj" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Kliknij na ten przycisk by ustalić tempo." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "Tempo wg metronomu." - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "Wiolinowy" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Alt" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Tenor" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "Wiolinowy 8" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Bas" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Perkusja" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "Klucz tabulaturowy" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "Bez klucza" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Kreator partytury" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Tytuły i nagłówki" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Kliknij by wprowadzić wartość." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "stopka pierwszej strony" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "stopka ostatniej strony" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Głosy" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Dostępne głosy:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Dodaj wybrane głosy do partytury." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Partytura:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Ustawienia partytury" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Ustawienia ogólne" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Nazwy instrumentów" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Tonacja:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Metrum:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Przedtakt:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Oznaczenie metronomiczne:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Oznaczenie tempa:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Oznaczenie tempa, np. \"Allegro.\"" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Język dla nazw dźwięków:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "Wybierz język,którego Lilypond użyje dla zapisywania wysokości" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "Wersja LilyPond jakiej użyjesz dla tego dokumentu." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Użyj cudzysłowu drukarskiego" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "Zamień normalny cudzysłów na cudzysłów drukarski." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Ukryj domyślną stopkę dodawaną przez LilyPond." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Usuń numery taktów" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "" -"Suppress the display of measure numbers at the beginning of every system." -msgstr "Ukryj numery taktów na początku każdego systemu." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "Generuj plik MIDI" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "Generuj plik MIDI oraz PDF." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Pokaż oznaczenie metronomiczne" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" -"Jeśli zaznaczysz, oznaczenie metronomiczne pojawi się na początkupartytury. " -"Użyte zostanie także w pliku MIDI." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "Wstaw partyturę do bloku \\book" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "Jeśli zaznaczone, wstawia blok \\score do bloku \\book." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Układ poziomy" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "Pierwszy system:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Pełna nazwa" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Skrót" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "Użyj pełnej nazwy lub skrótu na początku pierwszego systemu. " - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Inne systemy:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "" -"Użyj skrótów, pełnych nazw lub nie używaj nazw przed kolejnymi systemami." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "Język dla nazw instrumentów." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Usuń domyślną stopkę LilyPonda" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "Brak dostępnych ustawień." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Głosy:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "Ilość głosów dla tej pięciolinii." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "Poniżej wpisz nuty." - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Rodzaj pięciolinii:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Normalna pięciolinia" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Tabulatura" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Obydwa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Strój:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "Poniżej wpisz tekst." - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Zwrotki:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Liczba strof." - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Ambitus" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "Pokaż skalę głosu na początku pięciolinii." - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Ustal ilość oddzielnych głosów dla każdej pięciolinii. " - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "Jest to szczególnie użyteczne w pisaniu muzyki polifonicznej, np. fug." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Prawa ręka:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Lewa ręka:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Nazwy akordów" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "Poniżej wpisz akordy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Styl akordów:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "Niemiecki" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "Pół-Niemiecki" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "Włoski" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "Francuski" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Wykres progów gitary" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" -"Pokaż tabulaturowy wykres progów gitary pod nazwami akordów (LilyPond 2.12 i " -"wyższy)." - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Bas cyfrowany" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "Poniżej wpisz cyfowanie basu." - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "Użyj wypełniających linii" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Skrzypce" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Skrzypce|Skrz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Altówka" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Altówka|Alt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Wiolonczela" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Wiolonczela|Wiol." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Kontrabas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Kontrabas|Kb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Basso continuo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Basso Continuo|B.c." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Mandolina" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandolina|Mdl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Strój mandoliny" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Banjo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Banjo|Bj." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "Strój G (aDGHD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "Strój C (gCGHD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "Strój modalny(gDGCD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "Strój D (aDF#AD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "Strój d-moll (aDFAD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Cztery struny (zamiast pięciu)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Gitara " - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Gitara|Git." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Strój gitarowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "Strój G" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Gitara jazzowa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Gitara jazzowa|Git.jazz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Bas|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "Strój basu" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Bas elektryczny" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Bas elektryczny|E.b." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Harfa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Harfa|Hf." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "Górna pięciolinia:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "Dolna pięciolinia:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Flet" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Flet|Fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Pikulina" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Pikulina|Pik." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Flet basowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Flet basowy|Fl.b." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Obój" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Obój|Ob." - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Obój miłosny" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Obój miłosny|Ob.mił." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "Rożek angielski" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "Rożek angielski|R.ang." - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Fagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Fagot|Fg." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Kontrafagot" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Kontrafagot|Kfg." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Klarnet" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Klarnet|Kl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Saksofon sopranino" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Saksofon sopranino|Sx.Sno" - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Saksofon sopranowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Saksofon sopranowy|S.Sx" - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Saksofon altowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Saksofon altowy|Sx.a." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Saksofon tenorowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Saksofon tenorowy|Sx.t." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Saksofon barytonowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Saksofon barytonowy|Sx.b" - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Saksofon basowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Saksofon basowy|Sx.bs" - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Flet prosty sopranowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Flet prosty sopranowy|Fl.s." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Flet prosty altowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Flet prosty altowy|Fl.a." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Flet prosty tenorowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Flet prosty tenorowy|Fl.t." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Flet prosty basowy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Flet prosty basowy|Fl.b." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Róg F" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Róg F|R. F" - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Trąbka C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Trąbka C|Tr.C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Trąbka Bb" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Trąbka Bb|Tr.Bb" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Puzon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Puzon|Puz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Tuba basowa" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Tuba basowa|Tb.b." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Sopran" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Sopran|S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Mezzo-sopran" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzo-sopran|Ms." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Alt|A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Tenor|T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Bas|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Prymka" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" -"Prymka zawiera pięciolinię z akordami powyżej oraz tekstem poniżej.Drugi " -"system jest opcjonalny." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Dodaj pięciolinię z akompaniamentem" - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" -"Dodaje pięciolinię z akompaniamentem, a także głos na górnej pięciolinii." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Chór" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" -"Wybierz głosy chóralne. Użyj liter S, A, T, B.Myślnik oznacza nowy system." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "Porada: Dla chóru podwójnego użyj dwóch systemów chóralnych." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Prowadzenie głosów:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -msgid "Lyrics:" -msgstr "Słowa:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Ten sam tekst do wszystkich głosów" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -msgid "A set of the same lyrics is placed between all staves." -msgstr "Grupa tych samych słów jest umieszczona pomiędzy wszystkimi systemami." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Ten sam tekst dla każdego głosu" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "" -"Every voice gets its own lyrics, using the same text as the other voices." -msgstr "" -"Każdy głos ma własne słowa, używając tego samego tekstu jak pozostałe głosy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Każdy głos z innym tekstem" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Każdy głos dostaje inny fragment tekstu." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "Rozmieść zwrotki" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -msgid "One set of stanzas is distributed across the staves." -msgstr "Zwrotki są umieszczane pomiędzy systemami." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "Wyciąg fortepianowy:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "Dodaje automatycznie wygenerowany wyciąg fortepianowy." - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "Pliki MIDI do ćwiczeń" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "" -"Tworzy pliki MIDI do ćwiczeń dla każdego głosu, nawet jeśli plik MIDI dla " -"partytury nie został wygenerowany." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Chór|Ch." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "Pliki MIDI do ćwiczeń: " - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Fortepian" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Fortepian|Pf." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Klawesyn" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Klawesyn|Klws." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Klawikord" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Klawikord|Klwk." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Organy" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Organy|Org." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Pedał:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Ustaw na zero, aby zupełnie wyłączyć pedał. " - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Czelesta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Czelesta|Czel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Kotły" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Kotły|Ktł." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Ksylofon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Ksylofon|Ksf." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Marimba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Wibrafon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Wibrafon|Wibr." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Dzwony rurowe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Dzwony rurowe|Dzw.r." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Dzwonki orkiestrowe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Dzwonki orkiestrowe|Dzw.o." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Perkusja" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Perkusja|Perk." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "Poniżej wpisz nuty dla perkusji." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "zachowaj odstęp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Styl:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Perkusja (domyślnie 5 linii)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Zapis timbalesów (2 linie)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Zapis congi (2 linie)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Zapis bongosów (2 linie)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Zapis perkusyjny (1 linia)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Usuń laseczki nut" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Usuń laseczki z nut perkusyjnych" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Smyczki" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Strunowe szarpane" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Dęte drewniane" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Dęte blaszane" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "Głos" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Instrumenty klawiszowe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Specjalne" - -#~ msgid "Open PDF" -#~ msgstr "Otwórz PDF" - -#~ msgid "Print" -#~ msgstr "Drukuj" - -#~ msgid "Play MIDI" -#~ msgstr "Graj MIDI" - -#~ msgid "Email..." -#~ msgstr "Email..." - -#~ msgid "Disable the built-in PDF preview" -#~ msgstr "Wyłącz wbudowany podgląd PDF" - -#~ msgid "The direction to use for the articulations." -#~ msgstr "Kierunek oznaczeń artykulacyjnych" - -#~ msgid "&Generated Files" -#~ msgstr "&Wygenerowane Pliki" - -#~ msgid "Your document has been modified, please save first." -#~ msgstr "Twój dokument został zmieniony, proszę najpierw go zapisać." - -#~ msgid "LilyPond documentation:" -#~ msgstr "Dokumentacja LilyPonda:" - -#~ msgid "The document has been sent to the printer." -#~ msgstr "Dokument został wysłany do drukarki" - -#~ msgid "" -#~ "Printing failed: %1\n" -#~ "\n" -#~ "The print command %2 does probably not exist. Please check your settings." -#~ msgstr "" -#~ "Drukowanie nie powiodło się: %1\n" -#~ "\n" -#~ "Zadanie wydruku %2 prawdopodobnie nie istnieje. Proszę sprawdzić " -#~ "ustawienia." - -#~ msgid "The print command contains errors. Please check your settings." -#~ msgstr "Zadanie wydruku zawiera błędy. Proszę sprawdzić ustawienia." - -#~ msgid "Directly print on default printer" -#~ msgstr "Wydrukuj bezpośrednio na drukarce domyślnej." - -#, fuzzy -#~ msgid "Notify when a document has been sent to the printer" -#~ msgstr "Dokument został wysłany do drukarki" - -#~ msgid "Printcommand:" -#~ msgstr "Polecenie wydruku:" - -#~ msgid "" -#~ "Command to print a PDF file, for example lpr or kprinter. You may add " -#~ "some arguments, e.g. lpr -P myprinter." -#~ msgstr "" -#~ "Polecenie wydruku pliku PDF, np. lpr lub kprinter. Możesz dodać różne " -#~ "wartości, np. lpr -P myprinter." - -#~ msgid "Space above:" -#~ msgstr "Przestrzeń powyżej:" - -#~ msgid "Name or full path of the convert-ly program." -#~ msgstr "Nazwa lub pełna ścieżka do programu convert-ly" - -#~ msgid "Expand" -#~ msgstr "Rozszerz" - -#, fuzzy -#~ msgid "Could not understand the entered pitches." -#~ msgstr "Nie można odczytać z tego przebiegu LilyPonda." - -#~ msgid "Dock" -#~ msgstr "Załaduj" - -#~ msgid "Show" -#~ msgstr "Pokaż" - -#~ msgid "Your document currently has no filename, please save first." -#~ msgstr "Twój dokument nie ma jeszcze nazwy, najpierw go zapisz." - -#~ msgid "" -#~ "Sorry, support for remote files is not yet implemented.\n" -#~ "Please save your document to a local file." -#~ msgstr "" -#~ "Niestety, na razie brak obsługi plików sieciowych.\n" -#~ "Proszę zapisać dokument jako plik lokalny." - -#~ msgid "Already Running" -#~ msgstr "Już pracuje" - -#~ msgid "Untitled" -#~ msgstr "Bez tytułu" - -#~ msgid "Language selection" -#~ msgstr "Wybór języka" diff -Nru frescobaldi-1.2.0/po/README-translations frescobaldi-2.0.0/po/README-translations --- frescobaldi-1.2.0/po/README-translations 2009-10-01 05:20:05.000000000 +0000 +++ frescobaldi-2.0.0/po/README-translations 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -How to translate Frescobaldi to your (favorite) language: -========================================================= - -First create an empty but initialized po file for your language. -(PO means: Portable Object) - -If you want to translate Frescobaldi to your current locale, simply enter: - -$ cd po/ -$ msginit -i frescobaldi.pot - -otherwise specify the desired language with: - -$ msginit -i frescobaldi.pot -l xx_CC - -where xx_CC is e.g. en_GB. - -Now you can edit the xx.po file with a tool like Lokalize. If done, you can send -the translated po file to the Frescobaldi author if you like, to contribute it -to the Frescobaldi project. - -There are many instrument names in Frescobaldi, with the full name and abridged -name in one string, separated by a pipe symbol (|). This is done so that you can -understand how to translate the short names. You should translate both the full -and abridged names and also include the pipe symbol in the resulting string, so: - -"Soprano|S." becomes "Sopraan|S." (dutch) -"Organ|Org." becomes "Orgue|Org." (french) -"Organ|Org." becomes "Órgano|Órg." (spanish) - -Note that this use of the pipe symbol in translations differs from the -convention in some projects that the pipe symbol denotes a comment. - - -Translating the texts in the expansions and frescobaldi.desktop files -===================================================================== - -In the data/ directory there are two files that also contain texts that can be -translated. The expansions file contains LilyPond snippets with their -descriptions for the Expansions Manager. Translate the descriptions by adding -a Name[xx] key for your locale, e.g.: - -[a4] -Name=Paper Size A4 -Name[nl]=Papierformaat A4 -Name[de]=Papierformat A4 -Text=#(set-paper-size "a4") - -The frescobaldi.desktop file contains a description of Frescobaldi for the menu. -You can translate the GenericName key so the translated description appears in -the menu, like: - -[Desktop Entry] -GenericName=LilyPond Music Editor -GenericName[nl]=Muziek-editor voor LilyPond -GenericName[it]=Editor musicale per LilyPond - -Etcetera. Enjoy and thanks for your contribution! - - -kate: encoding utf-8; diff -Nru frescobaldi-1.2.0/po/ru.po frescobaldi-2.0.0/po/ru.po --- frescobaldi-1.2.0/po/ru.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/ru.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,4039 +0,0 @@ -# translation of ru.po to Russian -# translation of ru.po to -# Copyright (C) -# This file is distributed under the same license as the Frescobaldi package. -# Serj Poltavski -# -# Serj Poltavski , 2009. -# Artem Zolochevskiy , 2009. -msgid "" -msgstr "" -"Project-Id-Version: ru\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-11-09 09:51+0100\n" -"PO-Revision-Date: 2009-10-08 21:17+0300\n" -"Last-Translator: Artem Zolochevskiy \n" -"Language-Team: Russian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# ru.po (ru) #-#-#-#-#\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: Lokalize 1.0\n" - -#: ../frescobaldi.py:37 dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "Музыкальный нотатор LilyPond" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Сергей Полтавский,Артём Золочевский" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "serge.uliss@gmail.com,artem.zolochevskiy@gmail.com" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Используемая сессия" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Начать новую сессию" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Используемая кодировка" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Номер строки для перехода, начиная с 1" - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Столбец для перехода, начиная с 0" - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Пытаться использовать интеллигентные номера сток и столбцов" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "Файлы lilypond или URL" - -#: dummy.py:5 -msgid "&Insert" -msgstr "&Вставка" - -#: dummy.py:6 -msgid "&Document" -msgstr "&Документ" - -#: dummy.py:7 -#, fuzzy -msgid "&LilyPond" -msgstr "LilyPond" - -#: dummy.py:8 -#, fuzzy -msgid "&Sessions" -msgstr "Используемая сессия" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "&Тон" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "&Тексты" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "&Ритм" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "&Исходный документ" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "Посвящение" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Заголовок" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Заголовок 2" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "Заголовок 3" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Инструмент" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Композитор" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Редактор" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Поэт" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Метр" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Название произведения" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Опус" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Авторское право" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Строка программы" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "Мажор" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "Минор" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "Ионийский" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "Дорийский" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "Фригийский" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "Лидийский" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "Миксолидийский" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "Эолийский" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "Локрийский" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Артикуляция" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Акцент" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Маркато" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Стаккатиссимо" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Стаккато" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Портато" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Тенуто" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Орнаментация" - -#: ../python/ly/articulation.py:45 ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Трель" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Мордент" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Перечеркнутый мордент" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Группетто" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "Двойной мордент" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "Двойной перечеркнутый мордент" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Обратное группетто" - -#: ../python/ly/articulation.py:60 ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "Знаки" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Фермата" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Короткая фермата" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Длинная фермата" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Очень длинная фермата" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Segno" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Varcoda" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Другие" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Вверх смычком" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Вниз смычком" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Флажолет" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Ставка" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Left heel" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Right heel" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Right toe" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Произошла внутренняя ошибка:" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "Внутренняя ошибка" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Послать отчет об ошибке по Email" - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "Дополнительно опишите ваши действия:" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Левая панель" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Правая панель" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Верхняя панель" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Нижняя панель" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Показать путь" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Показать закладки документов" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "&Панели инструментов" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "" - -#: ../python/kateshell/mainwindow.py:240 -msgid "Manage Sessions..." -msgstr "" - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete " -"this file because elements in the user interface will be missing. This is " -"the full path of the file:\n" -"\n" -"%2\n" -msgstr "" - -#: ../python/kateshell/mainwindow.py:325 -#, fuzzy -msgid "No Session" -msgstr "Ударные" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Сначала необходимо выбрать текст." - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "изменен" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Строка: %1 Поз.: %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "БЛОК" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Блочный режим выбора" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "СТРОКА" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Построчный режим выбора" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Все файлы" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Открыть файл" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Переместить" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Скрыть док" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "Не удалось загрузить %1" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Пожалуйста, установите %1" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "" - -#: ../python/kateshell/sessions.py:41 -#, fuzzy -msgid "Manage Sessions" -msgstr "Используемая сессия" - -#: ../python/kateshell/sessions.py:99 -#, fuzzy -msgid "Session" -msgstr "Используемая сессия" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "" - -#: ../python/kateshell/sessions.py:105 -#, fuzzy -msgid "Name:" -msgstr "Имя" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "" - -#: ../python/kateshell/sessions.py:115 -#, fuzzy -msgid "Base directory:" -msgstr "Каталог по умолчанию:" - -#: ../python/kateshell/sessions.py:128 -msgid "Edit session: %1" -msgstr "" - -#: ../python/kateshell/sessions.py:135 -msgid "Edit new session" -msgstr "" - -#: ../python/kateshell/sessions.py:171 -#, fuzzy -msgid "Please enter a session name." -msgstr "" -"Используйте только латинские буквы, цифры и символ подчеркивания в названии " -"расширения." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "" - -#: ../python/kateshell/sessions.py:187 -#, fuzzy -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "" -"Используйте только латинские буквы, цифры и символ подчеркивания в названии " -"расширения." - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "Открыть %1 во внешней программе просмотра" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "Воспроизвести %1" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "" -"There are no up-to-date MIDI or PDF files available. Please run LilyPond to " -"create one or more output files." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "Нет файлов для email." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "Нет файлов для посылки." - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you " -"are creating MIDI files, be sure you also put a \\layout { } section in your " -"score, otherwise LilyPond will not create a PDF." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:146 -#, fuzzy -msgid "No files to print" -msgstr "Нет файлов для посылки." - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "Послать документы по email" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Выберите файлы, которые Вы хотите послать:" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "" -"These are the files that are up-to-date (i.e. newer than the LilyPond source " -"document). Also LilyPond files included by the source document are shown." -msgstr "" -"Эти файлы обновлены (т.е. созданы позже, чем исходные файлы LilyPond). Также " -"показаны файлы включенные в исходный документ." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "" -"Note: this PDF file has been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the file in publish mode, because then the PDF file is much " -"smaller." -msgid_plural "" -"Note: these PDF files have been created with embedded point-and-click URLs " -"(preview mode), which increases the file size dramatically. Please consider " -"to rebuild the files in publish mode, because then the PDF files are much " -"smaller." -msgstr[0] "" -"Это PDF документ был создан с использованием \"point-and-click\" технологии " -"(режим просмотра), которая сильно увеличивает размер файла. Возможно, лучше " -"будет пересоздать файл в режиме публикации, так как полученный PDF файл " -"будет значительно меньшего размера." -msgstr[1] "" -"Эти PDF документы были созданы с использованием \"point-and-click\" " -"технологии (режим просмотра), которая сильно увеличивает размер файлов. " -"Возможно, лучше будет пересоздать файлы в режиме публикации, так как " -"полученные PDF файлы будет значительно меньшего размера." -msgstr[2] "" -"Это PDF документ был создан с использованием \"point-and-click\" технологии " -"(режим просмотра), которая сильно увеличивает размер файла. Лучше отсылать " -"по электронной почте документы без \"point-and-click\", потому что они " -"значительно меньше. Все равно продолжить?" - -#: ../python/frescobaldi_app/actions.py:191 -msgid "" -"Note: If there are no PDF and no MIDI files, you probably need to run " -"LilyPond to update those files, before sending the e-mail." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "" - -#: ../python/frescobaldi_app/actions.py:249 -#, fuzzy -msgid "Print documents" -msgstr "Послать документы по email" - -#: ../python/frescobaldi_app/actions.py:252 -#, fuzzy -msgid "Please select the files you want to print:" -msgstr "Выберите файлы, которые Вы хотите послать:" - -#: ../python/frescobaldi_app/actions.py:256 -#, fuzzy -msgid "" -"These are the PDF documents that are up-to-date (i.e. newer than the " -"LilyPond source document). Check the documents you want to send to the " -"printer." -msgstr "" -"Эти файлы обновлены (т.е. созданы позже, чем исходные файлы LilyPond). Также " -"показаны файлы включенные в исходный документ." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "Печать %1" - -#: ../python/frescobaldi_app/actions.py:340 -#, fuzzy -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "Печать %1" -msgstr[1] "Печать %1" -msgstr[2] "Печать %1" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "" - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:74 -#, fuzzy -msgid "Action:" -msgstr "Направление:" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:86 -#, fuzzy -msgid "Click to see more settings." -msgstr "Настройки партитуры" - -#: ../python/frescobaldi_app/blankpaper.py:89 -#, fuzzy -msgid "Paper" -msgstr "Размер страницы:" - -#: ../python/frescobaldi_app/blankpaper.py:91 -#, fuzzy -msgid "Settings" -msgstr "Струнные" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Размер страницы:" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "По умолчанию" - -#: ../python/frescobaldi_app/blankpaper.py:105 -#, fuzzy -msgid "Staff Size:" -msgstr "Тип нотоносца:" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Удалить строку программы по умолчанию" - -#: ../python/frescobaldi_app/blankpaper.py:123 -#, fuzzy -msgid "Print Bar Lines" -msgstr "&Тактовые черты" - -#: ../python/frescobaldi_app/blankpaper.py:125 -#, fuzzy -msgid "Bars per line:" -msgstr "Размер страницы:" - -#: ../python/frescobaldi_app/blankpaper.py:132 -#, fuzzy -msgid "Print Page Numbers" -msgstr "&Тактовые черты" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:323 -#, fuzzy -msgid "Open in PDF viewer" -msgstr "Открыть %1 во внешней программе просмотра" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:339 -#, fuzzy -msgid "PDF Files" -msgstr "Все файлы" - -#: ../python/frescobaldi_app/blankpaper.py:341 -#, fuzzy -msgid "Save PDF" -msgstr "Сохранить" - -#: ../python/frescobaldi_app/blankpaper.py:365 -#, fuzzy -msgid "Print..." -msgstr "Печать" - -#: ../python/frescobaldi_app/blankpaper.py:371 -msgid "Print staff paper" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:391 -#, fuzzy -msgid "Copy LilyPond code to editor" -msgstr "Музыкальный нотатор LilyPond" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:501 -#, fuzzy -msgid "Single Staff" -msgstr "Одинарная кавычка" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:525 -#, fuzzy -msgid "Clefs" -msgstr "Челеста" - -#: ../python/frescobaldi_app/blankpaper.py:529 -#, fuzzy -msgid "Piano Staff" -msgstr "Фортепиано" - -#: ../python/frescobaldi_app/blankpaper.py:553 -#, fuzzy -msgid "Organ Staff" -msgstr "Орган" - -#: ../python/frescobaldi_app/blankpaper.py:585 -#, fuzzy -msgid "Staves per system:" -msgstr "Остальные системы:" - -#: ../python/frescobaldi_app/blankpaper.py:596 -#, fuzzy -msgid "Clefs:" -msgstr "Челеста" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as " -"many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, " -"first set the number of staves per system to 4. Then enter \"SATB\" (without " -"the quotes) here." -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:619 -#, fuzzy -msgid "Choir Staff" -msgstr "Хор" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Нет" - -#: ../python/frescobaldi_app/blankpaper.py:772 -#, fuzzy -msgid "Custom Staff" -msgstr "Хор" - -#: ../python/frescobaldi_app/blankpaper.py:831 -#, fuzzy -msgid "Staff" -msgstr "Тип нотоносца:" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:887 -#, fuzzy -msgid "Brace" -msgstr "Медные духовые" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "" - -#: ../python/frescobaldi_app/blankpaper.py:923 -#, fuzzy -msgid "Connect bar lines" -msgstr "Без тактовых черт" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in " -"the pitch language \"%1\"." -msgstr "" -"Невозможно выполнить требуемое преобразование.\n" -"\n" -"Музыка содержит четвертьтоновые альтерации, которые недоступны в языковой " -"записи \"%1\"." - -#: ../python/frescobaldi_app/document.py:93 -msgid "" -"The pitch language of the selected text has been updated, but you need to " -"manually add the following command to your document:" -msgstr "" -"Язык ввода нот выделенного текста был обновлен, но Вы должны вручную " -"добавить следующую команду в документ:" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Язык нотной записи" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "" -"Введите имя для переменной, которая будет присвоена выделенному тексту:" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Вырезать и Присвоить" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "Открыть %1" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "" - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" - -#: ../python/frescobaldi_app/document.py:957 -#, fuzzy -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not " -"available in the pitch language \"%1\"." -msgstr "" -"Невозможно выполнить требуемое преобразование. Музыка содержит " -"четвертьтоновые альтерации, которые недоступны в языковой записи %1." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "" - -#: ../python/frescobaldi_app/document.py:985 -#, fuzzy -msgid "to:" -msgstr "Направление:" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "" - -#: ../python/frescobaldi_app/download.py:56 -#, fuzzy -msgid "Download LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/download.py:60 -msgid "" -"With this tool you can download packaged binary releases of LilyPond for " -"your operating system." -msgstr "" - -#: ../python/frescobaldi_app/download.py:68 -#, fuzzy -msgid "Select the LilyPond version you want to download." -msgstr "Выберите файлы, которые Вы хотите послать:" - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Версия:" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:81 -#, fuzzy -msgid "Install into:" -msgstr "Итальянский" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "" - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "" - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "" - -#: ../python/frescobaldi_app/download.py:241 -msgid "Downloading %1..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "" - -#: ../python/frescobaldi_app/download.py:263 -#, fuzzy -msgid "Download failed: %1" -msgstr "Печать завершилась с ошибкой: %1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" - -#: ../python/frescobaldi_app/download.py:284 -#, fuzzy -msgid "Use existing LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/download.py:285 -#, fuzzy -msgid "Remove and re-install" -msgstr "Удалить длительности" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "" - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "" - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -#, fuzzy -msgid "Unpacking failed." -msgstr "Печать завершилась с ошибкой: %1" - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -#, fuzzy -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "Неизвестная ошибка произошла." - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Менеджер сокращений" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Поиск..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "Имя" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Описание" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Сокращение" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut " -"or its description to change it. You can also press F2 to edit the current " -"shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the " -"text and then call the Expand function, or just call the Expand function " -"(default shortcut: Ctrl+.), choose the expansion from the list and press " -"Enter or click Ok." -msgstr "" -"Это список определенных сокращений.\n" -"\n" -"Щёлкните на строке, чтобы увидеть или изменить связанный текст. Двойной " -"щелчок на сокращении или его описании изменит его. Вы можете также нажать F2 " -"для редактирования текущего сокращения. \n" -"\n" -"Используйте кнопки ниже для добавления или удаления сокращений.\n" -"\n" -"Есть два способа использования сокращений: набрать сокращение и затем " -"выбрать функцию \"Раскрыть сокращение\" (клавиатурная комбинация по " -"умолчанию: Ctrl+.) или же вызвать диалог сокращения, выбрать нужное, а затем " -"нажать Enter или Ok." - -#: ../python/frescobaldi_app/expand.py:212 -msgid "" -"This is the text associated with the selected shortcut. Some characters have " -"special meaning:" -msgstr "" -"Это текст связанный с выбранным сокращением. Некоторые символы имеют особое " -"значение:" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "Поместить курсор на это место." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Преобразовать следующие ноты." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Новый пункт" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"Существующее сокращение уже использует это имя.\n" -"\n" -"Выберите другое имя." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "" -"Please only use letters, numbers and the underscore character in the " -"expansion name." -msgstr "" -"Используйте только латинские буквы, цифры и символ подчеркивания в названии " -"расширения." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "Пожалуйста, не оставляйте поле description пустым." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path " -"to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Расставить переносы в тексте" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Выберите язык:" - -#: ../python/frescobaldi_app/kmid.py:68 -#, fuzzy -msgid "Pause" -msgstr "Размер страницы:" - -#: ../python/frescobaldi_app/kmid.py:85 -msgid "Volume" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "Первая страница" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Предыдущий" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Далее" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "Оглавление" - -#: ../python/frescobaldi_app/lilydoc.py:117 -#, fuzzy -msgid "Index" -msgstr "Инструмент" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Копировать &ссылку" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Открыть ссылку в &новом окне" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Копировать" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Открыть документ в &новом окне" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:730 -#, fuzzy -msgid "Not available" -msgstr "Настройки недоступны." - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -#, fuzzy -msgid "Internals Reference" -msgstr "Общие настройки" - -#: ../python/frescobaldi_app/lilydoc.py:877 -#, fuzzy -msgid "The %1 context" -msgstr "Оглавление" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "" - -#: ../python/frescobaldi_app/lilydoc.py:950 -#, fuzzy -msgid "LilyPond &Help" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Направление:" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Вверх" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Автоматически" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Вниз" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "" -"Where to add articulations et cetera: above or below the staff or in the " -"default position." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Артикуляционные обозначения" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Другие артикуляционные обозначения или другие знаки." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Щёлкните на артикуляционном знаке, чтобы добавить его в документ." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "" -"If you select some music first, the articulation will be added to all notes " -"in the selection." -msgstr "" -"Если сначала Вы выделите музыкальный фрагмент, то артикуляционные знаки " -"будут добавлены ко всем нотам выбранного фрагмента." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Использовать сокращения" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "" -"Использовать сокращенную нотацию для некоторых обозначений, таких как " -"стаккато." - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:267 -#, fuzzy -msgid "Click a dynamic sign to add it to your document." -msgstr "Щёлкните на артикуляционном знаке, чтобы добавить его в документ." - -#: ../python/frescobaldi_app/lqi.py:268 -#, fuzzy -msgid "" -"If you select some music first, dynamic spanners will be added the selected " -"fragment." -msgstr "" -"Если сначала Вы выделите музыкальный фрагмент, то артикуляционные знаки " -"будут добавлены ко всем нотам выбранного фрагмента." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "" -"If you have selected some music and you click a sign after a spanner, the " -"sign will terminate the spanner." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:281 ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:285 ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:325 ../python/frescobaldi_app/lqi.py:332 -#, fuzzy -msgid "Bar Lines" -msgstr "&Тактовые черты" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Двойная тактовая черта" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "Заключительная тактовая черта" - -#: ../python/frescobaldi_app/lqi.py:341 -#, fuzzy -msgid "Dotted bar line" -msgstr "Без тактовых черт" - -#: ../python/frescobaldi_app/lqi.py:342 -#, fuzzy -msgid "Dashed bar line" -msgstr "Пункти́рная та́ктовая черта́" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Невидимая тактовая черта" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:349 -#, fuzzy -msgid "Tick bar line" -msgstr "Без тактовых черт" - -#: ../python/frescobaldi_app/lqi.py:350 -#, fuzzy -msgid "Single bar line" -msgstr "Одиночная тактовая черта" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:353 -#, fuzzy -msgid "Double wide bar line" -msgstr "Увеличить длительности в 2 раза" - -#: ../python/frescobaldi_app/lqi.py:354 -#, fuzzy -msgid "Segno bar line" -msgstr "Одиночная тактовая черта" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:445 -msgid "Bracket Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "" -"Glissandos are attached to a note and automatically extend to the next note." -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:466 -#, fuzzy -msgid "Dashed Glissando" -msgstr "Пункти́рная та́ктовая черта́" - -#: ../python/frescobaldi_app/lqi.py:467 -#, fuzzy -msgid "Dotted Glissando" -msgstr "Без тактовых черт" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "Файлы LilyPon" - -#: ../python/frescobaldi_app/mainapp.py:170 -#, fuzzy -msgid "Print Source..." -msgstr "Печать" - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Новая партитура" - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "Запустить LilyPond (просмотр)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "Запустить LilyPond (публикация)" - -#: ../python/frescobaldi_app/mainapp.py:488 -#, fuzzy -msgid "Run LilyPond (custom)..." -msgstr "Запустить LilyPond (публикация)" - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "Прервать текущее задание" - -#: ../python/frescobaldi_app/mainapp.py:502 -#, fuzzy -msgid "Print Music..." -msgstr "Печать" - -#: ../python/frescobaldi_app/mainapp.py:508 -#, fuzzy -msgid "Email Documents..." -msgstr "Послать документы по email" - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "Вырезать выделение и присвоить его переменной LilyPond." - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Повторить последнюю ноту или аккорд" - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Повторить последнее музыкальное выражение (ноту или аккорд)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Раскрыть сокращение или открыть диалог сокращений." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Следующая пустая строка" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Перейти к следующей пустой строке." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Предыдущая пустая строка" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Перейти к предыдущей пустой строке." - -#: ../python/frescobaldi_app/mainapp.py:561 -#, fuzzy -msgid "Select to next blank line" -msgstr "Перейти к следующей пустой строке." - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "" -"Selects text from the current position down to and including the next blank " -"line." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:589 -#, fuzzy -msgid "Select to previous blank line" -msgstr "Перейти к предыдущей пустой строке." - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "" -"Selects text from the current position up to right after the previous blank " -"line." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:616 -#, fuzzy -msgid "Move selection to next blank line" -msgstr "Перейти к следующей пустой строке." - -#: ../python/frescobaldi_app/mainapp.py:618 -#, fuzzy -msgid "Moves selected block to next blank line." -msgstr "Перейти к следующей пустой строке." - -#: ../python/frescobaldi_app/mainapp.py:622 -#, fuzzy -msgid "Move selection to previous blank line" -msgstr "Перейти к предыдущей пустой строке." - -#: ../python/frescobaldi_app/mainapp.py:624 -#, fuzzy -msgid "Moves selected block to previous blank line." -msgstr "Перейти к предыдущей пустой строке." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "" -"Change the LilyPond language used for pitch names in this document or in the " -"selection." -msgstr "Изменить язык ввода нот в этом документе или в выделении." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "" -"Converts the notes in the document or selection from relative to absolute " -"pitch." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:660 -#, fuzzy -msgid "" -"Converts the notes in the document or selection from absolute to relative " -"pitch." -msgstr "Уменьшает длительности в 2 раза в выделенном фрагменте." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:666 -#, fuzzy -msgid "Transposes all notes in the document or selection." -msgstr "Уменьшает длительности в 2 раза в выделенном фрагменте." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Увеличить длительности в 2 раза" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Увеличивает длительности в 2 раза в выделенном фрагменте" - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Уменьшить длительности в 2 раза" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Уменьшает длительности в 2 раза в выделенном фрагменте." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Добавить точки к длительностям" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Добавляет точки ко всем длительностям в выделенном фрагменте." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Удалить точки у длительностей" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Удаляет одну точку у всех длительностей в выделенном фрагменте." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Удалить нерегулярные группы" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "Удалить нерегулярные группы (*n/m) в выделенном." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Удалить длительности" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "Удаляет все длительности в выделенном фрагменте." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Сделать длительности неявными" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "Делает длительности неявными (удаляет повторяющиеся длительности)" - -#: ../python/frescobaldi_app/mainapp.py:713 -#, fuzzy -msgid "Make implicit (per line)" -msgstr "Сделать длительности неявными" - -#: ../python/frescobaldi_app/mainapp.py:714 -#, fuzzy -msgid "" -"Make durations implicit (remove repeated durations), except for the first " -"duration in a line." -msgstr "Делает длительности неявными (удаляет повторяющиеся длительности)" - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Сделать длительности явными" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "" -"Make durations explicit (add duration to every note, even if it is the same " -"as the preceding note)." -msgstr "Сделать длительности явными" - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Применить ритм..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Применить введенный ритм к выделенной музыке." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Копировать ритм" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Копировать ритм выделенной музыки." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Вставить ритм" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Вставить ритм в выделенную музыку." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Удалить переносы" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Одинарная кавычка" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Двойная кавычка" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Выровнять отступы" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "Вставить версию LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "Обновить с помощью convert-ly" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Открыть текущую папку" - -#: ../python/frescobaldi_app/mainapp.py:796 -#, fuzzy -msgid "Repeat selected music" -msgstr "Вставить ритм в выделенную музыку." - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be " -"started.\n" -"\n" -"Save the document now?" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "LilyPond уже запущен для этого документа." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "Невозможно обработать документ" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "" -"You want to run LilyPond in preview mode (with point and click enabled), but " -"your document contains a command to turn point and click off." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "" -"You want to run LilyPond in publish mode (with point and click disabled), " -"but your document contains a command to turn point and click on." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Прервать запущенный процесс LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:917 -#, fuzzy -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "Запустить LilyPond в режиме предварительного просмотра" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Быстрая вставка" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:956 -#, fuzzy -msgid "LilyPond exited with an error compiling %1." -msgstr "Программа LilyPond [%1] завершилась с кодом %2." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Применить ритм" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Введите ритм:" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "" -"Введите ритм, используя пробел в качестве разделителя длительностей, " -"например, 8 16 8 4 8" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Консоль" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "Синхронизировать консоль с текущим документом" - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "Программа воспроизведения MIDI" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "Предпросмотр PDF" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "Показать панель навигации по PDF документу" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "Показать PDF мини-пейджер" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Настройка Okular..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "Синхронизировать просмотр с текущим документом" - -#: ../python/frescobaldi_app/mainapp.py:1150 -#, fuzzy -msgid "Reload" -msgstr "Запись" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "LilyPond журнал" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "нет записей в журнале" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "Показывать только при ошибках" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "Документация LilyPond" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "" -"The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from " -"the LilyPond document." -msgstr "" -"Используемый метр. Оставьте Auto, чтобы Frescobaldi определил метр исходя из " -"LilyPond документа." - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Квант:" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "Самая короткая используемая длительность." - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Шаг" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Записывать ввод LilyPond нота за нотой, без длительностей." - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Моно" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Записывать одноголосный ввод, без аккордов." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "" -"The number of accidentals. A negative number designates flats. Leave 'Auto' " -"to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "" -"Количество ключевых знаков. Отрицательное число означает бемоли. Оставьте " -"\"Автоматически\", чтобы LilyPond определил их из документа." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Темп:" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Метр:" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Ключ:" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Настройка..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "Другие настройки, такие как MIDI ввод и вывод." - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Сохранить" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Сохранить по умолчанию" - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Найдена версия Rumor %1." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "Невозможно найти Rumor: %1" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "Настройки сохранены" - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Запись" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Запустить или остановить запись Rumor" - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Идет запись Rumor, нажмите ESC для остановки." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor остановлен." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "Запустить или остановить TiMidity ALSA MIDI клиент." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Настройки Rumor" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "OSS устройство %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Клавиатура" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "Вход MIDI:" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "" -"MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of " -"your computer." -msgstr "" -"Вход MIDI. Выберите \"Клавиатура\", если хотите использовать клавиатуру " -"Вашего компьютера." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "Выход MIDI:" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "Используемый MIDI выход." - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Язык:" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "Язык LilyPond, в котором Rumor будет выводить названия нот." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Явные длительности" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "" -"Add a duration after every note, even if it is the same as the preceding " -"note." -msgstr "" -"Добавлять длительность после каждой ноты, даже если она совпадает с " -"предыдущей." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Абсолютная высота нот" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "Использовать абсолютную высоту нот вместо относительной." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Без тактовых черт" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Удалять тактовые черты из вывода Rumor." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Без точек" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "Использовать вместо точек связующие лиги." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Легато" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "Не использовать паузы, а делать ноты максимальной продолжительности." - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Удалить паузы" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Удалить паузы в начале и в конце документа." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Guile скрипт для загрузки:" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. Check " -"\"What's this\" for more information." -msgstr "Здесь Вы можете выбрать, какие Guile скрипты загружать в Rumor." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "" -"Here you can select which Guile scripts you want Rumor to load. You can add " -"your own scripts by putting them in %1. If the first line of your script " -"starts with a semicolon (;) that line will be shown as description." -msgstr "" -"Здесь Вы можете выбрать, какие Guile-скрипты должен загружать Rumor. Вы " -"можете добавить собственные скрипты в %1. Если первая строка Вашего скрипта " -"начинается с точки с запятой (;), она будет показана как описание." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "Автоматически" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "режим просмотра" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "режим публикации" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "Запуск LilyPond %1 [%2] (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "Запуск LilyPond [%1] (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "Программа LilyPond [%1] завершилась с кодом %2." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "Программа LilyPond [%1] завершилась с кодом %2." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] завершен (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "" -"Невозможно запустить LilyPond/ Проверьте путь к программе и разрешения." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "Невозможно чтение из процесса LilyPond." - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Неизвестная ошибка произошла." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -#, fuzzy -msgid "Run LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/runlily.py:257 -#, fuzzy -msgid "Select which LilyPond version you want to run:" -msgstr "Выберите файлы, которые Вы хотите послать:" - -#: ../python/frescobaldi_app/runlily.py:265 -#, fuzzy -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "Запустить LilyPond в режиме предварительного просмотра" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "Запускать LilyPond в режиме вывода подробной информации" - -#: ../python/frescobaldi_app/runlily.py:310 -#, fuzzy -msgid "Command" -msgstr "Команда печати:" - -#: ../python/frescobaldi_app/runlily.py:317 -#, fuzzy -msgid "LilyPond %1" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/runlily.py:318 -#, fuzzy -msgid "Use LilyPond version %1" -msgstr "Вставить версию LilyPond" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -#, fuzzy -msgid "default" -msgstr "По умолчанию" - -#: ../python/frescobaldi_app/runlily.py:322 -#, fuzzy -msgid "Default LilyPond Version." -msgstr "Вставить версию LilyPond" - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "" - -#: ../python/frescobaldi_app/runlily.py:325 -#, fuzzy -msgid "Automatic LilyPond Version (determined from document)." -msgstr "Версия LilyPond используемая для новых документов" - -#: ../python/frescobaldi_app/runlily.py:330 -#, fuzzy -msgid "Path: %1" -msgstr "Воспроизвести %1" - -#: ../python/frescobaldi_app/runlily.py:334 -#, fuzzy -msgid "LilyPond (version unknown)" -msgstr "Вставить версию LilyPond" - -#: ../python/frescobaldi_app/runlily.py:335 -#, fuzzy -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "Вставить версию LilyPond" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Щёлкните, для редактирования этого файла" - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "Сохранить журнал LilyPond как" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"Не удалось сохранить журнал LilyPond в файле:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -#, fuzzy -msgid "LilyPond-related settings" -msgstr "Файлы LilyPon" - -#: ../python/frescobaldi_app/sessions.py:44 -#, fuzzy -msgid "LilyPond version to use:" -msgstr "Вставить версию LilyPond" - -#: ../python/frescobaldi_app/sessions.py:48 -#, fuzzy -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"See What's This (Shift+F1) for more information." -msgstr "Здесь Вы можете выбрать, какие Guile скрипты загружать в Rumor." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this " -"session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and " -"it's also used by the \"Insert Version\" command." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Настройка" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Общие настройки" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Общие настройки Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -#, fuzzy -msgid "LilyPond Preferences" -msgstr "Файлы LilyPon" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Пути" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Пути к программам или данным, используемым Frescobaldi" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "Ввод MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Настройки ввода MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Редактор" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Настройки редактора" - -#: ../python/frescobaldi_app/settings.py:298 -#, fuzzy -msgid "Running LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "Удалить служебные файлы LilyPond." - -#: ../python/frescobaldi_app/settings.py:310 -#, fuzzy -msgid "LilyPond include path:" -msgstr "Файлы LilyPon" - -#: ../python/frescobaldi_app/settings.py:336 -#, fuzzy -msgid "When saving documents" -msgstr "Послать документы по email" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "Запоминать позицию курсора, закладки и т.п." - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Каталог по умолчанию:" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "Каталог по умолчанию для Ваших LilyPond документов (опционально)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "Версия LilyPond используемая для новых документов" - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Использовать версию установленного LilyPond" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Использовать версию последнего запуска convert-ly" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Использовать другую версию:" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Введите версию Lilypond, например 2.12.0" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:438 -#, fuzzy -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "Сохранять документ перед запуском LilyPond" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "" -"Click this button if Point and Click does not work. See Shift+F1 (What's " -"This) for more information." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides " -"the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different " -"location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside " -"Okular. This works best when all instances of Okular are closed and the PDF " -"preview has not yet been opened." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new " -"settings to take effect." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "Просмотрщик PDF:" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "Просмотрщик PDF" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "(оставьте пустым для значения по умолчанию)" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "Программа воспроизведения MIDI:" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "Url или путь к документации LilyPond." - -#: ../python/frescobaldi_app/settings.py:563 -#, fuzzy -msgid "Lyrics Hyphenation" -msgstr "Удалить переносы" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "" -"Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, " -"KOffice, etc, one per line. If you leave out the starting slash, the " -"prefixes from the KDEDIRS environment variable are prepended." -msgstr "" -"Пути поиска словарей для переносов слов от OpenOffice.org, Scribus, KOffice " -"и т.д., по одному на строку. Если опустить начальный слеш, префиксы из " -"KDEDIRS переменных окружения будут добавлены." - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Команды используемые модулем ввода MIDI Rumor" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Имя или полный путь к программе Rumor." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "" -"Name or full path of the aconnect program (part of ALSA, for MIDI input and " -"playback using Rumor)." -msgstr "" -"Имя или полный путь к программе aconnect (часть пакета ALSA, для ввода и " -"воспроизведения MIDI, используя Rumor)" - -#: ../python/frescobaldi_app/settings.py:615 -msgid "" -"Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "" -"Полная команда запуска TiMidity или другой программы MIDI-клиента ALSA." - -#: ../python/frescobaldi_app/settings.py:648 -#, fuzzy -msgid "LilyPond versions to use:" -msgstr "Вставить версию LilyPond" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "" -"Enable automatic version selection (choose LilyPond version from document)" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:710 -#, fuzzy -msgid "Document Tabs" -msgstr "Показать закладки документов" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:778 -#, fuzzy -msgid "Lilypond-book:" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/settings.py:809 -#, fuzzy -msgid "Path" -msgstr "Пути" - -#: ../python/frescobaldi_app/settings.py:810 -#, fuzzy -msgid "Version" -msgstr "Версия:" - -#: ../python/frescobaldi_app/settings.py:813 -#, fuzzy -msgid "Can't determine LilyPond version." -msgstr "Вставить версию LilyPond" - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:842 -#, fuzzy -msgid "LilyPond Command:" -msgstr "Документация LilyPond:" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "Имя или полный путь к программе LilyPond" - -#: ../python/frescobaldi_app/settings.py:847 -#, fuzzy -msgid "LilyPond Command" -msgstr "Документация LilyPond:" - -#: ../python/frescobaldi_app/settings.py:860 -#, fuzzy -msgid "Set as default" -msgstr "Сохранить по умолчанию" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:903 -msgid "Start with no session" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:905 -msgid "Start with session:" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "" - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "" - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "Ваш документ уже содержит сведения о версии LilyPond" - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "Версия уже установлена" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "" -"Can't determine the version of LilyPond. Please check your LilyPond " -"installation." -msgstr "Невозможно определить версию LilyPond. Проверьте установку." - -#: ../python/frescobaldi_app/version.py:86 -msgid "" -"Can't determine the LilyPond version of the current document. Please add a " -"\\version statement with the correct version." -msgstr "" -"Невозможно определить версию LilyPond у текущего документа. Добавьте " -"\\version утверждение с правильной версией." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "LilyPond документ уже обновлен" - -#: ../python/frescobaldi_app/version.py:107 -msgid "" -"The document has been processed with convert-ly. You'll find the messages of " -"convert-ly in a comment block at the end. You still may have to edit some " -"parts manually." -msgstr "" -"Документ был обработан при помощи convert-ly. Сообщения программы в блоке " -"комментария, в конце. Возможно, Вам придется редактировать некоторые части " -"вручную." - -#: ../python/frescobaldi_app/version.py:113 -msgid "" -"The document has been processed with convert-ly, but remained unchanged. " -"This is the message given by convert-ly: %1" -msgstr "" -"Документ был обработан при помощи convert-ly, но остался неизменным. " -"Сообщение от convert-ly: %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr " Невозможно запустить convert-ly: %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Щёлкните" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Щёлкните по кнопке несколько раз, чтобы установить темп." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "Темп в ударах в минуту." - -#: ../python/frescobaldi_app/widgets.py:214 -#, fuzzy -msgid "Treble" -msgstr "Заголовок" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Альт" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Тенор" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Бас" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Ударные" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Мастер Настройки Партитуры" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Заголовки" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Щёлкните для ввода значения." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "внизу первой страницы" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "внизу последней страницы" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Инструменты" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Доступные инструменты:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Добавить выбранные инструменты в партитуру." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Партитура:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Настройки партитуры" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Общие настройки" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Названия инструментов" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Ключевые знаки:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Размер:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Затакт:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Метроном:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Темп:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Указание темпа, например, \"Allegro\"" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Язык нотной записи:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "Язык LilyPond для обозначения нот." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "Версия LilyPond используемая для текущего документа." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Использовать типографские кавычки" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "Заменить обычные кавычки в заголовках на типографские." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Удаляет строку программы выводимую LilyPond по умолчанию." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Удалить номера тактов" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "" -"Suppress the display of measure numbers at the beginning of every system." -msgstr "Удаляет номера тактов в начале каждой системы." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "Создать MIDI" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "Создать MIDI файл, в дополнение к PDF" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Показать метроном" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "" -"If checked, show the metronome mark at the beginning of the score. The MIDI " -"output also uses the metronome setting." -msgstr "" -"Если выбрано, показывает значение метронома в начале партитуры. Вывод MIDI " -"также использует значение метронома." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Альбомная" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "Первая система:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Длинный" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Короткий" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "" -"Использовать длинные или короткие имена инструментов перед первой системой." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Остальные системы:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "" -"(Не)Показывать сокращенные или длинные названия инструментов перед " -"следующими системами." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "Язык LilyPond для названий инструментов." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Удалить строку LilyPond по умолчанию" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "Настройки недоступны." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Голоса:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -#, fuzzy -msgid "How many voices to put in this staff." -msgstr "Количество голосов ударных инструментов на нотоносце." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "Music follows here." - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Тип нотоносца:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Обычный" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Табулатура" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Оба" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Настройка:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Строфы:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Количество строф." - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Амбитус" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "" -"Показывает диапазон голоса от низшего до высшего тона в начале нотоносца" - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Количество голосов на каждом нотоносце." - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "В основном, полезно при наборе полифонической музыки." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Правая рука:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Левая рука:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Названия аккордов" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Стиль аккордов:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "Немецкий" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -#, fuzzy -msgid "Semi-German" -msgstr "Semi-German" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "Итальянский" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "Французский" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Гитарные диаграммы" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "" -"Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 " -"and above)." -msgstr "" -"Показывать предопределенные гитарные диаграммы под названиями аккордов " -"(версия Lilypond 2.12 и выше)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Цифрованный бас" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Скрипка" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Violin|Vl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Альт" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Viola|Vla." - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Виолончель" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Cello|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Контрабас" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Contrabass|Cb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Бассо континуо" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Basso Continuo|B.c." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Мандолина" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandolin|Mdl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Настройка мандолины" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Банджо" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Banjo|Bj." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Четыре струны (вместо пяти)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Классическая гитара" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Guitar|Gt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Настройка гитары" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Джазовая гитара" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Jazz guitar|J.Gt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Bass|Bs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Бас-гитара" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Electric bass|E.Bs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Арфа" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Harp|Hp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -#, fuzzy -msgid "Lower staff:" -msgstr "Обычный" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Флейта" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Flute|Fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Флейта пикколо" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Piccolo|Pic." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Басовая флейта" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Bass flute|Bfl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Гобой" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Oboe|Ob." - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Гобой д'амур" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Oboe d'amore|Ob.d'am." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "Английский рожок" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "English horn|Eng.h." - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Фагот" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Bassoon|Bn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Контрафагот" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Contrabassoon|C.Bn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Кларнет" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Clarinet|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Саксофон-сопранино" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Sopranino Sax|SiSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Саксофон-сопрано" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Soprano Sax|SoSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Альт-саксофон" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Alto Sax|ASx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Тенор-саксофон" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Tenor Sax|TSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Баритон-саксофон" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Baritone Sax|BSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Бас-саксофон" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Bass Sax|BsSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Сопрановая блокфлейта" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Soprano recorder|S.rec." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Альтовая блокфлейта" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Alto recorder|A.rec." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Теноровая блокфлейта" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Tenor recorder|T.rec." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Басовая блокфлейта" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Bass recorder|B.rec." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Валторна" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Horn in F|Hn.F." - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Труба in C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Trumpet in C|Tr.C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Труба in B" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Trumpet in Bb|Tr.Bb" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Тромбон" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Trombone|Trb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Туба" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Басовая туба" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Bass Tuba|B.Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Сопрано" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Soprano|S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Меццо-сопрано" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzo-soprano|Ms." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Alto|A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Tenor|T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Bass|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Нотный стан" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "" -"The Lead Sheet provides a staff with chord names above and lyrics below it. " -"A second staff is optional." -msgstr "" -"Нотный стан с названиями аккордов сверху и текстом снизу. Второй нотоносец " -"опционален." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Добавить стан для аккомпанемента." - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "" -"Adds an accompaniment staff and also puts an accompaniment voice in the " -"upper staff." -msgstr "" -"Добавить станы для аккомпанемента и поместить аккомпанируемый голос верхним." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Хор" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "" -"Please select the voices for the choir. Use the letters S, A, T, or B. A " -"hyphen denotes a new staff." -msgstr "" -"Выберите голоса для хора. Используйте буквы S, A, T или B. Дефис означает " -"новый нотоносец." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "Совет: для двойного хора можно использовать две хоровые партии." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Голоса:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -#, fuzzy -msgid "Lyrics:" -msgstr "Тексты" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Одинаковый текст во всех голосах" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -#, fuzzy -msgid "A set of the same lyrics is placed between all staves." -msgstr "Один и тот же текст располагается между всеми нотоносцами." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Одинаковый текст во всех голосах" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "" -"Every voice gets its own lyrics, using the same text as the other voices." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Разный текст у каждого голоса" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Каждый голос имеет свой текст." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -#, fuzzy -msgid "One set of stanzas is distributed across the staves." -msgstr "Один и тот же текст располагается между всеми нотоносцами." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -#, fuzzy -msgid "Piano reduction" -msgstr "Направление:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "" -"Creates a rehearsal MIDI file for every voice, even if no MIDI output is " -"generated for the main score." -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Choir|Ch." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Фортепиано" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Piano|Pno." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Клавесин" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Harpsichord|Hs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Клавикорд" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Clavichord|Clv." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Орган" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Organ|Org." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Педаль:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Установите 0, чтобы убрать педаль." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Челеста" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Celesta|Cel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Литавры" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Timpani|Tmp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Ксилофон" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Xylophone|Xyl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Маримба" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Вибрафон" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Vibraphone|Vib." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Колокола" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Tubular bells|Tub." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Колокольчик" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Glockenspiel|Gls." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Ударные" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Drums|Dr." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "Партия ударных" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "сохранять дистанцию" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Стиль:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Ударные (5 линеек, по умолчанию)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Timbales-style (2 линейки)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Congas-style (2 линейки)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Bongos-style (2 линейки)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Percussion-style (1 линейка)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Удалить нотные штили" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Удалить штили у ударных нот." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Струнные" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Струнные щипковые" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Деревянные духовые" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Медные духовые" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "Голос" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Клавишные" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Другие" - -#~ msgid "Open PDF" -#~ msgstr "Открыть PDF" - -#~ msgid "Print" -#~ msgstr "Печать" - -#~ msgid "Play MIDI" -#~ msgstr "Воспроизвести MIDI" - -#~ msgid "Email..." -#~ msgstr "Email..." - -#~ msgid "Disable the built-in PDF preview" -#~ msgstr "Запретить встроенный просмотр PDF" - -#~ msgid "The direction to use for the articulations." -#~ msgstr "Направление используемое для артикуляционных обозначений" - -#~ msgid "&Generated Files" -#~ msgstr "&Сгенерированные файлы" - -#~ msgid "Your document has been modified, please save first." -#~ msgstr "Документ был изменен, необходимо сохранить его." - -#~ msgid "LilyPond documentation:" -#~ msgstr "Документация LilyPond:" - -#~ msgid "The document has been sent to the printer." -#~ msgstr "Документ отправлен на печать" - -#~ msgid "" -#~ "Printing failed: %1\n" -#~ "\n" -#~ "The print command %2 does probably not exist. Please check your settings." -#~ msgstr "" -#~ "Ошибка печати: %1\n" -#~ "\n" -#~ "Команда печати %2 не может быть выполнена. Проверьте настройки." - -#~ msgid "The print command contains errors. Please check your settings." -#~ msgstr "Команда печати содержит ошибки. Пожалуйста, проверьте настройки." - -#, fuzzy -#~ msgid "Notify when a document has been sent to the printer" -#~ msgstr "Документ отправлен на печать" - -#~ msgid "Printcommand:" -#~ msgstr "Команда печати:" - -#~ msgid "" -#~ "Command to print a PDF file, for example lpr or kprinter. You may add " -#~ "some arguments, e.g. lpr -P myprinter." -#~ msgstr "" -#~ "Команда печати PDF файла, например, lpr или kprinter. Вы можете добавить " -#~ "дополнительные аргументы, напр. lpr -P myprinter" - -#~ msgid "Name or full path of the convert-ly program." -#~ msgstr "Имя или полный путь к программе convert-ly" - -#~ msgid "Expand" -#~ msgstr "Раскрыть сокращение" - -#, fuzzy -#~ msgid "Could not understand the entered pitches." -#~ msgstr "Невозможно чтение из процесса LilyPond." - -#~ msgid "Show" -#~ msgstr "Показать" - -#, fuzzy -#~ msgid "Paper Size A4" -#~ msgstr "Размер страницы:" - -#, fuzzy -#~ msgid "Paper Size A5" -#~ msgstr "Размер страницы:" - -#, fuzzy -#~ msgid "Paper Size Letter" -#~ msgstr "Размер страницы:" - -#, fuzzy -#~ msgid "Stem Up" -#~ msgstr "Шаг" - -#, fuzzy -#~ msgid "Stem Down" -#~ msgstr "Вниз" - -#, fuzzy -#~ msgid "Lyric Stanza" -#~ msgstr "Строфы:" - -#, fuzzy -#~ msgid "Score section" -#~ msgstr "Настройки партитуры" - -#, fuzzy -#~ msgid "Layout Section" -#~ msgstr "Выбор языка" - -#, fuzzy -#~ msgid "Midi section" -#~ msgstr "Посвящение" - -#, fuzzy -#~ msgid "With: instrumentName" -#~ msgstr "Названия инструментов" - -#, fuzzy -#~ msgid "With: shortInstrumentName" -#~ msgstr "Названия инструментов" - -#, fuzzy -#~ msgid "Modern 2/2 Time Signature" -#~ msgstr "Размер:" - -#, fuzzy -#~ msgid "Modern 4/4 Time Signature" -#~ msgstr "Размер:" - -#, fuzzy -#~ msgid "New Lyrics" -#~ msgstr "Тексты" - -#~ msgid "Your document currently has no filename, please save first." -#~ msgstr "У документа нет имени файла, сохраните его сначала." - -#~ msgid "" -#~ "Sorry, support for remote files is not yet implemented.\n" -#~ "Please save your document to a local file." -#~ msgstr "" -#~ "Извините, еще нет поддержки удаленных файлов.\n" -#~ "Сохраните Ваш документ локально." - -#~ msgid "Already Running" -#~ msgstr "Уже запущен" diff -Nru frescobaldi-1.2.0/po/tr.po frescobaldi-2.0.0/po/tr.po --- frescobaldi-1.2.0/po/tr.po 2010-12-26 06:36:29.000000000 +0000 +++ frescobaldi-2.0.0/po/tr.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,3792 +0,0 @@ -# translation of tr.po to Türkçe -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Server Acim , 2008, 2009. -# Server Acim , 2010. -msgid "" -msgstr "" -"Project-Id-Version: tr\n" -"Report-Msgid-Bugs-To: info@frescobaldi.org\n" -"POT-Creation-Date: 2010-11-09 09:51+0100\n" -"PO-Revision-Date: 2010-12-12 07:48+0200\n" -"Last-Translator: Server Acim \n" -"Language-Team: Turkish \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.0\n" - -#: ../frescobaldi.py:37 -#: dummy.py:16 -msgid "Frescobaldi" -msgstr "Frescobaldi" - -#: ../frescobaldi.py:39 -#: dummy.py:17 -msgid "LilyPond Music Editor" -msgstr "LilyPond Müzik Düzenleyicisi" - -#: ../frescobaldi.py:41 -msgid "Copyright (c) 2008-2010, Wilbert Berendsen" -msgstr "Copyright (c) 2008-2010, Wilbert Berendsen" - -#: ../frescobaldi.py:50 -msgctxt "NAME OF TRANSLATORS" -msgid "Your name" -msgstr "Server Acim" - -#: ../frescobaldi.py:51 -msgctxt "EMAIL OF TRANSLATORS" -msgid "i18n@frescobaldi.org" -msgstr "i18n@frescobaldi.org" - -#: ../frescobaldi.py:57 -msgid "Session to start" -msgstr "Başlatılacak oturum" - -#: ../frescobaldi.py:58 -msgid "Start a new instance" -msgstr "Yeni bir çalışmaya başla" - -#: ../frescobaldi.py:59 -msgid "Encoding to use" -msgstr "Kullanılacak dil kodlaması" - -#: ../frescobaldi.py:60 -msgid "Line number to go to, starting at 1" -msgstr "Gidilecek satır numarası, sıra numarası 1'den başlamaktadır." - -#: ../frescobaldi.py:61 -msgid "Column to go to, starting at 0" -msgstr "Gidilecek sütun numarası, sıra numarası 0'dan başlamaktadır." - -#: ../frescobaldi.py:62 -msgid "Try to use smart line and column numbers" -msgstr "Akıllı satır ve sütun numaralarını kullanmaya çalış" - -#: ../frescobaldi.py:63 -msgid "LilyPond files to open, may also be textedit URLs" -msgstr "Açılacak LilyPond dosyaları, bunlardan bazıları metin işlemeli URL'lerdir." - -#: dummy.py:5 -msgid "&Insert" -msgstr "&Ekle" - -#: dummy.py:6 -msgid "&Document" -msgstr "&Belge" - -#: dummy.py:7 -msgid "&LilyPond" -msgstr "&LilyPond" - -#: dummy.py:8 -msgid "&Sessions" -msgstr "&Oturumlar" - -#: dummy.py:9 -msgid "&Pitch" -msgstr "Ses noktası" - -#: dummy.py:10 -msgid "&Lyrics" -msgstr "Şarkı &Sözleri" - -#: dummy.py:11 -msgid "&Rhythm" -msgstr "&Ritm" - -#: dummy.py:12 -msgid "&Source Document" -msgstr "&Kaynak Belgesi" - -#: dummy.py:13 -msgid "&Extra Tools" -msgstr "&Ekstra Araçlar" - -#: ../python/ly/__init__.py:81 -msgid "Dedication" -msgstr "İthaf" - -#: ../python/ly/__init__.py:82 -msgid "Title" -msgstr "Başlık" - -#: ../python/ly/__init__.py:83 -msgid "Subtitle" -msgstr "Alt Başlık" - -#: ../python/ly/__init__.py:84 -msgid "Subsubtitle" -msgstr "Alt alt başlık" - -#: ../python/ly/__init__.py:85 -msgid "Instrument" -msgstr "Çalgı" - -#: ../python/ly/__init__.py:86 -msgid "Composer" -msgstr "Besteci" - -#: ../python/ly/__init__.py:87 -msgid "Arranger" -msgstr "Aranjör" - -#: ../python/ly/__init__.py:88 -msgid "Poet" -msgstr "Şair" - -#: ../python/ly/__init__.py:89 -msgid "Meter" -msgstr "Ölçü" - -#: ../python/ly/__init__.py:90 -msgid "Piece" -msgstr "Parça" - -#: ../python/ly/__init__.py:91 -msgid "Opus" -msgstr "Opus" - -#: ../python/ly/__init__.py:92 -msgid "Copyright" -msgstr "Telif Hakkı" - -#: ../python/ly/__init__.py:93 -msgid "Tagline" -msgstr "Slogan" - -#: ../python/ly/__init__.py:101 -msgid "Major" -msgstr "Majör" - -#: ../python/ly/__init__.py:102 -msgid "Minor" -msgstr "Minör" - -#: ../python/ly/__init__.py:103 -msgid "Ionian" -msgstr "İyonyan" - -#: ../python/ly/__init__.py:104 -msgid "Dorian" -msgstr "Doryan" - -#: ../python/ly/__init__.py:105 -msgid "Phrygian" -msgstr "Frigyan" - -#: ../python/ly/__init__.py:106 -msgid "Lydian" -msgstr "Lidyan" - -#: ../python/ly/__init__.py:107 -msgid "Mixolydian" -msgstr "Miksolidyan" - -#: ../python/ly/__init__.py:108 -msgid "Aeolian" -msgstr "Aolyan" - -#: ../python/ly/__init__.py:109 -msgid "Locrian" -msgstr "Lokriyan" - -#: ../python/ly/articulation.py:35 -msgid "Articulation" -msgstr "Artükülasyon" - -#: ../python/ly/articulation.py:36 -msgid "Accent" -msgstr "Vurgu" - -#: ../python/ly/articulation.py:37 -msgid "Marcato" -msgstr "Marcato" - -#: ../python/ly/articulation.py:38 -msgid "Staccatissimo" -msgstr "Staccatissimo" - -#: ../python/ly/articulation.py:39 -msgid "Staccato" -msgstr "Staccato" - -#: ../python/ly/articulation.py:40 -msgid "Portato" -msgstr "Portato" - -#: ../python/ly/articulation.py:41 -msgid "Tenuto" -msgstr "Tenuto" - -#: ../python/ly/articulation.py:42 -msgid "Espressivo" -msgstr "Espressivo" - -#: ../python/ly/articulation.py:44 -msgid "Ornaments" -msgstr "Süslemeler" - -#: ../python/ly/articulation.py:45 -#: ../python/frescobaldi_app/lqi.py:424 -msgid "Trill" -msgstr "Trill" - -#: ../python/ly/articulation.py:46 -msgid "Prall" -msgstr "Prall" - -#: ../python/ly/articulation.py:47 -msgid "Mordent" -msgstr "Mordent" - -#: ../python/ly/articulation.py:48 -msgid "Turn" -msgstr "Turn" - -#: ../python/ly/articulation.py:49 -msgid "Prall prall" -msgstr "Prall prall" - -#: ../python/ly/articulation.py:50 -msgid "Prall mordent" -msgstr "Prall mordent" - -#: ../python/ly/articulation.py:51 -msgid "Up prall" -msgstr "Up prall" - -#: ../python/ly/articulation.py:52 -msgid "Down prall" -msgstr "Down prall" - -#: ../python/ly/articulation.py:53 -msgid "Up mordent" -msgstr "Up mordent" - -#: ../python/ly/articulation.py:54 -msgid "Down mordent" -msgstr "Down mordent" - -#: ../python/ly/articulation.py:55 -msgid "Prall up" -msgstr "Prall up" - -#: ../python/ly/articulation.py:56 -msgid "Prall down" -msgstr "Prall down" - -#: ../python/ly/articulation.py:57 -msgid "Line prall" -msgstr "Line prall" - -#: ../python/ly/articulation.py:58 -msgid "Reverse turn" -msgstr "Reverse turn" - -#: ../python/ly/articulation.py:60 -#: ../python/frescobaldi_app/lqi.py:273 -msgid "Signs" -msgstr "İşaretler" - -#: ../python/ly/articulation.py:61 -msgid "Fermata" -msgstr "Fermata" - -#: ../python/ly/articulation.py:62 -msgid "Short fermata" -msgstr "Short fermata" - -#: ../python/ly/articulation.py:63 -msgid "Long fermata" -msgstr "Long fermata" - -#: ../python/ly/articulation.py:64 -msgid "Very long fermata" -msgstr "Very long fermata" - -#: ../python/ly/articulation.py:65 -msgid "Segno" -msgstr "Segno" - -#: ../python/ly/articulation.py:66 -msgid "Coda" -msgstr "Coda" - -#: ../python/ly/articulation.py:67 -msgid "Varcoda" -msgstr "Varcoda" - -#: ../python/ly/articulation.py:68 -msgid "Signumcongruentiae" -msgstr "Signumcongruentiae" - -#: ../python/ly/articulation.py:70 -msgid "Other" -msgstr "Diğer" - -#: ../python/ly/articulation.py:71 -msgid "Upbow" -msgstr "Upbow" - -#: ../python/ly/articulation.py:72 -msgid "Downbow" -msgstr "Downbow" - -#: ../python/ly/articulation.py:73 -msgid "Snappizzicato" -msgstr "Snappizzicato" - -#: ../python/ly/articulation.py:74 -msgid "Open (e.g. brass)" -msgstr "Open (e.g. brass)" - -#: ../python/ly/articulation.py:75 -msgid "Stopped (e.g. brass)" -msgstr "Stopped (e.g. brass)" - -#: ../python/ly/articulation.py:76 -msgid "Flageolet" -msgstr "Flageolet" - -#: ../python/ly/articulation.py:77 -msgid "Thumb" -msgstr "Thumb" - -#: ../python/ly/articulation.py:78 -msgid "Left heel" -msgstr "Left heel" - -#: ../python/ly/articulation.py:79 -msgid "Right heel" -msgstr "Right heel" - -#: ../python/ly/articulation.py:80 -msgid "Left toe" -msgstr "Left toe" - -#: ../python/ly/articulation.py:81 -msgid "Right toe" -msgstr "Right toe" - -#: ../python/ly/articulation.py:82 -msgid "Half open (e.g. hi-hat)" -msgstr "Yarım açık (örneğin h-hat)" - -#: ../python/kateshell/exception.py:43 -msgid "An internal error has occurred:" -msgstr "Bir iç hata oluştu:" - -#: ../python/kateshell/exception.py:46 -msgid "Internal Error" -msgstr "İç Hata" - -#: ../python/kateshell/exception.py:52 -msgid "Email Bug Report..." -msgstr "Hata Raporunu E-posta ile gönder..." - -#: ../python/kateshell/exception.py:65 -msgid "Optionally describe what you were doing below:" -msgstr "Aşağıya ne yaptığını opsiyonel olarak tanımla:" - -#: ../python/kateshell/mainwindow.py:121 -msgid "Left Sidebar" -msgstr "Sol Kenar Çubuğu" - -#: ../python/kateshell/mainwindow.py:125 -msgid "Right Sidebar" -msgstr "Sağ Kenar Çubuğu" - -#: ../python/kateshell/mainwindow.py:137 -msgid "Top Sidebar" -msgstr "Üst Kenar Çubuğu" - -#: ../python/kateshell/mainwindow.py:150 -msgid "Bottom Sidebar" -msgstr "Alt Kenar Çubuğu" - -#: ../python/kateshell/mainwindow.py:192 -msgid "Close Other Documents" -msgstr "Diğer Belgeleri Kapat" - -#: ../python/kateshell/mainwindow.py:197 -msgid "Show Path" -msgstr "Yolu Göster" - -#: ../python/kateshell/mainwindow.py:200 -msgid "Show Document Tabs" -msgstr "Belge Sekmelerini Göster" - -#: ../python/kateshell/mainwindow.py:218 -msgid "&Tool Views" -msgstr "&Araç Görünümleri" - -#: ../python/kateshell/mainwindow.py:232 -msgid "New..." -msgstr "Yeni..." - -#: ../python/kateshell/mainwindow.py:240 -msgid "Manage Sessions..." -msgstr "Oturumları Düzenle..." - -#: ../python/kateshell/mainwindow.py:265 -msgid "" -"Could not find the XMLGUI container \"%1\".\n" -"\n" -"Probably the local ui.rc file contains errors. It is recommended to delete this file because elements in the user interface will be missing. This is the full path of the file:\n" -"\n" -"%2\n" -msgstr "" -"XMLGUI içeriği bulunamıyor \"%1\".\n" -"\n" -"Belki de yerel ui.rc dosyasında hatalar olabilir. Bu dosyanın silinmesi önerilir çünkü kullanıcı arayüzündeki bazı ögeler kayıp olabilir. Bu dosyanın tam yolunun adresidir:\n" -"\n" -"%2\n" - -#: ../python/kateshell/mainwindow.py:325 -msgid "No Session" -msgstr "Hiç Oturum Yok" - -#: ../python/kateshell/mainwindow.py:404 -msgid "Please select some text first." -msgstr "Lütfen önce bir metin seçiniz." - -#: ../python/kateshell/mainwindow.py:466 -msgid "modified" -msgstr "değiştirilmiş" - -#: ../python/kateshell/mainwindow.py:477 -msgid "Line: %1 Col: %2" -msgstr "Satır: %1 Sütun: %2" - -#: ../python/kateshell/mainwindow.py:487 -msgid "BLOCK" -msgstr "GENİŞLİK" - -#: ../python/kateshell/mainwindow.py:487 -msgid "Block selection mode" -msgstr "Genişlik seçim kipi" - -#: ../python/kateshell/mainwindow.py:489 -msgid "LINE" -msgstr "SATIR" - -#: ../python/kateshell/mainwindow.py:489 -msgid "Line selection mode" -msgstr "Satır seçim kipi" - -#: ../python/kateshell/mainwindow.py:537 -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "All Files" -msgstr "Tüm dosyalar" - -#: ../python/kateshell/mainwindow.py:538 -msgid "Open File" -msgstr "Dosya Aç" - -#: ../python/kateshell/mainwindow.py:785 -msgid "Right-click for tab options" -msgstr "Sekme seçenekleri için sağ-tıklayınız" - -#: ../python/kateshell/mainwindow.py:1105 -msgid "Move To" -msgstr "Buraya Taşı" - -#: ../python/kateshell/mainwindow.py:1111 -msgid "Undock" -msgstr "Uzat" - -#: ../python/kateshell/mainwindow.py:1182 -msgid "Could not load %1" -msgstr "Yüklenemedi %s" - -#: ../python/kateshell/mainwindow.py:1183 -msgid "Please install %1" -msgstr "Lütfen kurunuz %1" - -#: ../python/kateshell/shortcut.py:163 -msgid "Configure Keyboard Shortcut" -msgstr "Klavye Kısayollarını Yapılandır" - -#: ../python/kateshell/shortcut.py:172 -msgid "Press the button to configure the keyboard shortcut for:" -msgstr "Klavye kısayol yapılandırması için düğmeye tıklayın:" - -#: ../python/kateshell/sessions.py:41 -msgid "Manage Sessions" -msgstr "Oturumları Düzenle" - -#: ../python/kateshell/sessions.py:99 -msgid "Session" -msgstr "Oturum" - -#: ../python/kateshell/sessions.py:100 -msgid "Properties of this session" -msgstr "Bu oturumun özellikleri" - -#: ../python/kateshell/sessions.py:105 -msgid "Name:" -msgstr "İsim:" - -#: ../python/kateshell/sessions.py:112 -msgid "Always save the list of documents in this session" -msgstr "Bu oturumdaki belgeleri listesini daima kaydet" - -#: ../python/kateshell/sessions.py:115 -msgid "Base directory:" -msgstr "Ön tanımlı dizin:" - -#: ../python/kateshell/sessions.py:128 -msgid "Edit session: %1" -msgstr "Oturumu düzenle: %1" - -#: ../python/kateshell/sessions.py:135 -msgid "Edit new session" -msgstr "Yeni oturum ayarla:" - -#: ../python/kateshell/sessions.py:171 -msgid "Please enter a session name." -msgstr "Lütfen bir oturum adı giriniz." - -#: ../python/kateshell/sessions.py:180 -msgid "Please do not use the name '%1'." -msgstr "Lütfen şu adı kullanmayın '%1'." - -#: ../python/kateshell/sessions.py:187 -msgid "Please do not use the ampersand (&) character in a session name." -msgstr "Lütfen bir oturuma isim verirken ve işaretini (&) kullanmayın." - -#: ../python/kateshell/sessions.py:195 -msgid "" -"Another session with the name %1 exists already.\n" -"\n" -"Do you want to overwrite it?" -msgstr "" -"Bu isimle %1 başka bir oturum zaten var.\n" -"\n" -"Üzerine yazmak ister misiniz?" - -#: ../python/frescobaldi_app/actions.py:61 -msgid "Open %1 in external viewer" -msgstr "Bu dosyayı %1 dış görüntüleyicide aç" - -#: ../python/frescobaldi_app/actions.py:69 -msgid "Play %1" -msgstr "Çal %1" - -#: ../python/frescobaldi_app/actions.py:73 -msgid "(No up-to-date MIDI or PDF files available.)" -msgstr "(Hiç güncel MIDI veya PDF dosyası yok)" - -#: ../python/frescobaldi_app/actions.py:75 -msgid "There are no up-to-date MIDI or PDF files available. Please run LilyPond to create one or more output files." -msgstr "Güncel hiç MIDI veya PDF dosyası yok. Lütfen bir veya birden fazla çıktı dosyası oluşturmak için LilyPond'u çalıştırın." - -#: ../python/frescobaldi_app/actions.py:126 -msgid "There are no files to send via email." -msgstr "E-posta olarak gönderilecek dosya bulunmamaktadır." - -#: ../python/frescobaldi_app/actions.py:127 -msgid "No files to send" -msgstr "Gönderilecek dosya yok" - -#: ../python/frescobaldi_app/actions.py:141 -msgid "" -"There are no PDF documents to print.\n" -"\n" -"You probably need to run LilyPond to create or update a PDF document. If you are creating MIDI files, be sure you also put a \\layout { } section in your score, otherwise LilyPond will not create a PDF." -msgstr "" -"Yazdırılacak hiç PDF belgesi yok.\n" -"\n" -"Bir PDF belgesi oluşturmak veya güncellemek için LilyPond'un çalıştırmanız gereklidir. Eğer MIDI dosyaları oluşturuyorsanız, notanıza bir \\layout { } bölmesi eklediğinizden emin olun, aksi taktirde LilyPond bir PDF oluşturmayacaktır." - -#: ../python/frescobaldi_app/actions.py:146 -msgid "No files to print" -msgstr "Yazdırılacak dosya yok" - -#: ../python/frescobaldi_app/actions.py:158 -msgid "Email documents" -msgstr "E-posta belgeleri" - -#: ../python/frescobaldi_app/actions.py:162 -msgid "Please select the files you want to send:" -msgstr "Lütfen göndermek istediğiniz dosyaları seçiniz:" - -#: ../python/frescobaldi_app/actions.py:166 -msgid "These are the files that are up-to-date (i.e. newer than the LilyPond source document). Also LilyPond files included by the source document are shown." -msgstr "Güncel dosyalar var (örn. LilyPond kaynak dosyasından daha yeniler). Ayrıca, LilyPond kaynak dosyaları da görüntülenmektedir." - -#: ../python/frescobaldi_app/actions.py:177 -msgid "Note: this PDF file has been created with embedded point-and-click URLs (preview mode), which increases the file size dramatically. Please consider to rebuild the file in publish mode, because then the PDF file is much smaller." -msgid_plural "Note: these PDF files have been created with embedded point-and-click URLs (preview mode), which increases the file size dramatically. Please consider to rebuild the files in publish mode, because then the PDF files are much smaller." -msgstr[0] "Bu PDF dosyaları, dosya boyutu önemli derece arttıran gömülü işaretle-ve-tıkla bağlantısıyla yaratılmıştır. (önizleme kipi) Lütfen dosyayı yayınlama kipinde yeniden derlemeyi deneyiniz, böylece PDF dosya boyutu daha küçülecektir." - -#: ../python/frescobaldi_app/actions.py:191 -msgid "Note: If there are no PDF and no MIDI files, you probably need to run LilyPond to update those files, before sending the e-mail." -msgstr "Dikkat: Eğer hiç PDF veya MIDI dosyası yoksa, e-posta göndermeden önce bu belgeleri güncellemek için büyük olasılıkla LilyPond'u çalıştırmanız gerekecektir." - -#: ../python/frescobaldi_app/actions.py:248 -msgid "Select all" -msgstr "Hepsini seç" - -#: ../python/frescobaldi_app/actions.py:249 -msgid "Print documents" -msgstr "Belgeleri yazdır" - -#: ../python/frescobaldi_app/actions.py:252 -msgid "Please select the files you want to print:" -msgstr "Lütfen yazdırmak istediğiniz dosyaları seçiniz:" - -#: ../python/frescobaldi_app/actions.py:256 -msgid "These are the PDF documents that are up-to-date (i.e. newer than the LilyPond source document). Check the documents you want to send to the printer." -msgstr "Güncel PDF dosyaları var (örn. LilyPond kaynak dosyasından daha yeniler). Yazıcıya göndermek istediğiniz belgeleri denetleyin." - -#: ../python/frescobaldi_app/actions.py:337 -msgid "Print %1" -msgstr "Yazdır %1" - -#: ../python/frescobaldi_app/actions.py:340 -msgid "Print 1 file" -msgid_plural "Print %1 files" -msgstr[0] "%1 dosyalarını yazdır" - -#: ../python/frescobaldi_app/actions.py:350 -msgid "A print command (like 'lpr' or 'lp') could not be found on your system." -msgstr "Bir yazdırma komutu ('lpr' veya 'lp' gibi) sisteminizde bulunamadı." - -#: ../python/frescobaldi_app/actions.py:354 -msgid "The command '%1' could not be found on your system." -msgstr "Komut '%1' sisteminizde çalıştırılamıyor." - -#: ../python/frescobaldi_app/actions.py:358 -msgid "" -"The command below has been run, but exited with a return code %1.\n" -"\n" -"%2" -msgstr "" -"Aşağıdaki komut çalıştırılmış, ancak bir dönüş koduyla çıkmış durumda %1.\n" -"\n" -"%2" - -#: ../python/frescobaldi_app/blankpaper.py:57 -#: ../python/frescobaldi_app/mainapp.py:813 -msgid "Create blank staff paper" -msgstr "Boş nota kağıdı oluştur" - -#: ../python/frescobaldi_app/blankpaper.py:71 -msgid "Type:" -msgstr "Tür:" - -#: ../python/frescobaldi_app/blankpaper.py:74 -msgid "Action:" -msgstr "Eylem:" - -#: ../python/frescobaldi_app/blankpaper.py:80 -msgid "Choose what kind of empty staves you want to create." -msgstr "Ne tür boş nota kağıdı oluşturacağınızı seçin." - -#: ../python/frescobaldi_app/blankpaper.py:82 -msgid "Choose which action happens when clicking \"Ok\"." -msgstr "\"Tamam\" düğmesini tıkladığınızda hangi tür eylemin gerçekleşeceğini seçin." - -#: ../python/frescobaldi_app/blankpaper.py:84 -msgid "Preview the empty staff paper." -msgstr "Boş nota kağıdını ön izle." - -#: ../python/frescobaldi_app/blankpaper.py:86 -msgid "Click to see more settings." -msgstr "Daha fazla ayarı görmek için tıklayın." - -#: ../python/frescobaldi_app/blankpaper.py:89 -msgid "Paper" -msgstr "Sayfa" - -#: ../python/frescobaldi_app/blankpaper.py:91 -msgid "Settings" -msgstr "Ayarlar" - -#: ../python/frescobaldi_app/blankpaper.py:97 -#: ../python/frescobaldi_app/scorewiz/__init__.py:495 -msgid "Paper size:" -msgstr "Sayfa ebadı:" - -#: ../python/frescobaldi_app/blankpaper.py:101 -#: ../python/frescobaldi_app/sessions.py:75 -#: ../python/frescobaldi_app/scorewiz/__init__.py:440 -#: ../python/frescobaldi_app/scorewiz/__init__.py:499 -#: ../python/frescobaldi_app/scorewiz/__init__.py:531 -#: ../python/frescobaldi_app/scorewiz/parts.py:183 -#: ../python/frescobaldi_app/scorewiz/parts.py:439 -msgid "Default" -msgstr "Öntanımlı" - -#: ../python/frescobaldi_app/blankpaper.py:105 -msgid "Staff Size:" -msgstr "Dizek Boyutu:" - -#: ../python/frescobaldi_app/blankpaper.py:112 -msgid "Page count:" -msgstr "Sayfa numarası:" - -#: ../python/frescobaldi_app/blankpaper.py:118 -#: ../python/frescobaldi_app/scorewiz/__init__.py:467 -msgid "Remove default tagline" -msgstr "Öntanımlı sloganı kaldır" - -#: ../python/frescobaldi_app/blankpaper.py:123 -msgid "Print Bar Lines" -msgstr "Ölçü Çizgilerini Göster" - -#: ../python/frescobaldi_app/blankpaper.py:125 -msgid "Bars per line:" -msgstr "Satır başına düşen ölçü:" - -#: ../python/frescobaldi_app/blankpaper.py:132 -msgid "Print Page Numbers" -msgstr "Sayfa Numaralarını Göster" - -#: ../python/frescobaldi_app/blankpaper.py:134 -msgid "Start with:" -msgstr "Başlayan numara:" - -#: ../python/frescobaldi_app/blankpaper.py:293 -msgid "Blank staff paper preview" -msgstr "Boş nota kağıdı önizleme" - -#: ../python/frescobaldi_app/blankpaper.py:312 -msgid "No PDF was created." -msgstr "PDF oluşturulmadı." - -#: ../python/frescobaldi_app/blankpaper.py:323 -msgid "Open in PDF viewer" -msgstr "PDF göstericide Aç" - -#: ../python/frescobaldi_app/blankpaper.py:332 -msgid "Save PDF As..." -msgstr "PDF'yi Farklı Kaydet..." - -#: ../python/frescobaldi_app/blankpaper.py:339 -msgid "PDF Files" -msgstr "PDf Dosyaları" - -#: ../python/frescobaldi_app/blankpaper.py:341 -msgid "Save PDF" -msgstr "PDF'yi Kaydet" - -#: ../python/frescobaldi_app/blankpaper.py:365 -msgid "Print..." -msgstr "Yazdır..." - -#: ../python/frescobaldi_app/blankpaper.py:371 -msgid "Print staff paper" -msgstr "Dizek kağıdını yazdır" - -#: ../python/frescobaldi_app/blankpaper.py:391 -msgid "Copy LilyPond code to editor" -msgstr "LilyPond kodunu düzenleyiciye kopyala" - -#: ../python/frescobaldi_app/blankpaper.py:490 -msgid "Staves per page:" -msgstr "Sayfa başına düşen dizek sayısı:" - -#: ../python/frescobaldi_app/blankpaper.py:495 -#: ../python/frescobaldi_app/blankpaper.py:841 -msgid "Clef:" -msgstr "Anahtar:" - -#: ../python/frescobaldi_app/blankpaper.py:501 -msgid "Single Staff" -msgstr "Tek Dizek" - -#: ../python/frescobaldi_app/blankpaper.py:521 -#: ../python/frescobaldi_app/blankpaper.py:589 -#: ../python/frescobaldi_app/blankpaper.py:685 -msgid "Systems per page:" -msgstr "Sayfa başına düşen sistemler:" - -#: ../python/frescobaldi_app/blankpaper.py:525 -msgid "Clefs" -msgstr "Anahtarlar" - -#: ../python/frescobaldi_app/blankpaper.py:529 -msgid "Piano Staff" -msgstr "Piano Dizeği" - -#: ../python/frescobaldi_app/blankpaper.py:553 -msgid "Organ Staff" -msgstr "Org Dizeği" - -#: ../python/frescobaldi_app/blankpaper.py:585 -msgid "Staves per system:" -msgstr "Sistem başına düşen dizekler:" - -#: ../python/frescobaldi_app/blankpaper.py:596 -msgid "Clefs:" -msgstr "Anahtarlar" - -#: ../python/frescobaldi_app/blankpaper.py:603 -msgid "" -"Enter as many letters (S, A, T or B) as there are staves.\n" -"See \"What's This\" for more information." -msgstr "" -"Dizek başlıklarını harf olarak giriniz (S, A, T veya B gibi).\n" -"Daha fazla bilgi için \"Bu nedir\" kısmına bakın." - -#: ../python/frescobaldi_app/blankpaper.py:606 -msgid "" -"To configure clefs, first set the number of staves per system. Then enter as many letters (S, A, T or B) as there are staves.\n" -"\n" -"S or A: treble clef,\n" -"T: treble clef with an \"8\" below,\n" -"B: bass clef\n" -"\n" -"So when you want to create music paper for a four-part mixed choir score, first set the number of staves per system to 4. Then enter \"SATB\" (without the quotes) here." -msgstr "" -"Anahtarları yapılandırmak için, önce sistem başına düşen dizek sayısını ayarlayın. Sonra dizeklere harf karşılığı giriniz (S, A, T veya B gibi).\n" -"\n" -"S veya A: sol anahtarı,\n" -"T: altta \"8\" ile sol anahtarı,\n" -"B: fa anahtarı\n" -"\n" -"Sonra, dört partili karışık koro müziği oluşturduğunuzda, sistem başına dizelerin sayısını 4 olarak ayarlayın. Sonra aralarında virgül olmadan \"SATB\" buraya giriniz." - -#: ../python/frescobaldi_app/blankpaper.py:619 -msgid "Choir Staff" -msgstr "Koro Dizeği" - -#: ../python/frescobaldi_app/blankpaper.py:626 -#: ../python/frescobaldi_app/lqi.py:177 -#: ../python/frescobaldi_app/scorewiz/__init__.py:387 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "None" -msgstr "Yok" - -#: ../python/frescobaldi_app/blankpaper.py:772 -msgid "Custom Staff" -msgstr "Özelleştirilmiş Dizek" - -#: ../python/frescobaldi_app/blankpaper.py:831 -msgid "Staff" -msgstr "Dizek" - -#: ../python/frescobaldi_app/blankpaper.py:850 -msgid "Space below:" -msgstr "Aşağıdaki boşluk:" - -#: ../python/frescobaldi_app/blankpaper.py:887 -msgid "Brace" -msgstr "Parantez" - -#: ../python/frescobaldi_app/blankpaper.py:912 -msgid "Bracket" -msgstr "Kalın parantez" - -#: ../python/frescobaldi_app/blankpaper.py:921 -msgid "Square Bracket" -msgstr "Kare parantez" - -#: ../python/frescobaldi_app/blankpaper.py:923 -msgid "Connect bar lines" -msgstr "Ölçü çizgilerini bağla" - -#: ../python/frescobaldi_app/charselect.py:41 -#: ../python/frescobaldi_app/mainapp.py:939 -msgid "Special Characters" -msgstr "Özel Karakterler" - -#: ../python/frescobaldi_app/charselect.py:85 -msgid "unknown" -msgstr "bilinmeyen" - -#: ../python/frescobaldi_app/document.py:74 -msgid "" -"Can't perform the requested translation.\n" -"\n" -"The music contains quarter-tone alterations, but those are not available in the pitch language \"%1\"." -msgstr "" -"İstenen çeviriyi uygulayamaz.\n" -"\n" -"Müzik, çeyrek ses değişimleri içermektedir, fakat bunlar \"%1\" ses dili için mümkün değildir." - -#: ../python/frescobaldi_app/document.py:93 -msgid "The pitch language of the selected text has been updated, but you need to manually add the following command to your document:" -msgstr "Seçilmiş olan metindeki ses noktası dili güncellendi, fakat belgeniz aşağıdaki komutu elle eklemelisiniz:" - -#: ../python/frescobaldi_app/document.py:97 -msgid "(for LilyPond below 2.14), or" -msgstr "(LilyPond 2.14'den daha düşük sürüm için), veya" - -#: ../python/frescobaldi_app/document.py:98 -msgid "(for LilyPond 2.14 and higher.)" -msgstr "(LilyPond 2.14 ve daha üst sürüm için.)" - -#: ../python/frescobaldi_app/document.py:99 -#: ../python/frescobaldi_app/mainapp.py:645 -msgid "Pitch Name Language" -msgstr "Ses Adı Dili" - -#: ../python/frescobaldi_app/document.py:154 -msgid "Please enter the name for the variable to assign the selected text to:" -msgstr "Lütfen, metne atamak üzere değişkene bir ad veriniz:" - -#: ../python/frescobaldi_app/document.py:155 -#: ../python/frescobaldi_app/mainapp.py:514 -msgid "Cut and Assign" -msgstr "Kes ve Ata:" - -#: ../python/frescobaldi_app/document.py:465 -msgid "Open %1" -msgstr "Aç %1" - -#: ../python/frescobaldi_app/document.py:929 -msgid "Please select a music expression, enclosed in << ... >> or { ... }." -msgstr "Lütfen bir ifade seçiniz, aralarında <<...>> veya { ... } olsun." - -#: ../python/frescobaldi_app/document.py:949 -msgid "" -"Could not understand the entered pitches.\n" -"\n" -"Please make sure you use pitch names in the language \"%1\"." -msgstr "" -"Girilen sesleri anlayamadı.\n" -"\n" -"Lütfen ses adlarının doğru dilde yazıldığına emin olun, seçilen dil \"%1\"." - -#: ../python/frescobaldi_app/document.py:957 -msgid "" -"Can't perform the requested transposition.\n" -"\n" -"The transposed music would contain quarter-tone alterations that are not available in the pitch language \"%1\"." -msgstr "" -"İstenen aktarımı uygulayamaz.\n" -"\n" -"Aktarılmış müzik, çeyrek ses değişimleri içermektedir, fakat bunlar %1 ses dili için mümkün değildir." - -#: ../python/frescobaldi_app/document.py:970 -msgid "Transpose" -msgstr "Aktarım" - -#: ../python/frescobaldi_app/document.py:977 -msgid "Please enter a start pitch and a destination pitch:" -msgstr "Lütfen bir başlangıç sesi ve aktarılacak uzaklıktaki sesi giriniz:" - -#: ../python/frescobaldi_app/document.py:981 -msgid "Transpose from:" -msgstr "Aktarın yapılacak yer:" - -#: ../python/frescobaldi_app/document.py:985 -msgid "to:" -msgstr "yön:" - -#: ../python/frescobaldi_app/download.py:54 -msgid "Install" -msgstr "Yükle" - -#: ../python/frescobaldi_app/download.py:56 -msgid "Download LilyPond" -msgstr "LilyPond'u İndir" - -#: ../python/frescobaldi_app/download.py:60 -msgid "With this tool you can download packaged binary releases of LilyPond for your operating system." -msgstr "Bu araç ile işletim sisteminiz için LilyPond'un ikili sürümlerini indirebilirsiniz." - -#: ../python/frescobaldi_app/download.py:68 -msgid "Select the LilyPond version you want to download." -msgstr "İndirmek istediğiniz LilyPond sürümünü seçiniz." - -#: ../python/frescobaldi_app/download.py:69 -#: ../python/frescobaldi_app/scorewiz/__init__.py:450 -msgid "Version:" -msgstr "Sürüm:" - -#: ../python/frescobaldi_app/download.py:79 -msgid "" -"Select a writable directory you want to install LilyPond to.\n" -"(A version-numbered directory will be created in this directory.)" -msgstr "" -"LilyPond'u kuracağınız yazılabilir dizini seçiniz.\n" -"(Bu dizinde sürüm-numarası ile numaralandırılmış bir dizin oluşturulacaktır.)" - -#: ../python/frescobaldi_app/download.py:81 -msgid "Install into:" -msgstr "Buraya kur:" - -#: ../python/frescobaldi_app/download.py:92 -msgid "Details" -msgstr "Ayrıntılar" - -#: ../python/frescobaldi_app/download.py:100 -msgid "The website where LilyPond binaries can be downloaded." -msgstr "LilyPond ikili sürümlerinin indirilebileceği web sayfası." - -#: ../python/frescobaldi_app/download.py:104 -msgid "Download from:" -msgstr "Buradan indir:" - -#: ../python/frescobaldi_app/download.py:121 -msgid "Machine type:" -msgstr "Makine türü:" - -#: ../python/frescobaldi_app/download.py:128 -msgid "" -"This is the URL to the package that will be downloaded and installed.\n" -"You can also browse to other places to select a LilyPond package." -msgstr "" -"Bu URL paketin indirilip kurulabileceği adrestir.\n" -"Bir LilyPond paketi seçmek için diğer yerlere de göz atabilirsiniz." - -#: ../python/frescobaldi_app/download.py:131 -msgid "Package Url:" -msgstr "Paket Url adresi:" - -#: ../python/frescobaldi_app/download.py:162 -msgid "Downloading directory listing..." -msgstr "Dizin listelemesini indiriyor..." - -#: ../python/frescobaldi_app/download.py:172 -msgid "No packages found. You can browse to a package manually." -msgstr "Paket bulunamadı. Pakete el ile göz atabilirsiniz." - -#: ../python/frescobaldi_app/download.py:202 -msgid "Latest Development Version (%1)" -msgstr "En Güncel Geliştirme Sürümü (%1)" - -#: ../python/frescobaldi_app/download.py:207 -msgid "Latest Stable Version (%1)" -msgstr "En Son Kararlı Sürüm (%1)" - -#: ../python/frescobaldi_app/download.py:241 -msgid "Downloading %1..." -msgstr "İndiriliyor %1..." - -#: ../python/frescobaldi_app/download.py:254 -msgid "Download cancelled." -msgstr "İndirmekten vazgeçildi." - -#: ../python/frescobaldi_app/download.py:263 -msgid "Download failed: %1" -msgstr "İndirme başarısız:%1" - -#: ../python/frescobaldi_app/download.py:281 -msgid "" -"LilyPond %1 seems already to be installed in %2.\n" -"\n" -"Do you want to use it or to remove and re-install?" -msgstr "" -"LilyPond %1 zaten şurada kurulmuş gözüküyor %2.\n" -"\n" -"Bunu kullanmak istiyor musunuz? Ya da kaldırıp yeniden mi kurmak istiyorsunuz?" - -#: ../python/frescobaldi_app/download.py:284 -msgid "Use existing LilyPond" -msgstr "Eski LilyPond'u Kullan" - -#: ../python/frescobaldi_app/download.py:285 -msgid "Remove and re-install" -msgstr "Kaldır ve yeniden kur" - -#: ../python/frescobaldi_app/download.py:297 -msgid "Unpacking %1..." -msgstr "Paket Çıkarılıyor %1..." - -#: ../python/frescobaldi_app/download.py:314 -msgid "Unpacking finished." -msgstr "Paket çıkarma işlemi bitti." - -#: ../python/frescobaldi_app/download.py:318 -#: ../python/frescobaldi_app/download.py:326 -msgid "Unpacking failed." -msgstr "Paketi çıkarma başarısız." - -#: ../python/frescobaldi_app/download.py:319 -#: ../python/frescobaldi_app/download.py:327 -msgid "" -"An error occurred:\n" -"\n" -"%1" -msgstr "" -"Bilinmeyen bir hata meydana geldi:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/expand.py:149 -#: ../python/frescobaldi_app/mainapp.py:938 -msgid "Expansion Manager" -msgstr "Genişleme Düzenleyicisi" - -#: ../python/frescobaldi_app/expand.py:161 -#: ../python/frescobaldi_app/lilydoc.py:127 -msgid "Search..." -msgstr "Ara..." - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Name" -msgstr "İsim" - -#: ../python/frescobaldi_app/expand.py:170 -#: ../python/frescobaldi_app/rumor.py:505 -msgid "Description" -msgstr "Tanım" - -#: ../python/frescobaldi_app/expand.py:170 -msgid "Shortcut" -msgstr "Kısayol" - -#: ../python/frescobaldi_app/expand.py:193 -msgid "" -"This is the list of defined expansions.\n" -"\n" -"Click on a row to see or change the associated text. Doubleclick a shortcut or its description to change it. You can also press F2 to edit the current shortcut.\n" -"\n" -"Use the buttons below to add or remove expansions.\n" -"\n" -"There are two ways to use the expansion: either type the shortcut in the text and then call the Expand function, or just call the Expand function (default shortcut: Ctrl+.), choose the expansion from the list and press Enter or click Ok." -msgstr "" -"Tanımlı genişlemelerin listesi.\n" -"\n" -"İlgili metni görmek veya değiştirmek için sıradaki öğeye tıklayınız. Kısayolun tanımını değiştirmek için ona çift tıklayınız. O kısayolu düzenlemek için ayrıca F2 tuşuna da basabilirsiniz.\n" -"\n" -"Genişlemeleri eklemek veya çıkarmak için aşağıdaki düğmeleri kullanınız.\n" -"\n" -"Genişlemeyi kullanmanın iki yolu vardır: ya metindeki kısayolu yazını ve ardından Genişlet işlevini çağırın, ya da sadece Genişlet işlevini çağırın (öntanımlı kısayol: Ctrl+.), listeden genişleme özelliğini seçip Enter veya OK tuşuna basın" - -#: ../python/frescobaldi_app/expand.py:212 -msgid "This is the text associated with the selected shortcut. Some characters have special meaning:" -msgstr "Bu, seçili kısayola atanmış metindir. Bazı karakterlerin özel anlamı vardır:" - -#: ../python/frescobaldi_app/expand.py:214 -msgid "Place the cursor on this spot." -msgstr "İmleçi bu unsura yerleştirin." - -#: ../python/frescobaldi_app/expand.py:215 -msgid "Translate the following pitch." -msgstr "Gelen sesi çevirin." - -#: ../python/frescobaldi_app/expand.py:263 -msgid "New Item" -msgstr "Yeni Öğe" - -#: ../python/frescobaldi_app/expand.py:343 -msgid "" -"Another expansion already uses this name.\n" -"\n" -"Please use a different name." -msgstr "" -"Başka genişleme aynı adı kullanıyor.\n" -"\n" -"Lütgen başka bir ad kullanın." - -#: ../python/frescobaldi_app/expand.py:349 -msgid "Please only use letters, numbers and the underscore character in the expansion name." -msgstr "Genişleme adında lütfen sadece harf, rakkkam ve küçük harf kullanın." - -#: ../python/frescobaldi_app/expand.py:374 -msgid "Please don't leave the description empty." -msgstr "Lütfen tanımı boş bırakmayın." - -#: ../python/frescobaldi_app/hyphen.py:119 -msgid "" -"Could not find any hyphenation dictionaries.\n" -"\n" -"Please install a package containing some and/or or configure the search path to find them in the Frescobaldi settings under \"Paths.\"" -msgstr "" -"Tireleme sözlüğü bulunamıyor.\n" -"\n" -"\"Yollar.\" altındaki Frescobaldi ayarlarında bulmak için arama yolunu ayarlayın ve/veya bunu sağlayacak bir paket yükleyin." - -#: ../python/frescobaldi_app/hyphen.py:132 -#: ../python/frescobaldi_app/mainapp.py:747 -msgid "Hyphenate Lyrics Text" -msgstr "Şarkı Sözleri Metnini Tirele" - -#: ../python/frescobaldi_app/hyphen.py:136 -msgid "Please select a language:" -msgstr "Lütfen bir dil seçiniz:" - -#: ../python/frescobaldi_app/kmid.py:68 -msgid "Pause" -msgstr "Durakla" - -#: ../python/frescobaldi_app/kmid.py:85 -msgid "Volume" -msgstr "Ses Yüksekliği" - -#: ../python/frescobaldi_app/lilydoc.py:101 -msgid "Home" -msgstr "Ana Sayfa" - -#: ../python/frescobaldi_app/lilydoc.py:102 -msgid "Larger text" -msgstr "Daha büyük metin" - -#: ../python/frescobaldi_app/lilydoc.py:103 -msgid "Smaller text" -msgstr "Daha küçük metin" - -#: ../python/frescobaldi_app/lilydoc.py:112 -msgid "First Page" -msgstr "İlk Sayfa" - -#: ../python/frescobaldi_app/lilydoc.py:113 -msgid "Previous" -msgstr "Önceki" - -#: ../python/frescobaldi_app/lilydoc.py:114 -msgid "Up one level" -msgstr "Bir seviye yukarı" - -#: ../python/frescobaldi_app/lilydoc.py:115 -msgid "Next" -msgstr "Sonraki" - -#: ../python/frescobaldi_app/lilydoc.py:116 -msgid "Table of contents" -msgstr "İçindekiler" - -#: ../python/frescobaldi_app/lilydoc.py:117 -msgid "Index" -msgstr "İçindekiler" - -#: ../python/frescobaldi_app/lilydoc.py:312 -msgid "Copy &Link" -msgstr "Kopyala &Bağlantı" - -#: ../python/frescobaldi_app/lilydoc.py:315 -msgid "Open Link in &New Window" -msgstr "Bağlantıyı Aç &Yeni Pencerede" - -#: ../python/frescobaldi_app/lilydoc.py:321 -#: ../python/frescobaldi_app/runlily.py:467 -msgid "&Copy" -msgstr "&Kopyala" - -#: ../python/frescobaldi_app/lilydoc.py:324 -msgid "Open Document in &New Window" -msgstr "Belgeyi Aç &Yeni Pencerede" - -#: ../python/frescobaldi_app/lilydoc.py:723 -msgid "Loading..." -msgstr "Yüklüyor..." - -#: ../python/frescobaldi_app/lilydoc.py:730 -msgid "Not available" -msgstr "Uygun değil" - -#: ../python/frescobaldi_app/lilydoc.py:786 -msgid "Notation Reference" -msgstr "Notasyon Referansı" - -#: ../python/frescobaldi_app/lilydoc.py:806 -msgid "LilyPond Command Index" -msgstr "LilyPond Komut Listesi" - -#: ../python/frescobaldi_app/lilydoc.py:829 -msgid "Learning Manual" -msgstr "Öğrenme El Kitabı" - -#: ../python/frescobaldi_app/lilydoc.py:849 -msgid "Learning Manual Index" -msgstr "Öğrenme El Kitabı İndeksi" - -#: ../python/frescobaldi_app/lilydoc.py:876 -#: ../python/frescobaldi_app/lilydoc.py:899 -#: ../python/frescobaldi_app/lilydoc.py:925 -msgid "Internals Reference" -msgstr "Dahili Başvuru" - -#: ../python/frescobaldi_app/lilydoc.py:877 -msgid "The %1 context" -msgstr "%1 İçindekiler" - -#: ../python/frescobaldi_app/lilydoc.py:900 -msgid "The %1 layout object" -msgstr "%1 yerleşim nesnesi" - -#: ../python/frescobaldi_app/lilydoc.py:950 -msgid "LilyPond &Help" -msgstr "LilyPond &Yardım" - -#: ../python/frescobaldi_app/lqi.py:57 -msgid "Direction:" -msgstr "Yön:" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Up" -msgstr "Yukarı" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Neutral" -msgstr "Natürel" - -#: ../python/frescobaldi_app/lqi.py:59 -msgid "Down" -msgstr "Aşağı" - -#: ../python/frescobaldi_app/lqi.py:65 -msgid "Where to add articulations et cetera: above or below the staff or in the default position." -msgstr "Artikülasyon ve benzeri işaretler nereye yerleştirilecek: dizeğin altına veya üstüne mi yoksa öntanımlı yerine mi." - -#: ../python/frescobaldi_app/lqi.py:176 -msgid "Configure Keyboard Shortcut (%1)" -msgstr "Klavye Kısayollarını Yapılandır (%1)" - -#: ../python/frescobaldi_app/lqi.py:198 -msgid "Articulations" -msgstr "Artükülasyonlar" - -#: ../python/frescobaldi_app/lqi.py:199 -msgid "Different kinds of articulations and other signs." -msgstr "Farklı türde artikülasyonlar ve diğer işaretler." - -#: ../python/frescobaldi_app/lqi.py:208 -msgid "Click an articulation sign to add it to your document." -msgstr "Belgenize eklemek için bir artikülasyon işaretine tıklayınız." - -#: ../python/frescobaldi_app/lqi.py:209 -msgid "If you select some music first, the articulation will be added to all notes in the selection." -msgstr "Eğer önce notaları seçerseniz, artikülasyon seçilen tüm notalara uygulanacaktır." - -#: ../python/frescobaldi_app/lqi.py:212 -msgid "Allow shorthands" -msgstr "Kısaltmalara izin ver" - -#: ../python/frescobaldi_app/lqi.py:215 -msgid "Use short notation for some articulations like staccato." -msgstr "Staccato gibi artikülasyonlar için kısa notasyonu kullan." - -#: ../python/frescobaldi_app/lqi.py:257 -msgid "Dynamics" -msgstr "Gürlükler" - -#: ../python/frescobaldi_app/lqi.py:258 -msgid "Dynamic symbols." -msgstr "Gürlük sembolleri." - -#: ../python/frescobaldi_app/lqi.py:267 -msgid "Click a dynamic sign to add it to your document." -msgstr "Belgenize eklemek için bir gürlük işaretine tıklayınız." - -#: ../python/frescobaldi_app/lqi.py:268 -msgid "If you select some music first, dynamic spanners will be added the selected fragment." -msgstr "Eğer önce notaları seçerseniz, gürlük işaretleri seçilen tüm notalara uygulanacaktır." - -#: ../python/frescobaldi_app/lqi.py:270 -msgid "If you have selected some music and you click a sign after a spanner, the sign will terminate the spanner." -msgstr "Müziğin bir kısmını seçip sembol sonrasındaki bir işarete tıklarsanız, bu işaret sembolü sonlandıracaktır." - -#: ../python/frescobaldi_app/lqi.py:281 -#: ../python/frescobaldi_app/lqi.py:317 -msgid "Dynamic sign %1" -msgstr "Gürlük işareti %1" - -#: ../python/frescobaldi_app/lqi.py:285 -#: ../python/frescobaldi_app/lqi.py:403 -#: ../python/frescobaldi_app/lqi.py:411 -msgid "Spanners" -msgstr "Çeşitli Semboller" - -#: ../python/frescobaldi_app/lqi.py:292 -msgid "Hairpin crescendo" -msgstr "Crescendo kıvrımı" - -#: ../python/frescobaldi_app/lqi.py:293 -msgid "Crescendo" -msgstr "Crescendo" - -#: ../python/frescobaldi_app/lqi.py:294 -msgid "Hairpin diminuendo" -msgstr "Diminuendo kıvrımı" - -#: ../python/frescobaldi_app/lqi.py:295 -msgid "Diminuendo" -msgstr "Diminuendo" - -#: ../python/frescobaldi_app/lqi.py:296 -msgid "Decrescendo" -msgstr "Decrescendo" - -#: ../python/frescobaldi_app/lqi.py:325 -#: ../python/frescobaldi_app/lqi.py:332 -msgid "Bar Lines" -msgstr "Ölçü Çizgileri" - -#: ../python/frescobaldi_app/lqi.py:326 -msgid "Bar lines, breathing signs, etcetera." -msgstr "Ölçü çizgileri, nefes işaretleri, vesaire." - -#: ../python/frescobaldi_app/lqi.py:339 -msgid "Double bar line" -msgstr "Çift ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:340 -msgid "Ending bar line" -msgstr "Bitiş ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:341 -msgid "Dotted bar line" -msgstr "Noktalı ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:342 -msgid "Dashed bar line" -msgstr "Kesik ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:343 -msgid "Invisible bar line" -msgstr "Görünmeyen ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:344 -msgid "Repeat start" -msgstr "Tekrar başla" - -#: ../python/frescobaldi_app/lqi.py:345 -msgid "Repeat both" -msgstr "Her ikisini de tekrarla" - -#: ../python/frescobaldi_app/lqi.py:346 -msgid "Repeat end" -msgstr "Tekrar sonu" - -#: ../python/frescobaldi_app/lqi.py:347 -msgid "Repeat both (old)" -msgstr "Her ikisini de tekrarla (eski)" - -#: ../python/frescobaldi_app/lqi.py:348 -msgid "Repeat both (classic)" -msgstr "Her ikisini de tekrarla (klasik)" - -#: ../python/frescobaldi_app/lqi.py:349 -msgid "Tick bar line" -msgstr "Tik ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:350 -msgid "Single bar line" -msgstr "Tek ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:351 -msgid "Small-Wide-Small bar line" -msgstr "Küçük-Geniş-Küçük ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:352 -msgid "Wide-Small bar line" -msgstr "Geniş-Küçük ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:353 -msgid "Double wide bar line" -msgstr "Çift geniş ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:354 -msgid "Segno bar line" -msgstr "Segno ölçü çizgisi" - -#: ../python/frescobaldi_app/lqi.py:362 -msgid "Breathing Signs" -msgstr "Nefes İşaretleri" - -#: ../python/frescobaldi_app/lqi.py:369 -msgid "Default Breathing Sign" -msgstr "Öntanımlı Nefes İşaretleri" - -#: ../python/frescobaldi_app/lqi.py:370 -msgid "Straight Breathing Sign" -msgstr "Kesin Nefes İşareti" - -#: ../python/frescobaldi_app/lqi.py:371 -msgid "Curved Caesura" -msgstr "Kıvrımlı Nefes Keskisi" - -#: ../python/frescobaldi_app/lqi.py:372 -msgid "Straight Caesura" -msgstr "Kesin Nefes İşareti" - -#: ../python/frescobaldi_app/lqi.py:404 -msgid "Slurs, spanners, etcetera." -msgstr "Bağlar, çeşitli semboller, vesaire." - -#: ../python/frescobaldi_app/lqi.py:413 -msgid "These spanners need a music fragment to be selected." -msgstr "Bu sembolleri kullanmak için bir müzik cümlesinin seçilmiş olması gereklidir." - -#: ../python/frescobaldi_app/lqi.py:421 -msgid "Slur" -msgstr "Deyim Bağı" - -#: ../python/frescobaldi_app/lqi.py:422 -msgid "Phrasing Slur" -msgstr "Cümle Bağı" - -#: ../python/frescobaldi_app/lqi.py:423 -msgid "Beam" -msgstr "Kuyruk Birleştiricisi" - -#: ../python/frescobaldi_app/lqi.py:432 -msgid "Arpeggios" -msgstr "Arpejler" - -#: ../python/frescobaldi_app/lqi.py:434 -msgid "Arpeggios are used with chords with multiple notes." -msgstr "Arpejler birden fazla nota içeren akorlarla birlikte kullanılır." - -#: ../python/frescobaldi_app/lqi.py:442 -msgid "Arpeggio" -msgstr "Arpej" - -#: ../python/frescobaldi_app/lqi.py:443 -msgid "Arpeggio with Up Arrow" -msgstr "Üst Ok işaretli Arpej" - -#: ../python/frescobaldi_app/lqi.py:444 -msgid "Arpeggio with Down Arrow" -msgstr "Alt Ok işaretli Arpej" - -#: ../python/frescobaldi_app/lqi.py:445 -msgid "Bracket Arpeggio" -msgstr "Düz Arpej" - -#: ../python/frescobaldi_app/lqi.py:446 -msgid "Parenthesis Arpeggio" -msgstr "Arpej Parantezi" - -#: ../python/frescobaldi_app/lqi.py:454 -msgid "Glissandos" -msgstr "Kaydırmalar" - -#: ../python/frescobaldi_app/lqi.py:456 -msgid "Glissandos are attached to a note and automatically extend to the next note." -msgstr "Kaydırmalar bir notadan başlar ve bir sonraki notaya kadar devam eder." - -#: ../python/frescobaldi_app/lqi.py:465 -msgid "Glissando" -msgstr "Kaydırma" - -#: ../python/frescobaldi_app/lqi.py:466 -msgid "Dashed Glissando" -msgstr "Kesik Çizgili Kaydırma" - -#: ../python/frescobaldi_app/lqi.py:467 -msgid "Dotted Glissando" -msgstr "Noktalı İşaretle Kaydırma" - -#: ../python/frescobaldi_app/lqi.py:468 -msgid "Zigzag Glissando" -msgstr "Zigzaglı Kaydırma" - -#: ../python/frescobaldi_app/lqi.py:469 -msgid "Trill Glissando" -msgstr "Trill ile Kaydırma" - -#: ../python/frescobaldi_app/mainapp.py:56 -msgid "LilyPond files" -msgstr "LilyPond dosyaları" - -#: ../python/frescobaldi_app/mainapp.py:170 -msgid "Print Source..." -msgstr "Kaynağı Yazdır..." - -#: ../python/frescobaldi_app/mainapp.py:461 -#: ../python/frescobaldi_app/sessions.py:38 -#: ../python/frescobaldi_app/settings.py:833 -#: ../python/frescobaldi_app/scorewiz/__init__.py:347 -msgid "LilyPond" -msgstr "LilyPond" - -#: ../python/frescobaldi_app/mainapp.py:472 -msgid "Setup New Score..." -msgstr "Yeni Bir Esere Başla..." - -#: ../python/frescobaldi_app/mainapp.py:478 -msgid "Run LilyPond (preview)" -msgstr "LilyPond'u çalıştır (önizleme)" - -#: ../python/frescobaldi_app/mainapp.py:483 -msgid "Run LilyPond (publish)" -msgstr "LilyPond'u çalıştır (yayınla)" - -#: ../python/frescobaldi_app/mainapp.py:488 -msgid "Run LilyPond (custom)..." -msgstr "LilyPond'u çalıştır (bilindik yöntemle)..." - -#: ../python/frescobaldi_app/mainapp.py:493 -msgid "Interrupt LilyPond Job" -msgstr "Lilypond Görevini Durdur" - -#: ../python/frescobaldi_app/mainapp.py:502 -msgid "Print Music..." -msgstr "Müziği Yazdır..." - -#: ../python/frescobaldi_app/mainapp.py:508 -msgid "Email Documents..." -msgstr "Belgeleri E-posta İle Gönder..." - -#: ../python/frescobaldi_app/mainapp.py:516 -msgid "Cut selection and assign it to a LilyPond variable." -msgstr "Seçimi kesin ve onu LilyPond değişkeni olarak atayın." - -#: ../python/frescobaldi_app/mainapp.py:520 -msgid "Repeat last note or chord" -msgstr "Son notayı veya akoru tekrarlayın." - -#: ../python/frescobaldi_app/mainapp.py:521 -msgid "Repeat the last music expression (note or chord)." -msgstr "Son müzik ifadesini tekrarlayın (nota veya akor)." - -#: ../python/frescobaldi_app/mainapp.py:525 -msgid "Insert or Manage Expansions..." -msgstr "Genişlemeleri Gir veya Düzenle..." - -#: ../python/frescobaldi_app/mainapp.py:526 -msgid "Expand last word or open the expansions dialog." -msgstr "Son kelimeyi genişlet veya genişletmeler penceresini aç." - -#: ../python/frescobaldi_app/mainapp.py:530 -msgid "Special Characters..." -msgstr "Özel Karakterler..." - -#: ../python/frescobaldi_app/mainapp.py:531 -msgid "Insert special characters." -msgstr "Özel karakterler ekle." - -#: ../python/frescobaldi_app/mainapp.py:536 -msgid "Add to Expansions" -msgstr "Genişlemelere Ekle" - -#: ../python/frescobaldi_app/mainapp.py:540 -msgid "Next blank line" -msgstr "Sonraki boş satır" - -#: ../python/frescobaldi_app/mainapp.py:541 -msgid "Go to the next blank line." -msgstr "Bir sonraki boş satıra geç." - -#: ../python/frescobaldi_app/mainapp.py:551 -msgid "Previous blank line" -msgstr "Önceki boş satır" - -#: ../python/frescobaldi_app/mainapp.py:552 -msgid "Go to the previous blank line." -msgstr "Önceki boş satıra git." - -#: ../python/frescobaldi_app/mainapp.py:561 -msgid "Select to next blank line" -msgstr "Bir sonraki boş satırı seç" - -#: ../python/frescobaldi_app/mainapp.py:563 -msgid "Selects text from the current position down to and including the next blank line." -msgstr "Metni şu anki konumundan aşağıya kadar seçiniz ve bu seçiminiz bir sonraki boş satırı da içersin." - -#: ../python/frescobaldi_app/mainapp.py:589 -msgid "Select to previous blank line" -msgstr "Önceki boş satırı seç" - -#: ../python/frescobaldi_app/mainapp.py:591 -msgid "Selects text from the current position up to right after the previous blank line." -msgstr "Metni şu anki konumundan yukarı ve sağa doğru seçiniz ve seçime bir önceki boş satırdan başlayın." - -#: ../python/frescobaldi_app/mainapp.py:616 -msgid "Move selection to next blank line" -msgstr "Seçimi bir sonraki boş satıra taşı" - -#: ../python/frescobaldi_app/mainapp.py:618 -msgid "Moves selected block to next blank line." -msgstr "Seçili bloğu bir sonraki boş satıra taşır." - -#: ../python/frescobaldi_app/mainapp.py:622 -msgid "Move selection to previous blank line" -msgstr "Seçimi bir önceki boş satıra taşı" - -#: ../python/frescobaldi_app/mainapp.py:624 -msgid "Moves selected block to previous blank line." -msgstr "Seçiliği bloğu bir önceki boş satıra taşır." - -#: ../python/frescobaldi_app/mainapp.py:629 -msgid "Play/View" -msgstr "Çal/Görüntüle" - -#: ../python/frescobaldi_app/mainapp.py:646 -msgid "Change the LilyPond language used for pitch names in this document or in the selection." -msgstr "Bu belgedeki veya seçimde ses adları için kullanılan LilyPond dilini değiştir." - -#: ../python/frescobaldi_app/mainapp.py:653 -msgid "Convert Relative to &Absolute" -msgstr "Relativ'i &Absolüt'e dönüştür" - -#: ../python/frescobaldi_app/mainapp.py:654 -msgid "Converts the notes in the document or selection from relative to absolute pitch." -msgstr "Belgedeki veya seçimdeki notaları relativden absölüt ses noktasına dönüştürür." - -#: ../python/frescobaldi_app/mainapp.py:659 -msgid "Convert Absolute to &Relative" -msgstr "Abolüt'ü Relativ'e Dönüştür" - -#: ../python/frescobaldi_app/mainapp.py:660 -msgid "Converts the notes in the document or selection from absolute to relative pitch." -msgstr "Belgedeki veya seçilen notaları absolüt'ten relativ'e dönüştürür." - -#: ../python/frescobaldi_app/mainapp.py:665 -msgid "Transpose..." -msgstr "Aktar..." - -#: ../python/frescobaldi_app/mainapp.py:666 -msgid "Transposes all notes in the document or selection." -msgstr "Belgede veya seçimdeki tüm notaların aktarımını yapar." - -#: ../python/frescobaldi_app/mainapp.py:671 -msgid "Double durations" -msgstr "Katlı süreler" - -#: ../python/frescobaldi_app/mainapp.py:672 -msgid "Double all the durations in the selection." -msgstr "Seçilen tüm süreleri katlı hale getir." - -#: ../python/frescobaldi_app/mainapp.py:677 -msgid "Halve durations" -msgstr "Süreleri yarı değerine indir" - -#: ../python/frescobaldi_app/mainapp.py:678 -msgid "Halve all the durations in the selection." -msgstr "Seçilen tüm süreleri yarıya indir." - -#: ../python/frescobaldi_app/mainapp.py:683 -msgid "Dot durations" -msgstr "Noktalı süreler" - -#: ../python/frescobaldi_app/mainapp.py:684 -msgid "Add a dot to all the durations in the selection." -msgstr "Seçilen tüm sürelere nokta ekle." - -#: ../python/frescobaldi_app/mainapp.py:689 -msgid "Undot durations" -msgstr "Sürelerdeki noktaları kaldır" - -#: ../python/frescobaldi_app/mainapp.py:690 -msgid "Remove one dot from all the durations in the selection." -msgstr "Seçilen tüm notalardan bir nokta kaldır." - -#: ../python/frescobaldi_app/mainapp.py:695 -msgid "Remove scaling" -msgstr "Ölçeklemeyi kaldır" - -#: ../python/frescobaldi_app/mainapp.py:696 -msgid "Remove all scaling (*n/m) from the durations in the selection." -msgstr "Seçilen tüm sürelerdeki ölçeklemeyi (*n/m) kaldır." - -#: ../python/frescobaldi_app/mainapp.py:701 -msgid "Remove durations" -msgstr "Süreleri kaldır" - -#: ../python/frescobaldi_app/mainapp.py:702 -msgid "Remove all durations from the selection." -msgstr "Seçilen tüm süreleri kaldır." - -#: ../python/frescobaldi_app/mainapp.py:707 -msgid "Make implicit" -msgstr "Görünmez yap" - -#: ../python/frescobaldi_app/mainapp.py:708 -msgid "Make durations implicit (remove repeated durations)." -msgstr "Süreleri görünmez yap (tekrarlanan süreleri kaldır)." - -#: ../python/frescobaldi_app/mainapp.py:713 -msgid "Make implicit (per line)" -msgstr "Görünmez yap (satır başına her birini)" - -#: ../python/frescobaldi_app/mainapp.py:714 -msgid "Make durations implicit (remove repeated durations), except for the first duration in a line." -msgstr "Süreleri görünmez yap (tekrarlanan süreleri kaldır), satırdaki ilk süre hariç." - -#: ../python/frescobaldi_app/mainapp.py:720 -msgid "Make explicit" -msgstr "Görünmez yap" - -#: ../python/frescobaldi_app/mainapp.py:721 -msgid "Make durations explicit (add duration to every note, even if it is the same as the preceding note)." -msgstr "Süreleri görünmez yap (bir önceki notanın süresi aynı olsa bile, her notaya süre ekle)" - -#: ../python/frescobaldi_app/mainapp.py:727 -msgid "Apply rhythm..." -msgstr "Ritm uygula..." - -#: ../python/frescobaldi_app/mainapp.py:728 -msgid "Apply an entered rhythm to the selected music." -msgstr "Seçilen müziğe bir ritm girişi uygulayınız." - -#: ../python/frescobaldi_app/mainapp.py:732 -msgid "Copy rhythm" -msgstr "Ritmi kopyala" - -#: ../python/frescobaldi_app/mainapp.py:733 -msgid "Copy the rhythm of the selected music." -msgstr "Seçilen müziğe ritmi kopyalayınız." - -#: ../python/frescobaldi_app/mainapp.py:739 -msgid "Paste rhythm" -msgstr "Bir ritm yapıştırınız" - -#: ../python/frescobaldi_app/mainapp.py:740 -msgid "Paste a rhythm to the selected music." -msgstr "Seçilen müziğe bir ritm girişi yapıştırınız." - -#: ../python/frescobaldi_app/mainapp.py:753 -msgid "Remove hyphenation" -msgstr "Tirelemeyi kaldır" - -#: ../python/frescobaldi_app/mainapp.py:757 -msgid "Copy Lyrics with hyphenation removed" -msgstr "Şarkı Sözlerini tirelemeler kaldırılmış şekilde kopyalayın" - -#: ../python/frescobaldi_app/mainapp.py:763 -msgid "Single Quote" -msgstr "Tek Tırnak" - -#: ../python/frescobaldi_app/mainapp.py:767 -msgid "Double Quote" -msgstr "Çift Tırnak" - -#: ../python/frescobaldi_app/mainapp.py:771 -msgid "Align" -msgstr "Yasla" - -#: ../python/frescobaldi_app/mainapp.py:775 -msgid "Insert LilyPond version" -msgstr "LilyPond Sürümünü ekle" - -#: ../python/frescobaldi_app/mainapp.py:780 -msgid "Update with convert-ly" -msgstr "convert-ly ile Güncelle" - -#: ../python/frescobaldi_app/mainapp.py:785 -msgid "Open Current Folder" -msgstr "Yürürlükteki Dosyayı Aç" - -#: ../python/frescobaldi_app/mainapp.py:796 -msgid "Repeat selected music" -msgstr "Seçilen müziği tekrarla" - -#: ../python/frescobaldi_app/mainapp.py:802 -msgid "Insert pair of braces" -msgstr "Bir çift yan kaplama çizgisi ekle" - -#: ../python/frescobaldi_app/mainapp.py:839 -msgid "" -"Your document has been modified and needs to be saved before LilyPond can be started.\n" -"\n" -"Save the document now?" -msgstr "" -"Belgeniz değiştirilmiş ve kaydedilmesi gerekiyor, aksi taktirde LilyPond çalıştırılamayacaktır.\n" -"\n" -"Belge şimdi kaydedilsin mi?" - -#: ../python/frescobaldi_app/mainapp.py:870 -msgid "There is already a LilyPond job running for this document." -msgstr "Bu belge için yürütülmekte olan bir LilyPond görevi bulunmaktadır." - -#: ../python/frescobaldi_app/mainapp.py:871 -msgid "Can't process document" -msgstr "Belgeyi işleyemiyor" - -#: ../python/frescobaldi_app/mainapp.py:880 -msgid "Continue anyway?" -msgstr "Yine de devam et?" - -#: ../python/frescobaldi_app/mainapp.py:884 -msgid "You want to run LilyPond in preview mode (with point and click enabled), but your document contains a command to turn point and click off." -msgstr "LilyPond'u önizleme modunda çalıştırmak istiyor olabilirsiniz (seç ve tıkla etkinleştirilmiş olarak), fakat belgeniz seç ve tıkla özelliğinin kapatılmasını gerektiren bir komut içeriyor." - -#: ../python/frescobaldi_app/mainapp.py:888 -msgid "You want to run LilyPond in publish mode (with point and click disabled), but your document contains a command to turn point and click on." -msgstr "LilyPond'u yayınlama modunda çalıştırmak istiyor olabilirsiniz (seç ve tıkla devre dışı bırakılmış olarak), fakat belgeniz seç ve tıkla özelliğinin açılmasını gerektiren bir komut içeriyor." - -#: ../python/frescobaldi_app/mainapp.py:914 -msgid "Abort the running LilyPond process" -msgstr "Sürmekte olan LilyPond süreçlerini durdurunuz." - -#: ../python/frescobaldi_app/mainapp.py:917 -msgid "Run LilyPond in preview mode (Shift-click for custom dialog)" -msgstr "LilyPond'u önizleme kipinde çalıştır (Shift-klik kısayolu ile)" - -#: ../python/frescobaldi_app/mainapp.py:940 -#: ../python/frescobaldi_app/mainapp.py:1214 -msgid "Quick Insert" -msgstr "Hızılı Ekle" - -#: ../python/frescobaldi_app/mainapp.py:952 -msgid "LilyPond has successfully compiled %1." -msgstr "LilyPond başarıyla derledi %1." - -#: ../python/frescobaldi_app/mainapp.py:956 -msgid "LilyPond exited with an error compiling %1." -msgstr "LilyPond derlemesi sırasında bir hata oluştu %1." - -#: ../python/frescobaldi_app/mainapp.py:964 -msgid "Apply Rhythm" -msgstr "Ritm uygula" - -#: ../python/frescobaldi_app/mainapp.py:972 -msgid "Enter a rhythm:" -msgstr "Bir ritm giriniz:" - -#: ../python/frescobaldi_app/mainapp.py:975 -msgid "Enter a rhythm using space separated duration values (e.g. 8. 16 8 4 8)" -msgstr "Süre değerlerine göre boşluk bırakarak bir ritm girin (örn. 8. 16 8 4 8)" - -#: ../python/frescobaldi_app/mainapp.py:1002 -msgid "Terminal" -msgstr "Konsol" - -#: ../python/frescobaldi_app/mainapp.py:1033 -msgid "S&ynchronize Terminal with Current Document" -msgstr "Yürürlükteki& Belge ile Konsolu Senkronize Ediniz." - -#: ../python/frescobaldi_app/mainapp.py:1053 -#: ../python/frescobaldi_app/settings.py:493 -msgid "MIDI Player" -msgstr "MIDI Çalıcı" - -#: ../python/frescobaldi_app/mainapp.py:1063 -msgid "" -"Could not load the KMid part.\n" -"Please install KMid 2.4.0 or higher." -msgstr "" -"KMid partisi yüklenemedi.\n" -"Lütfen KMid 2.4.0 veya daha yüksek sürümünü kurunuz." - -#: ../python/frescobaldi_app/mainapp.py:1075 -#: ../python/frescobaldi_app/runlily.py:742 -msgid "PDF Preview" -msgstr "PDF Önizleme" - -#: ../python/frescobaldi_app/mainapp.py:1144 -msgid "Show PDF Navigation Panel" -msgstr "PDF Görüntülenme Çubuğunu Göster" - -#: ../python/frescobaldi_app/mainapp.py:1145 -msgid "Show PDF minipager" -msgstr "PDF göstericiyi görüntüle" - -#: ../python/frescobaldi_app/mainapp.py:1146 -msgid "Configure Okular..." -msgstr "Okular uygulamasını yapılandır..." - -#: ../python/frescobaldi_app/mainapp.py:1149 -msgid "S&ynchronize Preview with Current Document" -msgstr "Yürürlükteki& Belge ile Önizlemeyi Senkronize Ediniz." - -#: ../python/frescobaldi_app/mainapp.py:1150 -msgid "Reload" -msgstr "Yeniden Yükle" - -#: ../python/frescobaldi_app/mainapp.py:1226 -#: ../python/frescobaldi_app/runlily.py:462 -msgid "LilyPond Log" -msgstr "LilyPond Günlüğü" - -#: ../python/frescobaldi_app/mainapp.py:1230 -msgid "no log" -msgstr "log kaydı yok" - -#: ../python/frescobaldi_app/mainapp.py:1281 -msgid "Only show on errors" -msgstr "Sadece hatalarda göster" - -#: ../python/frescobaldi_app/mainapp.py:1305 -msgid "Rumor" -msgstr "Rumor" - -#: ../python/frescobaldi_app/mainapp.py:1317 -#: ../python/frescobaldi_app/settings.py:525 -#: ../python/frescobaldi_app/settings.py:539 -msgid "LilyPond Documentation" -msgstr "LilyPond Belgelendirmesi" - -#: ../python/frescobaldi_app/rumor.py:73 -msgid "The meter to use. Leave 'Auto' to let Frescobaldi determine the meter from the LilyPond document." -msgstr "Kullanılacak ölçü. Frescobaldi'nin Lilypond belgesinden yola çıkarak ölçüyü belirlemesi için Otomatik ayarını olduğu gibi bırakın." - -#: ../python/frescobaldi_app/rumor.py:80 -msgid "Quantize:" -msgstr "Quantize:" - -#: ../python/frescobaldi_app/rumor.py:86 -msgid "The shortest note duration to use." -msgstr "Kullanılacak en kısa nota." - -#: ../python/frescobaldi_app/rumor.py:91 -msgid "Step" -msgstr "Adım" - -#: ../python/frescobaldi_app/rumor.py:93 -msgid "Record LilyPond input note by note, without durations." -msgstr "Lilypond girişini süreler olmadan nota nota kaydet," - -#: ../python/frescobaldi_app/rumor.py:97 -msgid "Mono" -msgstr "Mono" - -#: ../python/frescobaldi_app/rumor.py:99 -msgid "Record monophonic input, without chords." -msgstr "Akorlar olmadan tek sesli girişi kaydet." - -#: ../python/frescobaldi_app/rumor.py:108 -msgid "The number of accidentals. A negative number designates flats. Leave 'Auto' to let Frescobaldi determine the key signature from the LilyPond document." -msgstr "Arızaların sayısı. Eksi numara bemolleri nitelendirir. Frescobaldi'nin Lilypond belgesinden yola çıkarak tonu ayarlaması için Otomatik seçeneğini olduğu gibi bırakın." - -#: ../python/frescobaldi_app/rumor.py:114 -msgid "Tempo:" -msgstr "Hız:" - -#: ../python/frescobaldi_app/rumor.py:117 -msgid "Meter:" -msgstr "Ölçü:" - -#: ../python/frescobaldi_app/rumor.py:120 -msgid "Key:" -msgstr "Tonalite:" - -#: ../python/frescobaldi_app/rumor.py:132 -msgid "Configure..." -msgstr "Yapılandır..." - -#: ../python/frescobaldi_app/rumor.py:133 -msgid "Adjust more settings, like MIDI input and output." -msgstr "MIDI giriş ve çıkış gibi daha çok ayarı yapılandırın." - -#: ../python/frescobaldi_app/rumor.py:137 -msgid "Save" -msgstr "Kaydet" - -#: ../python/frescobaldi_app/rumor.py:138 -msgid "Set these settings as default." -msgstr "Bu ayarları öntanımlı olarak ayarlayın." - -#: ../python/frescobaldi_app/rumor.py:147 -msgid "Found rumor version %1." -msgstr "Rumor sürümü bulundu %1." - -#: ../python/frescobaldi_app/rumor.py:150 -msgid "Could not find Rumor: %1" -msgstr "Rumor bulunamadı: %1" - -#: ../python/frescobaldi_app/rumor.py:164 -msgid "Settings have been saved." -msgstr "Ayarlar kaydedildi." - -#: ../python/frescobaldi_app/rumor.py:315 -msgid "Record" -msgstr "Kayıt" - -#: ../python/frescobaldi_app/rumor.py:317 -msgid "Start or stop Rumor MIDI-recording." -msgstr "Rumor' MIDI kaydını başlat veya durdur." - -#: ../python/frescobaldi_app/rumor.py:333 -msgid "Rumor is recording, press ESC to stop." -msgstr "Rumor kaydediyor, durdurmak için ESC tuşuna basınız." - -#: ../python/frescobaldi_app/rumor.py:359 -msgid "Rumor stopped." -msgstr "Rumor durduruldu." - -#: ../python/frescobaldi_app/rumor.py:393 -msgid "TiMidity" -msgstr "TiMidity" - -#: ../python/frescobaldi_app/rumor.py:394 -msgid "Start or stop the TiMidity ALSA MIDI client." -msgstr "TiMidity ALSA MIDI istemcisini başlat veya durdur." - -#: ../python/frescobaldi_app/rumor.py:413 -msgid "Rumor Settings" -msgstr "Rumor Ayarları" - -#: ../python/frescobaldi_app/rumor.py:421 -msgid "OSS device %1" -msgstr "OSS aygıtı %1" - -#: ../python/frescobaldi_app/rumor.py:423 -msgid "Keyboard" -msgstr "Klavye" - -#: ../python/frescobaldi_app/rumor.py:429 -msgid "MIDI input:" -msgstr "MIDI girişi:" - -#: ../python/frescobaldi_app/rumor.py:433 -msgid "MIDI input to use. Choose 'Keyboard' if you want to play on the keyboard of your computer." -msgstr "Kullanılacak MIDI girişi. Eğer bilgisayarınızın klavyesinden çalmak istiyorsanız Klavye'yi seçin." - -#: ../python/frescobaldi_app/rumor.py:439 -msgid "MIDI output:" -msgstr "MIDI çıkışı:" - -#: ../python/frescobaldi_app/rumor.py:443 -msgid "MIDI output to use." -msgstr "Kullanılacak olan MIDI çıkışı." - -#: ../python/frescobaldi_app/rumor.py:448 -#: ../python/frescobaldi_app/scorewiz/__init__.py:528 -msgid "Language:" -msgstr "Dil:" - -#: ../python/frescobaldi_app/rumor.py:453 -msgid "The LilyPond language you want Rumor to output the pitches in." -msgstr "Rumor'un içindeki sesleri dışa aktaracağı Lilypond dili." - -#: ../python/frescobaldi_app/rumor.py:461 -msgid "Explicit durations" -msgstr "Süreleri netleştir" - -#: ../python/frescobaldi_app/rumor.py:463 -msgid "Add a duration after every note, even if it is the same as the preceding note." -msgstr "Bir öncekinin aynısı olsa bile her notadan sonra bir süre ekle." - -#: ../python/frescobaldi_app/rumor.py:468 -msgid "Absolute pitch" -msgstr "Mutlak ses" - -#: ../python/frescobaldi_app/rumor.py:470 -msgid "Use absolute pitches instead of relative." -msgstr "İlgili ses yerine mutlak sesleri kullan." - -#: ../python/frescobaldi_app/rumor.py:476 -msgid "No barlines" -msgstr "Ölçü çizgisi yok" - -#: ../python/frescobaldi_app/rumor.py:478 -msgid "Filter the barlines out of Rumor's output." -msgstr "Rumor'un çıkışından ölçü çizgisi çıktılarını filtrele." - -#: ../python/frescobaldi_app/rumor.py:482 -msgid "No dots" -msgstr "Nokta yok" - -#: ../python/frescobaldi_app/rumor.py:484 -msgid "Do not use dotted notes, but ties instead." -msgstr "Noktaları kullanmayıp onun yerine uzatma bağlarını kullanın." - -#: ../python/frescobaldi_app/rumor.py:488 -msgid "Legato" -msgstr "Bağlı" - -#: ../python/frescobaldi_app/rumor.py:489 -msgid "Do not use rests, but give all notes the maximum length." -msgstr "Susları kullanmayın, fakat tüm notalara maksimum uzunluk verin." - -#: ../python/frescobaldi_app/rumor.py:494 -msgid "Strip rests" -msgstr "Susları çıkar" - -#: ../python/frescobaldi_app/rumor.py:496 -msgid "Strip leading and trialing rests from output." -msgstr "Çıktıdan ilk ve son susları çıkar." - -#: ../python/frescobaldi_app/rumor.py:500 -msgid "Guile scripts to load:" -msgstr "Yüklenecek Guile betikleri:" - -#: ../python/frescobaldi_app/rumor.py:507 -msgid "Here you can select which Guile scripts you want Rumor to load. Check \"What's this\" for more information." -msgstr "Buradan Rumor'un yüklemesini istediğiniz Guile betiklerini seçebilirsiniz. Daha fazla bilgi için \"Bu Nedir\"i seçiniz." - -#: ../python/frescobaldi_app/rumor.py:511 -msgid "Here you can select which Guile scripts you want Rumor to load. You can add your own scripts by putting them in %1. If the first line of your script starts with a semicolon (;) that line will be shown as description." -msgstr "Buradan Rumor'un yüklemesini istediğiniz Guile betiklerini seçebilirsiniz. Kendi betiklerinizi onlara %1 işaretini koyarak ekleyebilirsiniz. Eğer betiğinizin ilk satırı bir noktalı virgül ile (;) başlarsa, bu satır tanımlama olarak gösterilecektir." - -#: ../python/frescobaldi_app/rumor.py:633 -msgid "Auto" -msgstr "Otomatik" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "preview mode" -msgstr "önizleme kipi" - -#: ../python/frescobaldi_app/runlily.py:108 -msgid "publish mode" -msgstr "yayınlama kipi" - -#: ../python/frescobaldi_app/runlily.py:111 -msgid "LilyPond %1 [%2] starting (%3)..." -msgstr "LilyPond %1 [%2] başlıyor (%3)..." - -#: ../python/frescobaldi_app/runlily.py:114 -msgid "LilyPond [%1] starting (%2)..." -msgstr "LilyPond [%1] başlıyor (%2)..." - -#: ../python/frescobaldi_app/runlily.py:148 -msgid "LilyPond [%1] exited with return code %2." -msgstr "LilyPond [%1] dönüş koduyla çıktı %2." - -#: ../python/frescobaldi_app/runlily.py:151 -msgid "LilyPond [%1] exited with exit status %2." -msgstr "LilyPond [%1] dönüş koduyla çıktı %2." - -#: ../python/frescobaldi_app/runlily.py:157 -msgid "LilyPond [%1] finished (%2)." -msgstr "LilyPond [%1] tamamlandı (%2)." - -#: ../python/frescobaldi_app/runlily.py:167 -msgid "Could not start LilyPond. Please check path and permissions." -msgstr "LilyPond başlayamıyor. Lütfen yolu ve izinleri denetleyiniz." - -#: ../python/frescobaldi_app/runlily.py:170 -msgid "Could not read from the LilyPond process." -msgstr "Lilypond işlemi okunamadı" - -#: ../python/frescobaldi_app/runlily.py:173 -msgid "An unknown error occured." -msgstr "Bilinmeyen bir hata meydana geldi." - -#: ../python/frescobaldi_app/runlily.py:247 -#: ../python/frescobaldi_app/runlily.py:250 -msgid "Run LilyPond" -msgstr "LilyPond'u Çalıştır" - -#: ../python/frescobaldi_app/runlily.py:257 -msgid "Select which LilyPond version you want to run:" -msgstr "Çalıştırmak istediğiniz LilyPond sürümünü seçiniz:" - -#: ../python/frescobaldi_app/runlily.py:265 -msgid "Run LilyPond in preview mode (with Point and Click)" -msgstr "LilyPond'u önizleme kipinde çalıştır (İşaretle ve Tıkla ile)" - -#: ../python/frescobaldi_app/runlily.py:268 -#: ../python/frescobaldi_app/settings.py:306 -msgid "Run LilyPond with verbose output" -msgstr "LilyPond'u önizleme kipinde çalıştır" - -#: ../python/frescobaldi_app/runlily.py:310 -msgid "Command" -msgstr "Komut" - -#: ../python/frescobaldi_app/runlily.py:317 -msgid "LilyPond %1" -msgstr "LilyPond %1" - -#: ../python/frescobaldi_app/runlily.py:318 -msgid "Use LilyPond version %1" -msgstr "LilyPond sürüm numarasını kullan %1" - -#: ../python/frescobaldi_app/runlily.py:321 -#: ../python/frescobaldi_app/settings.py:815 -msgid "default" -msgstr "öntanımlı" - -#: ../python/frescobaldi_app/runlily.py:322 -msgid "Default LilyPond Version." -msgstr "Varsayılan LilyPond Sürüm Numarası." - -#: ../python/frescobaldi_app/runlily.py:324 -msgid "automatic" -msgstr "otomatik" - -#: ../python/frescobaldi_app/runlily.py:325 -msgid "Automatic LilyPond Version (determined from document)." -msgstr "Otomatik LilyPond Sürümü (belgeden sağlanan)." - -#: ../python/frescobaldi_app/runlily.py:330 -msgid "Path: %1" -msgstr "Yol: %1" - -#: ../python/frescobaldi_app/runlily.py:334 -msgid "LilyPond (version unknown)" -msgstr "LilyPond (sürüm no bilinmeyen)" - -#: ../python/frescobaldi_app/runlily.py:335 -msgid "" -"Use LilyPond (version unknown)\n" -"Path: %1" -msgstr "" -"LilyPond kullan (sürüm numarası bilinmeyen)\n" -"Yol: %1" - -#: ../python/frescobaldi_app/runlily.py:450 -msgid "Click to edit this file" -msgstr "Bu dosyayı düzenlemek için tıklayınız." - -#: ../python/frescobaldi_app/runlily.py:483 -msgid "Save LilyPond Log as" -msgstr "LilyPond hata mesajları belgesini kaydet" - -#: ../python/frescobaldi_app/runlily.py:499 -msgid "" -"Could not save LilyPond log:\n" -"\n" -"%1" -msgstr "" -"LilyPond hata mesajları belgesini kaydedemiyor:\n" -"\n" -"%1" - -#: ../python/frescobaldi_app/sessions.py:39 -msgid "LilyPond-related settings" -msgstr "LilyPond ile ilgili ayarlar" - -#: ../python/frescobaldi_app/sessions.py:44 -msgid "LilyPond version to use:" -msgstr "Kullanılacak LilyPond sürümü:" - -#: ../python/frescobaldi_app/sessions.py:48 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this session.\n" -"See What's This (Shift+F1) for more information." -msgstr "" -"Buradan, bu oturumdaki belgelerde kullanılacak olan sabit bir LilyPond sürümünü ayarlayabilirsiniz.\n" -"Daha fazla bilgi için Bu Nedir (Shift+F1) kısayolunu kullanın." - -#: ../python/frescobaldi_app/sessions.py:52 -msgid "" -"Here you can set a fixed LilyPond version to run on documents in this session.\n" -"\n" -"The LilyPond version selected here is run by default on your documents, and it's also used by the \"Insert Version\" command." -msgstr "" -"Bu oturumda kullanılmak üzere belirli bir LilyPond sürüm numarasını buradan ayarlayabilirsiniz.\n" -"\n" -"Belgelerinizde öntanımlı olarak bu LilyPond sürümü seçilmiştir, ve ayrıca buradaki özellik \"Sürüm Ekle\" komutuyla eklenmiştir." - -#: ../python/frescobaldi_app/settings.py:57 -msgid "Configure" -msgstr "Yapılandır" - -#: ../python/frescobaldi_app/settings.py:206 -msgid "General Preferences" -msgstr "Genel Tercihler" - -#: ../python/frescobaldi_app/settings.py:207 -msgid "General Frescobaldi Preferences" -msgstr "Genel Frescobaldi Tercihleri" - -#: ../python/frescobaldi_app/settings.py:222 -#: ../python/frescobaldi_app/settings.py:223 -msgid "LilyPond Preferences" -msgstr "LilyPond Tercihleri" - -#: ../python/frescobaldi_app/settings.py:238 -msgid "Paths" -msgstr "Yollar" - -#: ../python/frescobaldi_app/settings.py:239 -msgid "Paths to programs or data used by Frescobaldi" -msgstr "Frescobaldi'nin kullanacağı program veya verilerin yolları" - -#: ../python/frescobaldi_app/settings.py:254 -msgid "Rumor MIDI input" -msgstr "Rumor MIDI girişi" - -#: ../python/frescobaldi_app/settings.py:255 -msgid "Rumor MIDI input plugin settings" -msgstr "Rumor MIDI girişi eklentisi ayarları" - -#: ../python/frescobaldi_app/settings.py:268 -msgid "Editor Component" -msgstr "Düzenleyici Bileşeni" - -#: ../python/frescobaldi_app/settings.py:269 -msgid "Editor Component Options" -msgstr "Düzenleyini Bileşeni Seçenekleri" - -#: ../python/frescobaldi_app/settings.py:298 -msgid "Running LilyPond" -msgstr "LilyPond Çalışıyor" - -#: ../python/frescobaldi_app/settings.py:303 -msgid "Let LilyPond delete intermediate output files" -msgstr "LilyPond'un ara çıktı dosyalarını silmesine izin ver" - -#: ../python/frescobaldi_app/settings.py:310 -msgid "LilyPond include path:" -msgstr "LilyPond içeren yol:" - -#: ../python/frescobaldi_app/settings.py:336 -msgid "When saving documents" -msgstr "Belgeleri saklarken" - -#: ../python/frescobaldi_app/settings.py:341 -msgid "Remember cursor position, bookmarks, etc." -msgstr "İmleç konumunu, yer imlerini, ve bunun gibi öğeleri hatırla." - -#: ../python/frescobaldi_app/settings.py:346 -msgid "Default directory:" -msgstr "Öntanımlı dizin:" - -#: ../python/frescobaldi_app/settings.py:349 -msgid "The default folder for your LilyPond documents (optional)." -msgstr "LilyPond belgelerinizin öntanımlı dizini (opsiyonel)." - -#: ../python/frescobaldi_app/settings.py:376 -msgid "LilyPond version number to use for new documents" -msgstr "Bu belge için kullanacak olduğunuz Lilypond sürüm numarası:" - -#: ../python/frescobaldi_app/settings.py:389 -msgid "Use version number of installed LilyPond" -msgstr "Yüklü LilyPond'un sürüm numarasını kullan" - -#: ../python/frescobaldi_app/settings.py:390 -msgid "Use version number of last convert-ly rule" -msgstr "Son convert-ly kuralının sürüm numarasını kullan" - -#: ../python/frescobaldi_app/settings.py:391 -msgid "Use custom version number:" -msgstr "Güncel sürüm numarasını kullan:" - -#: ../python/frescobaldi_app/settings.py:396 -msgid "Enter a valid LilyPond version number, e.g. 2.12.0" -msgstr "Geçerli bir LilyPond sürüm numarası girin, 2.12.0 gibi" - -#: ../python/frescobaldi_app/settings.py:430 -msgid "Warnings and Notifications" -msgstr "Uyarılar ve Bildirimler" - -#: ../python/frescobaldi_app/settings.py:435 -msgid "Warn when a document contains a conflicting point and click setting" -msgstr "Bir belgenin seç ve tıkla ayarlarında çakışma varsa, uyar" - -#: ../python/frescobaldi_app/settings.py:438 -msgid "Warn when a document needs to be saved before LilyPond is run" -msgstr "LilyPond'u çalıştırmadan önce bir belgenin kaydedilmesi gerekiyorsa uyar" - -#: ../python/frescobaldi_app/settings.py:441 -msgid "Warn when saving a session would overwrite another" -msgstr "Bir oturum kaydedilirken başkasının üzerine yazılacak ise uyar" - -#: ../python/frescobaldi_app/settings.py:447 -msgid "Point and Click" -msgstr "İşaretle ve Tıkla" - -#: ../python/frescobaldi_app/settings.py:450 -msgid "Enable Point and Click" -msgstr "İşaretle ve Tıkla Özelliğini Etkinleştir" - -#: ../python/frescobaldi_app/settings.py:453 -msgid "Click this button if Point and Click does not work. See Shift+F1 (What's This) for more information." -msgstr "Eğer İşaretle ve Tıkla çalışmıyorsa bu düğmeye tıklayın. Daha fazla bilgi için Shift+F1 (Bu Nedir)." - -#: ../python/frescobaldi_app/settings.py:457 -msgid "" -"On its first run, Frescobaldi tries to auto-configure Okular (which provides the PDF preview) to call Frescobaldi when a clickable object is clicked.\n" -"\n" -"But this setting can get lost when you move Frescobaldi to a different location or when other applications reconfigure Okular.\n" -"\n" -"Click this button to configure Frescobaldi as 'custom editor' inside Okular. This works best when all instances of Okular are closed and the PDF preview has not yet been opened." -msgstr "" -"İlk çalıştırmada, Frescobaldi PDF görüntüleyicisi olan Okular'ı otomatik olarak yapılandırmayı dener. Tıklanabilen bir nesne tıklandığında Frescobaldi'nin açılması sağlanacaktır böylece.\n" -"\n" -"Fakat bu ayar, Frescobaldi'yi başka bir bölgeye taşıdığınızda veya diğer uygulamalar Okular'ı yeniden yapılandırdıklarında kaybolacaktır.\n" -"\n" -"Bu düğmeye Okular'daki varsayılan düzenleyici olarak Frescobaldi'nin yapılandırılması için tıklayın. Bu özellik Okular tamamen kapalı olduğunda ve PDF önizleme henüz açık değilken devreye sokulduğunda çok iyi sonuç verir." - -#: ../python/frescobaldi_app/settings.py:477 -msgid "" -"The Okular PDF preview has been reconfigured.\n" -"\n" -"If you already opened the PDF preview, restart Frescobaldi for the new settings to take effect." -msgstr "" -"Okular PDF ön izleme özelliği yeniden yapılandırıldı.\n" -"\n" -"Eğer PDF ön izlemeyi açtıysanız, yeni ayarların etkili olması için Frescobaldi'yi yeniden başlatınız." - -#: ../python/frescobaldi_app/settings.py:484 -msgid "Helper applications" -msgstr "Yardımcı Uygulamalar" - -#: ../python/frescobaldi_app/settings.py:489 -msgid "PDF Viewer:" -msgstr "PDF Görüntüleyici:" - -#: ../python/frescobaldi_app/settings.py:490 -msgid "PDF Viewer" -msgstr "PDF Görüntüleyici" - -#: ../python/frescobaldi_app/settings.py:491 -#: ../python/frescobaldi_app/settings.py:494 -msgid "(leave empty for operating system default)" -msgstr "" - -#: ../python/frescobaldi_app/settings.py:492 -msgid "MIDI Player:" -msgstr "MIDI Çalıcı:" - -#: ../python/frescobaldi_app/settings.py:531 -msgid "Url:" -msgstr "Bağlantı:" - -#: ../python/frescobaldi_app/settings.py:536 -msgid "Url or path to the LilyPond documentation." -msgstr "Lilypond belgelerinin Url adresi veya tam yolu." - -#: ../python/frescobaldi_app/settings.py:563 -msgid "Lyrics Hyphenation" -msgstr "Şarkı Sözler Tirelemesi" - -#: ../python/frescobaldi_app/settings.py:570 -msgid "Paths to search for hyphenation dictionaries of OpenOffice.org, Scribus, KOffice, etc, one per line. If you leave out the starting slash, the prefixes from the KDEDIRS environment variable are prepended." -msgstr "Her satır için OpenOffice.org, Scribus, KOffice vb, uygulamalarında tireleme sözlüklerini arama yolları. Eğer başlangıç eğri çizgisini çıkarırsanız, KDEDIRS ortam değişkenlerinin önekleri kendiliğinden eklenir." - -#: ../python/frescobaldi_app/settings.py:602 -msgid "Commands used by the Rumor MIDI input module" -msgstr "Rumor MIDI giriş modülünde kullanılan komutlar" - -#: ../python/frescobaldi_app/settings.py:609 -msgid "Name or full path of the Rumor program." -msgstr "Rumor programının tam yolunun adı." - -#: ../python/frescobaldi_app/settings.py:611 -msgid "Name or full path of the aconnect program (part of ALSA, for MIDI input and playback using Rumor)." -msgstr "Programa bağlanmanın adı veya tam yolu (ALSA'nın bir parçası, MIDI girişi ve Rumor'u kullanarak çalmak için)" - -#: ../python/frescobaldi_app/settings.py:615 -msgid "Full command to start Timidity (or any other program) as an ALSA MIDI client." -msgstr "ALSA MIDI istemcisi olarak Timidity (veya bir diğer başka programı) başlatmanın tam komutu." - -#: ../python/frescobaldi_app/settings.py:648 -msgid "LilyPond versions to use:" -msgstr "Kullanılacak LilyPond sürümleri:" - -#: ../python/frescobaldi_app/settings.py:655 -msgid "Enable automatic version selection (choose LilyPond version from document)" -msgstr "Otomatik sürüm seçimini etkinleştirin (Belgeden LilyPond sürümünü seçin)" - -#: ../python/frescobaldi_app/settings.py:710 -msgid "Document Tabs" -msgstr "Belge Sekmeleri" - -#: ../python/frescobaldi_app/settings.py:715 -msgid "Close Button" -msgstr "Kapat Düğmesi" - -#: ../python/frescobaldi_app/settings.py:717 -msgid "Large Tabs" -msgstr "Büyük Sekmeler" - -#: ../python/frescobaldi_app/settings.py:719 -msgid "Tabs can be moved" -msgstr "Tab'ler kaldırılabilir" - -#: ../python/frescobaldi_app/settings.py:777 -msgid "Convert-ly:" -msgstr "Convert-ly:" - -#: ../python/frescobaldi_app/settings.py:778 -msgid "Lilypond-book:" -msgstr "LilyPond-book:" - -#: ../python/frescobaldi_app/settings.py:809 -msgid "Path" -msgstr "Yol" - -#: ../python/frescobaldi_app/settings.py:810 -msgid "Version" -msgstr "Sürüm" - -#: ../python/frescobaldi_app/settings.py:813 -msgid "Can't determine LilyPond version." -msgstr "LilyPond sürümü tanımlanamıyor." - -#: ../python/frescobaldi_app/settings.py:835 -msgid "Download..." -msgstr "İndir..." - -#: ../python/frescobaldi_app/settings.py:838 -msgid "Download new binary LilyPond releases." -msgstr "Yeni ikili LilyPond sürümlerini indir." - -#: ../python/frescobaldi_app/settings.py:842 -msgid "LilyPond Command:" -msgstr "LilyPond Komutu:" - -#: ../python/frescobaldi_app/settings.py:846 -msgid "Name or full path of the LilyPond program." -msgstr "Lilypond programının tam yolunun adı." - -#: ../python/frescobaldi_app/settings.py:847 -msgid "LilyPond Command" -msgstr "LilyPond Komutu" - -#: ../python/frescobaldi_app/settings.py:860 -msgid "Set as default" -msgstr "Öntanımlı olarak ayarlayın" - -#: ../python/frescobaldi_app/settings.py:862 -msgid "Include in automatic version selection" -msgstr "Otomatik sürüm seçimini içersin" - -#: ../python/frescobaldi_app/settings.py:890 -msgid "Session to load if Frescobaldi is started without arguments" -msgstr "Frescobadli'nin parametreler olmadan başlatılacağı oturumun yüklemesi" - -#: ../python/frescobaldi_app/settings.py:903 -msgid "Start with no session" -msgstr "Oturum olmadan başla" - -#: ../python/frescobaldi_app/settings.py:904 -msgid "Start with last used session" -msgstr "Son kullanılan oturum ile başla" - -#: ../python/frescobaldi_app/settings.py:905 -msgid "Start with session:" -msgstr "Oturum ile başla:" - -#: ../python/frescobaldi_app/settings.py:909 -msgid "Choose a session." -msgstr "Bir oturum seçin." - -#: ../python/frescobaldi_app/settings.py:918 -msgid "Choose..." -msgstr "Seç..." - -#: ../python/frescobaldi_app/version.py:61 -msgid "Your document has already a LilyPond version statement." -msgstr "Belgenizde zaten Lilypond sürüm bildirimi var." - -#: ../python/frescobaldi_app/version.py:62 -msgid "Version already set" -msgstr "Sürüm numarası ayarlanmış durumda" - -#: ../python/frescobaldi_app/version.py:72 -#: ../python/frescobaldi_app/version.py:90 -msgid "Can't determine the version of LilyPond. Please check your LilyPond installation." -msgstr "Lilypond sürümü belirli değil. Lütfen, Lilypond kurulumunuzu denetleyin." - -#: ../python/frescobaldi_app/version.py:86 -msgid "Can't determine the LilyPond version of the current document. Please add a \\version statement with the correct version." -msgstr "Bu dosyada Lilypond sürüm belirteci bulunmuyor. Lütfen, \\version belirtecini doğru sürüm numarasını kullanarak ekleyiniz." - -#: ../python/frescobaldi_app/version.py:94 -msgid "This LilyPond document is already up-to-date." -msgstr "Bu Lilypond belgesi zaten güncel." - -#: ../python/frescobaldi_app/version.py:107 -msgid "The document has been processed with convert-ly. You'll find the messages of convert-ly in a comment block at the end. You still may have to edit some parts manually." -msgstr "Bu belge convert-ly ile işlenmiş. Convert-ly mesajlarını sondaki yorum bloğunda bulacaksınız. Bazı kısımları yine de elle düzenlemeniz gerekebilir." - -#: ../python/frescobaldi_app/version.py:113 -msgid "The document has been processed with convert-ly, but remained unchanged. This is the message given by convert-ly: %1" -msgstr "Belge, convert-ly ile işlenmiş, ancak değiştirilmeden kalmış. Bu ileti convert-ly tarafından hazırlanmıştır: %1" - -#: ../python/frescobaldi_app/version.py:118 -msgid "Could not start convert-ly: %1" -msgstr "convert-ly başlatılamadı: %1" - -#: ../python/frescobaldi_app/widgets.py:44 -msgid "Tap" -msgstr "Tıkla" - -#: ../python/frescobaldi_app/widgets.py:50 -msgid "Click this button a few times to set the tempo." -msgstr "Hızı ayarlamak için bu düğmeye bir kaç kez tıklayınız." - -#: ../python/frescobaldi_app/widgets.py:176 -msgid "The tempo in beats per minute." -msgstr "Dakika başına göre vuruşların hızı." - -#: ../python/frescobaldi_app/widgets.py:214 -msgid "Treble" -msgstr "Tiz - Sol anahtarı" - -#: ../python/frescobaldi_app/widgets.py:215 -#: ../python/frescobaldi_app/scorewiz/parts.py:812 -msgid "Alto" -msgstr "Alto" - -#: ../python/frescobaldi_app/widgets.py:216 -#: ../python/frescobaldi_app/scorewiz/parts.py:818 -msgid "Tenor" -msgstr "Tenor" - -#: ../python/frescobaldi_app/widgets.py:217 -msgid "Treble 8" -msgstr "Sekizli Yukarı" - -#: ../python/frescobaldi_app/widgets.py:218 -#: ../python/frescobaldi_app/scorewiz/parts.py:588 -#: ../python/frescobaldi_app/scorewiz/parts.py:825 -msgid "Bass" -msgstr "Bass" - -#: ../python/frescobaldi_app/widgets.py:219 -#: ../python/frescobaldi_app/scorewiz/parts.py:1512 -msgid "Percussion" -msgstr "Vurmalı Çalgılar" - -#: ../python/frescobaldi_app/widgets.py:222 -msgid "Tab clef" -msgstr "Tab anahtarı" - -#: ../python/frescobaldi_app/widgets.py:224 -msgid "No Clef" -msgstr "Anahtar yok" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:62 -msgid "Score Setup Wizard" -msgstr "Partisyon Yapılandırma Sihirbazı" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:133 -msgid "Titles and Headers" -msgstr "Başlık isimleri ve Başlıklar" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:150 -msgid "Click to enter a value." -msgstr "Bir değer girmek için tıklayınız." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:152 -msgid "bottom of first page" -msgstr "ilk sayfanın altı" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:153 -msgid "bottom of last page" -msgstr "son sayfanın altı" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:193 -msgid "Parts" -msgstr "Partiler" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:198 -msgid "Available parts:" -msgstr "Uygun partiler:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:201 -msgid "Add selected part to your score." -msgstr "Seçili partiyi partisyonunuza ekleyin." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:206 -msgid "Score:" -msgstr "Partisyon:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:340 -#: ../python/frescobaldi_app/scorewiz/__init__.py:345 -msgid "Score settings" -msgstr "Partisyon ayarları" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:352 -msgid "General preferences" -msgstr "Genel tercihler" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:354 -msgid "Instrument names" -msgstr "Çalgı isimleri" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:361 -msgid "Key signature:" -msgstr "Donanım:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:369 -msgid "Time signature:" -msgstr "Ölçü birimi:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:385 -msgid "Pickup measure:" -msgstr "Önel ölçüsü:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:397 -msgid "Metronome mark:" -msgstr "Metronom işareti:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:426 -msgid "Tempo indication:" -msgstr "Hız belirteci:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:430 -msgid "A tempo indication, e.g. \"Allegro.\"" -msgstr "Bir hız belirteci, örneğin \"Allegro.\"" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:436 -msgid "Pitch name language:" -msgstr "Ses adı dili:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:444 -msgid "The LilyPond language you want to use for the pitch names." -msgstr "Ses bölgesi adları için kullanmak istediğiniz LilyPond dili." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:459 -msgid "The LilyPond version you will be using for this document." -msgstr "Bu belge için kullanacağınız Lilypond sürüm numarası:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:463 -msgid "Use typographical quotes" -msgstr "Tipografik tırnak işaretini kullan" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:465 -msgid "Replace normal quotes in titles with nice typographical quotes." -msgstr "Başlıklardaki normal tırnak işaretlerini güzel tipografik tırnaklarla değiştir." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:469 -msgid "Suppress the default tagline output by LilyPond." -msgstr "Lilypond'un öntanımlı slogan çıktısını gösterme." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:471 -msgid "Remove bar numbers" -msgstr "Ölçü numaralarını kaldır" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:473 -msgid "Suppress the display of measure numbers at the beginning of every system." -msgstr "Her satırdaki ölçü işaretlerinin gösterilmesini önle." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:476 -msgid "Create MIDI output" -msgstr "MIDI çıktısı oluştur" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:478 -msgid "Create a MIDI file in addition to the PDF file." -msgstr "PDF dosyasıyla birlikte MIDI dosyası da oluştur." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:480 -msgid "Show metronome mark" -msgstr "Metronom işaretini göster" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:482 -msgid "If checked, show the metronome mark at the beginning of the score. The MIDI output also uses the metronome setting." -msgstr "Eğer işaretlenmişse, notanın başında metronom işaretini göster. MIDI çıktısı da metronom ayarını kullanacaktır böylece." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:486 -msgid "Wrap score in \\book block" -msgstr "\\book bloğundaki nota bölgesini seçin" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:488 -msgid "If checked, wraps the \\score block inside a \\book block." -msgstr "Eğer işaretlenmişse, \\score bloğunu \\book bloğuna yerleştirir." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:498 -msgid "Landscape" -msgstr "Yatay" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:510 -msgid "First system:" -msgstr "İlk satır:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Long" -msgstr "Uzun" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:513 -#: ../python/frescobaldi_app/scorewiz/__init__.py:522 -msgid "Short" -msgstr "Kısa" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:515 -msgid "Use long or short instrument names before the first system." -msgstr "İlk satırdan önce uzun ve kısa çalgı isimlerini kullan." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:519 -msgid "Other systems:" -msgstr "Diğer satırlar:" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:524 -msgid "Use short, long or no instrument names before the next systems." -msgstr "Sonraki satırda kısa, uzun veya hiç çalgı isimleri kullanmayınız." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:532 -msgid "Which language to use for the instrument names." -msgstr "Çalgı isimleri için hangi dili kullanmayı istersiniz." - -#: ../python/frescobaldi_app/scorewiz/__init__.py:735 -msgid "Remove default LilyPond tagline" -msgstr "Öntanımlı Lilypond sloganını kaldır" - -#: ../python/frescobaldi_app/scorewiz/__init__.py:1079 -msgid "No settings available." -msgstr "Hiç bir ayarlama yapılamaz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:54 -msgid "Voices:" -msgstr "Sesler:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:59 -msgid "How many voices to put in this staff." -msgstr "Bu dizeğe kaç ses yazılmalı." - -#: ../python/frescobaldi_app/scorewiz/parts.py:97 -msgid "Music follows here." -msgstr "Müziği buradan gireceksiniz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:164 -msgid "Staff type:" -msgstr "Dizek türü" - -#: ../python/frescobaldi_app/scorewiz/parts.py:168 -msgid "Normal staff" -msgstr "Normal dizek" - -#: ../python/frescobaldi_app/scorewiz/parts.py:169 -msgid "Tablature" -msgstr "Tablature" - -#: ../python/frescobaldi_app/scorewiz/parts.py:170 -msgid "Both" -msgstr "Her ikisi de" - -#: ../python/frescobaldi_app/scorewiz/parts.py:180 -msgid "Tuning:" -msgstr "Akort:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:301 -msgid "Lyrics follow here." -msgstr "Şarkı sözleri burada başlayacak." - -#: ../python/frescobaldi_app/scorewiz/parts.py:312 -msgid "Stanzas:" -msgstr "Kıtalar:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:316 -msgid "The number of stanzas." -msgstr "Kıtaların numarası." - -#: ../python/frescobaldi_app/scorewiz/parts.py:319 -msgid "Ambitus" -msgstr "Ses genişliği" - -#: ../python/frescobaldi_app/scorewiz/parts.py:322 -msgid "Show the pitch range of the voice at the beginning of the staff." -msgstr "Dizeğin en başında sesin ses genişliğini göster." - -#: ../python/frescobaldi_app/scorewiz/parts.py:386 -msgid "Adjust how many separate voices you want on each staff." -msgstr "Her dizekte kaç tane ayrı ses istediğinizi ayarlayın." - -#: ../python/frescobaldi_app/scorewiz/parts.py:387 -msgid "This is primarily useful when you write polyphonic music like a fuge." -msgstr "Bu özellik füg gibi polifonik bir müzik yazıyorsanız birincil derecede faydalıdır." - -#: ../python/frescobaldi_app/scorewiz/parts.py:391 -msgid "Right hand:" -msgstr "Sağ el:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:392 -msgid "Left hand:" -msgstr "Sol el:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:411 -#: ../python/frescobaldi_app/scorewiz/parts.py:898 -msgid "Chord names" -msgstr "Akor adları" - -#: ../python/frescobaldi_app/scorewiz/parts.py:423 -msgid "Chords follow here." -msgstr "Akorlar burada başlayacak." - -#: ../python/frescobaldi_app/scorewiz/parts.py:435 -msgid "Chord style:" -msgstr "Akor stili:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:440 -msgid "German" -msgstr "Alman" - -#: ../python/frescobaldi_app/scorewiz/parts.py:441 -msgid "Semi-German" -msgstr "Yarı-Alman" - -#: ../python/frescobaldi_app/scorewiz/parts.py:442 -msgid "Italian" -msgstr "İtalyan" - -#: ../python/frescobaldi_app/scorewiz/parts.py:443 -msgid "French" -msgstr "Fransız" - -#: ../python/frescobaldi_app/scorewiz/parts.py:444 -msgid "Guitar fret diagrams" -msgstr "Gitar fret diyagramları" - -#: ../python/frescobaldi_app/scorewiz/parts.py:446 -msgid "Show predefined guitar fret diagrams below the chord names (LilyPond 2.12 and above)." -msgstr "Akor adlarının üzerine önceden tanımlanmış olan gitar fret diyagramlarını göster (LilyPond 2.12 veya üzeri için)." - -#: ../python/frescobaldi_app/scorewiz/parts.py:452 -msgid "Figured Bass" -msgstr "Şifreli Bas" - -#: ../python/frescobaldi_app/scorewiz/parts.py:460 -#: ../python/frescobaldi_app/scorewiz/parts.py:519 -msgid "Figures follow here." -msgstr "Figürler burada başlayacak." - -#: ../python/frescobaldi_app/scorewiz/parts.py:467 -msgid "Use extender lines" -msgstr "Uzatma çizgilerini kullan" - -#: ../python/frescobaldi_app/scorewiz/parts.py:472 -msgid "Violin" -msgstr "Violin" - -#: ../python/frescobaldi_app/scorewiz/parts.py:473 -msgid "Violin|Vl." -msgstr "Violin|Vl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:478 -msgid "Viola" -msgstr "Viola" - -#: ../python/frescobaldi_app/scorewiz/parts.py:479 -msgid "Viola|Vla." -msgstr "Viola|Vla." - -#: ../python/frescobaldi_app/scorewiz/parts.py:486 -msgid "Cello" -msgstr "Cello" - -#: ../python/frescobaldi_app/scorewiz/parts.py:487 -msgid "Cello|Cl." -msgstr "Cello|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:494 -msgid "Contrabass" -msgstr "Contrabass" - -#: ../python/frescobaldi_app/scorewiz/parts.py:495 -msgid "Contrabass|Cb." -msgstr "Contrabass|Cb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:502 -msgid "Basso continuo" -msgstr "Basso continuo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:503 -msgid "Basso Continuo|B.c." -msgstr "Basso Continuo|B.c." - -#: ../python/frescobaldi_app/scorewiz/parts.py:525 -msgid "Mandolin" -msgstr "Mandolin" - -#: ../python/frescobaldi_app/scorewiz/parts.py:526 -msgid "Mandolin|Mdl." -msgstr "Mandolin|Mdl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:529 -msgid "Mandolin tuning" -msgstr "Mandolin akordu" - -#: ../python/frescobaldi_app/scorewiz/parts.py:534 -msgid "Banjo" -msgstr "Banjo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:535 -msgid "Banjo|Bj." -msgstr "Banjo|Bj." - -#: ../python/frescobaldi_app/scorewiz/parts.py:539 -msgid "Open G-tuning (aDGBD)" -msgstr "Açık SOL-teli akordu (aDGBD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:540 -msgid "C-tuning (gCGBD)" -msgstr "DO-akordu (gCGBD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:541 -msgid "Modal tuning (gDGCD)" -msgstr "Modal akort (gDGCD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:542 -msgid "Open D-tuning (aDF#AD)" -msgstr "Açık RE akordu (aDF#AD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:543 -msgid "Open Dm-tuning (aDFAD)" -msgstr "Açık Re minör-akordu (aDFAD)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:547 -msgid "Four strings (instead of five)" -msgstr "Dört tel (beş tel yerine)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:564 -msgid "Classical guitar" -msgstr "Klasik Gitar" - -#: ../python/frescobaldi_app/scorewiz/parts.py:565 -msgid "Guitar|Gt." -msgstr "Guitar|Gt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:569 -msgid "Guitar tuning" -msgstr "Gitar akordu" - -#: ../python/frescobaldi_app/scorewiz/parts.py:570 -msgid "Open G-tuning" -msgstr "Açık SOL-akordu" - -#: ../python/frescobaldi_app/scorewiz/parts.py:582 -msgid "Jazz guitar" -msgstr "Jazz guitar" - -#: ../python/frescobaldi_app/scorewiz/parts.py:583 -msgid "Jazz guitar|J.Gt." -msgstr "Jazz guitar|J.Gt." - -#: ../python/frescobaldi_app/scorewiz/parts.py:589 -msgid "Bass|Bs." -msgstr "Bass|Bs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:594 -msgid "Bass tuning" -msgstr "Bas akordu" - -#: ../python/frescobaldi_app/scorewiz/parts.py:599 -msgid "Electric bass" -msgstr "Electric bass" - -#: ../python/frescobaldi_app/scorewiz/parts.py:600 -msgid "Electric bass|E.Bs." -msgstr "Electric bass|E.Bs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:605 -msgid "Harp" -msgstr "Harp" - -#: ../python/frescobaldi_app/scorewiz/parts.py:606 -msgid "Harp|Hp." -msgstr "Harp|Hp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:621 -msgid "Upper staff:" -msgstr "Üst dizek:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:622 -msgid "Lower staff:" -msgstr "Bas dizek:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:626 -msgid "Flute" -msgstr "Flute" - -#: ../python/frescobaldi_app/scorewiz/parts.py:627 -msgid "Flute|Fl." -msgstr "Flute|Fl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:632 -msgid "Piccolo" -msgstr "Piccolo" - -#: ../python/frescobaldi_app/scorewiz/parts.py:633 -msgid "Piccolo|Pic." -msgstr "Piccolo|Pic." - -#: ../python/frescobaldi_app/scorewiz/parts.py:639 -msgid "Bass flute" -msgstr "Bass flute" - -#: ../python/frescobaldi_app/scorewiz/parts.py:640 -msgid "Bass flute|Bfl." -msgstr "Bass flute|Bfl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:646 -msgid "Oboe" -msgstr "Oboe" - -#: ../python/frescobaldi_app/scorewiz/parts.py:647 -msgid "Oboe|Ob." -msgstr "Oboe|Ob." - -#: ../python/frescobaldi_app/scorewiz/parts.py:652 -msgid "Oboe d'Amore" -msgstr "Oboe d'Amore" - -#: ../python/frescobaldi_app/scorewiz/parts.py:653 -msgid "Oboe d'amore|Ob.d'am." -msgstr "Oboe d'amore|Ob.d'am." - -#: ../python/frescobaldi_app/scorewiz/parts.py:659 -msgid "English Horn" -msgstr "English Horn" - -#: ../python/frescobaldi_app/scorewiz/parts.py:660 -msgid "English horn|Eng.h." -msgstr "English horn|Eng.h." - -#: ../python/frescobaldi_app/scorewiz/parts.py:666 -msgid "Bassoon" -msgstr "Bassoon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:667 -msgid "Bassoon|Bn." -msgstr "Bassoon|Bn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:674 -msgid "Contrabassoon" -msgstr "Contrabassoon" - -#: ../python/frescobaldi_app/scorewiz/parts.py:675 -msgid "Contrabassoon|C.Bn." -msgstr "Contrabassoon|C.Bn." - -#: ../python/frescobaldi_app/scorewiz/parts.py:683 -msgid "Clarinet" -msgstr "Clarinet" - -#: ../python/frescobaldi_app/scorewiz/parts.py:684 -msgid "Clarinet|Cl." -msgstr "Clarinet|Cl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:690 -msgid "Sopranino Sax" -msgstr "Sopranino Sax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:691 -msgid "Sopranino Sax|SiSx." -msgstr "Sopranino Sax|SiSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:697 -msgid "Soprano Sax" -msgstr "Soprano Sax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:698 -msgid "Soprano Sax|SoSx." -msgstr "Soprano Sax|SoSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:704 -msgid "Alto Sax" -msgstr "Alto Sax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:705 -msgid "Alto Sax|ASx." -msgstr "Alto Sax|ASx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:711 -msgid "Tenor Sax" -msgstr "Tenor Sax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:712 -msgid "Tenor Sax|TSx." -msgstr "Tenor Sax|TSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:718 -msgid "Baritone Sax" -msgstr "Baritone Sax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:719 -msgid "Baritone Sax|BSx." -msgstr "Baritone Sax|BSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:725 -msgid "Bass Sax" -msgstr "Bass Sax" - -#: ../python/frescobaldi_app/scorewiz/parts.py:726 -msgid "Bass Sax|BsSx." -msgstr "Bass Sax|BsSx." - -#: ../python/frescobaldi_app/scorewiz/parts.py:732 -msgid "Soprano recorder" -msgstr "Soprano recorder" - -#: ../python/frescobaldi_app/scorewiz/parts.py:733 -msgid "Soprano recorder|S.rec." -msgstr "Soprano recorder|S.rec." - -#: ../python/frescobaldi_app/scorewiz/parts.py:739 -msgid "Alto recorder" -msgstr "Alto recorder" - -#: ../python/frescobaldi_app/scorewiz/parts.py:740 -msgid "Alto recorder|A.rec." -msgstr "Alto recorder|A.rec." - -#: ../python/frescobaldi_app/scorewiz/parts.py:745 -msgid "Tenor recorder" -msgstr "Tenor recorder" - -#: ../python/frescobaldi_app/scorewiz/parts.py:746 -msgid "Tenor recorder|T.rec." -msgstr "Tenor recorder|T.rec." - -#: ../python/frescobaldi_app/scorewiz/parts.py:751 -msgid "Bass recorder" -msgstr "Bass recorder" - -#: ../python/frescobaldi_app/scorewiz/parts.py:752 -msgid "Bass recorder|B.rec." -msgstr "Bass recorder|B.rec." - -#: ../python/frescobaldi_app/scorewiz/parts.py:759 -msgid "Horn in F" -msgstr "Horn in F" - -#: ../python/frescobaldi_app/scorewiz/parts.py:760 -msgid "Horn in F|Hn.F." -msgstr "Horn in F|Hn.F." - -#: ../python/frescobaldi_app/scorewiz/parts.py:766 -msgid "Trumpet in C" -msgstr "Trumpet in C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:767 -msgid "Trumpet in C|Tr.C" -msgstr "Trumpet in C|Tr.C" - -#: ../python/frescobaldi_app/scorewiz/parts.py:772 -msgid "Trumpet in Bb" -msgstr "Trumpet in Bb" - -#: ../python/frescobaldi_app/scorewiz/parts.py:773 -msgid "Trumpet in Bb|Tr.Bb" -msgstr "Trumpet in Bb|Tr.Bb" - -#: ../python/frescobaldi_app/scorewiz/parts.py:778 -msgid "Trombone" -msgstr "Trombone" - -#: ../python/frescobaldi_app/scorewiz/parts.py:779 -msgid "Trombone|Trb." -msgstr "Trombone|Trb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:786 -msgid "Tuba" -msgstr "Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:787 -msgid "Tuba|Tb." -msgstr "Tuba|Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:793 -msgid "Bass Tuba" -msgstr "Bass Tuba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:794 -msgid "Bass Tuba|B.Tb." -msgstr "Bass Tuba|B.Tb." - -#: ../python/frescobaldi_app/scorewiz/parts.py:802 -msgid "Soprano" -msgstr "Soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:803 -msgid "Soprano|S." -msgstr "Soprano|S." - -#: ../python/frescobaldi_app/scorewiz/parts.py:807 -msgid "Mezzo soprano" -msgstr "Mezzo soprano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:808 -msgid "Mezzo-soprano|Ms." -msgstr "Mezzo-soprano|Ms." - -#: ../python/frescobaldi_app/scorewiz/parts.py:813 -msgid "Alto|A." -msgstr "Alto|A." - -#: ../python/frescobaldi_app/scorewiz/parts.py:819 -msgid "Tenor|T." -msgstr "Tenor|T." - -#: ../python/frescobaldi_app/scorewiz/parts.py:826 -msgid "Bass|B." -msgstr "Bass|B." - -#: ../python/frescobaldi_app/scorewiz/parts.py:832 -msgid "Lead sheet" -msgstr "Detaylı Şarkı Notası" - -#: ../python/frescobaldi_app/scorewiz/parts.py:894 -msgid "The Lead Sheet provides a staff with chord names above and lyrics below it. A second staff is optional." -msgstr "Detaylı Şarkı Notası, üzerinde akorları olan ve altında da şarkı sözlerini içeren notadır. İkinci dizek opsiyoneldir." - -#: ../python/frescobaldi_app/scorewiz/parts.py:905 -msgid "Add accompaniment staff" -msgstr "Eşlik dizeği ekle" - -#: ../python/frescobaldi_app/scorewiz/parts.py:907 -msgid "Adds an accompaniment staff and also puts an accompaniment voice in the upper staff." -msgstr "Bir eşlik dizeği ekler ve aynı zamanda da üst dizeğe eşlik sesi ekler." - -#: ../python/frescobaldi_app/scorewiz/parts.py:914 -msgid "Choir" -msgstr "Koro" - -#: ../python/frescobaldi_app/scorewiz/parts.py:918 -msgid "Please select the voices for the choir. Use the letters S, A, T, or B. A hyphen denotes a new staff." -msgstr "Lütfen koro için sesleri seçiniz. Sesleri seçmek için S,A, T veya B gibi harfleri kullanınız. Tire eklemek yeni bir dizek anlamına gelir." - -#: ../python/frescobaldi_app/scorewiz/parts.py:920 -msgid "Hint: For a double choir you can use two choir parts." -msgstr "İpucu: Çift koro için iki koro partilerini kullanabilirsiniz." - -#: ../python/frescobaldi_app/scorewiz/parts.py:925 -msgid "Voicing:" -msgstr "Çoksesleme:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:942 -msgid "Lyrics:" -msgstr "Şarkı Sözleri:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:946 -msgid "All voices same lyrics" -msgstr "Tüm seslerde aynı sözler" - -#: ../python/frescobaldi_app/scorewiz/parts.py:947 -msgid "A set of the same lyrics is placed between all staves." -msgstr "Şarkı sözlerinin tek seti bütün dizek aralarına yerleştirilmiştir." - -#: ../python/frescobaldi_app/scorewiz/parts.py:948 -msgid "Every voice same lyrics" -msgstr "Her ses de aynı sözler" - -#: ../python/frescobaldi_app/scorewiz/parts.py:949 -msgid "Every voice gets its own lyrics, using the same text as the other voices." -msgstr "Her sesin diğer seslerdeki aynı metni kullanan kendine ait sözleri vardır, " - -#: ../python/frescobaldi_app/scorewiz/parts.py:951 -msgid "Every voice different lyrics" -msgstr "Her sesin sözleri farklıdır" - -#: ../python/frescobaldi_app/scorewiz/parts.py:952 -msgid "Every voice gets a different set of lyrics." -msgstr "Her sesin sözleri kendine özgüdür." - -#: ../python/frescobaldi_app/scorewiz/parts.py:953 -msgid "Distribute stanzas" -msgstr "Dörtlükleri (kıtayı) dağıtın" - -#: ../python/frescobaldi_app/scorewiz/parts.py:954 -msgid "One set of stanzas is distributed across the staves." -msgstr "Bir set şarkı sözü kıtaları dizek aralarına yerleştirilmiştir." - -#: ../python/frescobaldi_app/scorewiz/parts.py:959 -msgid "Piano reduction" -msgstr "Piyano indirgemesi" - -#: ../python/frescobaldi_app/scorewiz/parts.py:961 -msgid "Adds an automatically generated piano reduction." -msgstr "Otomatik olarak oluşturulan piyano indirgemesini ekler." - -#: ../python/frescobaldi_app/scorewiz/parts.py:963 -msgid "Rehearsal MIDI files" -msgstr "Prova MIDI dosyaları" - -#: ../python/frescobaldi_app/scorewiz/parts.py:965 -msgid "Creates a rehearsal MIDI file for every voice, even if no MIDI output is generated for the main score." -msgstr "Asıl notada MIDI çıkış ayarları belirtilmiş olmasa da, her ses için bir prova MIDI dosyası yaratın." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1017 -msgid "Choir|Ch." -msgstr "Choir|Ch." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1262 -msgid "Rehearsal MIDI files:" -msgstr "Prova MIDI dosyaları:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1309 -msgid "Piano" -msgstr "Piano" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1310 -msgid "Piano|Pno." -msgstr "Piano|Pno." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1315 -msgid "Harpsichord" -msgstr "Harpsichord" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1316 -msgid "Harpsichord|Hs." -msgstr "Harpsichord|Hs." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1321 -msgid "Clavichord" -msgstr "Clavichord" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1322 -msgid "Clavichord|Clv." -msgstr "Clavichord|Clv." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1327 -msgid "Organ" -msgstr "Organ" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1328 -msgid "Organ|Org." -msgstr "Organ|Org." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1333 -msgid "Pedal:" -msgstr "Pedal:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1334 -msgid "Set to 0 to disable the pedal altogether." -msgstr "Pedal'ı yok etmek istiyorsanız 0 olarak ayarlayınız." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1344 -msgid "Celesta" -msgstr "Celesta" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1345 -msgid "Celesta|Cel." -msgstr "Celesta|Cel." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1350 -msgid "Timpani" -msgstr "Timpani" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1351 -msgid "Timpani|Tmp." -msgstr "Timpani|Tmp." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1358 -msgid "Xylophone" -msgstr "Xylophone" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1359 -msgid "Xylophone|Xyl." -msgstr "Xylophone|Xyl." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1364 -msgid "Marimba" -msgstr "Marimba" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1365 -msgid "Marimba|Mar." -msgstr "Marimba|Mar." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1370 -msgid "Vibraphone" -msgstr "Vibraphone" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1371 -msgid "Vibraphone|Vib." -msgstr "Vibraphone|Vib." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1376 -msgid "Tubular bells" -msgstr "Tubular bells" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1377 -msgid "Tubular bells|Tub." -msgstr "Tubular bells|Tub." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1382 -msgid "Glockenspiel" -msgstr "Glockenspiel" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1383 -msgid "Glockenspiel|Gls." -msgstr "Glockenspiel|Gls." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1388 -msgid "Drums" -msgstr "Drums" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1389 -msgid "Drums|Dr." -msgstr "Drums|Dr." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1399 -msgid "Drums follow here." -msgstr "Davul notası burada başlayacak." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1424 -msgid "keep some distance." -msgstr "biraz mesafe bırak." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1432 -msgid "Style:" -msgstr "Stil:" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1436 -msgid "Drums (5 lines, default)" -msgstr "Davul (5 çizgi, varsayılan)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1437 -msgid "Timbales-style (2 lines)" -msgstr "Timbal-stili (2 çizgi)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1438 -msgid "Congas-style (2 lines)" -msgstr "Konga-stili (2 çizgi)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1439 -msgid "Bongos-style (2 lines)" -msgstr "Bongo-stili (2 çizgi)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1440 -msgid "Percussion-style (1 line)" -msgstr "Perküsyon-stili (1 çizgi)" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1441 -msgid "Remove stems" -msgstr "Kuyrukları kaldır" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1442 -msgid "Remove the stems from the drum notes." -msgstr "Davul notasından kuyrukları kaldır." - -#: ../python/frescobaldi_app/scorewiz/parts.py:1451 -msgid "Strings" -msgstr "Yaylılar" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1458 -msgid "Plucked strings" -msgstr "Telli çalgılar" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1467 -msgid "Woodwinds" -msgstr "Tahta üflemeliler" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1488 -msgid "Brass" -msgstr "Bakır üflemeliler" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1496 -msgid "Vocal" -msgstr "İnsan sesi" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1505 -msgid "Keyboard instruments" -msgstr "Tuşlu çalgılar" - -#: ../python/frescobaldi_app/scorewiz/parts.py:1521 -msgid "Special" -msgstr "Özel" - -#~ msgid "Open PDF" -#~ msgstr "PDF aç" - -#~ msgid "Print" -#~ msgstr "Yazdır" - -#~ msgid "Play MIDI" -#~ msgstr "MIDI çal" - -#~ msgid "Email..." -#~ msgstr "E-posta..." - -#~ msgid "Disable the built-in PDF preview" -#~ msgstr "Yerleşik PDF önizlemeyi devre dışı bırak." - -#~ msgid "The direction to use for the articulations." -#~ msgstr "Artikülasyonlar için kullanılacak yön." - -#~ msgid "&Generated Files" -#~ msgstr "İşlenecek &Dosyalar" - -#~ msgid "Your document has been modified, please save first." -#~ msgstr "Belgeniz değiştirildi, lütfen önce kaydediniz." - -#~ msgid "LilyPond documentation:" -#~ msgstr "LilyPond belgelendirmesi:" - -#~ msgid "The document has been sent to the printer." -#~ msgstr "Belge yazıcıya gönderildi." - -#~ msgid "" -#~ "Printing failed: %1\n" -#~ "\n" -#~ "The print command %2 does probably not exist. Please check your settings." -#~ msgstr "" -#~ "Yazdırma başarısız: %1\n" -#~ "\n" -#~ "Yazdırma komuyu %2 büyük olasılıkla verilemedi. Lütfen yazıcı " -#~ "ayarlarınızı denetleyin." - -#~ msgid "The print command contains errors. Please check your settings." -#~ msgstr "" -#~ "Yazdırma komutu hatalar içermektedir. Lütfen yazıcı ayarlarınızı " -#~ "denetleyin." - -#~ msgid "Directly print on default printer" -#~ msgstr "Doğrudan öntanımlı yazıcıdan yazdır" - -#, fuzzy -#~ msgid "Notify when a document has been sent to the printer" -#~ msgstr "Belge yazıcıya gönderildi." - -#~ msgid "Printcommand:" -#~ msgstr "Yazdırma komutu:" - -#~ msgid "" -#~ "Command to print a PDF file, for example lpr or kprinter. You may add " -#~ "some arguments, e.g. lpr -P myprinter." -#~ msgstr "" -#~ "Bir PDF dosyasını yazdırma komutu, örneğin lpr veya kprinter. Bu " -#~ "komutlara lpr -P yazıcım gibi değerler eklemek de mümkündür." - -#~ msgid "Space above:" -#~ msgstr "Yukardakı boşluk:" - -#~ msgid "Name or full path of the convert-ly program." -#~ msgstr "Convert-ly programının tam yolunun adı." - -#~ msgid "Expand" -#~ msgstr "Genişlet" - -#, fuzzy -#~ msgid "Could not understand the entered pitches." -#~ msgstr "Lilypond işlemi okunamadı" - -#~ msgid "Dock" -#~ msgstr "Kısalt" - -#~ msgid "Show" -#~ msgstr "Göster" - -#, fuzzy -#~ msgid "Paper Size A4" -#~ msgstr "Sayfa ebadı:" - -#, fuzzy -#~ msgid "Paper Size A5" -#~ msgstr "Sayfa ebadı:" - -#, fuzzy -#~ msgid "Paper Size Letter" -#~ msgstr "Sayfa ebadı:" - -#, fuzzy -#~ msgid "Stem Up" -#~ msgstr "Adım" - -#, fuzzy -#~ msgid "Stem Down" -#~ msgstr "Aşağı" - -#, fuzzy -#~ msgid "Lyric Stanza" -#~ msgstr "Kıtalar:" - -#, fuzzy -#~ msgid "Score section" -#~ msgstr "Partisyon ayarları" - -#, fuzzy -#~ msgid "Layout Section" -#~ msgstr "Dil Seçimi" - -#, fuzzy -#~ msgid "Midi section" -#~ msgstr "İthaf" - -#, fuzzy -#~ msgid "With: instrumentName" -#~ msgstr "Çalgı isimleri" - -#, fuzzy -#~ msgid "With: shortInstrumentName" -#~ msgstr "Çalgı isimleri" - -#, fuzzy -#~ msgid "Modern 2/2 Time Signature" -#~ msgstr "Ölçü birimi:" - -#, fuzzy -#~ msgid "Modern 4/4 Time Signature" -#~ msgstr "Ölçü birimi:" - -#, fuzzy -#~ msgid "New Lyrics" -#~ msgstr "Şarkı Sözleri" - -#~ msgid "Your document currently has no filename, please save first." -#~ msgstr "Belgenize bir dosya adı vermediniz, lütfen önce kaydediniz." - -#~ msgid "" -#~ "Sorry, support for remote files is not yet implemented.\n" -#~ "Please save your document to a local file." -#~ msgstr "" -#~ "Üzgünüm, uzak dosya desteği henüz verilmiyor.\n" -#~ "Lütfen belgenizi yerel bir dosyaya kaydediniz." - -#~ msgid "Already Running" -#~ msgstr "Şu Anda Çalışıyor" - -#~ msgid "Untitled" -#~ msgstr "Başlıksız" diff -Nru frescobaldi-1.2.0/po/update-po.sh frescobaldi-2.0.0/po/update-po.sh --- frescobaldi-1.2.0/po/update-po.sh 2010-07-18 19:31:04.000000000 +0000 +++ frescobaldi-2.0.0/po/update-po.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -#!/bin/sh - -package=$(sed -n 's/^project\s*(\s*\(\w*\).*/\1/p' ../CMakeLists.txt) -version=$(sed -n 's/.*VERSION "\(.*\)".*/\1/p' ../CMakeLists.txt) -email=$(sed -n 's/^bugs\s*=\s*"\(.*\)".*/\1/p' ../frescobaldi.py) - -# Update pot file: -xgettext \ - --language=python \ - --output=frescobaldi.pot \ - --package-name="$package" \ - --package-version="$version" \ - --msgid-bugs-address="$email" \ - -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 \ - -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ - -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 \ - ../frescobaldi.py \ - dummy.py \ - ../python/ly/*.py \ - ../python/kateshell/exception.py \ - ../python/kateshell/mainwindow.py \ - ../python/kateshell/shortcut.py \ - ../python/kateshell/sessions.py \ - ../python/frescobaldi_app/*.py \ - ../python/frescobaldi_app/scorewiz/*.py -# ../python/kateshell/app.py is not needed, strings there are also in Katepart - -# Update po files: -for po in *.po -do - msgmerge -U "$po" frescobaldi.pot && touch "$po" -done - diff -Nru frescobaldi-1.2.0/prebuilt/CMakeLists.txt frescobaldi-2.0.0/prebuilt/CMakeLists.txt --- frescobaldi-1.2.0/prebuilt/CMakeLists.txt 2010-12-26 06:38:36.000000000 +0000 +++ frescobaldi-2.0.0/prebuilt/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -add_subdirectory(pics) -add_subdirectory(po) Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/arpeggio_arrow_down.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/arpeggio_arrow_down.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/arpeggio_arrow_up.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/arpeggio_arrow_up.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/arpeggio_bracket.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/arpeggio_bracket.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/arpeggio_normal.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/arpeggio_normal.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/arpeggio_parenthesis.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/arpeggio_parenthesis.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_accent.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_accent.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_coda.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_coda.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_downbow.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_downbow.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_downmordent.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_downmordent.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_downprall.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_downprall.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_espressivo.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_espressivo.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_fermata.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_fermata.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_flageolet.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_flageolet.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_halfopen.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_halfopen.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_lheel.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_lheel.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_lineprall.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_lineprall.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_longfermata.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_longfermata.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_ltoe.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_ltoe.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_marcato.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_marcato.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_mordent.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_mordent.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_open.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_open.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_portato.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_portato.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_pralldown.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_pralldown.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_prallmordent.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_prallmordent.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_prall.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_prall.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_prallprall.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_prallprall.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_prallup.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_prallup.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_reverseturn.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_reverseturn.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_rheel.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_rheel.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_rtoe.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_rtoe.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_segno.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_segno.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_shortfermata.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_shortfermata.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_signumcongruentiae.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_signumcongruentiae.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_snappizzicato.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_snappizzicato.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_staccatissimo.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_staccatissimo.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_staccato.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_staccato.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_stopped.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_stopped.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_tenuto.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_tenuto.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_thumb.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_thumb.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_trill.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_trill.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_turn.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_turn.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_upbow.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_upbow.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_upmordent.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_upmordent.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_upprall.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_upprall.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_varcoda.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_varcoda.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/articulation_verylongfermata.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/articulation_verylongfermata.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_cswc.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_cswc.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_cswsc.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_cswsc.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_dashed.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_dashed.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_dotted.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_dotted.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_double.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_double.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_end.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_end.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_invisible.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_invisible.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_repeat_double.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_repeat_double.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_repeat_end.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_repeat_end.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_repeat_start.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_repeat_start.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_segno.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_segno.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_single.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_single.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_sws.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_sws.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_tick.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_tick.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_ws.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_ws.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/bar_ww.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/bar_ww.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/breathe_caesura_curved.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/breathe_caesura_curved.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/breathe_caesura_straight.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/breathe_caesura_straight.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/breathe_rcomma.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/breathe_rcomma.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/breathe_rvarcomma.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/breathe_rvarcomma.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/clef_alto.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/clef_alto.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/clef_bass.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/clef_bass.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/clef_none.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/clef_none.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/clef_percussion.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/clef_percussion.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/clef_tab.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/clef_tab.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/clef_tenor.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/clef_tenor.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/clef_treble_8.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/clef_treble_8.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/clef_treble.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/clef_treble.png differ diff -Nru frescobaldi-1.2.0/prebuilt/pics/CMakeLists.txt frescobaldi-2.0.0/prebuilt/pics/CMakeLists.txt --- frescobaldi-1.2.0/prebuilt/pics/CMakeLists.txt 2010-12-26 06:38:36.000000000 +0000 +++ frescobaldi-2.0.0/prebuilt/pics/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -file(GLOB pngs *.png) -install(FILES ${pngs} DESTINATION ${APP_DIR}/pics) Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_cresc.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_cresc.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_decresc.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_decresc.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_dim.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_dim.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_fffff.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_fffff.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_ffff.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_ffff.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_fff.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_fff.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_ff.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_ff.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_f.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_f.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_fp.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_fp.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_hairpin_cresc.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_hairpin_cresc.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_hairpin_dim.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_hairpin_dim.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_mf.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_mf.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_mp.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_mp.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_p.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_p.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_pp.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_pp.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_ppp.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_ppp.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_pppp.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_pppp.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_ppppp.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_ppppp.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_rfz.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_rfz.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_sff.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_sff.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_sf.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_sf.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_sfz.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_sfz.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_sp.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_sp.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/dynamic_spp.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/dynamic_spp.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/glissando_dashed.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/glissando_dashed.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/glissando_dotted.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/glissando_dotted.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/glissando_normal.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/glissando_normal.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/glissando_trill.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/glissando_trill.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/glissando_zigzag.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/glissando_zigzag.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_16d.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_16d.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_16.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_16.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_1d.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_1d.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_1.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_1.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_2d.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_2d.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_2.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_2.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_4d.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_4d.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_4.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_4.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_8d.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_8d.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/note_8.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/note_8.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/scorewiz.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/scorewiz.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/slur_solid.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/slur_solid.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/spanner_beam16.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/spanner_beam16.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/spanner_trill.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/spanner_trill.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/system_brace.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/system_brace.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/system_bracket.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/system_bracket.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/time_c22.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/time_c22.png differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/pics/time_c44.png and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/pics/time_c44.png differ diff -Nru frescobaldi-1.2.0/prebuilt/po/CMakeLists.txt frescobaldi-2.0.0/prebuilt/po/CMakeLists.txt --- frescobaldi-1.2.0/prebuilt/po/CMakeLists.txt 2010-12-26 06:38:36.000000000 +0000 +++ frescobaldi-2.0.0/prebuilt/po/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -file(GLOB mo_files *.mo) -foreach(mo ${mo_files}) - get_filename_component(lang ${mo} NAME_WE) - install( - FILES ${mo} - DESTINATION ${LOCALE_INSTALL_DIR}/${lang}/LC_MESSAGES - RENAME ${PROJECT_NAME}.mo - ) -endforeach(mo) Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/cs.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/cs.mo differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/de.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/de.mo differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/es.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/es.mo differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/fr.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/fr.mo differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/gl.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/gl.mo differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/it.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/it.mo differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/nl.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/nl.mo differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/pl.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/pl.mo differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/ru.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/ru.mo differ Binary files /tmp/P3PtaS76pc/frescobaldi-1.2.0/prebuilt/po/tr.mo and /tmp/z3itFtculI/frescobaldi-2.0.0/prebuilt/po/tr.mo differ diff -Nru frescobaldi-1.2.0/python/CMakeLists.txt frescobaldi-2.0.0/python/CMakeLists.txt --- frescobaldi-1.2.0/python/CMakeLists.txt 2009-01-16 09:11:01.000000000 +0000 +++ frescobaldi-2.0.0/python/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -python_install_directory(${MODULE_DIR}) diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/actions.py frescobaldi-2.0.0/python/frescobaldi_app/actions.py --- frescobaldi-1.2.0/python/frescobaldi_app/actions.py 2010-09-29 09:41:54.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/actions.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,385 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Actions (that can be performed on files generated by running LilyPond) -""" - -import os, sip -from subprocess import Popen, PIPE - -from PyQt4.QtCore import QSize, Qt -from PyQt4.QtGui import ( - QKeySequence, QLabel, QListWidget, QListWidgetItem, QMenu, QPrinter, - QToolButton) -from PyKDE4.kdecore import KGlobal, KShell, KToolInvocation, KUrl, i18n, i18np -from PyKDE4.kdeui import ( - KdePrint, KDialog, KIcon, KMessageBox, KStandardGuiItem, KVBox) -from PyKDE4.kio import KRun - -import ly.parse - -from kateshell.mainwindow import addAccelerators - - -# Easily get our global config -def config(group): - return KGlobal.config().group(group) - - -class ActionManager(object): - def __init__(self, mainwin): - self.mainwin = mainwin - - def addActionsToMenu(self, updatedFiles, menu): - """ - Queries updatedFiles() and adds corresponding actions to the menu. - """ - # PDFs - pdfs = updatedFiles("pdf") - for pdf in pdfs: - name = '"{0}"'.format(os.path.basename(pdf)) - a = menu.addAction(KIcon("application-pdf"), - i18n("Open %1 in external viewer", name)) - a.triggered.connect((lambda pdf: lambda: self.openPDF(pdf))(pdf)) - if pdfs: - menu.addSeparator() - # MIDIs - midis = updatedFiles("mid*") - for midi in midis: - name = '"{0}"'.format(os.path.basename(midi)) - a = menu.addAction(KIcon("media-playback-start"), i18n("Play %1", name)) - a.triggered.connect((lambda midi: lambda: self.openMIDI(midi))(midi)) - if not pdfs and not midis: - a = menu.addAction( - i18n("(No up-to-date MIDI or PDF files available.)")) - a.setToolTip(i18n( - "There are no up-to-date MIDI or PDF files available. " - "Please run LilyPond to create one or more output files.")) - else: - addAccelerators(menu.actions()) - - def openPDF(self, fileName): - """ - Opens a PDF in the configured external PDF viewer, or in the - KDE default one. - """ - openPDF(fileName, self.mainwin) - - def openMIDI(self, fileName): - """ - Opens a MIDI in the configured external MIDI player, or in the - KDE default one. - """ - openMIDI(fileName, self.mainwin) - - def printPDF(self, pdfFileName): - """ Prints the PDF using the configured print command """ - printPDF(pdfFileName, self.mainwin) - - def openDirectory(self, path=None): - """ - Opens a folder. If None, opes the document folder if any, or else - the current working directory in the default KDE file manager. - """ - if path is None: - d = self.mainwin.currentDocument() - if d.url().isEmpty(): - if d.localFileManager(): - path = d.localFileManager().directory - else: - path = self.mainwin.app.defaultDirectory() or os.getcwd() - else: - path = d.url().resolved(KUrl('.')) - url = KUrl(path) - url.adjustPath(KUrl.RemoveTrailingSlash) - sip.transferto(KRun(url, self.mainwin), None) # C++ will delete it - - def email(self, updatedFiles, warnpreview=False): - """ - Collects updated files and provides a nice dialog to send them. - If warnpreview, the user is warned because he/she would send a PDF - with point-and-click links in it. The PDFs are MUCH larger in that case. - """ - if os.path.exists(updatedFiles.lyfile): - EmailDialog(self.mainwin, updatedFiles, warnpreview).exec_() - else: - KMessageBox.sorry(self.mainwin, - i18n("There are no files to send via email."), - i18n("No files to send")) - - def print_(self, updatedFiles): - """ - Print updated PDF files. - - If there are no updated PDF's a warning is displayed. - If there is one updated PDF, the print dialog is displayed. - If there is more than one PDF, a dialog is displayed to select the - files to print. - """ - pdfs = updatedFiles("pdf") - if not pdfs: - KMessageBox.sorry(self.mainwin, i18n( - "There are no PDF documents to print.\n\n" - "You probably need to run LilyPond to create or update a " - "PDF document. If you are creating MIDI files, be sure you " - "also put a \layout { } section in your score, otherwise " - "LilyPond will not create a PDF."), - i18n("No files to print")) - elif len(pdfs) == 1: - printPDF(pdfs[0], self.mainwin) - else: - PrintSelectDialog(self.mainwin, pdfs).exec_() - - -class EmailDialog(KDialog): - def __init__(self, parent, updatedFiles, warnpreview): - KDialog.__init__(self, parent) - self.setAttribute(Qt.WA_DeleteOnClose) - self.setButtons(KDialog.ButtonCode(KDialog.Ok | KDialog.Cancel)) - self.setCaption(i18n("Email documents")) - self.showButtonSeparator(True) - b = KVBox(self) - b.setSpacing(4) - QLabel(i18n("Please select the files you want to send:"), b) - fileList = QListWidget(b) - fileList.setIconSize(QSize(22, 22)) - fileList.setWhatsThis(i18n( - "These are the files that are up-to-date (i.e. newer than " - "the LilyPond source document). Also LilyPond files included " - "by the source document are shown.")) - - lyFiles = ly.parse.findIncludeFiles(updatedFiles.lyfile, - config("preferences").readPathEntry("lilypond include path", [])) - pdfFiles = updatedFiles("pdf") - midiFiles = updatedFiles("mid*") - - if warnpreview and pdfFiles: - QLabel(i18np( - "Note: this PDF file has been created with " - "embedded point-and-click URLs (preview mode), which " - "increases the file size dramatically. " - "Please consider to rebuild the file in publish mode, " - "because then the PDF file is much smaller.", - "Note: these PDF files have been created with " - "embedded point-and-click URLs (preview mode), which " - "increases the file size dramatically. " - "Please consider to rebuild the files in publish mode, " - "because then the PDF files are much smaller.", - len(pdfFiles)), b).setWordWrap(True) - - if not pdfFiles and not midiFiles: - QLabel(i18n( - "Note: If there are no PDF and no MIDI files, you " - "probably need to run LilyPond to update those files, " - "before sending the e-mail."), - b).setWordWrap(True) - - self.fileList = fileList - self.setMainWidget(b) - self.resize(450, 300) - - basedir = os.path.dirname(updatedFiles.lyfile) - exts = config("general").readEntry("email_extensions", [".pdf"]) - - def item(icon, fileName): - """ Add item to the fileList list widget. """ - directory, name = os.path.split(fileName) - if directory != basedir: - name += " ({0})".format(os.path.normpath(directory)) - i = QListWidgetItem(KIcon(icon), name, fileList) - i.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsUserCheckable) - i.ext = os.path.splitext(fileName)[1] - i.url = KUrl.fromPath(fileName).url() - i.setCheckState(Qt.Checked if i.ext in exts else Qt.Unchecked) - - # insert the files - for lyfile in lyFiles: - item("text-x-lilypond", lyfile) - for pdf in pdfFiles: - item("application-pdf", pdf) - for midi in midiFiles: - item("audio-midi", midi) - - def selectedItems(self): - """ Yields all checked items. """ - for row in range(self.fileList.count()): - item = self.fileList.item(row) - if item.checkState() == Qt.Checked: - yield item - - def done(self, result): - if result: - # Save selected extensions to preselect next time. - exts = list(set(item.ext for item in self.selectedItems())) - config("general").writeEntry("email_extensions", exts) - urls = [item.url for item in self.selectedItems()] - emailFiles(urls) - KDialog.done(self, result) - - -class PrintSelectDialog(KDialog): - def __init__(self, mainwin, pdfs): - KDialog.__init__(self, mainwin) - self.mainwin = mainwin - self.setAttribute(Qt.WA_DeleteOnClose) - self.setButtons(KDialog.ButtonCode( - KDialog.User1 | KDialog.Ok | KDialog.Cancel)) - self.setButtonGuiItem(KDialog.Ok, KStandardGuiItem.print_()) - self.setButtonIcon(KDialog.User1, KIcon("edit-select-all")) - self.setButtonText(KDialog.User1, i18n("Select all")) - self.setCaption(i18n("Print documents")) - b = KVBox(self) - b.setSpacing(4) - QLabel(i18n("Please select the files you want to print:"), b) - fileList = QListWidget(b) - fileList.setIconSize(QSize(22, 22)) - fileList.setWhatsThis(i18n( - "These are the PDF documents that are up-to-date (i.e. newer than " - "the LilyPond source document). " - "Check the documents you want to send to the printer.")) - - for pdf in pdfs: - i = QListWidgetItem(KIcon("application-pdf"), os.path.basename(pdf), - fileList) - i.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | - Qt.ItemIsUserCheckable) - i.setCheckState(Qt.Unchecked) - - fileList.item(0).setCheckState(Qt.Checked) - self.fileList = fileList - self.setMainWidget(b) - self.resize(350, 200) - self.pdfs = pdfs - self.user1Clicked.connect(self.selectAll) - - def selectAll(self): - for i in range(self.fileList.count()): - self.fileList.item(i).setCheckState(Qt.Checked) - - def done(self, result): - pdfs = [] - if result: - for i, pdf in zip(range(self.fileList.count()), self.pdfs): - if self.fileList.item(i).checkState() == Qt.Checked: - pdfs.append(pdf) - KDialog.done(self, result) - if pdfs: - printPDFs(pdfs, self.mainwin) - - -def openPDF(fileName, window): - """ - Opens a PDF in the configured external PDF viewer, or in the - KDE default one. - """ - openFile(fileName, window, config("commands").readEntry("pdf viewer", "")) - -def openMIDI(fileName, window): - """ - Opens a MIDI in the configured external MIDI player, or in the - KDE default one. - """ - openFile(fileName, window, config("commands").readEntry("midi player", "")) - -def openFile(fileName, window, cmd = None): - """ - Opens a file with command cmd (string, read from config) - or with the KDE default application (via KRun). - """ - if cmd: - cmd, err = KShell.splitArgs(cmd) - if err == KShell.NoError: - cmd.append(fileName) - try: - Popen(cmd) - return - except OSError: - pass - # let C++ own the KRun object, it will delete itself. - sip.transferto(KRun(KUrl.fromPath(fileName), window), None) - -def printPDF(pdfFileName, window, printer=None): - """Prints the given PDF file. See printPDFs for more information. """ - printPDFs([pdfFileName], window, printer) - -def printPDFs(pdfFileNames, window, printer=None): - """Prints the give list of PDF files. - - If printer (a QPrinter instance) is not given, a print dialog is opened. - - """ - if not pdfFileNames: - return # don't do anything on an empty list. - - if printer is None: - # open a dialog - if len(pdfFileNames) == 1: - printer = getPrinter(window, - i18n("Print %1", os.path.basename(pdfFileNames[0]))) - else: - printer = getPrinter(window, - i18np("Print 1 file", "Print %1 files", len(pdfFileNames)), - allowPrintToFile=False) - if not printer: - return # cancelled - - import kateshell.fileprinter - try: - kateshell.fileprinter.printFiles(pdfFileNames, printer) - except kateshell.fileprinter.NoPrintCommandFound: - KMessageBox.error(window, i18n( - "A print command (like 'lpr' or 'lp') could not be found on your " - "system.")) - except kateshell.fileprinter.CommandNotFound as e: - KMessageBox.error(window, i18n( - "The command '%1' could not be found on your system.", e.args[0])) - except kateshell.fileprinter.CommandFailed as e: - cmd, ret = e.args - KMessageBox.error(window, i18n( - "The command below has been run, but exited with a return code %1." - "\n\n%2", ret, cmd)) - -def getPrinter(window, caption=None, printer=None, allowPrintToFile=True): - """Opens a Print Dialog and waits for user interaction. - - If the dialog is accepted, the configured printer (a QPrinter) is - returned, otherwise None. - - window is the parent window for the print dialog. - If printer is given, it must be a QPrinter instance. - If allowPrintToFile=False, printing to a file is not allowed. - - """ - if printer is None: - printer = QPrinter() - dlg = KdePrint.createPrintDialog(printer, window) - if caption: - dlg.setWindowTitle(KDialog.makeStandardCaption(caption)) - dlg.setOption(dlg.PrintToFile, allowPrintToFile) - if dlg.exec_(): - return printer - -def emailFiles(urls): - """ Open the default mailer with the given urls (list of str) attached. """ - to, cc, bcc, subject, body, msgfile = '', '', '', '', '', '' - KToolInvocation.invokeMailer(to, cc, bcc, subject, body, msgfile, urls) - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/blankpaper.py frescobaldi-2.0.0/python/frescobaldi_app/blankpaper.py --- frescobaldi-1.2.0/python/frescobaldi_app/blankpaper.py 2010-08-28 19:51:26.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/blankpaper.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,948 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -A wizard to create empty staff paper with LilyPond -""" -import sip - -from PyQt4.QtCore import QSize, Qt -from PyQt4.QtGui import ( - QCheckBox, QComboBox, QGridLayout, QGroupBox, QHBoxLayout, QIcon, QLabel, - QPixmap, QPushButton, QSpinBox, QStackedWidget, QToolButton, QTreeWidget, - QTreeWidgetItem, QVBoxLayout, QWidget) - -from PyKDE4.kdecore import KGlobal, KUrl, i18n -from PyKDE4.kdeui import ( - KDialog, KIcon, KMessageBox, KPushButton, KStandardGuiItem) -from PyKDE4.kio import KFileDialog, KIO - -import ly, ly.indent -from kateshell.app import cacheresult -from kateshell.widgets import StackFader -from frescobaldi_app.mainapp import SymbolManager, lilyPondVersion -from frescobaldi_app.widgets import ClefSelector -from frescobaldi_app.runlily import BackgroundJob, LilyPreviewDialog -from frescobaldi_app.actions import openPDF, printPDF, getPrinter - - -class Dialog(KDialog): - def __init__(self, mainwin): - KDialog.__init__(self, mainwin) - self.jobs = [] - self.mainwin = mainwin - self.setButtons(KDialog.ButtonCode( - KDialog.Try | KDialog.Help | - KDialog.Details | KDialog.Reset | - KDialog.Ok | KDialog.Cancel)) - self.setButtonIcon(KDialog.Try, KIcon("run-lilypond")) - self.setCaption(i18n("Create blank staff paper")) - self.setHelp("blankpaper") - self.setDefaultButton(KDialog.Ok) - - layout = QGridLayout(self.mainWidget()) - self.typeChooser = QComboBox() - self.stack = QStackedWidget() - StackFader(self.stack) - paperSettings = QWidget(self) - paperSettings.setLayout(QHBoxLayout()) - self.actionChooser = QComboBox(self) - layout.addWidget(self.typeChooser, 0, 1) - layout.addWidget(self.stack, 1, 0, 1, 3) - layout.addWidget(self.actionChooser, 2, 1) - l = QLabel(i18n("Type:")) - l.setBuddy(self.typeChooser) - layout.addWidget(l, 0, 0, Qt.AlignRight) - l = QLabel(i18n("Action:")) - l.setBuddy(self.actionChooser) - layout.addWidget(l, 2, 0, Qt.AlignRight) - - # tool tips - self.typeChooser.setToolTip(i18n( - "Choose what kind of empty staves you want to create.")) - self.actionChooser.setToolTip(i18n( - "Choose which action happens when clicking \"Ok\".")) - self.setButtonToolTip(KDialog.Try, i18n( - "Preview the empty staff paper.")) - self.setButtonToolTip(KDialog.Details, i18n( - "Click to see more settings.")) - - # paper stuff - paper = QGroupBox(i18n("Paper")) - paperSettings.layout().addWidget(paper) - settings = QGroupBox(i18n("Settings")) - paperSettings.layout().addWidget(settings) - - paper.setLayout(QGridLayout()) - - self.paperSize = QComboBox() - l = QLabel(i18n("Paper size:")) - l.setBuddy(self.paperSize) - paper.layout().addWidget(l, 0, 0, Qt.AlignRight) - paper.layout().addWidget(self.paperSize, 0, 1) - self.paperSize.addItem(i18n("Default")) - self.paperSize.addItems(ly.paperSizes) - - self.staffSize = QSpinBox() - l = QLabel(i18n("Staff Size:")) - l.setBuddy(self.staffSize) - paper.layout().addWidget(l, 1, 0, Qt.AlignRight) - paper.layout().addWidget(self.staffSize, 1, 1) - self.staffSize.setRange(8, 40) - - self.pageCount = QSpinBox() - l = QLabel(i18n("Page count:")) - l.setBuddy(self.pageCount) - paper.layout().addWidget(l, 2, 0, Qt.AlignRight) - paper.layout().addWidget(self.pageCount, 2, 1) - self.pageCount.setRange(1, 1000) - - self.removeTagline = QCheckBox(i18n("Remove default tagline")) - paper.layout().addWidget(self.removeTagline, 3, 0, 1, 2) - - settings.setLayout(QGridLayout()) - - self.barLines = QCheckBox(i18n("Print Bar Lines")) - self.barsPerLine = QSpinBox() - l = QLabel(i18n("Bars per line:")) - l.setBuddy(self.barsPerLine) - settings.layout().addWidget(self.barLines, 0, 0, 1, 2) - settings.layout().addWidget(l, 1, 0, Qt.AlignRight) - settings.layout().addWidget(self.barsPerLine, 1, 1) - self.barsPerLine.setRange(1, 20) - - self.pageNumbers = QCheckBox(i18n("Print Page Numbers")) - self.pageNumStart = QSpinBox() - l = QLabel(i18n("Start with:")) - l.setBuddy(self.pageNumStart) - settings.layout().addWidget(self.pageNumbers, 2, 0, 1, 2) - settings.layout().addWidget(l, 3, 0, Qt.AlignRight) - settings.layout().addWidget(self.pageNumStart, 3, 1) - self.barLines.toggled.connect(self.barsPerLine.setEnabled) - self.pageNumbers.toggled.connect(self.pageNumStart.setEnabled) - - # types - self.typeWidgets = [ - SingleStaff(self), - PianoStaff(self), - OrganStaff(self), - ChoirStaff(self), - CustomStaff(self), - ] - for widget in self.typeWidgets: - self.stack.addWidget(widget) - self.typeChooser.addItem(widget.name()) - self.typeChooser.currentIndexChanged.connect(lambda index: - self.stack.setCurrentWidget(self.typeWidgets[index])) - - self.actors = [ - PrintPDF, - SavePDF, - OpenPDF, - CopyToEditor, - ] - for actor in self.actors: - self.actionChooser.addItem(actor.name()) - - self.setDetailsWidget(paperSettings) - # cleanup on exit - mainwin.aboutToClose.connect(self.cleanup) - # buttons - self.resetClicked.connect(self.default) - self.tryClicked.connect(self.showPreview) - self.setInitialSize(QSize(400, 240)) - self.default() - self.loadSettings() - - def done(self, r): - self.saveSettings() - KDialog.done(self, r) - if r: - self.actors[self.actionChooser.currentIndex()](self) - - def default(self): - """ Set everything to default """ - self.paperSize.setCurrentIndex(0) - self.staffSize.setValue(22) - self.pageCount.setValue(1) - self.removeTagline.setChecked(False) - self.barLines.setChecked(False) - self.barsPerLine.setValue(4) - self.barsPerLine.setEnabled(False) - self.pageNumbers.setChecked(False) - self.pageNumStart.setValue(1) - self.pageNumStart.setEnabled(False) - self.typeChooser.setCurrentIndex(0) - self.actionChooser.setCurrentIndex(0) - for widget in self.typeWidgets: - widget.default() - - def loadSettings(self): - conf = config() - self.removeTagline.setChecked(conf.readEntry("remove tagline", False)) - action = conf.readEntry("action", "PrintPDF") - for index, actor in enumerate(self.actors): - if actor.__name__ == action: - self.actionChooser.setCurrentIndex(index) - - def saveSettings(self): - conf = config() - conf.writeEntry("remove tagline", self.removeTagline.isChecked()) - action = self.actors[self.actionChooser.currentIndex()].__name__ - conf.writeEntry("action", action) - - def showPreview(self): - self.previewDialog().showPreview(self.ly()) - - @cacheresult - def previewDialog(self): - return PreviewDialog(self) - - def ly(self): - """ - Return the LilyPond document to print the empty staff paper. - """ - staff = self.stack.currentWidget() - output = [] - version = lilyPondVersion() - if version: - output.append('\\version "{0}"\n'.format(version)) - output.append('#(set-global-staff-size {0})\n'.format(self.staffSize.value())) - # paper section - output.append('\\paper {') - if self.paperSize.currentIndex() > 0: - output.append('#(set-paper-size "{0}")'.format(ly.paperSizes[self.paperSize.currentIndex()-1])) - if self.pageNumbers.isChecked(): - output.append('top-margin = 10\\mm') - output.append('first-page-number = #{0}'.format(self.pageNumStart.value())) - output.append('oddHeaderMarkup = \\markup \\fill-line {') - output.append('\\strut') - output.append("\\fromproperty #'page:page-number-string") - output.append('}') - else: - output.append('top-margin = 16\\mm') - output.append('oddHeaderMarkup = ##f') - output.append('evenHeaderMarkup = ##f') - if self.removeTagline.isChecked(): - output.append('bottom-margin = 16\\mm') - output.append('oddFooterMarkup = ##f') - else: - output.append('bottom-margin = 10\\mm') - output.append('oddFooterMarkup = \\markup \\abs-fontsize #6 \\fill-line {') - tagline = config().readEntry("tagline", - '\\with-url #"http://www.frescobaldi.org/" FRESCOBALDI.ORG') - output.append('\\sans {{ {0} }}'.format(tagline)) - output.append('\\strut') - output.append('}') - output.append('evenFooterMarkup = ##f') - output.append('ragged-last-bottom = ##f') - output.append('ragged-right = ##f') - output.append('}\n') - # music expression - output.append('music = \\repeat unfold {0} {{ % pages'.format(self.pageCount.value())) - output.append('\\repeat unfold {0} {{ % systems'.format(staff.systemCount())) - output.append('\\repeat unfold {0} {{ % bars'.format( - self.barLines.isChecked() and self.barsPerLine.value() or 1)) - output.extend(('r1', '\\noBreak', '}', '\\break', '\\noPageBreak', '}', '\\pageBreak', '}\n')) - - # get the layout - layout = LayoutContexts() - layout.add("Score", '\\remove "Bar_number_engraver"') - layout.add("Voice", "\\override Rest #'stencil = ##f") - music = staff.music(layout) - layout.addToStaffContexts('\\remove "Time_signature_engraver"') - if not self.barLines.isChecked(): - layout.disableBarLines() - # write it out - output.append('\\layout {\nindent = #0') - output.extend(layout.ly()) - output.append('}\n') - - # score - output.append('\\score {') - output.extend(music) - output.append('}\n') - return ly.indent.indent('\n'.join(output)) - - def cleanup(self): - for job in self.jobs[:]: # copy - job.cleanup() - - -class PreviewDialog(LilyPreviewDialog): - def __init__(self, parent): - LilyPreviewDialog.__init__(self, parent) - self.setCaption(i18n("Blank staff paper preview")) - - -class BlankPaperJob(BackgroundJob): - def __init__(self, dialog): - BackgroundJob.__init__(self) - self.dialog = dialog - dialog.jobs.append(self) - self.run(dialog.ly(), 'staffpaper.ly') - - def finished(self): - """ - Calls handlePDF() with the filename of the created PDF. - Displays the error dialog if no PDF was created. - """ - pdfs = self.job.updatedFiles()("pdf") - if pdfs: - self.handlePDF(pdfs[0]) - else: - self.showLog(i18n("No PDF was created."), '', self.dialog) - - def cleanup(self): - BackgroundJob.cleanup(self) - self.dialog.jobs.remove(self) - - -# The actions that can be taken on a blank paper job -class OpenPDF(BlankPaperJob): - @staticmethod - def name(): - return i18n("Open in PDF viewer") - - def handlePDF(self, fileName): - openPDF(fileName, self.dialog) - - -class SavePDF(BlankPaperJob): - @staticmethod - def name(): - return i18n("Save PDF As...") - - def __init__(self, dialog): - BlankPaperJob.__init__(self, dialog) - self.sourcePDF = None - self.targetPDF = None - dlg = KFileDialog(KUrl(), '*.pdf|{0}\n*|{1}'.format( - i18n("PDF Files"), i18n("All Files")), dialog) - dlg.setOperationMode(KFileDialog.Saving) - dlg.setCaption(i18n("Save PDF")) - dlg.setConfirmOverwrite(True) - dlg.setSelection('staffpaper.pdf') - if dlg.exec_(): - self.targetPDF = dlg.selectedUrl() - self.savePDF() - else: - self.cleanup() - - def handlePDF(self, fileName): - self.sourcePDF = fileName - self.savePDF() - - def savePDF(self): - """ Initiates a copy operation if source and target are both there. """ - if self.sourcePDF and self.targetPDF: - if not KIO.NetAccess.upload(self.sourcePDF, self.targetPDF, self.dialog.mainwin): - KMessageBox.error(self.dialog, KIO.NetAccess.lastErrorString()) - self.cleanup() - - -class PrintPDF(BlankPaperJob): - @staticmethod - def name(): - return i18n("Print...") - - def __init__(self, dialog): - BlankPaperJob.__init__(self, dialog) - self.printer = None - self.fileName = None - printer = getPrinter(dialog, i18n("Print staff paper")) - if printer: - self.printer = printer - self.printPDF() - else: - self.cleanup() - - def handlePDF(self, fileName): - self.fileName = fileName - self.printPDF() - - def printPDF(self): - """ Prints if the printer and the PDF are both there.""" - if self.printer and self.fileName: - printPDF(self.fileName, self.dialog, self.printer) - - -class CopyToEditor(object): - @staticmethod - def name(): - return i18n("Copy LilyPond code to editor") - - def __init__(self, dialog): - doc = dialog.mainwin.currentDocument() - doc.view.insertText(doc.indent(dialog.ly())) - - -class LayoutContexts(object): - """ - A class to manage the \context { \Staff ... } type constructs. - """ - def __init__(self): - self._contexts = {} - self._staffContexts = ['Staff'] - self._spanBarContexts = [] - self._alwaysShowSystemStartBar = False - - def setStaffContexts(self, staffContexts): - """ - Specify which contexts must get visible or invisible barlines, etc. - """ - self._staffContexts = staffContexts - - def addStaffContext(self, staffContext): - """ - Just add a single context that must get (in)visible barlines etc. - """ - if staffContext not in self._staffContexts: - self._staffContexts.append(staffContext) - - def setSpanBarContexts(self, spanBarContexts): - """ - Specify which contexts must have the Span_bar_engraver removed - if no barlines are requested. - """ - self._spanBarContexts = spanBarContexts - - def addSpanBarContext(self, spanBarContext): - """ - Just add a single context which must have the Span_bar_engraver - removed... - """ - if spanBarContext not in self._spanBarContexts: - self._spanBarContexts.append(spanBarContext) - - def add(self, context, line): - """ Add a line to the given context """ - self._contexts.setdefault(context, []).append(line) - - def addToStaffContexts(self, line): - for s in self._staffContexts: - self.add(s, line) - - def disableBarLines(self): - self.addToStaffContexts("\\override BarLine #'stencil = ##f") - for c in self._spanBarContexts: - self.add(c, '\\remove "Span_bar_engraver"') - - def setAlwaysShowSystemStartBar(self, show=True): - line = "\override SystemStartBar #'collapse-height = #1" - inscore = 'Score' in self._contexts and line in self._contexts['Score'] - if show and not inscore: - self.add('Score', line) - elif not show and inscore: - self._contexts['Score'].remove(line) - - def ly(self): - """ Return a list of LilyPond lines. """ - result = [] - for name, lines in self._contexts.iteritems(): - if lines: - result.append('\\context {') - result.append('\\' + name) - result.extend(lines) - result.append('}') - return result - - -class StaffBase(QWidget): - def __init__(self, dialog): - QWidget.__init__(self, dialog) - self.dialog = dialog - self.setLayout(QGridLayout()) - self.systems = QSpinBox() - self.systems.setRange(1, 64) - self.layout().setColumnStretch(0, 1) - self.layout().setColumnStretch(3, 1) - - def systemCount(self): - return self.systems.value() - - def music(self, layout): - """ add lines to layout contexts and returns the music, also in lines """ - return [] - - -class SingleStaff(StaffBase): - def __init__(self, dialog): - StaffBase.__init__(self, dialog) - l = QLabel(i18n("Staves per page:")) - l.setBuddy(self.systems) - self.layout().addWidget(l, 0, 1, Qt.AlignRight) - self.layout().addWidget(self.systems, 0, 2) - self.clef = ClefSelector(noclef=True, tab=True) - l = QLabel(i18n("Clef:")) - l.setBuddy(self.clef) - self.layout().addWidget(l, 1, 1, Qt.AlignRight) - self.layout().addWidget(self.clef, 1, 2) - - def name(self): - return i18n("Single Staff") - - def default(self): - self.systems.setValue(12) - - def music(self, layout): - if self.clef.clef() == 'tab': - layout.setStaffContexts(['TabStaff']) - return ['\\new TabStaff { \\music }'] - else: - if self.clef.clef(): - return ['\\new Staff {{ \\clef "{0}" \\music }}'.format(self.clef.clef())] - else: - layout.add('Staff', "\\override Clef #'transparent = ##t") - return ['\\new Staff { \\music }'] - - -class PianoStaff(StaffBase): - def __init__(self, dialog): - StaffBase.__init__(self, dialog) - l = QLabel(i18n("Systems per page:")) - l.setBuddy(self.systems) - self.layout().addWidget(l, 0, 1, Qt.AlignRight) - self.layout().addWidget(self.systems, 0, 2) - self.clefs = QCheckBox(i18n("Clefs")) - self.layout().addWidget(self.clefs, 1, 2) - - def name(self): - return i18n("Piano Staff") - - def default(self): - self.systems.setValue(6) - self.clefs.setChecked(True) - - def music(self, layout): - layout.setSpanBarContexts(['PianoStaff']) - if not self.clefs.isChecked(): - layout.add('Staff', "\\override Clef #'transparent = ##t") - if lilyPondVersion() < (2, 13, 4): - spacing = "#'minimum-Y-extent = #'(-6 . 3)" - else: - spacing = "#'next-staff-spacing = #'((space . 10))" - return ['\\new PianoStaff <<', - '\\new Staff \\with {', - '\\override VerticalAxisGroup ' + spacing, - '} { \\clef treble \\music }', - '\\new Staff { \\clef bass \\music }', - '>>'] - - -class OrganStaff(PianoStaff): - def name(self): - return i18n("Organ Staff") - - def default(self): - self.systems.setValue(4) - self.clefs.setChecked(True) - - def music(self, layout): - layout.setSpanBarContexts(['GrandStaff']) - if not self.clefs.isChecked(): - layout.add('Staff', "\\override Clef #'transparent = ##t") - if lilyPondVersion() < (2, 13, 4): - spacing = "#'minimum-Y-extent = #'(-6 . 3)" - else: - spacing = "#'next-staff-spacing = #'((space . 12) (stretchability . 1))" - layout.add('Staff', "\\override VerticalAxisGroup " - "#'next-staff-spacing = #'((space . 10) (stretchability . 1))") - return ['<<', - '\\new GrandStaff <<', - '\\new Staff \\with {', - '\\override VerticalAxisGroup ' + spacing, - '} { \\clef treble \\music }', - '\\new Staff { \\clef bass \\music }', - '>>', - '\\new Staff { \\clef bass \\music }', - '>>'] - - -class ChoirStaff(StaffBase): - def __init__(self, dialog): - StaffBase.__init__(self, dialog) - self.staffCount = QSpinBox() - self.staffCount.setRange(2, 8) - l = QLabel(i18n("Staves per system:")) - l.setBuddy(self.staffCount) - self.layout().addWidget(l, 0, 1, Qt.AlignRight) - self.layout().addWidget(self.staffCount, 0, 2) - l = QLabel(i18n("Systems per page:")) - l.setBuddy(self.systems) - self.layout().addWidget(l, 1, 1, Qt.AlignRight) - self.layout().addWidget(self.systems, 1, 2) - self.clefs = QComboBox() - self.clefs.setEditable(True) - self.clefs.setCompleter(None) - l = QLabel(i18n("Clefs:")) - l.setBuddy(self.clefs) - self.layout().addWidget(l, 2, 1, Qt.AlignRight) - self.layout().addWidget(self.clefs, 2, 2) - - # tool tips - self.clefs.setToolTip(i18n( - "Enter as many letters (S, A, T or B) as there are staves.\n" - "See \"What's This\" for more information.")) - self.clefs.setWhatsThis(i18n( - "To configure clefs, first set the number of staves per system. " - "Then enter as many letters (S, A, T or B) as there are staves.\n\n" - "S or A: treble clef,\n" - "T: treble clef with an \"8\" below,\n" - "B: bass clef\n\n" - "So when you want to create music paper for a four-part mixed " - "choir score, first set the number of staves per system to 4. " - "Then enter \"SATB\" (without the quotes) here.")) - - self.staffCount.valueChanged.connect(self.slotStaffCountChanged) - self.slotStaffCountChanged(2) - - def name(self): - return i18n("Choir Staff") - - def default(self): - self.staffCount.setValue(2) - - def slotStaffCountChanged(self, value): - self.clefs.clear() - self.clefs.addItem(i18n("None")) - self.clefs.addItems(( - ('SB', 'SS', 'ST', 'TT', 'TB', 'BB'), # 2 - ('SSB', 'SSS', 'TTB', 'TTT', 'TTB'), # 3 - ('SATB', 'STTB', 'TTBB'), # 4 - ('SSATB', 'SATTB'), # 5 - ('SSATTB', 'SSATBB'), #6 - ('SSATTBB', ), # 7 - ('SATBSATB', 'SSAATTBB') #8 - )[value - 2]) - self.clefs.setCurrentIndex(0) - systemCount = int(12 / value) - if systemCount == 1 and self.dialog.staffSize.value() <= 18: - systemCount = 2 - self.systems.setValue(systemCount) - - def music(self, layout): - clefs = self.clefs.currentText().upper() - length = self.staffCount.value() - if clefs and set(clefs) <= set("SATB"): - # pad to staff count if necessary - clefs = (clefs + clefs[-1] * length)[:length] - else: - clefs = [None] * length - layout.add('Staff', "\\override Clef #'transparent = ##t") - if lilyPondVersion() < (2, 13, 4): - layout.add("Staff", - "\\override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 4)") - music = ['\\new ChoirStaff <<'] - for clef in clefs: - music.append('\\new Staff {{{0} \\music }}'.format({ - 'S': ' \\clef treble', - 'A': ' \\clef treble', - 'T': ' \\clef "treble_8"', - 'B': ' \\clef bass', - None: '', - }[clef])) - music.append('>>') - return music - - -class CustomStaff(SymbolManager, QWidget): - def __init__(self, dialog): - QWidget.__init__(self, dialog) - SymbolManager.__init__(self) - self.setDefaultSymbolSize(40) - self.dialog = dialog - self.setLayout(QGridLayout()) - self.tree = QTreeWidget() - self.stack = QStackedWidget() - StackFader(self.stack) - self.systems = QSpinBox() - newStaves = QVBoxLayout() - operations = QHBoxLayout() - self.layout().addLayout(newStaves, 0, 0) - self.layout().addWidget(self.tree, 0, 1) - self.layout().addWidget(self.stack, 0, 2, 1, 2) - self.layout().addWidget(self.systems, 1, 3) - self.systems.setRange(1, 64) - l = QLabel(i18n("Systems per page:")) - l.setBuddy(self.systems) - self.layout().addWidget(l, 1, 2, Qt.AlignRight) - self.layout().addLayout(operations, 1, 1) - - operations.setSpacing(0) - operations.setContentsMargins(0, 0, 0, 0) - removeButton = KPushButton(KStandardGuiItem.remove()) - removeButton.clicked.connect(self.removeSelectedItems) - operations.addWidget(removeButton) - upButton = QToolButton() - upButton.clicked.connect(self.moveSelectedItemsUp) - upButton.setIcon(KIcon("go-up")) - operations.addWidget(upButton) - downButton = QToolButton() - downButton.clicked.connect(self.moveSelectedItemsDown) - downButton.setIcon(KIcon("go-down")) - operations.addWidget(downButton) - newStaves.setSpacing(0) - newStaves.setContentsMargins(0, 0, 0, 0) - - self.tree.setIconSize(QSize(32, 32)) - self.tree.setDragDropMode(QTreeWidget.InternalMove) - self.tree.headerItem().setHidden(True) - self.tree.itemSelectionChanged.connect(self.slotSelectionChanged) - - for staffType in ( - BracketItem, - BraceItem, - StaffItem, - ): - b = QPushButton(staffType.name()) - b.clicked.connect((lambda t: lambda: self.createItem(t))(staffType)) - b.setIconSize(QSize(40, 40)) - self.addSymbol(b, staffType.symbol()) - newStaves.addWidget(b) - - def createItem(self, staffType): - empty = self.tree.topLevelItemCount() == 0 - items = self.tree.selectedItems() - if len(items) == 1 and items[0].flags() & Qt.ItemIsDropEnabled: - parent = items[0] - else: - parent = self.tree - item = staffType(self, parent) - if empty: - item.setSelected(True) - - def slotSelectionChanged(self): - items = self.tree.selectedItems() - if items: - self.stack.setCurrentWidget(items[0].widget) - - def moveSelectedItemsUp(self): - items = self.tree.selectedItems() - if items: - item = items[0] # currently we support only one selected item - parent = item.parent() or self.tree.invisibleRootItem() - index = parent.indexOfChild(item) - if index > 0: - parent.takeChild(index) - parent.insertChild(index - 1, item) - self.tree.clearSelection() - item.setSelected(True) - item.setExpanded(True) - - def moveSelectedItemsDown(self): - items = self.tree.selectedItems() - if items: - item = items[0] # currently we support only one selected item - parent = item.parent() or self.tree.invisibleRootItem() - index = parent.indexOfChild(item) - if index < parent.childCount() - 1: - parent.takeChild(index) - parent.insertChild(index + 1, item) - self.tree.clearSelection() - item.setSelected(True) - item.setExpanded(True) - - def removeSelectedItems(self): - for item in self.tree.selectedItems(): - item.remove() - - def systemCount(self): - return self.systems.value() - - def name(self): - return i18n("Custom Staff") - - def default(self): - while self.tree.topLevelItemCount(): - self.tree.topLevelItem(0).remove() - self.systems.setValue(4) - - def items(self): - for i in range(self.tree.topLevelItemCount()): - yield self.tree.topLevelItem(i) - - def music(self, layout): - music = sum((i.music(layout) for i in self.items()), ['<<']) - music.append('>>') - return music - - def staffCount(self): - return sum(i.staffCount() for i in self.items()) - - -class Item(QTreeWidgetItem): - def __init__(self, staff, parent): - self.staff = staff - QTreeWidgetItem.__init__(self, parent) - self.setText(0, self.name()) - self.setIcon(0, staff.symbolIcon(self.symbol())) - self.setExpanded(True) - self.widget = self.createWidget() - staff.stack.addWidget(self.widget) - - def createWidget(self): - return QWidget() - - def remove(self): - while self.childCount(): - self.child(0).remove() - sip.delete(self.widget) - sip.delete(self) - - def items(self): - for i in range(self.childCount()): - yield self.child(i) - - def childMusic(self, layout): - """ Returns a list with music from all children """ - return sum((i.music(layout) for i in self.items()), []) - - def staffCount(self): - """ Returns the number of real staves """ - return sum(i.staffCount() for i in self.items()) - - -class StaffItem(Item): - def __init__(self, staff, parent): - Item.__init__(self, staff, parent) - self.setFlags(self.flags() & ~Qt.ItemIsDropEnabled) - - @staticmethod - def name(): - return i18n("Staff") - - @staticmethod - def symbol(): - return 'clef_none' - - def createWidget(self): - w = QWidget() - w.setLayout(QGridLayout()) - self.clef = ClefSelector(noclef=True, tab=True) - l = QLabel(i18n("Clef:")) - l.setBuddy(self.clef) - w.layout().addWidget(l, 0, 0, Qt.AlignRight) - w.layout().addWidget(self.clef, 0, 1) - self.clef.currentIndexChanged.connect(self.clefChanged) - self.spaceBelow = QSpinBox() - self.spaceBelow.setRange(0, 25) - self.spaceBelow.setValue(5) - w.layout().addWidget(self.spaceBelow, 2, 1) - l = QLabel(i18n("Space below:")) - l.setBuddy(self.spaceBelow) - w.layout().addWidget(l, 2, 0, Qt.AlignRight) - return w - - def clefChanged(self, index): - self.setIcon(0, self.staff.symbolIcon('clef_' + (self.clef.clef() or 'none'))) - - def staffCount(self): - return 1 - - def music(self, layout): - clef = self.clef.clef() - staff = 'TabStaff' if clef == 'tab' else 'Staff' - layout.addStaffContext(staff) - music = ['\\new {0} \\with {{'.format(staff)] - if lilyPondVersion() < (2, 13, 4): - music.append( - "\\override VerticalAxisGroup #'minimum-Y-extent = #'(-{0} . 5)".format( - self.spaceBelow.value())) - else: - music.append( - "\\override VerticalAxisGroup #'next-staff-spacing = #'((space . {0}))".format( - self.spaceBelow.value() + 5)) - if not clef: - music.append("\\override Clef #'transparent = ##t") - if not clef or clef == 'tab': - music.append('} { \\music }') - else: - music.append('}} {{ \\clef "{0}" \\music }}'.format(clef)) - return music - - -class BraceItem(Item): - - @staticmethod - def name(): - return i18n("Brace") - - @staticmethod - def symbol(): - return 'system_brace' - - def music(self, layout): - layout.addSpanBarContext('PianoStaff') - withMusic = [] - if self.staffCount() == 1: - withMusic.append("\override SystemStartBrace #'collapse-height = #1") - layout.setAlwaysShowSystemStartBar() - if withMusic: - music = ['\\new PianoStaff \\with {'] + withMusic + ['} <<'] - else: - music = ['\\new PianoStaff <<'] - music.extend(self.childMusic(layout)) - music.append('>>') - return music - - -class BracketItem(Item): - - @staticmethod - def name(): - return i18n("Bracket") - - @staticmethod - def symbol(): - return 'system_bracket' - - def createWidget(self): - w = QWidget() - w.setLayout(QVBoxLayout()) - self.squareBracket = QCheckBox(i18n("Square Bracket")) - w.layout().addWidget(self.squareBracket) - self.connectBarLines = QCheckBox(i18n("Connect bar lines")) - self.connectBarLines.setChecked(True) - w.layout().addWidget(self.connectBarLines) - return w - - def music(self, layout): - staff = self.connectBarLines.isChecked() and 'StaffGroup' or 'ChoirStaff' - layout.addSpanBarContext(staff) - withMusic = [] - if self.staffCount() == 1: - withMusic.append("\override SystemStartBracket #'collapse-height = #1") - layout.setAlwaysShowSystemStartBar() - if self.squareBracket.isChecked(): - withMusic.append("systemStartDelimiter = #'SystemStartSquare") - if withMusic: - music = ['\\new {0} \\with {{'.format(staff)] + withMusic + ['} <<'] - else: - music = ['\\new {0} <<'.format(staff)] - music.extend(self.childMusic(layout)) - music.append('>>') - return music - - -def config(group="blankpaper"): - return KGlobal.config().group(group) - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/charselect.py frescobaldi-2.0.0/python/frescobaldi_app/charselect.py --- frescobaldi-1.2.0/python/frescobaldi_app/charselect.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/charselect.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -import unicodedata, weakref - -from PyQt4.QtGui import QDialogButtonBox, QFont, QKeySequence -from PyKDE4.kdecore import KGlobal, i18n -from PyKDE4.kdeui import KDialog, KCharSelect, KKeySequenceWidget, KShortcut - -from kateshell.app import cacheresult -from kateshell.shortcut import ShortcutClient - -class Dialog(ShortcutClient, KDialog): - """ - A dialog to select special characters. - """ - def __init__(self, mainwin): - KDialog.__init__(self, mainwin) - ShortcutClient.__init__(self, mainwin.charSelectShortcuts) - self.mainwin = mainwin - self.setButtons(KDialog.ButtonCode( - KDialog.Help | KDialog.Apply | KDialog.Ok | KDialog.Close)) - self.setCaption(i18n("Special Characters")) - self.setHelp("charselect") - - # trick key button in the DialogButtonBox - self.keySelector = key = KKeySequenceWidget() - key.layout().setContentsMargins(20, 0, 0, 0) - self.findChild(QDialogButtonBox).layout().insertWidget(1, key) - - self.charSelect = KCharSelect(None) - self.setMainWidget(self.charSelect) - self.charSelect.charSelected.connect(self.insertText) - self.charSelect.currentCharChanged.connect(self.slotCurrentCharChanged) - self.keySelector.keySequenceChanged.connect(self.slotKeySequenceChanged) - self.okClicked.connect(self.insertCurrentChar) - self.applyClicked.connect(self.insertCurrentChar) - self.finished.connect(self.saveSettings) - self.loadSettings() - - def insertText(self, text): - d = self.mainwin.currentDocument() - d.view.insertText(text) - - def insertCurrentChar(self): - c = self.charSelect.currentChar() - if c: - self.insertText(c) - - def loadSettings(self): - c = config() - self.restoreDialogSize(c) - self.charSelect.setCurrentFont( - c.readEntry("font", QFont("Century Schoolbook L"))) # lily default - self.charSelect.setCurrentChar(unichr( - c.readEntry("char", 0))) - - def saveSettings(self): - c = config() - self.saveDialogSize(c) - c.writeEntry("font", self.charSelect.currentFont()) - c.writeEntry("char", ord(self.charSelect.currentChar())) - - def populateAction(self, name, action): - char = unichr(int(name, 16)) - action.setText(u"{0} ({1})".format( - unicodedata.name(char, i18n("unknown")).title(), char)) - - def actionTriggered(self, name): - self.insertText(unichr(int(name, 16))) - - def slotCurrentCharChanged(self, text): - self.keyLoadShortcut(self.keySelector, hex(ord(text))) - - def slotKeySequenceChanged(self, seq): - self.keySaveShortcut(self.keySelector, - hex(ord(self.charSelect.currentChar())), seq) - - def show(self): - self.setCheckActionCollections() - super(Dialog, self).show() - - @cacheresult - def setCheckActionCollections(self): - self.keySetCheckActionCollections(self.keySelector) - - -def config(): - return KGlobal.config().group("charselect") - - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/completion.py frescobaldi-2.0.0/python/frescobaldi_app/completion.py --- frescobaldi-1.2.0/python/frescobaldi_app/completion.py 2010-09-05 20:37:31.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/completion.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,280 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -LilyPond auto completion -""" - -import re - -from PyQt4.QtCore import QModelIndex, Qt -from PyQt4.QtGui import QBrush, QColor, QTextFormat -from PyKDE4.kdecore import KGlobal -from PyKDE4.ktexteditor import KTextEditor - -import ly.tokenize, ly.version, ly.words, ly.colors -import frescobaldi_app.version -from frescobaldi_app.mainapp import lilyPondCommand - - -class CompletionHelper(object): - """ - Helper class that contains a list of completions. - """ - # roles on the Name column - roles = { - KTextEditor.CodeCompletionModel.CompletionRole: - KTextEditor.CodeCompletionModel.FirstProperty | - KTextEditor.CodeCompletionModel.Public | - KTextEditor.CodeCompletionModel.LastProperty, - KTextEditor.CodeCompletionModel.ScopeIndex: 0, - KTextEditor.CodeCompletionModel.MatchQuality: 10, - KTextEditor.CodeCompletionModel.HighlightingMethod: None, - KTextEditor.CodeCompletionModel.InheritanceDepth: 0, - } - - def __init__(self, model, resultList=None): - """ - model is the KTextEditor.CodeCompletionModel helped - by this object. - """ - self.model = model - self.resultList = resultList or [] - - def index(self, row, column, parent): - if (row < 0 or row >= len(self.resultList) or - column < 0 or column >= KTextEditor.CodeCompletionModel.ColumnCount or - parent.isValid()): - return QModelIndex() - return self.model.createIndex(row, column, 0) - - def rowCount(self, parent): - if parent.isValid(): - return 0 # Do not make the model look hierarchical - else: - return len(self.resultList) - - def data(self, index, role): - if index.column() == KTextEditor.CodeCompletionModel.Name: - if role == Qt.DisplayRole: - return self.resultList[index.row()] - try: - return self.roles[role] - except KeyError: - pass - - def executeCompletionItem(self, doc, word, row): - pass - - -class CompletionList(CompletionHelper): - """ - Contains completions presented as a simple list. - """ - def executeCompletionItem(self, doc, word, row): - text = self.resultList[row] - if '{}' in text: - text = text.replace('{}', '{\n(|)\n}') - self.model.doc.manipulator().insertTemplate(text, word.start(), word) - return True - - -class VarCompletions(CompletionHelper): - """ - List of vars, that get ' = ' after themselves. - """ - def executeCompletionItem(self, doc, word, row): - text = self.resultList[row] - line = doc.line(word.end().line())[word.end().column():] - if not line.lstrip().startswith('='): - text += ' = ' - doc.replaceText(word, text) - return True - - -class ColorCompletions(CompletionHelper): - """ - Completions with color, that show the color name highlighted - """ - roles = CompletionHelper.roles.copy() - roles.update({ - KTextEditor.CodeCompletionModel.HighlightingMethod: - KTextEditor.CodeCompletionModel.CustomHighlighting - }) - - def data(self, index, role): - if index.column() == KTextEditor.CodeCompletionModel.Name: - name, (r, g, b) = self.resultList[index.row()] - if role == Qt.DisplayRole: - return name - elif role == KTextEditor.CodeCompletionModel.CustomHighlight: - format = QTextFormat() - color = QColor.fromRgbF(r, g, b) - format.setBackground(QBrush(color)) - return [0, len(name), format] - return super(ColorCompletions, self).data(index, role) - - -class ExpansionCompletions(CompletionHelper): - """ - Looks in the expansions, but skips expansions. - """ - def __init__(self, model): - self.mgr = model.doc.app.mainwin.expandManager() - self.expansions = self.mgr.expansionsList() - descriptions = [self.mgr.description(name) for name in self.expansions] - result = ['{0} ({1})'.format(e, d) for e, d in zip(self.expansions, descriptions)] - super(ExpansionCompletions, self).__init__(model, result) - - def executeCompletionItem(self, doc, word, row): - self.mgr.doExpand(self.expansions[row], word) - return True - - -def getCompletions(model, view, word, invocationType): - """ - Returns an object that describes the matches that - are useful in the current context. - """ - matches = findMatches(model, view, word, invocationType) - if isinstance(matches, CompletionHelper): - return matches - else: - return CompletionList(model, matches) - -def findMatches(model, view, word, invocationType): - """ - Return either a simple list of matches that are useful in the current - context, or a CompletionHelper instance that can handle specialized - completions itself. - """ - doc = view.document() - line, col = word.start().line(), word.start().column() - text = doc.line(line) - text = text[:col] if text else "" # cause KatePart returns None i.s.o. "" - - # determine what the user tries to type - # very specific situations: - if re.search(r'\\(consists|remove)\s*"?$', text): - return ly.words.engravers - if re.search(r'\bmidiInstrument\s*=\s*#?"$', text): - return ly.words.midi_instruments - if re.search(r'\\musicglyph\s*#"$', text): - return musicglyph_names() - if re.search(r'\bmarkFormatter\s*=\s*#$', text): - return ly.words.mark_formatters - if re.search(r'\\key\s+[a-z]+\s*\\$', text): - return ly.words.modes - if re.search(r'\\(un)?set\b\s*$', text): - return ly.words.contexts + ly.words.contextproperties - if re.search(r'\\(new|change|context)\s+$', text): - return ly.words.contexts - if ly.words.set_context_re.search(text): - return ly.words.contextproperties - if ly.words.context_re.search(text): - return ly.words.grobs - if text.endswith("#'"): - m = ly.words.grob_re.search(text[:-2]) - if m: - return ly.words.schemeprops(m.group(1)) - if re.search(r"\\tweak\b\s*$", text[:-2]): - return ly.words.schemeprops() - if re.search(r"\\(override|revert)\s+$", text): - return ly.words.contexts + ly.words.grobs - if re.search(r'\\repeat\s+"?$', text): - return ly.words.repeat_types - if re.search(r'\\clef\s*"$', text): - return ly.words.clefs - if re.search(r"\\clef\s+$", text): - return ly.words.clefs_plain - if re.search(r"\bcolor\s*=?\s*#$", text): - return ColorCompletions(model, ly.colors.colors_predefined) - if re.search(r"\bx11-color\s*'$", text): - return ColorCompletions(model, ly.colors.colors_x11) - if re.search(r"#'break-visibility\s*=\s*#$", text): - return ly.words.break_visibility - # parse to get current context - fragment = doc.text(KTextEditor.Range(KTextEditor.Cursor(0, 0), - word.start())) or "" # KatePart returns None instead of empty string - tokenizer = ly.tokenize.Tokenizer() - token = None # in case the next loop does not run at all - for token in tokenizer.tokens(fragment): - pass - # don't bother if we are inside a string or comment - if isinstance(token, (tokenizer.String, tokenizer.Comment)): - return - - if text.endswith("\\"): - if isinstance(tokenizer.parser(), tokenizer.MarkupParser): - if tokenizer.parser().token == "\\markuplines": - return ly.words.markupcommands + ly.words.markuplistcommands - else: - return ly.words.markupcommands - commands = (ly.words.keywords + ly.words.keywords_completion - + ly.words.musiccommands + ly.words.musiccommands_completion - + lilyPondVersion()) - if tokenizer.parser().token == "\\context": - return commands + ly.words.contexts - else: - return commands - - if isinstance(tokenizer.parser(), tokenizer.SchemeParser): - # is the last token the scheme-introducing '#' ? - if token is tokenizer.parser().token: - return ('UP', 'DOWN', 'CENTER', 'LEFT', 'RIGHT') - else: - if text.endswith("#("): - if tokenizer.parser(-2).token == "\\paper": - return ('set-paper-size',) - elif text.endswith("#:"): - return ly.words.markupcommands - elif text.endswith("#(set-accidental-style '"): - return ly.words.accidentalstyles - return ly.words.schemefuncs - - if col == 0 or text[-1] in " \t": - # all kinds of variables only at start of line or after whitespace - # the VarCompletions model can add ' = ' after them - if tokenizer.parser().token == "\\header": - return VarCompletions(model, ly.words.headervars) - if tokenizer.parser().token == "\\paper": - return VarCompletions(model, ly.words.papervars) - if tokenizer.parser().token == "\\layout": - return VarCompletions(model, ly.words.layoutvars) - if tokenizer.parser().token in ("\\context", "\\with"): - return VarCompletions(model, ly.words.contextproperties) - - if not text.strip(): - # only on an empty line: show the expansions - return ExpansionCompletions(model) - - -# load some (cached) data -def musicglyph_names(): - font = ly.version.LilyPondInstance(lilyPondCommand()).fontInfo("emmentaler-20") - if font: - return tuple(font.glyphs()) - return () - -def lilyPondVersion(): - ver = frescobaldi_app.version.defaultVersion() - return ('version "{0}"'.format(ver),) if ver else () - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/document.py frescobaldi-2.0.0/python/frescobaldi_app/document.py --- frescobaldi-1.2.0/python/frescobaldi_app/document.py 2010-11-06 20:09:14.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/document.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1134 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Advanced manipulations on LilyPond documents. -""" - -import os, re, weakref -from fractions import Fraction - -from PyQt4 import QtCore, QtGui - -from PyKDE4.kdecore import KGlobal, i18n -from PyKDE4.kdeui import KDialog, KIcon, KMessageBox -from PyKDE4.ktexteditor import KTextEditor - -import ly.rx, ly.dynamic, ly.pitch, ly.parse, ly.tokenize, ly.tools, ly.version -from kateshell.app import cacheresult -from kateshell.widgets import promptText -from kateshell.mainwindow import addAccelerators -from frescobaldi_app.mainapp import lilyPondCommand, lilyPondVersion - - -class DocumentManipulator(object): - """ - Can perform manipulations on a LilyPond document. - """ - def __init__(self, doc): - self.doc = weakref.proxy(doc) - - def populateLanguageMenu(self, menu): - menu.clear() - # determine doc language - currentLang = ly.parse.documentLanguage(self.doc.text()) or "nederlands" - for lang in sorted(ly.pitch.pitchInfo.keys()): - a = menu.addAction(lang.title()) - a.setCheckable(True) - if lang == currentLang: - a.setChecked(True) - a.triggered.connect((lambda lang: lambda: self.changeLanguage(lang))(lang)) - addAccelerators(menu.actions()) - - def changeLanguage(self, lang): - """ - Change the LilyPond pitch name language in our document to lang. - - This is a bit hairy because LilyPond has a new syntax for this since 2.14, - \language "name", while the old \include "name.ly" still is supported as well. - """ - newSyntax = (self.doc.lilyPondVersion() or lilyPondVersion()) >= (2, 13, 38) - text, start = self.doc.selectionOrDocument() - try: - changes, includeCommandChanged = ly.tools.translate(text, lang, start) - except ly.QuarterToneAlterationNotAvailable: - KMessageBox.sorry(self.doc.app.mainwin, i18n( - "Can't perform the requested translation.\n\n" - "The music contains quarter-tone alterations, but " - "those are not available in the pitch language \"%1\".", - lang)) - return - - # Apply the changes. - with self.doc.editContext(): - changes.applyToCursor(EditCursor(self.doc.doc)) - if not start and not includeCommandChanged: - if newSyntax: - self.addLineToTop('\\language "{0}"'.format(lang)) - else: - self.addLineToTop('\\include "{0}.ly"'.format(lang)) - if start and not includeCommandChanged: - KMessageBox.information(self.doc.app.mainwin, - '

{0}

' - '

\\include "{1}.ly" {2}

' - '

\\language "{1}" {3}

'.format( - i18n("The pitch language of the selected text has been " - "updated, but you need to manually add the following " - "command to your document:"), - lang, - i18n("(for LilyPond below 2.14), or"), - i18n("(for LilyPond 2.14 and higher.)")), - i18n("Pitch Name Language")) - - def addLineToTop(self, text): - """ - Adds text to the beginning of the document, but below a \version - command. - """ - self.doc.doc.insertLine(self.topInsertPoint(), text) - - def topInsertPoint(self): - """ - Finds the topmost place to add text, but below a \version command. - """ - for line in range(20): - if re.search(r'\\version\s*".*?"', self.doc.line(line)): - return line + 1 - else: - return 0 - - def findInsertPoint(self, lineNum): - """ - Finds the last possible toplevel insertion point before line number - lineNum. Returns the line number to insert text at. - """ - insert = 0 - tokenizer = ly.tokenize.LineColumnTokenizer() - for token in tokenizer.tokens(self.doc.text()): - if (isinstance(token, tokenizer.Space) - and tokenizer.depth() == (1, 0) - and token.count('\n') > 1): - if token.line >= lineNum: - break - insert = token.line + 1 # next line is the line to insert at - return insert or self.topInsertPoint() - - def findBlankLines(self, depth=(1, 0)): - """ - Yields the ranges that represent blank lines in the given depth (count - of parsers, level). - """ - tokenizer = RangeTokenizer() - for token in tokenizer.tokens(self.doc.text()): - if (isinstance(token, tokenizer.Space) - and tokenizer.depth() <= depth - and token.count('\n') > 1): - yield token.range - - def assignSelectionToVariable(self): - """ - Cuts out selected text and stores it under a variable name, adding a - reference to that variable in the original place. - There MUST be a selection. - """ - # ask the variable name - name = promptText(self.doc.app.mainwin, i18n( - "Please enter the name for the variable to assign the selected " - "text to:"), i18n("Cut and Assign"), rx="[a-zA-Z]*", help="cut-assign") - if not name: - return - - # find out in what input mode we are - mode = "" - selRange = self.doc.view.selectionRange() # copy othw. crash in KDE 4.3 /PyQt 4.5.x. - text = self.doc.textToCursor(selRange.start()) - tokenizer = ly.tokenize.Tokenizer() - for token in tokenizer.tokens(text): - pass - for s in reversed(tokenizer.state): - if isinstance(s, tokenizer.InputModeParser): - if isinstance(s, tokenizer.LyricModeParser): - mode = " \\lyricmode" - elif isinstance(s, tokenizer.ChordModeParser): - mode = " \\chordmode" - elif isinstance(s, tokenizer.FigureModeParser): - mode = " \\figuremode" - break - - currentLine = selRange.start().line() - insertLine = self.findInsertPoint(currentLine) - - text = self.doc.selectionText().strip() - if '\n' in text: - result = "{0} ={1} {{\n{2}\n}}\n".format(name, mode, text) - result = self.doc.indent(result) - else: - result = "{0} ={1} {{ {2} }}\n".format(name, mode, text) - - if not isblank(self.doc.line(insertLine)): - result += '\n' - if insertLine > 0 and not isblank(self.doc.line(insertLine - 1)): - result = '\n' + result - - # add space if necessary - variable = "\\" + name - end = selRange.end() - if not isblank(self.doc.line(end.line())[end.column():end.column()+1]): - variable += " " - - # do it: - cursor = KTextEditor.Cursor(insertLine, 0) - with self.doc.editContext(): - self.doc.replaceSelectionWith(variable, keepSelection=False) - self.doc.doc.insertText(cursor, result) - - def repeatLastExpression(self): - """ - Repeat the last entered music expression (without duration) - """ - # find the last non-empty line - curPos = self.doc.view.cursorPosition() - lineNum = curPos.line() - while lineNum > 0 and isblank(self.doc.line(lineNum)): - lineNum -= 1 - - text = self.doc.doc.text( - KTextEditor.Range(KTextEditor.Cursor(lineNum, 0), curPos)) - matchObj = None - for m in ly.rx.chord.finditer(text): - if m.group('chord'): - matchObj = m - if not matchObj: - return # nothing to repeat - - # leave out the duration - result = matchObj.group('chord') - - # remove octave mark from first pitch if in relative mode - tokenizer = RelativeTokenizer() - for token in tokenizer.tokens(self.doc.textToCursor()): - pass - if isinstance(tokenizer.parser(), tokenizer.RelativeParser): - result = re.sub(ly.rx.named_pitch, - lambda m: m.group('step') + m.group('cautionary'), result, 1) - - # add articulations, etc - stuff = text[matchObj.end():] - if not isblank(stuff): - stuff = stuff.splitlines()[0] - # Filter the things we want to repeat. E.g. slur events don't - # make much sense, but artications do. We skip comments and - # strings to avoid matching stuff inside those. - result += ''.join( - m.group(1) - for m in re.compile( - r'(' # keep: - r'[-_^][_.+|>^-]' # - articulation shorthands - r'|[_^]?~' # - ties - r'|\\rest(?![A-Za-z])' # - pitched rests - r')' # skip: - r'|"(?:\\\\|\\\"|[^\"])*"' # - quoted strings - r'|%.*?$' # - comments - ).finditer(stuff) - if m.group(1)) - - # write it in the document, add a space if necessary - col = curPos.column() - if col > 0 and not isblank(self.doc.line()[col-1]): - result = " " + result - self.doc.view.insertText(result) - - def selectLines(self): - """ - Adjust the selection so that full lines are selected. - """ - if not self.doc.view.selection(): - return - - selRange = self.doc.view.selectionRange() # copy othw. crash in KDE 4.3 /PyQt 4.5.x. - start = selRange.start() - end = selRange.end() - cursor = self.doc.view.cursorPosition() - atStart = cursor.position() == start.position() - - if start.column() > 0: - start.setColumn(0) - if end.column() == 0 and end.line() > start.line(): - end.setLine(end.line() - 1) - end.setColumn(len(self.doc.line(end.line()))) - self.doc.view.setSelection(KTextEditor.Range(start, end)) - if atStart: - self.doc.view.setCursorPosition(start) - else: - self.doc.view.setCursorPosition(end) - - def selectFullLines(self): - """ - Extends (if necessary) the selection to cover whole lines, including newline. - """ - if not self.doc.view.selection(): - return - - selRange = self.doc.view.selectionRange() # copy othw. crash in KDE 4.3 /PyQt 4.5.x. - start = selRange.start() - end = selRange.end() - cursor = self.doc.view.cursorPosition() - atStart = cursor.position() == start.position() - - if start.column() > 0: - start.setColumn(0) - if end.column() > 0: - if end.line() < self.doc.doc.lines() - 1: - end.setColumn(0) - end.setLine(end.line() + 1) - else: - end.setColumn(len(self.doc.line(end.line()))) - self.doc.view.setSelection(KTextEditor.Range(start, end)) - if atStart: - self.doc.view.setCursorPosition(start) - else: - self.doc.view.setCursorPosition(end) - - def adjustCursorToChords(self): - """ - Adjust the cursor position in the following way: - - if the cursor is inside a chord, pitch or rest: - position the cursor right after the chord - """ - cursor = self.doc.view.cursorPosition() - col = cursor.column() - text = self.doc.line(cursor.line()) - # inside a chord? - for m in ly.rx.chord_rest.finditer(text): - if (m.group('full') - and m.start() <= col <= m.end()): - cursor.setColumn(m.end()) - self.doc.view.setCursorPosition(cursor) - return - - def adjustSelectionToChords(self): - """ - Adjust the selection in the following way: - start: - - if at a pitch, check if we're inside a chord and if yes, - move to the beginning of that chord. - end: - - if at a pitch: - - if inside a chord: extend to contain chord + dur - - else: extend to contain pitch + dur - - if at a lyric word (i.e. not a command): - - extend selection to contain word (+ dur) - """ - if not self.doc.view.selection(): - return - # We need to save the selectionRange Range instance otherwise - # we crash in KDE 4.3 / PyQt 4.5.x. - selRange = self.doc.view.selectionRange() - start = selRange.start() - end = selRange.end() - # adjust start: - text = self.doc.line(start.line()) - col = start.column() - if re.match(ly.rx.step, text[col:]): - for m in ly.rx.chord.finditer(text): - if (m.group('chord') - and m.group('chord').startswith('<') - and m.start('chord') <= col <= m.end('chord')): - start.setColumn(m.start('chord')) - break - # adjust end: - text = self.doc.line(end.line()) - col = end.column() - if re.match(ly.rx.step + "|" + ly.rx.rest, text[col:]): - for m in ly.rx.chord_rest.finditer(text): - if (m.group('chord') - and m.start('chord') <= col <= m.end('chord')): - end.setColumn(m.end('full')) - break - elif col < len(text) and text[col] not in "\\-_^": - end.setColumn(col + len(text[col:].split()[0])) - self.doc.view.setSelection(KTextEditor.Range(start, end)) - - def indent(self): - """ - Indent the (selected) text. - """ - selection = bool(self.doc.selectionText()) - if selection: - start = None - self.selectLines() - selRange = self.doc.view.selectionRange() # copy othw. crash in KDE 4.3 /PyQt 4.5.x. - cursor = selRange.start() - startline = cursor.line() - # find out if the selected snippet is scheme code - tokenizer = ly.tokenize.Tokenizer() - for token in tokenizer.tokens(self.doc.textToCursor(cursor)): - pass - startscheme = isinstance(tokenizer.parser(), tokenizer.SchemeParser) - text = self.doc.selectionText() - else: - start = 0 - startline = 0 - startscheme = False - text = self.doc.text() - - # save the old indents - ind = lambda line: re.compile(r'[^\S\n]*').match(line).group() - oldindents = map(ind, text.splitlines()) - text = self.doc.indent(text, start = start, startscheme = startscheme) - newindents = map(ind, text.splitlines()) - - # We don't just replace the text, because that would destroy smart - # point and click. We only replace the indents. - with self.doc.editContext(): - for old, new in zip(oldindents, newindents): - if old != new: - self.doc.doc.replaceText( - KTextEditor.Range(startline, 0, startline, len(old)), new) - startline += 1 - self.doc.view.removeSelection() - - def populateContextMenu(self, menu): - """ - Called as soon as the user requests the context menu. - Displays relevant actions for the object clicked on. - """ - menu.clear() - self.addSpecialActionsToContextMenu(menu) - if menu.actions(): - menu.addSeparator() - # standard actions - a = self.doc.app.mainwin.actionCollection().action("edit_cut_assign") - if a and a.isEnabled(): - menu.addAction(a) - for action in ("edit_cut", "edit_copy", "edit_paste"): - a = self.doc.view.actionCollection().action(action) - if a and a.isEnabled(): - menu.addAction(a) - - # Add selection to Expansion Manager - a = self.doc.app.mainwin.actionCollection().action("edit_expand_add") - if a and a.isEnabled(): - menu.addAction(a) - - # LilyPond Help - if not self.doc.selectionText(): - tool = self.doc.app.mainwin.tools.get('lilydoc') - if tool: - cursor = self.doc.view.cursorPosition() - line, col = cursor.line(), cursor.column() - tool.docFinder().addHelpMenu(menu, self.doc.line(line), col) - - # Bookmarks - a = self.doc.view.actionCollection().action("bookmarks") - if a and a.isEnabled(): - menu.addSeparator() - menu.addAction(a) - - def addSpecialActionsToContextMenu(self, menu): - """ - Called by populateContextMenu, adds special actions dependent of - cursor position. - """ - selection = self.doc.selectionText() - if selection: - selRange = self.doc.view.selectionRange() # copy othw. crash in KDE 4.3 /PyQt 4.5.x. - cursor = selRange.start() - else: - cursor = self.doc.view.cursorPosition() - line, col = cursor.line(), cursor.column() - text = self.doc.line(line) - # special actions - # \include file - for m in re.finditer(r'\\include\s*"?([^"]+)', text): - if m.start() <= col <= m.end(): - fileName = m.group(1) - a = menu.addAction(KIcon("document-open"), i18n("Open %1", fileName)) - a.triggered.connect(lambda: self.openIncludeFile(fileName)) - return - - # Rhythm submenu - if selection and ly.rx.chord_rest.search(selection): - menu.addMenu(self.doc.app.mainwin.factory().container( - "lilypond_edit_rhythm", self.doc.app.mainwin)) - - # Brace selection - if selection: - a = self.doc.app.mainwin.actionCollection().action( - "edit_insert_braces") - if a and a.isEnabled(): - menu.addAction(a) - - # Repeat selected music - a = self.doc.app.mainwin.actionCollection().action("edit_repeat") - if a and a.isEnabled(): - menu.addAction(a) - - # run the parser to know more about the current context... - tokenizer = ly.tokenize.Tokenizer() - for token in tokenizer.tokens(self.doc.textToCursor(cursor)): - pass - - # Hyphenate Lyrics - if selection and isinstance(tokenizer.parser(), tokenizer.LyricModeParser): - menu.addSeparator() - menu.addAction( - self.doc.app.mainwin.actionCollection().action("lyrics_hyphen")) - menu.addAction( - self.doc.app.mainwin.actionCollection().action("lyrics_copy_dehyphen")) - - def openIncludeFile(self, fileName): - """ - Opens a fileName that was found after an \\include command. - First, it tries to open the local file, if that fails, look in the - LilyPond data directory. - """ - path = self.doc.localPath() - if path: - localdir = os.path.dirname(path) - else: - localdir = self.doc.app.defaultDirectory() or os.getcwd() - url = os.path.normpath(os.path.join(localdir, fileName)) - if not os.path.exists(url): - datadir = ly.version.LilyPondInstance(lilyPondCommand()).datadir() - if datadir and os.path.exists(os.path.join(datadir, 'ly', fileName)): - url = os.path.join(datadir, 'ly', fileName) - self.doc.app.openUrl(url).setActive() - - def insertTypographicalQuote(self, double = False): - """ - Insert a single or double quotation mark at the current cursor position. - If the character left to the cursor is a space or a double quote, - use the left typographical quote, otherwise the right. - """ - selection = self.doc.selectionText() - if selection: - repl = double and '\u201C{0}\u201D' or '\u2018{0}\u2019' - self.doc.replaceSelectionWith(repl.format(selection), keepSelection=False) - else: - cursor = self.doc.view.cursorPosition() - line, col = cursor.line(), cursor.column() - right = col > 0 and self.doc.line(line)[col-1] not in '" \t' - self.doc.view.insertText({ - (False, False): '\u2018', # LEFT SINGLE QUOTATION MARK - (False, True ): '\u2019', # RIGHT SINGLE QUOTATION MARK - (True, False): '\u201C', # LEFT DOUBLE QUOTATION MARK - (True, True ): '\u201D', # RIGHT DOUBLE QUOTATION MARK - }[(double, right)]) - - def insertBarLine(self, bar): - """ - Insert a \\bar ".." command with the given type. - """ - self.insertIndented('\\bar "{0}"'.format(bar)) - - def insertBreathingSign(self, sign): - """ - Insert a \\breathe mark with possibly an override for another shape. - """ - if sign == 'rcomma': - text = '\\breathe' - else: - text = ("\\once \\override BreathingSign #'text = " - '#(make-musicglyph-markup "scripts.{0}")\n' - "\\breathe").format(sign.replace('_', '.')) - self.insertIndented(text) - - def insertIndented(self, text, cursor=None, wholeLines=None): - """Inserts text on the given or current cursor position. - - The following protocol is used: - - - if there is a newline in the text or wholeLines is True: - add newlines if necessary to have the text on its own lines. - - if wholeLines is False: - don't add newlines - - if no newlines were added: - - if the cursor is at a non-space character: - add a space after the text - - if the cursor is just after a non-space character: - add a space before the text. - """ - cursor = cursor or self.doc.view.cursorPosition() - line, col = cursor.line(), cursor.column() - before = self.doc.line(line)[:col] - after = self.doc.line(line)[col:] - remove = None - if wholeLines or (wholeLines is None and '\n' in text): - if not isblank(after): - text += '\n' - spaces = len(after) - len(after.lstrip()) - if spaces: - remove = KTextEditor.Range(line, col, line, col + spaces) - text = '\n' + self.doc.indent(text, self.doc.currentIndent(cursor)) - if isblank(before): - text = text.lstrip() - else: - if before and not before[-1].isspace(): - text = ' ' + text - if after and not after[0].isspace(): - text += ' ' - if remove: - self.doc.doc.replaceText(remove, text) - else: - self.doc.doc.insertText(cursor, text) - - def insertTemplate(self, text, cursor=None, remove=None, doIndent=True): - """ - Inserts text into the document. If cursor is not given, - use the view's current cursor position. If remove is given, - it is expected to be a KTextEditor.Range() to replace with the - text. - - If the text contains '(|)', the cursor is set there. If the string - '(|)' appears twice, that range is selected after inserting the text. - - The text is also indented. - """ - cursor = cursor or self.doc.view.cursorPosition() - - # place to set cursor or range to select after writing out the expansion - newcursors = [] - - # re-indent the text: - if doIndent and '\n' in text: - text = self.doc.indent(text, self.doc.currentIndent(cursor)).lstrip() - - # "(|)" is the place to position the cursor after inserting - # if this sequence appears twice, the range is selected. - if "(|)" in text: - newcur = Cursor(cursor) - for t in text.split("(|)", 2)[:-1]: - newcur.walk(t) - newcursors.append(newcur.kteCursor()) - text = text.replace("(|)", "") - if remove: - self.doc.doc.replaceText(remove, text) - else: - self.doc.doc.insertText(cursor, text) - if newcursors: - self.doc.view.setCursorPosition(newcursors[0]) - if len(newcursors) > 1: - self.doc.view.setSelection(KTextEditor.Range(*newcursors[:2])) - - def addArticulation(self, art): - """ - Add artication to selected notes or chord, or just insert it. - See lqi.py Articulations. - """ - text = self.doc.selectionText() - if text: - pos = 0 - insertions = [] - selRange = self.doc.view.selectionRange() # copy othw. crash in KDE 4.3 /PyQt 4.5.x. - cur = Cursor(selRange.start()) - for m in ly.rx.chord.finditer(text): - if m.group('chord'): - cur.walk(text[pos:m.end('full')]) - pos = m.end('full') - insertions.append(cur.kteCursor()) - with self.doc.editContext(): - for i in reversed(insertions): - self.doc.doc.insertText(i, art) - self.doc.view.removeSelection() - else: - self.adjustCursorToChords() - self.doc.view.insertText(art) - - _spannerDynamics = { - 'hairpin_cresc': '\\<', - 'hairpin_dim': '\\>', - 'cresc': '\\cresc', - 'decresc': '\\decresc', - 'dim': '\\dim', - } - - def addDynamic(self, name, direction): - """ - Add dynamics with name, direction (-1, 0 or 1). - See lqi.py Dynamics. - """ - isSpanner = name in self._spannerDynamics - if isSpanner: - dynamic = self._spannerDynamics[name] - elif name in ly.dynamic.marks: - dynamic = '\\' + name - else: - return - direction = ['_', '', '^'][direction+1] - - text = self.doc.selectionText() - if text: - items = list(m for m in ly.rx.chord_rest.finditer(text) if m.group('full')) - if len(items) >= 2: - # match objects for the first note and the last in the selection - first, last = items[0], items[-1] - - # text after the first note/chord/rest - afterFirst = text[first.end('full'):] - - # text after the last note/chord/rest - afterLast = text[last.end('full'):] - selRange = self.doc.view.selectionRange() # copy othw. crash in KDE 4.3 /PyQt 4.5.x. - docRange = self.doc.doc.documentRange() - afterLast += self.doc.doc.text( - KTextEditor.Range(selRange.end(), docRange.end()))[:10] - - start = Cursor(selRange.start()) - start.walk(text[:first.end('full')]) - end = Cursor(selRange.start()) - end.walk(text[:last.end('full')]) - - if isSpanner: - with self.doc.editContext(): - # don't terminate the spanner if it already ends with a dynamic - if not ly.rx.dynamic_mark.match(afterLast): - self.doc.doc.insertText(end.kteCursor(), '\\!') - # skip a dynamic mark that might already be at the start - m = ly.rx.dynamic_mark.match(afterFirst) - if m: - start.walk(text[:m.end()]) - direction = '' - # on this place, insert the spanner - self.doc.doc.insertText(start.kteCursor(), direction + dynamic) - else: - # if a spanner ends on the end, replace it with our dynamic - if afterLast.startswith('\\!'): - r = KTextEditor.Range( - end.line, end.column, end.line, end.column + 2) - self.doc.doc.replaceText(r, dynamic) - elif ly.rx.dynamic_mark.match(afterFirst): - self.doc.doc.insertText(end.kteCursor(), direction + dynamic) - else: - self.doc.doc.insertText(start.kteCursor(), direction + dynamic) - return - self.adjustCursorToChords() - self.doc.view.insertText(direction + dynamic) - - def addSpanner(self, name, direction=0): - """ Add a simple spanner to the selected music. """ - if name == "slur": - spanner = '(', ')' - if name == "phrasing_slur": - spanner = '\\(', '\\)' - elif name == "beam": - spanner = '[', ']' - elif name == "trill": - spanner = '\\startTrillSpan', '\\stopTrillSpan' - direction = ['_', '', '^'][direction+1] - - text = self.doc.selectionText() - if not text: - return - - items = list(m for m in ly.rx.chord_rest.finditer(text) if m.group('full')) - if len(items) < 2: - return # can't add spanner to one note or chord - - first, last = items[0], items[-1] - selRange = self.doc.view.selectionRange() # copy othw. crash in KDE 4.3 /PyQt 4.5.x. - start = Cursor(selRange.start()) - start.walk(text[:first.end('full')]) - end = Cursor(selRange.start()) - end.walk(text[:last.end('full')]) - - with self.doc.editContext(): - self.doc.doc.insertText(end.kteCursor(), spanner[1]) - self.doc.doc.insertText(start.kteCursor(), direction + spanner[0]) - - _arpeggioTypes = { - 'arpeggio_normal': '\\arpeggioNormal', - 'arpeggio_arrow_up': '\\arpeggioArrowUp', - 'arpeggio_arrow_down': '\\arpeggioArrowDown', - 'arpeggio_bracket': '\\arpeggioBracket', - 'arpeggio_parenthesis': '\\arpeggioParenthesis', - } - - def addArpeggio(self, name): - """ Ad an arpeggio to the current chord. """ - try: - arpeggioType = self._arpeggioTypes[name] - except KeyError: - return - - self.adjustCursorToChords() - lastUsed = '\\arpeggioNormal' - tokenizer = ly.tokenize.Tokenizer() - for token in tokenizer.tokens(self.doc.textToCursor()): - if (isinstance(token, tokenizer.Command) - and token in self._arpeggioTypes.values()): - lastUsed = token - - with self.doc.editContext(): - self.doc.view.insertText('\\arpeggio') - if arpeggioType != lastUsed: - indent = re.match(r'\s*', self.doc.line()).group() - cursor = self.doc.view.cursorPosition() - cursor.setColumn(len(indent)) - self.doc.doc.insertText(cursor, arpeggioType + '\n' + indent) - - _glissandoStyles = { - 'glissando_normal': '', - 'glissando_dashed': 'dashed-line', - 'glissando_dotted': 'dotted-line', - 'glissando_zigzag': 'zigzag', - 'glissando_trill': 'trill', - } - - def addGlissando(self, name): - """ Add a Glissando to the current chord. - - Currently uses \\tweak to set different styles. - - """ - try: - style = self._glissandoStyles[name] - except KeyError: - return - - self.adjustCursorToChords() - if not style: - self.doc.view.insertText("\\glissando") - else: - self.doc.view.insertText( - "-\\tweak #'style #'{0} \\glissando".format(style)) - - def wrapSelection(self, text, before='{', after='}', alwaysMultiLine=False): - """ - Wrap a piece of text inside some kind of brace construct. Returns the - replacement. The piece of text is also expected to be the selection of - the document, because this routine needs to know the indent of the - resulting text. E.g.: - wrapSelection("c d e f", "\\relative c' {", "}") returns - "\\relative c' { c d e f }" - """ - # preserve space at start and end of selection - space1, sel, space2 = re.compile( - r'^(\s*)(.*?)(\s*)$', re.DOTALL).match(text).groups() - if alwaysMultiLine or '\n' in text: - result = "{0}\n{1}\n{2}".format(before, sel, after) - # indent the result corresponding with the first selection line. - selRange = self.doc.view.selectionRange() - indentDepth = self.doc.currentIndent(selRange.start(), False) - result = self.doc.indent(result, indentDepth).lstrip() - else: - result = "{0} {1} {2}".format(before, sel, after) - # re-add the space at start and end of selection - return ''.join((space1, result, space2)) - - def moveSelectionUp(self): - """ - Moves the selected block to the previous blank line. - There MUST be a selection. - """ - self.selectFullLines() - cursor = self.doc.view.cursorPosition() - selRange = self.doc.view.selectionRange() - if selRange.start().position() == (0, 0): - return - text = self.doc.selectionText() - with self.doc.editContext(): - atStart = cursor.position() == selRange.start().position() - # Determine current depth (we could be in a long \book block) - tokenizer = ly.tokenize.Tokenizer() - for token in tokenizer.tokens(self.doc.textToCursor(selRange.start())): - pass - self.doc.doc.removeText(selRange) - insert = KTextEditor.Cursor(0, 0) - for r in reversed(list(self.findBlankLines(tokenizer.depth()))): - if r.end().position() < selRange.start().position(): - insert.setLine(r.end().line()) - break - cursor = Cursor(insert) - if not text.endswith('\n'): - text += '\n' - cursor.walk(text) - self.doc.doc.insertText(insert, text) - selRange = KTextEditor.Range(insert, cursor.kteCursor()) - self.doc.view.setSelection(selRange) - if atStart: - self.doc.view.setCursorPosition(selRange.start()) - else: - self.doc.view.setCursorPosition(selRange.end()) - - def moveSelectionDown(self): - """ - Moves the selected block to the next blank line. - There MUST be a selection. - """ - self.selectFullLines() - cursor = self.doc.view.cursorPosition() - docRange = self.doc.doc.documentRange() - selRange = self.doc.view.selectionRange() - if selRange.end().position() == docRange.end().position(): - return - text = self.doc.selectionText() - with self.doc.editContext(): - atStart = cursor.position() == selRange.start().position() - # Determine current depth (we could be in a long \book block) - tokenizer = ly.tokenize.Tokenizer() - for token in tokenizer.tokens(self.doc.textToCursor(selRange.start())): - pass - self.doc.doc.removeText(selRange) - for r in self.findBlankLines(tokenizer.depth()): - if r.start().position() > selRange.start().position(): - insert = KTextEditor.Cursor(r.end().line(), 0) - break - else: - docRange = self.doc.doc.documentRange() - self.doc.doc.insertText(docRange.end(), '\n') - docRange = self.doc.doc.documentRange() - insert = docRange.end() - cursor = Cursor(insert) - if not text.endswith('\n'): - text += '\n' - cursor.walk(text) - self.doc.doc.insertText(insert, text) - selRange = KTextEditor.Range(insert, cursor.kteCursor()) - self.doc.view.setSelection(selRange) - if atStart: - self.doc.view.setCursorPosition(selRange.start()) - else: - self.doc.view.setCursorPosition(selRange.end()) - - def convertRelativeToAbsolute(self): - """ - Convert \relative { } music to absolute pitches. - """ - text, start = self.doc.selectionOrDocument() - ly.tools.relativeToAbsolute(text, start).applyToCursor(EditCursor(self.doc.doc)) - - def convertAbsoluteToRelative(self): - """ - Converts the selected music expression or all toplevel expressions to \relative ones. - """ - text, start = self.doc.selectionOrDocument() - try: - ly.tools.absoluteToRelative(text, start).applyToCursor(EditCursor(self.doc.doc)) - except ly.NoMusicExpressionFound: - KMessageBox.error(self.doc.app.mainwin, i18n( - "Please select a music expression, enclosed in << ... >> or { ... }.")) - - def transpose(self): - """ - Transpose all or selected pitches. - """ - text, start = self.doc.selectionOrDocument() - - # determine the language and key signature - language, keyPitch = ly.tools.languageAndKey(text) - - # present a dialog - dlg = self.transposeDialog() - dlg.setLanguage(language) - dlg.setInitialPitch(keyPitch) - if not dlg.exec_(): - return - transposer = dlg.transposer() - if not transposer: - KMessageBox.sorry(self.doc.app.mainwin, i18n( - "Could not understand the entered pitches.\n\n" - "Please make sure you use pitch names in the language \"%1\".", - language)) - return - try: - ly.tools.transpose(text, transposer, start).applyToCursor(EditCursor(self.doc.doc)) - except ly.QuarterToneAlterationNotAvailable: - KMessageBox.sorry(self.doc.app.mainwin, i18n( - "Can't perform the requested transposition.\n\n" - "The transposed music would contain quarter-tone alterations " - "that are not available in the pitch language \"%1\".", - language)) - - @cacheresult - def transposeDialog(self): - return TransposeDialog(self.doc.view) - - -class TransposeDialog(KDialog): - def __init__(self, parent): - KDialog.__init__(self, parent) - self.setCaption(i18n("Transpose")) - self.setHelp("transpose") - self.setButtons(KDialog.ButtonCode(KDialog.Ok | KDialog.Cancel | KDialog.Help )) - self.language = "" - self.initialPitchSet = False - w = self.mainWidget() - w.setLayout(QtGui.QGridLayout()) - l = QtGui.QLabel(i18n("Please enter a start pitch and a destination pitch:")) - w.layout().addWidget(l, 0, 0, 1, 4) - self.fromPitch = QtGui.QComboBox() - self.toPitch = QtGui.QComboBox() - l = QtGui.QLabel(i18n("Transpose from:")) - l.setBuddy(self.fromPitch) - w.layout().addWidget(l, 1, 0, QtCore.Qt.AlignRight) - w.layout().addWidget(self.fromPitch, 1, 1) - l = QtGui.QLabel(i18n("to:")) - l.setBuddy(self.toPitch) - w.layout().addWidget(l, 1, 2, QtCore.Qt.AlignRight) - w.layout().addWidget(self.toPitch, 1, 3) - - for c in self.fromPitch, self.toPitch: - c.setEditable(True) - c.setInsertPolicy(QtGui.QComboBox.NoInsert) - c.setCompleter(None) - self.fromPitch.setModel(self.toPitch.model()) - - def setLanguage(self, language): - if language != self.language: - fromIndex = self.fromPitch.currentIndex() - toIndex = self.toPitch.currentIndex() - self.fromPitch.clear() - for octave in (",", "", "'"): - for note in range(7): - for alter in Fraction(-1, 2), 0, Fraction(1, 2): - self.fromPitch.insertItem(0, - ly.pitch.pitchWriter[language](note, alter) + octave) - fromIndex != -1 and self.fromPitch.setCurrentIndex(fromIndex) - toIndex != -1 and self.toPitch.setCurrentIndex(toIndex) - self.language = language - - def setInitialPitch(self, pitch): - if not self.language: - self.setLanguage("nederlands") - if not self.initialPitchSet: - index = self.fromPitch.findText(pitch.output(self.language)) - if index != -1: - self.fromPitch.setCurrentIndex(index) - self.toPitch.setCurrentIndex(index) - self.initialPitchSet = True - - def exec_(self): - if not self.initialPitchSet: - self.setInitialPitch(ly.pitch.Pitch.c0()) - self.toPitch.setFocus() - return KDialog.exec_(self) - - def pitchFrom(self, combobox): - t = combobox.currentText() - p = ly.pitch.Pitch() - p.octave = t.count("'") - t.count(",") - result = ly.pitch.pitchReader[self.language]( - t.replace(",", "").replace("'", "")) - if result: - p.note, p.alter = result - return p - - def transposer(self): - fromPitch = self.pitchFrom(self.fromPitch) - toPitch = self.pitchFrom(self.toPitch) - if fromPitch and toPitch: - return ly.pitch.Transposer(fromPitch, toPitch) - - -class Cursor(ly.tokenize.Cursor): - """ - A Cursor that can easily interchange with KTextEditor.Cursor. - """ - def __init__(self, ktecursor = None): - super(Cursor, self).__init__() - if ktecursor: - self.line = ktecursor.line() - self.column = ktecursor.column() - - def kteCursor(self): - """ Return a corresponding KTextEditor.Cursor instance """ - return KTextEditor.Cursor(self.line, self.column) - - -class RangeMixin(object): - """ - Mixin with a Tokenizer (sub)class to iterate over the tokens returned by - tokenizer.tokens(), adding a KTextEditor.Range to every token, describing - its place. See the ly.tokenize module. - Mixin before classes that drop tokens, otherwise the cursor positions will - not be updated correctly. - """ - def tokens(self, text, pos = 0, cursor = None): - if cursor is None: - cursor = Cursor() - if pos: - cursor.walk(text[:pos]) - start = cursor.kteCursor() - for token in super(RangeMixin, self).tokens(text, pos): - cursor.walk(token) - end = cursor.kteCursor() - token.range = KTextEditor.Range(start, end) - start = end - yield token - - -class RangeTokenizer(RangeMixin, ly.tokenize.Tokenizer): - """ A Tokenizer that adds ranges to the tokens. """ - pass - - -class RelativeTokenizer(ly.tokenize.Tokenizer): - """ - A tokenizer to quickly check if we are in relative mode. - """ - class Relative(ly.tokenize.Tokenizer.Command): - rx = r"\\relative\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.RelativeParser, self) - - class ToplevelParser(ly.tokenize.Tokenizer.ToplevelParser): - items = staticmethod(lambda cls: (cls.Relative,) + - ly.tokenize.Tokenizer.ToplevelParser.items(cls)) - - class RelativeParser(ToplevelParser): - argcount = 2 # TODO: account for (deprecated) \relative without pitch - - -class EditCursor(ly.tokenize.Cursor): - """ - Translates changes to a Python string in a ly.tokenize.ChangeList - to changes to a KTextEditor.Document and applies them. - Can be used as a context manager, in which case it folds all edits - in one undo action. - """ - def __init__(self, doc): - super(EditCursor, self).__init__() - self.doc = doc - - def __enter__(self): - self.doc.startEditing() - - def __exit__(self, *args): - self.doc.endEditing() - - def insertText(self, text): - self.doc.insertText(KTextEditor.Cursor(self.line, self.column), text) - - def replaceText(self, text): - # Avoid disturbing point and click - self.doc.insertText(KTextEditor.Cursor(self.anchorLine, self.anchorColumn), text) - self.removeText() - - def removeText(self): - self.doc.removeText(KTextEditor.Range( - self.line, self.column, self.anchorLine, self.anchorColumn)) - - -def isblank(text): - """ Returns True if text is None, empty or only contains spaces. """ - return not text or text.isspace() diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/download.py frescobaldi-2.0.0/python/frescobaldi_app/download.py --- frescobaldi-1.2.0/python/frescobaldi_app/download.py 2010-09-28 22:03:18.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/download.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,340 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Dialog to download new binary versions of LilyPond -""" - -import os, re, shutil - -from PyQt4.QtCore import QObject, QProcess, Qt, SIGNAL -from PyQt4.QtGui import QComboBox, QGridLayout, QGroupBox, QLabel, QProgressBar -from PyKDE4.kdecore import KGlobal, KUrl, i18n -from PyKDE4.kdeui import KDialog, KGuiItem, KIcon, KMessageBox -from PyKDE4.kio import KFile, KIO, KUrlRequester - -from frescobaldi_app.lilydoc import HtmlLoader - -# parse version of a LilyPond package -_version_re = re.compile(r'(\d+(\.\d+)+)(-(\d+))?') - - -class LilyPondDownloadDialog(KDialog): - def __init__(self, info): - """info is a LilyPondInfoDialog (see settings.py)""" - KDialog.__init__(self, info) - self.info = info - - # local attributes - self.job = None - self.unpackJob = None - - self.setButtons(KDialog.ButtonCode( - KDialog.Help | KDialog.Details | KDialog.Ok | KDialog.Cancel)) - layout = QGridLayout(self.mainWidget()) - - self.setButtonText(KDialog.Ok, i18n("Install")) - self.setButtonIcon(KDialog.Ok, KIcon("download")) - self.setCaption(i18n("Download LilyPond")) - self.setHelp("download-lilypond") - - l = QLabel(i18n( - "With this tool you can download packaged binary releases " - "of LilyPond for your operating system.")) - l.setWordWrap(True) - layout.addWidget(l, 0, 0, 1, 2) - - v = self.lilyVersion = QComboBox() - v.currentIndexChanged.connect(self.selectVersion, Qt.QueuedConnection) - v.setToolTip(i18n( - "Select the LilyPond version you want to download.")) - l = QLabel(i18n("Version:")) - l.setBuddy(v) - layout.addWidget(l, 1, 0) - layout.addWidget(v, 1, 1) - - d = self.installDest = KUrlRequester() - d.setMode(KFile.Mode(KFile.Directory | KFile.LocalOnly)) - d.setPath(config().readPathEntry( - 'lilypond install path', os.path.expanduser('~/lilypond_bin/'))) - d.setToolTip(i18n( - "Select a writable directory you want to install LilyPond to.\n" - "(A version-numbered directory will be created in this directory.)")) - l = QLabel(i18n("Install into:")) - l.setBuddy(d) - layout.addWidget(l, 2, 0) - layout.addWidget(d, 2, 1) - - s = self.status = QLabel() - layout.addWidget(s, 3, 0, 1, 2) - - p = self.progress = QProgressBar() - layout.addWidget(p, 4, 0, 1, 2) - - details = QGroupBox(i18n("Details")) - layout.addWidget(details, 5, 0, 1, 2) - layout = QGridLayout() - details.setLayout(layout) - - b = self.baseUrl = QComboBox() - b.setEditable(True) - b.setToolTip(i18n( - "The website where LilyPond binaries can be downloaded.")) - b.addItems(['http://download.linuxaudio.org/lilypond/binaries/']) - b.setCurrentIndex(0) - - l = QLabel(i18n("Download from:")) - l.setBuddy(b) - layout.addWidget(l, 0, 0) - layout.addWidget(b, 0, 1) - - m = self.machineType = QComboBox() - items = [ - 'linux-x86', - 'linux-64', - 'linux-ppc', - 'freebsd-x86', - 'freebsd-64', - 'darwin-x86', - 'darwin-ppc', - ] - m.addItems(items) - - l = QLabel(i18n("Machine type:")) - l.setBuddy(m) - layout.addWidget(l, 1, 0) - layout.addWidget(m, 1, 1) - - u = self.packageUrl = KUrlRequester() - u.setToolTip(i18n( - "This is the URL to the package that will be downloaded and " - "installed.\n" - "You can also browse to other places to select a LilyPond package.")) - l = QLabel(i18n("Package Url:")) - l.setBuddy(u) - layout.addWidget(l, 2, 0) - layout.addWidget(u, 2, 1) - - self.setDetailsWidget(details) - - # default for machine - platform, machine = os.uname()[0::4] - if '64' in machine: - machine = '64' - elif '86' in machine: - machine = 'x86' - elif 'ower' in machine or 'ppc' in machine: - machine = 'ppc' - mtype = platform.lower() + '-' + machine - if mtype in items: - m.setCurrentIndex(items.index(mtype)) - else: - self.setDetailsWidgetVisible(True) - m.currentIndexChanged.connect(self.downloadVersions) - self.downloadVersions() - - def downloadVersions(self): - directory = self.baseUrl.currentText() - if not directory.endswith('/'): - directory += '/' - directory += self.machineType.currentText() - directory += '/' - self.directory = directory - self.loader = HtmlLoader(directory) - self.status.setText(i18n("Downloading directory listing...")) - self.progress.setRange(0, 0) - self.loader.done.connect(self.versionsDownloaded) - - def versionsDownloaded(self): - self.progress.setRange(0, 100) - self.progress.reset() - self.status.setText('') - if self.loader.error(): - self.status.setText(i18n( - "No packages found. You can browse to a package manually.")) - self.setDetailsWidgetVisible(True) - self.packageUrl.lineEdit().setFocus() - return - - versions = {} - versionStrings = {} - for m in re.finditer(r'\bhref="(lilypond-.*?\.sh)"', self.loader.html()): - fileName = m.group(1) - m = _version_re.search(fileName) - if m: - versionStrings[fileName] = m.group() - ver, build = m.group(1, 4) - version = (tuple(map(int, re.findall(r'\d+', ver))), int(build or 0)) - versions[fileName] = version - - files = versions.keys() - files.sort(key=versions.get) - - # add the versions - self.lilyVersion.clear() - self.items = [] - # determine last stable and development: - stable, development = False, False - for f in files[::-1]: - if versions[f][0][1] & 1: - if not development: - development = True - self.items.append(f) - self.lilyVersion.addItem(i18n( - "Latest Development Version (%1)", versionStrings[f])) - elif not stable: - stable = True - self.items.append(f) - self.lilyVersion.addItem(i18n( - "Latest Stable Version (%1)", versionStrings[f])) - if stable and development: - break - - for f in files: - self.lilyVersion.addItem(versionStrings[f]) - self.items.append(f) - self.lilyVersion.setCurrentIndex(0) - - def selectVersion(self, index): - self.packageUrl.setUrl(KUrl(self.directory + self.items[index])) - - def done(self, result): - if result == KDialog.Accepted: - # Download (OK) clicked - url = self.packageUrl.url() - if not url.isEmpty(): - self.enableButtonOk(False) - # save the install path - config().writePathEntry('lilypond install path', - self.installDest.url().path()) - if url.isLocalFile(): - self.unpack(url.path()) - else: - self.download(url) - else: - if self.downloadBusy(): - self.cancelDownload() - elif not self.unpackBusy(): - KDialog.done(self, result) - - def download(self, url): - """Download the package from given KUrl.""" - self.progress.setRange(0, 100) - self.status.setText(i18n("Downloading %1...", url.fileName())) - dest = KGlobal.dirs().saveLocation('tmp') - self.job = KIO.copy(url, KUrl(dest), - KIO.JobFlags(KIO.Overwrite | KIO.Resume | KIO.HideProgressInfo)) - QObject.connect(self.job, SIGNAL("percent(KJob*, unsigned long)"), self.slotPercent) - QObject.connect(self.job, SIGNAL("result(KJob*)"), self.slotResult, Qt.QueuedConnection) - self.job.start() - - def downloadBusy(self): - return bool(self.job) - - def cancelDownload(self): - self.job.kill() - self.status.setText(i18n("Download cancelled.")) - self.enableButtonOk(True) - self.progress.setValue(0) - - def slotPercent(self, job, percent): - self.progress.setValue(percent) - - def slotResult(self): - if self.job.error(): - self.status.setText(i18n("Download failed: %1", self.job.errorString())) - self.enableButtonOk(True) - else: - fileName = self.job.srcUrls()[0].fileName() - package = os.path.join(self.job.destUrl().path(), fileName) - self.unpack(package) - self.job = None - - def unpack(self, package): - """Unpack the given lilypond .sh archive.""" - fileName = os.path.basename(package) - ver = version(fileName) or 'unknown' # should not happen - self.prefix = os.path.join(self.installDest.url().path(), ver) - self.lilypond = os.path.join(self.prefix, "bin", "lilypond") - if not os.path.exists(self.prefix): - os.makedirs(self.prefix) - elif os.path.exists(self.lilypond): - result = KMessageBox.questionYesNoCancel(self, i18n( - "LilyPond %1 seems already to be installed in %2.\n\n" - "Do you want to use it or to remove and re-install?", - ver, self.prefix), None, - KGuiItem(i18n("Use existing LilyPond")), - KGuiItem(i18n("Remove and re-install"))) - if result == KMessageBox.Yes: - self.info.lilypond.setText(self.lilypond) - self.enableButtonOk(True) - KDialog.done(self, KDialog.Accepted) - return - elif result == KMessageBox.No: - shutil.rmtree(self.prefix, True) - else: # Cancel - self.progress.reset() - self.enableButtonOk(True) - return - self.status.setText(i18n("Unpacking %1...", fileName)) - self.progress.setRange(0, 0) - unpack = self.unpackJob = QProcess() - unpack.setProcessChannelMode(QProcess.MergedChannels) - unpack.setWorkingDirectory(self.prefix) - unpack.finished.connect(self.unpackFinished) - unpack.error.connect(self.unpackError) - unpack.start("sh", [package, "--batch", "--prefix", self.prefix]) - - def unpackBusy(self): - return bool(self.unpackJob and self.unpackJob.state()) - - def unpackFinished(self, exitCode, exitStatus): - self.progress.setRange(0, 100) - self.progress.reset() - self.enableButtonOk(True) - if exitStatus == QProcess.NormalExit and exitCode == 0: - self.status.setText(i18n("Unpacking finished.")) - self.info.lilypond.setText(self.lilypond) - KDialog.done(self, KDialog.Accepted) - else: - self.status.setText(i18n("Unpacking failed.")) - KMessageBox.error(self, i18n("An error occurred:\n\n%1", - str(self.unpackJob.readAllStandardOutput()))) - - def unpackError(self, err): - self.progress.setRange(0, 100) - self.progress.reset() - self.enableButtonOk(True) - self.status.setText(i18n("Unpacking failed.")) - KMessageBox.error(self, i18n("An error occurred:\n\n%1", - self.unpackJob.errorString())) - - - -def config(group="installertools"): - return KGlobal.config().group(group) - -def version(fileName): - """Determine version of the given package filename.""" - m = _version_re.search(fileName) - if m: - return m.group() - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/expand.py frescobaldi-2.0.0/python/frescobaldi_app/expand.py --- frescobaldi-1.2.0/python/frescobaldi_app/expand.py 2010-09-06 07:44:06.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/expand.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,452 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Expand Manager, manages expansions. -""" -import re - -from PyQt4.QtCore import Qt -from PyQt4.QtGui import ( - QFont, QSplitter, QTextEdit, QTreeWidget, QTreeWidgetItem, QVBoxLayout) - -from PyKDE4.kdecore import KConfig, KGlobal, i18n -from PyKDE4.kdeui import ( - KDialog, KKeySequenceWidget, KMessageBox, KStandardGuiItem, - KTreeWidgetSearchLine, KVBox) -from PyKDE4.ktexteditor import KTextEditor - -import ly.parse, ly.pitch - -from kateshell.app import cacheresult -from kateshell.shortcut import ShortcutClient -from frescobaldi_app.highlight import LilyPondHighlighter - - -class ExpandManager(ShortcutClient): - def __init__(self, mainwin): - self.mainwin = mainwin - ShortcutClient.__init__(self, mainwin.expansionShortcuts) - self.expansions = KConfig("expansions", KConfig.NoGlobals, "appdata") - # delete shortcut actions that do not exist here anymore - self.shakeHands(self.expansionsList()) - - def actionTriggered(self, name): - return self.doExpand(name) - - def populateAction(self, name, action): - action.setText(self.description(name)) - - def expand(self): - """ - Reads the last word in the current document. If it is not - an expansion, open the expansion dialog. If the string matches - multiple possible expansions, also open the dialog with the matching - expansions shown. - """ - doc = self.mainwin.currentDocument() - cursor = doc.view.cursorPosition() - lastWord = re.split("\W+", - doc.line()[:cursor.column()])[-1] - - if lastWord and self.expansionExists(lastWord): - # delete entered expansion name - begin = KTextEditor.Cursor(cursor) - begin.setColumn(begin.column() - len(lastWord)) - # write the expansion - self.doExpand(lastWord, remove=KTextEditor.Range(begin, cursor)) - return - # open dialog and let the user choose - self.expansionDialog().show() - - @cacheresult - def expansionDialog(self): - return ExpansionDialog(self) - - def expansionExists(self, name): - return (self.expansions.hasGroup(name) and - self.expansions.group(name).hasKey("Name")) - - def expansionsList(self): - """ - Return list of all defined shortcuts. - """ - return [name for name in self.expansions.groupList() - if self.expansions.group(name).hasKey("Name")] - - def description(self, name): - """ - Return the description for the expansion name. - """ - return self.expansions.group(name).readEntry("Name", "") - - def doExpand(self, expansion, remove=None): - """ - Perform the given expansion, must exist. - if remove is given, use doc.replaceText to replace that Range. - """ - doc = self.mainwin.currentDocument() - - group = self.expansions.group(expansion) - text = group.readEntry("Text", "") - - # where to insert the text: - cursor = remove and remove.start() or doc.view.cursorPosition() - - # translate pitches (marked by @) - # find the current language - lang = ly.parse.documentLanguage(doc.textToCursor(cursor)) - writer = ly.pitch.pitchWriter[lang or "nederlands"] - reader = ly.pitch.pitchReader["nederlands"] - - def repl(matchObj): - pitch = matchObj.group(1) - result = reader(pitch) - if result: - note, alter = result - return writer(note, alter) - return matchObj.group() - - text = re.sub(r"@([a-z]+)(?!\.)", repl, text) - - # if the expansion starts with a backslash and the character just - # before the cursor is also a backslash, don't repeat it. - if (text.startswith("\\") and cursor.column() > 0 - and doc.line()[cursor.column()-1] == "\\"): - text = text[1:] - - doc.manipulator().insertTemplate(text, cursor, remove) - - def addExpansion(self, text = None): - """ Open the expansion dialog with a new expansion given in text. """ - dlg = self.expansionDialog() - dlg.show() - dlg.addItem(text) - - -class ExpansionDialog(KDialog): - def __init__(self, manager): - self.manager = manager - KDialog.__init__(self, manager.mainwin) - self.setCaption(i18n("Expansion Manager")) - self.setButtons(KDialog.ButtonCode( - KDialog.Help | - KDialog.Ok | KDialog.Close | KDialog.User1 | KDialog.User2 )) - self.setButtonGuiItem(KDialog.User1, KStandardGuiItem.remove()) - self.setButtonGuiItem(KDialog.User2, KStandardGuiItem.add()) - self.setHelp("expand") - - layout = QVBoxLayout(self.mainWidget()) - layout.setContentsMargins(0, 0, 0, 0) - - search = KTreeWidgetSearchLine() - search.setClickMessage(i18n("Search...")) - layout.addWidget(search) - - splitter = QSplitter() - splitter.setOrientation(Qt.Vertical) - layout.addWidget(splitter) - - tree = QTreeWidget() - tree.setColumnCount(3) - tree.setHeaderLabels((i18n("Name"), i18n("Description"), i18n("Shortcut"))) - tree.setRootIsDecorated(False) - tree.setAllColumnsShowFocus(True) - search.setTreeWidget(tree) - splitter.addWidget(tree) - - box = KVBox() - splitter.addWidget(box) - - key = KKeySequenceWidget(box) - key.layout().setContentsMargins(0, 0, 0, 0) - key.layout().insertStretch(0, 1) - key.setEnabled(False) - - edit = QTextEdit(box) - edit.setAcceptRichText(False) - edit.setStyleSheet("QTextEdit { font-family: monospace; }") - edit.item = None - edit.dirty = False - ExpandHighlighter(edit.document()) - - # whats this etc. - tree.setWhatsThis(i18n( - "This is the list of defined expansions.\n\n" - "Click on a row to see or change the associated text. " - "Doubleclick a shortcut or its description to change it. " - "You can also press F2 to edit the current shortcut.\n\n" - "Use the buttons below to add or remove expansions.\n\n" - "There are two ways to use the expansion: either type the " - "shortcut in the text and then call the Expand function, or " - "just call the Expand function (default shortcut: Ctrl+.), " - "choose the expansion from the list and press Enter or click Ok." - )) - - edit.setWhatsThis( - "" - "

{0}

" - "" - "" - "
(|){1}
@{2}
".format( - i18n("This is the text associated with the selected shortcut. " - "Some characters have special meaning:"), - i18n("Place the cursor on this spot."), - i18n("Translate the following pitch."), - )) - - self.searchLine = search - self.treeWidget = tree - self.key = key - self.edit = edit - - self.restoreDialogSize(config()) - - # load the expansions - for name in sorted(self.manager.expansionsList()): - self.createItem(name, self.manager.description(name)) - - tree.sortByColumn(1, Qt.AscendingOrder) - tree.setSortingEnabled(True) - tree.resizeColumnToContents(1) - - self.user1Clicked.connect(self.removeItem) - self.user2Clicked.connect(self.addItem) - edit.textChanged.connect(self.editChanged) - search.textChanged.connect(self.checkMatch) - tree.itemSelectionChanged.connect(self.updateSelection) - tree.itemChanged.connect(self.itemChanged, Qt.QueuedConnection) - key.keySequenceChanged.connect(self.keySequenceChanged) - - def createItem(self, name, description): - """ Create a new item. """ - item = QTreeWidgetItem(self.treeWidget) - item.groupName = name - item.setFont(0, QFont("monospace")) - item.setText(0, name) - item.setText(1, description) - item.setText(2, self.manager.shortcutText(name)) - item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEditable | Qt.ItemIsEnabled) - return item - - def addItem(self, text=None): - """ - Add a new empty item (or use the text in the edit if no previous item - is selected). The new item becomes the selected item. - If text is given, put it in the text edit widget. - """ - num = 0 - name = "new" - while self.manager.expansionExists(name): - num += 1 - name = "new{0}".format(num) - description = i18n("New Item") - if num: - description += " {0}".format(num) - self.manager.expansions.group(name).writeEntry("Name", description) - self.searchLine.clear() # otherwise strange things happen... - item = self.createItem(name, description) - if self.edit.item is None: - # the user might have typed/pasted text in the edit already, - # intending to add a new expansion. - self.edit.item = item - self.saveEditIfNecessary() - self.setCurrentItem(item) - self.treeWidget.setFocus() - self.treeWidget.editItem(item, 0) - self.edit.dirty = True # so that our (empty) text gets saved - if text is not None: - self.edit.setText(text) - - def removeItem(self): - """ Remove the current item. """ - item = self.currentItem() - if item: - index = self.treeWidget.indexOfTopLevelItem(item) - setIndex = index + 1 < self.treeWidget.topLevelItemCount() - self.manager.expansions.deleteGroup(item.groupName) - self.manager.removeShortcut(item.groupName) - self.treeWidget.takeTopLevelItem(index) - if setIndex: - self.setCurrentItem(self.treeWidget.topLevelItem(index)) - - def items(self): - """ Return an iterator over all the items in our dialog. """ - return (self.treeWidget.topLevelItem(i) - for i in range(self.treeWidget.topLevelItemCount())) - - def currentItem(self): - """ Returns the currently selected item, if any. """ - items = self.treeWidget.selectedItems() - if items and not items[0].isHidden(): - return items[0] - - def setCurrentItem(self, item): - """ Sets the item to be the current and selected item. """ - item.setSelected(True) - self.updateSelection() - self.treeWidget.setCurrentItem(item) - self.treeWidget.scrollToItem(item) - - def checkMatch(self, text): - """ Called when the user types in the search line. """ - items = self.treeWidget.findItems(text, Qt.MatchExactly, 0) - if len(items) == 1: - self.setCurrentItem(items[0]) - - def updateSelection(self): - """ (Internal use) update the edit widget when selection changes. """ - items = self.treeWidget.selectedItems() - self.saveEditIfNecessary() - if items: - name = items[0].text(0) - group = self.manager.expansions.group(name) - self.edit.setPlainText(group.readEntry("Text", "")) - self.edit.item = items[0] - self.edit.dirty = False - # key shortcut widget - self.key.setEnabled(True) - self.manager.keyLoadShortcut(self.key, name) - else: - self.edit.item = None - self.edit.clear() - self.key.clearKeySequence() - self.key.setEnabled(False) - - def itemChanged(self, item, column): - """ Called when the user has edited an item. """ - if column == 0 and item.groupName != item.text(0): - # The user has changed the mnemonic - items = [i for i in self.items() if i.text(0) == item.text(0)] - if len(items) > 1: - KMessageBox.error(self.manager.mainwin, i18n( - "Another expansion already uses this name.\n\n" - "Please use a different name.")) - item.setText(0, item.groupName) - self.treeWidget.editItem(item, 0) - elif not re.match(r"\w+$", item.text(0)): - KMessageBox.error(self.manager.mainwin, i18n( - "Please only use letters, numbers and the underscore " - "character in the expansion name.")) - item.setText(0, item.groupName) - self.treeWidget.editItem(item, 0) - else: - # apply the changed mnemonic - old, new = item.groupName, item.text(0) - group = self.manager.expansions.group(new) - group.writeEntry("Name", item.text(1)) - group.writeEntry("Text", self.manager.expansions.group(old).readEntry("Text", "")) - self.manager.expansions.deleteGroup(old) - # move the shortcut - if self.manager.shortcut(old): - self.manager.setShortcut(new, self.manager.shortcut(old)) - self.manager.removeShortcut(old) - item.groupName = item.text(0) - self.treeWidget.scrollToItem(item) - elif column == 1: - group = self.manager.expansions.group(item.text(0)) - if item.text(1): - group.writeEntry("Name", item.text(1)) - self.treeWidget.scrollToItem(item) - self.treeWidget.resizeColumnToContents(1) - else: - KMessageBox.error(self.manager.mainwin, i18n( - "Please don't leave the description empty.")) - item.setText(1, group.readEntry("Name", "")) - self.treeWidget.editItem(item, 1) - elif column == 2: - # User should not edit textual representation of shortcut - item.setText(2, self.manager.shortcutText(item.text(0))) - - def editChanged(self): - """ Marks our edit view as changed. """ - self.edit.dirty = True - - def saveEditIfNecessary(self): - """ (Internal use) save the edit if it has changed. """ - if self.edit.dirty and self.edit.item: - self.manager.expansions.group(self.edit.item.text(0)).writeEntry( - "Text", self.edit.toPlainText()) - self.edit.dirty = False - - def keySequenceChanged(self, seq): - """ Called when the user has changed the keyboard shortcut. """ - item = self.currentItem() - if item: - self.manager.keySaveShortcut(self.key, item.text(0), seq) - item.setText(2, seq.toString()) - self.updateShortcuts() - - def updateShortcuts(self): - """ - Checks if shortcuts have disappeared by stealing them from other - keyboard shortcut dialogs. And initialize the shortcut button to - check for collisions. - """ - names = self.manager.shortcuts() - for item in self.items(): - if item.text(2) and item.text(0) not in names: - item.setText(2, '') - elif item.text(0) in names: - item.setText(2, self.manager.shortcutText(item.text(0))) - item = self.currentItem() - if item: - self.manager.keyLoadShortcut(self.key, item.text(0)) - self.manager.keySetCheckActionCollections(self.key) - - def show(self): - self.updateShortcuts() - KDialog.show(self) - self.searchLine.setFocus() - - def done(self, result): - self.saveEditIfNecessary() - self.manager.expansions.sync() - if result == KDialog.Accepted: - items = self.treeWidget.selectedItems() or self.items() - items = [item for item in items if not item.isHidden()] - if len(items) == 1: - expansion = items[0].text(0) - self.manager.doExpand(expansion) - self.saveDialogSize(config()) - KDialog.done(self, result) - - -class ExpandHighlighter(LilyPondHighlighter): - """ - LilyPond Highlighter that also highlights some non-LilyPond input that - the expander uses. - """ - def highlightBlock(self, text): - matches = [] - def repl(m): - matches.append((m.start(), len(m.group()))) - return ' ' * len(m.group()) - text = re.compile(r"\(\|\)|@").sub(repl, text) - super(ExpandHighlighter, self).highlightBlock(text) - for start, count in matches: - self.setFormat(start, count, self.formats['special']) - - -def config(): - return KGlobal.config().group("expand manager") diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/highlight.py frescobaldi-2.0.0/python/frescobaldi_app/highlight.py --- frescobaldi-1.2.0/python/frescobaldi_app/highlight.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/highlight.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Basic LilyPond syntax highlighter for QTextEdit. -""" - -from PyQt4.QtCore import Qt -from PyQt4.QtGui import QBrush, QFont, QTextCharFormat, QSyntaxHighlighter - -import ly.tokenize, ly.words - -_keywords = ( - ly.words.keywords + ly.words.musiccommands + ly.words.markupcommands + - ly.words.markuplistcommands + ly.words.modes) - -def formats(): - command = QTextCharFormat() - command.setForeground(QBrush(Qt.darkBlue)) - - keyword = QTextCharFormat(command) - keyword.setFontWeight(QFont.Bold) - - string = QTextCharFormat() - string.setForeground(QBrush(Qt.darkRed)) - - comment = QTextCharFormat() - comment.setFontItalic(True) - comment.setForeground(QBrush(Qt.darkGray)) - - delimiter = QTextCharFormat() - delimiter.setFontWeight(QFont.Bold) - - special = QTextCharFormat() - special.setFontWeight(QFont.Bold) - special.setForeground(QBrush(Qt.red)) - - scheme = QTextCharFormat() - scheme.setForeground(QBrush(Qt.darkGreen)) - - return locals() - - -class LilyPondHighlighter(QSyntaxHighlighter): - - def __init__(self, document): - QSyntaxHighlighter.__init__(self, document) - self.formats = formats() - self.state = [] - - def highlightBlock(self, text): - tokenizer = ly.tokenize.Tokenizer() - previous = self.previousBlockState() - if 0 <= previous < len(self.state): - tokenizer.thaw(self.state[previous]) - for token in tokenizer.tokens(text): - if isinstance(token, tokenizer.Command): - format = token[1:] in _keywords and 'keyword' or 'command' - elif isinstance(token, tokenizer.String): - format = 'string' - elif token in ('{', '}', '<<', '>>', '#{', '#}', '<', '>'): - format = 'delimiter' - elif isinstance(token, tokenizer.Comment): - format = 'comment' - elif isinstance(token, tokenizer.SchemeToken): - format = 'scheme' - else: - continue - self.setFormat(token.pos, len(token), self.formats[format]) - state = tokenizer.freeze() - try: - self.setCurrentBlockState(self.state.index(state)) - except ValueError: - self.setCurrentBlockState(len(self.state)) - self.state.append(state) - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/hyphen.py frescobaldi-2.0.0/python/frescobaldi_app/hyphen.py --- frescobaldi-1.2.0/python/frescobaldi_app/hyphen.py 2010-04-07 18:36:51.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/hyphen.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,148 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" Hyphenator functionality for Frescobaldi """ - -import locale, os, re -from glob import glob - -import ly.rx -from hyphenator import Hyphenator - -from PyQt4.QtGui import QLabel, QListWidget, QVBoxLayout -from PyKDE4.kdecore import KConfig, KGlobal, i18n -from PyKDE4.kdeui import KDialog, KMessageBox - -try: - language, encoding = locale.getdefaultlocale() -except ValueError: - language, encoding = None, None - -defaultPaths = [ - 'share/dict/ooo', - 'lib/openoffice/share/dict/ooo', - '/opt/OpenOffice.org/share/dict/ooo', - 'koffice/hyphdicts', - 'share/apps/koffice/hyphdicts', - 'lib/scribus/dicts', - 'share/scribus/dicts', - 'share/scribus-ng/dicts', - 'share/myspell', - 'share/myspell/dicts', - 'share/hunspell', -] - -hyphdicts = {} - -def config(group="hyphenation"): - return KGlobal.config().group(group) - -def findDicts(): - """ Find installed hyphen dictionary files """ - conf = config("hyphenation") - def paths(): - """ build a list of paths based on config """ - # in which prefixes to look for relative paths - prefixes = KGlobal.dirs().kfsstnd_prefixes().split(os.pathsep) - prefixes = set(prefixes + ['/usr/', '/usr/local/']) - # if the path is not absolute, add it to all prefixes. - for path in conf.readEntry("paths", defaultPaths): - if os.path.isabs(path): - yield path - else: - for pref in prefixes: - yield os.path.join(pref, path) - for d in KGlobal.dirs().findDirs("data", path): - yield d - - # now find the hyph_xx_XX.dic files - dicfiles = (f - for p in paths() if os.path.isdir(p) - for f in glob(os.path.join(p, 'hyph_*.dic')) if os.access(f, os.R_OK)) - - # default to the users current locale if not used before - defaultlang = None - - global hyphdicts - # empty it, because we might be called again when the user changes - # the settings. - hyphdicts = {} - for dic in dicfiles: - lang = os.path.basename(dic)[5:-4] - # find a human readable name belonging to the language code - for i in lang, lang.split('_')[0]: - name = KGlobal.locale().languageCodeToName(i) - if name: - name = '{0} ({1})'.format(name, lang) - hyphdicts[name] = dic - # set current locale as default - if lang == language: - defaultlang = name - break - else: - hyphdicts[lang] = dic - - # if not used before, write the current locale (if existing) as default - if defaultlang and conf.readEntry("lastused", "") not in hyphdicts: - conf.writeEntry("lastused", defaultlang) - conf.sync() - -findDicts() - - -def hyphenate(text, mainwindow): - """ - Ask the user which language to use. - Returns None if the user cancels the dialog or no hyphenation pattern files - could be found. - """ - if not hyphdicts: - KMessageBox.sorry(mainwindow, i18n( - "Could not find any hyphenation dictionaries.\n\n" - "Please install a package containing some and/or or configure the " - "search path to find them in the Frescobaldi settings under " - "\"Paths.\"")) - return - - conf = config("hyphenation") - lang = conf.readEntry("lastused", "") - langs = list(sorted(hyphdicts.keys())) - index = lang in langs and langs.index(lang) or 0 - - d = KDialog(mainwindow) - d.setButtons(KDialog.ButtonCode(KDialog.Ok | KDialog.Cancel | KDialog.Help)) - d.setCaption(i18n("Hyphenate Lyrics Text")) - d.setHelp("lyrics") - layout = QVBoxLayout() - d.mainWidget().setLayout(layout) - layout.addWidget(QLabel(i18n("Please select a language:"))) - listbox = QListWidget() - layout.addWidget(listbox) - listbox.addItems(langs) - listbox.setCurrentRow(index) - listbox.setFocus() - if d.exec_(): - lang = langs[listbox.currentRow()] - conf.writeEntry("lastused", lang) - conf.sync() - # get hyphenator - h = Hyphenator(hyphdicts[lang]) - return ly.rx.lyric_word.sub(lambda m: h.inserted(m.group(), ' -- '), text) diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/__init__.py frescobaldi-2.0.0/python/frescobaldi_app/__init__.py --- frescobaldi-1.2.0/python/frescobaldi_app/__init__.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Bootstrap application logic for the Frescobaldi editor. -""" - -import os, kateshell - -DBUS_PREFIX = "org.frescobaldi.main-" - -def runningApp(): - pid = os.environ.get("FRESCOBALDI_PID", "") - return kateshell.runningApp(DBUS_PREFIX, pid) - -def newApp(): - from frescobaldi_app import mainapp - return mainapp.MainApp(DBUS_PREFIX) diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/install.py frescobaldi-2.0.0/python/frescobaldi_app/install.py --- frescobaldi-1.2.0/python/frescobaldi_app/install.py 2010-08-30 12:27:55.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/install.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Functions that can be run if the user updates Frescobaldi -to a newer version. -""" - -import os, re, sys - -from PyKDE4.kdecore import KConfig, KGlobal, KStandardDirs - -def install(app, oldVersion): - """ - Run when the version in the root config group is different from the - running Frescobaldi version. - """ - version = tuple(map(int, re.findall(r'\d+', oldVersion))) - - if not version: - installKateModeRC() - - if version < (1, 1, 0): - newLilyPondConfig() - - if version < (1, 1, 2): - saveOnRunWarning() - - # ... other stuff can be added here ... - - - -def installKateModeRC(): - """ Preset a few variables in the LilyPond Kate mode """ - katemoderc = KConfig("katemoderc", KConfig.NoGlobals) - rc = katemoderc.group("LilyPond") - rc.writeEntry("Variables", "kate: " - "indent-mode lilypond; " - ) - rc.sync() - -def installOkularPartRC(): - """ Set our custom editor command in okularpartrc """ - # determine the command needed to run us - command = sys.argv[0] - if os.path.sep in command: # does the command contain a directory separator? - if not os.path.isabs(command): - command = os.path.abspath(command) - if command == KStandardDirs.findExe("frescobaldi"): - command = "frescobaldi" - command += " --smart --line %l --column %c" - okularpartrc = KConfig("okularpartrc", KConfig.NoGlobals) - group = okularpartrc.group("General") - group.writeEntry("ExternalEditor", "Custom") - group.writeEntry("ExternalEditorCommand", command) - if not group.readEntry("WatchFile", True): - group.writeEntry("WatchFile", True) - group.sync() - -def newLilyPondConfig(): - """ Take old lilypond path preference over to new multi-version config (1.1.0) """ - c = KGlobal.config() - group = c.group("lilypond") - if not group.hasKey("default"): - cmds = c.group("commands") - lily = cmds.readEntry("lilypond", "lilypond") - conv = cmds.readEntry("convert-ly", "convert-ly") - if (os.path.isabs(lily) and os.path.isabs(conv) - and os.path.dirname(lily) == os.path.dirname(conv)): - conv = os.path.basename(conv) - group.writeEntry("default", lily) - group.writeEntry("paths", [lily]) - group = group.group(lily) - group.writeEntry("convert-ly", conv) - c.sync() - -def saveOnRunWarning(): - """ Copy old setting to the new save on run notification setting (1.1.2)""" - c = KGlobal.config() - group = c.group("preferences") - if group.readEntry("save on run", False): - group = c.group("Notification Messages") - group.writeEntry("save_on_run", False) - c.sync() - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/kmid.py frescobaldi-2.0.0/python/frescobaldi_app/kmid.py --- frescobaldi-1.2.0/python/frescobaldi_app/kmid.py 2010-08-28 21:26:13.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/kmid.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,244 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -A MIDI Player based on the kmid_part widget of KMid. -""" - -import os - -from PyQt4.QtCore import Q_ARG, QMetaObject, Qt, SIGNAL -from PyQt4.QtGui import ( - QComboBox, QGridLayout, QKeySequence, QLabel, QLCDNumber, QSlider, - QToolButton, QWidget) -from PyKDE4.kdecore import KPluginLoader, KUrl, i18n -from PyKDE4.kdeui import KAction, KIcon, KShortcut -from PyKDE4.kparts import KParts - -EMPTY, STOPPED, PAUSED, PLAYING = 0, 1, 2, 3 - -def player(tool): - """ Return a player widget if KMid part can be found. """ - factory = KPluginLoader("kmid_part").factory() - if factory: - part = factory.create(tool.mainwin) - if part: - return Player(tool, part) - - -class Player(QWidget): - - def __init__(self, tool, part): - super(Player, self).__init__(tool.mainwin) - self.player = part - self._currentFile = None - self._currentFileList = None - self._tempo = 60.0 - - layout = QGridLayout() - self.setLayout(layout) - layout.setSpacing(0) - - fl = self.fileList = QComboBox() - fl.activated.connect(self.slotItemActivated) - fl.setEnabled(False) - layout.addWidget(fl, 0, 0, 1, 2) - - pb = self.pauseButton = QToolButton() - pb.setIcon(KIcon('media-playback-pause')) - pb.clicked.connect(self.pause) - pb.setToolTip(i18n("Pause")) - layout.addWidget(pb, 1, 0) - - lcd = self.lcd = QLCDNumber() - lcd.setMaximumHeight(60) - lcd.setSegmentStyle(QLCDNumber.Flat) - lcd.setStyleSheet("""QLCDNumber { - border-width: 5 3 2 4; - border-image: url('css:lcd-borders.png') repeat; - background-image: url('css:lcd-background.png') repeat; - color: #151B19; - }""") - layout.addWidget(lcd, 2, 0, 1, 2) - - vs = self.volumeSlider = QSlider(Qt.Vertical) - vs.setRange(0, 20) - vs.setValue(int(self.readProperty('volumeFactor') * 10)) - vs.setToolTip(i18n("Volume")) - layout.addWidget(vs, 0, 2, 3, 1) - - # KMid Part widget - widget = self.widget = part.widget() - layout.addWidget(widget, 1, 1) - - # make smaller - widget.layout().setSpacing(0) - widget.layout().setContentsMargins(0, 0, 0, 0) - - # set auto start off - self.writeProperty('autoStart', False) - - # connect stuff - part.connect(part, SIGNAL("stateChanged(int)"), - self.slotStateChanged, Qt.QueuedConnection) - part.connect(part, SIGNAL("beat(int,int,int)"), self.slotBeat) - part.connect(part, SIGNAL("tempoEvent(double)"), self.slotTempoEvent) - vs.valueChanged.connect(self.setVolumeFactor) - - tool.mainwin.aboutToClose.connect(self.quit) - tool.mainwin.currentDocumentChanged.connect(self.setCurrentDocument) - tool.mainwin.jobManager().jobFinished.connect(self.jobFinished) - self.slotBeat(0, 0, 0) - self.setCurrentDocument(tool.mainwin.currentDocument()) - - # keyboard action to pause playback, works when the MIDI tool is visible - # (hardcoded to Pause and MediaPlay) - a = KAction(self) - a.setShortcut(KShortcut( - QKeySequence(Qt.Key_Pause), QKeySequence(Qt.Key_MediaPlay))) - a.triggered.connect(self.slotPlayPause) - self.addAction(a) - - # keyboard action to stop playback, ESC and MediaStop - a = KAction(self) - a.setShortcut(KShortcut( - QKeySequence(Qt.Key_Escape), QKeySequence(Qt.Key_MediaStop))) - a.triggered.connect(self.stop) - self.addAction(a) - - def slotPlayPause(self): - """ Called when the user presses the MediaPlay or Pause key. - - when stopped, starts playing - when playing, pauses - when paused, winds back a few seconds and starts playing - - """ - state = self.state() - if state == STOPPED: - if self._currentFile: - self.play() - elif state == PAUSED: - self.pause() - elif state == PLAYING: - self.rewind(2200) - self.pause() - - def setCurrentDocument(self, doc): - """ Called when the current document changes. """ - self.setMidiFiles(doc.updatedFiles()("mid*")) - - def jobFinished(self, job): - """ Called when a LilyPond job finishes. """ - self.setMidiFiles(job.updatedFiles()("mid*"), True) - - def play(self): - QMetaObject.invokeMethod(self.player, 'play') - - def pause(self): - QMetaObject.invokeMethod(self.player, 'pause') - - def stop(self): - QMetaObject.invokeMethod(self.player, 'stop') - - def seek(self, pos): - QMetaObject.invokeMethod(self.player, 'seek', Q_ARG("qlonglong", pos)) - - def rewind(self, msec): - offset = msec * self._tempo * 192 / 30000 - pos = self.readProperty('position') - offset - if pos < 0: - pos = 0 - self.seek(pos) - - def quit(self): - """Called when the application exits.""" - self.stop() - self.player.closeUrl() - - def setMidiFiles(self, files, forceReload=False): - """ Sets the list of MIDI files that can be played. """ - self._currentFileList = files - self.fileList.clear() - self.fileList.addItems([os.path.basename(f) for f in files]) - icon = KIcon("audio-midi") - for i in range(self.fileList.count()): - self.fileList.setItemIcon(i, icon) - self.fileList.setCurrentIndex(0) - self.fileList.setEnabled(bool(files)) - if files and (forceReload or not self.isPlaying()): - self.loadFile(files[0], forceReload) - - def loadFile(self, fileName, forceReload=False): - if forceReload or self._currentFile != fileName: - self._currentFile = fileName - playing = self.isPlaying() - if playing: - self.stop() - self.player.openUrl(KUrl(fileName)) - self.slotBeat(0, 0, 0) - if playing: - self.play() - - def slotItemActivated(self, index): - self.loadFile(self._currentFileList[index]) - - def slotStateChanged(self, state): - if state == STOPPED and self._currentFile: - if self._currentFileList: - # if there are other files, load one - if self._currentFile not in self._currentFileList: - self.loadFile( - self._currentFileList[self.fileList.currentIndex()]) - else: - # no updated files to load, just close - self.player.closeUrl() - self.pauseButton.setDown(state == PAUSED) - - def slotBeat(self, measnum, beat, measlen): - self.lcd.display("{0}:{1}".format(measnum, beat)) - - def readProperty(self, name): - mobj = self.player.metaObject() - prop = mobj.property(mobj.indexOfProperty(name)) - return prop.read(self.player) - - def writeProperty(self, name, value): - mobj = self.player.metaObject() - prop = mobj.property(mobj.indexOfProperty(name)) - return prop.write(self.player, value) - - def state(self): - """Returns the state of the player.""" - return self.readProperty('state') - - def isPlaying(self): - """Returns True if state is playing or paused.""" - return self.state() in (PAUSED, PLAYING) - - def setVolumeFactor(self, volume): - """ Change the volume factor (0 - 20) """ - QMetaObject.invokeMethod(self.player, - 'setVolumeFactor', Q_ARG("double", volume / 10.0)) - - def slotTempoEvent(self, tempo): - self._tempo = tempo - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/lilydoc.py frescobaldi-2.0.0/python/frescobaldi_app/lilydoc.py --- frescobaldi-1.2.0/python/frescobaldi_app/lilydoc.py 2010-08-28 05:43:04.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/lilydoc.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,960 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -A browser tool for the LilyPond documentation. -""" - -import glob, os, re, sip -import HTMLParser - -from PyQt4.QtCore import QEvent, QObject, Qt, QUrl, SIGNAL -from PyQt4.QtGui import QGridLayout, QStackedWidget, QToolBar, QWidget -from PyQt4.QtWebKit import QWebPage, QWebView - -from PyKDE4.kdecore import KGlobal, KUrl, i18n -from PyKDE4.kdeui import KAction, KIcon, KMenu, KLineEdit, KStandardGuiItem -from PyKDE4.kio import KIO, KRun -from PyKDE4.ktexteditor import KTextEditor - -from signals import Signal - -docPrefixes = ( - '/usr/local/share/doc', - '/usr/local/doc', - '/usr/share/doc', - '/usr/doc', - ) - -docLocations = ( - 'packages/lilypond*/html', - 'packages/lilypond*', - 'lilypond*/html', - 'lilypond*', - ) - -def docHomeUrl(): - """ - Returns the configured or found url (as a string) where the LilyPond - documentation is to be found. - """ - url = config().readEntry("lilypond documentation", "") - return url or findLocalDocIndex() or "http://lilypond.org/doc" - -def findLocalDocIndex(): - """ - Tries to find LilyPond documentation in the local file system. - """ - for p in docPrefixes: - for l in docLocations: - path = os.path.join(p, l, 'Documentation', 'index.html') - files = glob.glob(path) - if files: - return files[-1] - - -class LilyDoc(QWidget): - def __init__(self, tool): - QWidget.__init__(self) - self.mainwin = tool.mainwin - layout = QGridLayout(self) - layout.setSpacing(0) - layout.setContentsMargins(0, 0, 0, 0) - self.toolBar = QToolBar(self) - layout.addWidget(self.toolBar, 0, 0) - self.stack = QStackedWidget(self) - layout.addWidget(self.stack, 1, 0, 1, 2) - - # WebView - self.view = QWebView(self.stack) - self.stack.addWidget(self.view) - - # Kate Editor part is loaded on demand - self.doc = None - self.edit = None # we create the views later because of scrollbar issues - - # Toolbar, buttons - g = KStandardGuiItem.back() - self.back = self.toolBar.addAction(g.icon(), g.text()) - self.back.setEnabled(False) - g = KStandardGuiItem.forward() - self.forward = self.toolBar.addAction(g.icon(), g.text()) - self.forward.setEnabled(False) - self.home = self.toolBar.addAction(KIcon("go-home"), i18n("Home")) - self.textLarger = self.toolBar.addAction(KIcon("zoom-in"), i18n("Larger text")) - self.textSmaller = self.toolBar.addAction(KIcon("zoom-out"), i18n("Smaller text")) - - self.toolBar.addSeparator() - - # rellinks - self.linkActions = {} # all rellinks with their actions - self.rellinks = {} # links for the current view - for name, icon, title in ( - # name, icon, default title - ('start', 'arrow-left-double', i18n("First Page")), - ('prev', 'arrow-left', i18n("Previous")), - ('up', 'arrow-up', i18n("Up one level")), - ('next', 'arrow-right', i18n("Next")), - ('contents', 'view-table-of-contents-ltr', i18n("Table of contents")), - ('index', 'arrow-right-double', i18n("Index")), - ): - self.linkActions[name] = a = self.toolBar.addAction(KIcon(icon), title) - a.setEnabled(False) - a.triggered.connect((lambda name: lambda: self.slotRellink(name))(name)) - - # search text entry - self.search = KLineEdit() - self.toolBar.addWidget(self.search) - self.search.setClearButtonShown(True) - self.search.setClickMessage(i18n("Search...")) - - # signals - self.back.triggered.connect(self.slotBack) - self.forward.triggered.connect(self.slotForward) - self.home.triggered.connect(self.slotHome) - self.textLarger.triggered.connect(self.slotLarger) - self.textSmaller.triggered.connect(self.slotSmaller) - - self.view.urlChanged.connect(self.updateActions) - self.view.loadFinished.connect(self.slotLoadFinished) - self.view.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) - self.view.page().linkClicked.connect(self.openUrl) - self.view.page().setForwardUnsupportedContent(True) - self.view.page().unsupportedContent.connect(self.slotUnsupported) - - self.search.textEdited.connect(self.slotSearch) - self.search.returnPressed.connect(self.slotSearch) - - # context menu: - self.view.setContextMenuPolicy(Qt.CustomContextMenu) - self.view.customContextMenuRequested.connect(self.slotShowContextMenu) - - # load initial view. - self.editFontSize = 0 - styleSheet = KGlobal.dirs().findResource("appdata", "css/lilydoc.css") - if styleSheet: - self.view.page().settings().setUserStyleSheetUrl(QUrl(styleSheet)) - self.stack.setCurrentWidget(self.view) - self.slotHome() - - def keyPressEvent(self, ev): - if ev.text() == "/": - self.search.setFocus() - elif ev.key() == Qt.Key_Escape: - # focus ourselves - if self.stack.currentWidget() == self.edit: - self.edit.setFocus() - else: - self.view.setFocus() - else: - QWidget.keyPressEvent(self, ev) - - def createEditView(self): - if self.doc is None: - editor = KTextEditor.EditorChooser.editor() - editor.readConfig() - self.doc = editor.createDocument(self) - self.doc.setMode('LilyPond') - self.doc.setEncoding('UTF-8') - self.doc.setReadWrite(False) - self.doc.completed.connect(self.slotCompleted) - self.edit = self.doc.createView(self) - # remember the view font size - if self.editFontSize != 0: - a = self.edit.actionCollection().action( - self.editFontSize > 0 and - "view_inc_font_sizes" or "view_dec_font_sizes") - if a: - for dummy in range(abs(self.editFontSize)): - a.trigger() - # make backspace go out - a = self.edit.actionCollection().action("backspace") - if a: - a.triggered.connect(self.slotBack) - - def openUrl(self, url): - # handle .ly urls and load them read-only in KatePart - if self.edit: - sip.delete(self.edit) - self.edit = None - if url.path().endswith('.ly'): - self.createEditView() - self.stack.addWidget(self.edit) - self.doc.openUrl(KUrl(url)) - self.stack.setCurrentWidget(self.edit) - self.forward.setEnabled(False) - self.back.setEnabled(True) - self.disableLinkActions() - # were there pages to go forward when we switch to the editor? - self.fwCount = len(self.view.page().history().forwardItems(1000)) - else: - self.fwCount = 0 - self.view.load(url) - - def updateActions(self): - self.search.clear() - self.back.setEnabled(self.view.history().canGoBack()) - self.forward.setEnabled(bool( - self.view.history().canGoForward() or self.edit)) - - def updateLinkActions(self): - for name, action in self.linkActions.iteritems(): - enable = name in self.rellinks and self.rellinks[name][1].isValid() - action.setEnabled(enable) - action.setToolTip(enable and self.rellinks[name][0] or '') - - def disableLinkActions(self): - for action in self.linkActions.itervalues(): - action.setEnabled(False) - action.setToolTip('') - - def slotRellink(self, name): - if name in self.rellinks: - url = self.rellinks[name][1] - if url.isValid(): - self.openUrl(url) - - def slotBack(self): - if self.stack.currentWidget() == self.edit: - self.stack.setCurrentWidget(self.view) - self.forward.setEnabled(True) - self.updateLinkActions() - self.back.setEnabled(self.view.history().canGoBack()) - self.search.clear() - elif self.view.history().canGoBack(): - self.view.back() - - def slotForward(self): - if self.stack.currentWidget() == self.view: - if (self.edit and len(self.view.page().history().forwardItems(1000)) - <= self.fwCount): - self.stack.setCurrentWidget(self.edit) - self.disableLinkActions() - self.back.setEnabled(True) - self.forward.setEnabled(False) - self.search.clear() - elif self.view.history().canGoForward(): - self.view.forward() - - def slotHome(self): - self.openUrl(QUrl(docHomeUrl())) - - def slotLoadFinished(self, success): - # Called when the HTML doc has loaded. - # Parse HTML and display link rel='' buttons - if success: - html = self.view.page().mainFrame().toHtml() - self.rellinks = RellinksParser(html, self.view.url()).links() - self.updateLinkActions() - - def slotCompleted(self): - # called when the ktexteditor document has loaded. - # we then jump to the start of the relevant snippet - # looking for "% ly snippet" - iface = self.doc.searchInterface() - if iface: - d = self.doc.documentRange() - r = iface.searchText(d, "% ly snippet")[0] - if r.isValid(): - self.edit.setCursorPosition(d.end()) - self.edit.setCursorPosition(r.start()) - - def slotLarger(self): - """ Enlarge text """ - if self.stack.currentWidget() == self.view: - size = self.view.textSizeMultiplier() - self.view.setTextSizeMultiplier(size * 1.1) - elif self.edit: - a = self.edit.actionCollection().action("view_inc_font_sizes") - if a: - a.trigger() - self.editFontSize += 1 - - def slotSmaller(self): - """ Make text smaller """ - if self.stack.currentWidget() == self.view: - size = self.view.textSizeMultiplier() - self.view.setTextSizeMultiplier(size / 1.1) - elif self.edit: - a = self.edit.actionCollection().action("view_dec_font_sizes") - if a: - a.trigger() - self.editFontSize -= 1 - - def slotUnsupported(self, reply): - """ Called when the webview opens a non-HTML document. """ - self.slotNewWindow(reply.url()) - - def slotShowContextMenu(self, pos): - hit = self.view.page().currentFrame().hitTestContent(pos) - menu = KMenu() - if hit.linkUrl().isValid(): - a = self.view.pageAction(QWebPage.CopyLinkToClipboard) - a.setIcon(KIcon("edit-copy")) - a.setText(i18n("Copy &Link")) - menu.addAction(a) - menu.addSeparator() - a = menu.addAction(KIcon("window-new"), i18n("Open Link in &New Window")) - a.triggered.connect((lambda url: lambda: self.slotNewWindow(url))(hit.linkUrl())) - else: - if hit.isContentSelected(): - a = self.view.pageAction(QWebPage.Copy) - a.setIcon(KIcon("edit-copy")) - a.setText(i18n("&Copy")) - menu.addAction(a) - menu.addSeparator() - a = menu.addAction(KIcon("window-new"), i18n("Open Document in &New Window")) - a.triggered.connect((lambda url: lambda: self.slotNewWindow(url))(self.view.url())) - if len(menu.actions()): - menu.exec_(self.view.mapToGlobal(pos)) - - def slotNewWindow(self, url): - """ Open url in new window """ - sip.transferto(KRun(KUrl(url), self), None) # C++ will delete it - - def slotSearch(self): - text = self.search.text() - if self.stack.currentWidget() == self.view: - self.view.page().findText(text, QWebPage.FindWrapsAroundDocument) - elif self.edit: - iface = self.doc.searchInterface() - if text == "": - self.edit.removeSelection() - elif iface: - docRange = self.doc.documentRange() - if self.edit.selection(): - selRange = self.edit.selectionRange() - if text == self.edit.selectionText(): - cursor = selRange.end() - else: - cursor = selRange.start() - else: - cursor = self.edit.cursorPosition() - for searchRange in ( - KTextEditor.Range(cursor, docRange.end()), - KTextEditor.Range(docRange.start(), cursor)): - r = iface.searchText(searchRange, text)[0] - if r.isValid(): - self.edit.setCursorPosition(r.start()) - self.edit.setSelection(r) - return - - -class HtmlParser(HTMLParser.HTMLParser): - """ - Slightly altered from HTMLParser: feeds entityrefs to handle_data. - """ - def handle_entityref(self, name): - char = { - 'gt': '>', - 'lt': '<', - 'amp': '&', - }.get(name) - if char: - self.handle_data(char) - - -class HeaderParser(HtmlParser): - """ - Parses just the header of a piece of HTML. Subclass this. - """ - def __init__(self, html): - HtmlParser.__init__(self) - self._finished = False - # Don't feed the whole document, just quit when the - # HTML header is parsed. - try: - while html and not self._finished: - self.feed(html[:1024]) - html = html[1024:] - except HTMLParser.HTMLParseError: - pass - - def handle_endtag(self, tag): - if tag == 'head': - self._finished = True - - -class RellinksParser(HeaderParser): - """ - Parses a string of HTML for the tags in the HTML header. - The dictionary with links is returned by the links() method. - """ - def __init__(self, html, url): - self._url = url - self._links = {} - HeaderParser.__init__(self, html) - - def links(self): - """ - Returns the found links as a dictionary. The key is the rel attribute, - the value a tuple (title, QUrl). - """ - return self._links - - def handle_starttag(self, tag, attrs): - if tag == 'link': - get = dict(attrs).get - rel, href, title = get('rel', ''), get('href', ''), get('title', '') - url = self._url.resolved(QUrl(href)) - self._links[rel] = (title, url) - - -class HttpEquivParser(HeaderParser): - """ - Parses a piece of HTML, looking for META HTTP-EQUIV tag. - """ - def handle_starttag(self, tag, attrs): - if tag == 'meta': - a = dict(attrs) - http_equiv = a.get('http-equiv', '') - content = a.get('content', '') - if http_equiv and content: - self.handle_http_equiv(http_equiv, content) - - def handle_http_equiv(self, http_equiv, content): - """ Reimplement to do something with the META HTTP-EQUIV tag. """ - pass - - -class RedirectionParser(HttpEquivParser): - """ - Parses a piece of HTML, looking for META HTTP-EQUIV redirects. - """ - def __init__(self, html): - self._redir = None - HttpEquivParser.__init__(self, html) - - def handle_http_equiv(self, http_equiv, content): - if http_equiv == "refresh" and '=' in content: - self._redir = content.split('=', 1)[1].strip() - self._finished = True # stop asap - - def redirection(self): - """ Returns the redirection if found, else None. """ - return self._redir - - -class HtmlEncodingParser(HttpEquivParser): - """ - Parses HTML and stores it in the right encoding. - """ - def __init__(self, html, defaultEncoding='UTF-8'): - self._encoding = defaultEncoding - HttpEquivParser.__init__(self, html) - self._html = html.decode(self._encoding, 'replace') - - def handle_http_equiv(self, http_equiv, content): - if http_equiv == "Content-Type": - m = re.search(r'\bcharset\s*=\s*(\S+)', content) - if m: - self._encoding = m.group(1) - self._finished = True - - def html(self): - return self._html - - -class IndexParser(HtmlParser): - """ - This class parses a LilyPond index. It supports the different types - of HTML pages of LilyPond 2.10, 2.12 and 2.13. - - Subclass this for different indexes. - """ - - # html classname of the table or ul that forms the index. - indexClass = '' - - def __init__(self, html): - HtmlParser.__init__(self) - self._parsing = False - self._tableTag = None - self.items = {} - self.initLine() - try: - self.feed(html) - except HTMLParser.HTMLParseError: - pass - - def initLine(self): - self._anchors = [] - self._titles = [None] - - def handle_starttag(self, tag, attrs): - attrs = dict(attrs) - if not self._parsing: - if attrs.get('class') == self.indexClass: - self._parsing = True - self._tableTag = tag - return - elif tag == 'a' and 'href' in attrs: - self._anchors.append(attrs['href']) - self._titles.append('') - - def handle_data(self, data): - if self._titles[-1] is not None: - self._titles[-1] += data - - def handle_endtag(self, tag): - if not self._parsing: - return - elif tag == self._tableTag: - self._parsing = False - elif tag == 'a': - self._titles.append(None) - elif tag in ('li', 'tr'): - # end a line of items. - if len(self._titles) == 5: - code = self._titles[1].strip() - # don't store index entries with spaces, we won't use them - if " " not in code: - title = self._titles[3].strip() - self.items.setdefault(code, []).append(( - code, self._anchors[0], - title, self._anchors[1])) - self.initLine() - - -class NotationReferenceIndexParser(IndexParser): - indexClass = 'index-ky' - -class LearningManualIndexParser(IndexParser): - indexClass = 'index-cp' - -class InternalsReferenceChapterParser(HtmlParser): - """Parses a chapter of the LilyPond Internals Reference. - - Makes lists of Contexts or Grobs, etc. - - """ - def __init__(self, html): - HtmlParser.__init__(self) - self._tableTag = None - self._parsing = False - self._anchor = None - self._title = "" - self.items = {} - try: - self.feed(html) - except HTMLParser.HTMLParseError: - pass - - def handle_starttag(self, tag, attrs): - attrs = dict(attrs) - if not self._parsing: - if tag in ('ul', 'table') and attrs.get('class') == "menu": - self._tableTag = tag - self._parsing = True - elif tag == 'a' and 'href' in attrs: - self._anchor = attrs['href'] - - def handle_data(self, data): - if self._anchor is not None: - self._title += data - - def handle_endtag(self, tag): - if not self._parsing: - return - elif tag == self._tableTag: - self._parsing = False - elif tag == 'a': - title = self._title.split()[-1] - self.items[title] = self._anchor - self._title = "" - self._anchor = None - - -class HtmlLoader(object): - """ - Tries to load an url using KIO and follows HTTP and HTML redirects. - Sends the done(self) Python signal if done. - """ - done = Signal() - - def __init__(self, url): - self._html = None - self.startJob(url) - - def startJob(self, url): - self._url = KUrl(url) - self._data = '' - self._job = KIO.get(KUrl(url), KIO.NoReload, KIO.HideProgressInfo) - self._job.data.connect(self.slotData) - self._job.redirection.connect(self.slotRedirection) - QObject.connect(self._job, SIGNAL("result(KJob*)"), self.slotResult) # new-style connection not available? - self._job.start() - - def slotData(self, job, data): - self._data += data - - def slotRedirection(self, job, url): - self._data = '' - self._url = KUrl(url) - - def slotResult(self, job): - redir = RedirectionParser(str(self._data)).redirection() - if redir: - self.startJob(KUrl(self.resolveUrl(redir))) - else: - self.done(self) - - def url(self): - return self._url - - def resolveUrl(self, url): - return KUrl(self._url.resolved(KUrl(url))) - - def html(self): - if self._html is None: - self._html = HtmlEncodingParser(str(self._data)).html() - return self._html - - def error(self): - """ - Returns True if there was an error. - Only call this after done(self) has been called. - """ - return self._job.error() or self._job.isErrorPage() - - -class HtmlMultiLoader(object): - """ - Loads the first URL of a list that succeeds. - Calls done() when done with the correct Loader or with None. - """ - done = Signal() - - def __init__(self, urls): - self._urls = urls - self.loadNext() - - def loadNext(self): - if self._urls: - self._loader = HtmlLoader(self._urls.pop(0)) - self._loader.done.connect(self.loaded) - else: - self.done(None) - - def loaded(self, loader): - if loader.error(): - self.loadNext() - else: - self.done(loader) - - -class Index(object): - """ - Encapsulates a loading, loaded or failed-to-load LilyPond help index. - It expects a HtmlLoader that is loading the documentation start page, - and a Tool that is the help browser tool (see kateshell/mainwindow). - The attribute loaded = None: pending, True: loaded, False: failed. - - To be subclassed. - """ - - urls = [] - - loadFinished = Signal() - - def __init__(self, loader, tool): - self.loaded = None - self._loader = loader - self.tool = tool - loader.done.connect(self._initialLoaderDone) - - def _initialLoaderDone(self, loader): - if not loader.error(): - self._loader = HtmlMultiLoader(map(loader.resolveUrl, self.urls)) - self._loader.done.connect(self._multiLoadDone) - else: - self.loaded = False - self.loadFinished(False) - - def _multiLoadDone(self, loader): - if loader: - self.url = loader.url() - self.loaded = bool(self.parse(loader.html())) - else: - self.loaded = False # failed - self.loadFinished(self.loaded) - - def parse(self, html): - """ - Implement this to parse the loaded html. - Should return True if the parsing succeeded and the results are usable. - """ - return False - - def menuTitle(self): - """ - Implement this to return a meaningful title for the menu. - """ - pass - - def addMenuActionsWhenLoaded(self, menu, *args): - if self.loaded is False: - return # not available - title = self.menuTitle() - if title: - menu.addTitle(title) - if self.loaded: - self.loadingAction = None - self.addMenuActions(menu, *args) - else: - self.loadingAction = menu.addAction(i18n("Loading...")) - def addHelp(success): - try: - if success: - self.addMenuActions(menu, *args) - sip.delete(self.loadingAction) - else: - self.loadingAction.setText(i18n("Not available")) - except RuntimeError: - pass # underlying C/C++ object has been deleted - self.loadFinished.connect(addHelp) - - def addMenuActions(self, menu, *args): - """ Implement this in your subclass. """ - pass - - def addMenuSeparator(self, menu): - """ - Add a separator. Use this instead of menu.addSeparator, because - different indexes may add entries asynchroneously to the same menu. - """ - a = KAction(menu) - a.setSeparator(True) - menu.insertAction(self.loadingAction, a) - - def addMenuTitle(self, menu, title): - """ - Add a title. Use this instead of menu.addTitle, because - different indexes may add entries asynchroneously to the same menu. - """ - menu.addTitle(title, self.loadingAction) - - def addMenuUrl(self, menu, title, url): - """ - Adds an action to the menu with an url relative - to the current command index. The Url opens in the help browser. - - Only call this if the loading was successful! - """ - menu.insertAction(self.loadingAction, KAction(title, menu, - triggered=lambda: self.tool.openUrl(self.url.resolved(KUrl(url))))) - - -class NotationReferenceIndex(Index): - urls = ( - 'user/lilypond/LilyPond-command-index', - 'user/lilypond/LilyPond-command-index.html', - # from 2.13 on the url scheme changed slightly - 'notation/LilyPond-command-index', - 'notation/LilyPond-command-index.html', - # new website layout uses lower case: - 'notation/lilypond-command-index', - 'notation/lilypond-command-index.html', - # in case the manuals.html page is used as index: - '../notation/lilypond-command-index', - '../notation/lilypond-command-index.html', - ) - - def parse(self, html): - self.items = NotationReferenceIndexParser(html).items - return bool(self.items) - - def menuTitle(self): - return i18n("Notation Reference") - - def addMenuActions(self, menu, text, column): - tokens = [] - for m in re.finditer( - r"(\\?(" - r"[a-z][A-Za-z]*(-[A-Za-z]+)*" - r"|[-!',./:<=>?[()]" - r"))(?![A-Za-z])", text): - if m.start() <= column <= m.end(): - tokens.extend(m.group(1, 2)) - break - for token in tokens: - if token in self.items: - for command, command_url, section, section_url in self.items[token]: - # each entry has cmdname, direct url, section title, section url - self.addMenuUrl(menu, command, command_url) - self.addMenuUrl(menu, section, section_url) - self.addMenuSeparator(menu) - break - self.addMenuUrl(menu, i18n("LilyPond Command Index"), self.url) - - -class LearningManualIndex(Index): - urls = ( - 'user/lilypond-learning/LilyPond-index', - 'user/lilypond-learning/LilyPond-index.html', - # from 2.13 on the url scheme changed slightly - 'learning/LilyPond-index', - 'learning/LilyPond-index.html', - # new website layout uses lower case: - 'learning/lilypond-index', - 'learning/lilypond-index.html', - # in case the manuals.html page is used as index: - '../learning/lilypond-index', - '../learning/lilypond-index.html', - ) - - def parse(self, html): - self.items = LearningManualIndexParser(html).items - return bool(self.items) - - def menuTitle(self): - return i18n("Learning Manual") - - def addMenuActions(self, menu, text, column): - tokens = [] - for m in re.finditer( - r"(\\?(" - r"[A-Za-z]+(-[A-Za-z]+)*" # also allow starting capitals - r"|[-!',./:<=>?[()]" - r"))(?![A-Za-z])", text): - if m.start() <= column <= m.end(): - tokens.extend(m.group(1, 2)) - break - for token in tokens: - if token in self.items: - for command, command_url, section, section_url in self.items[token]: - # each entry has cmdname, direct url, section title, section url - self.addMenuUrl(menu, command, command_url) - self.addMenuUrl(menu, section, section_url) - self.addMenuSeparator(menu) - break - self.addMenuUrl(menu, i18n("Learning Manual Index"), self.url) - - -class InternalsReferenceIndex(Index): - def parse(self, html): - self.items = InternalsReferenceChapterParser(html).items - return bool(self.items) - - -class InternalsReferenceContextsIndex(InternalsReferenceIndex): - urls = ( - 'user/lilypond-internals/Contexts', - 'user/lilypond-internals/Contexts.html', - # from 2.13 on the url scheme changed slightly - 'internals/Contexts', - 'internals/Contexts.html', - # new website layout uses lower case: - 'internals/contexts', - 'internals/contexts.html', - # in case the manuals.html page is used as index: - '../internals/contexts', - '../internals/contexts.html', - ) - - def addMenuActions(self, menu, text, column): - for m in re.finditer(r"[A-Z][A-Za-z]+", text): - if m.start() <= column <= m.end() and m.group() in self.items: - self.addMenuTitle(menu, i18n("Internals Reference")) - self.addMenuUrl(menu, i18n("The %1 context", m.group()), self.items[m.group()]) - break - - -class InternalsReferenceGrobsIndex(InternalsReferenceIndex): - urls = ( - 'user/lilypond-internals/All-layout-objects', - 'user/lilypond-internals/All-layout-objects.html', - # from 2.13 on the url scheme changed slightly - 'internals/All-layout-objects', - 'internals/All-layout-objects.html', - # new website layout uses lower case: - 'internals/all-layout-objects', - 'internals/all-layout-objects.html', - # in case the manuals.html page is used as index: - '../internals/all-layout-objects', - '../internals/all-layout-objects.html', - ) - - def addMenuActions(self, menu, text, column): - for m in re.finditer(r"[A-Z][A-Za-z]+", text): - if m.start() <= column <= m.end() and m.group() in self.items: - self.addMenuTitle(menu, i18n("Internals Reference")) - self.addMenuUrl(menu, i18n("The %1 layout object", m.group()), self.items[m.group()]) - break - - -class InternalsReferenceEngraversIndex(InternalsReferenceIndex): - urls = ( - 'user/lilypond-internals/Engravers', - 'user/lilypond-internals/Engravers.html', - # 2.12 - 'user/lilypond-internals/Engravers-and-Performers', - 'user/lilypond-internals/Engravers-and-Performers.html', - # from 2.13 on the url scheme changed slightly - 'internals/Engravers-and-Performers', - 'internals/Engravers-and-Performers.html', - # new website layout uses lower case: - 'internals/engravers-and-performers', - 'internals/engravers-and-performers.html', - # in case the manuals.html page is used as index: - '../internals/engravers-and-performers', - '../internals/engravers-and-performers.html', - ) - - def addMenuActions(self, menu, text, column): - for m in re.finditer(r"[A-Z][A-Za-z]*(_[A-Za-z]+)+", text): - if m.start() <= column <= m.end() and m.group() in self.items: - self.addMenuTitle(menu, i18n("Internals Reference")) - self.addMenuUrl(menu, m.group(), self.items[m.group()]) - break - - -class DocFinder(object): - """ - Find and pre-parse LilyPond documentation. - """ - def __init__(self, tool): - loader = HtmlLoader(KUrl(docHomeUrl())) - self.indices = [ - NotationReferenceIndex(loader, tool), - LearningManualIndex(loader, tool), - InternalsReferenceContextsIndex(loader, tool), - InternalsReferenceGrobsIndex(loader, tool), - InternalsReferenceEngraversIndex(loader, tool), - ] - - def addHelpMenu(self, contextMenu, text, column): - for index in self.indices: - if index.loaded is not False: - break - else: - return # no docs available - menu = KMenu(i18n("LilyPond &Help"), contextMenu) - menu.setIcon(KIcon("lilydoc")) - contextMenu.addMenu(menu) - for index in self.indices: - index.addMenuActionsWhenLoaded(menu, text, column) - - -# Easily get our global config -def config(group="preferences"): - return KGlobal.config().group(group) - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/lqi.py frescobaldi-2.0.0/python/frescobaldi_app/lqi.py --- frescobaldi-1.2.0/python/frescobaldi_app/lqi.py 2010-09-09 11:38:02.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/lqi.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,500 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" LilyPond Quick Insert Toolbox """ - -import re - -from PyQt4.QtCore import QSize, Qt -from PyQt4.QtGui import ( - QCheckBox, QComboBox, QGridLayout, QGroupBox, QLabel, QSizePolicy, QToolBox, - QToolButton, QVBoxLayout, QWidget) -from PyKDE4.kdecore import KGlobal, i18n -from PyKDE4.kdeui import KIcon, KHBox, KMenu, KVBox - -import ly.articulation, ly.dynamic -from kateshell.shortcut import UserShortcutDispatcher, ShortcutDispatcherClient -from frescobaldi_app.mainapp import SymbolManager - -# how many column of toolbuttons to use -COLUMNS = 5 - -class QuickInsertPanel(KVBox): - """ - The Quick Insert Panel manages its own actionCollection of shortcuts in - the QuickInsertShortcuts instance of the mainwindow. - - If the user presses a keyboard shortcut, the Quick Insert Panel is loaded, - and the action is dispatched to the tool it originated from. - - The actions are named with this format: 'tool:name'. So the correct - tool can always be found. - """ - def __init__(self, tool): - KVBox.__init__(self) - self.tool = tool - - h = KHBox(self) - h.layout().setContentsMargins(8, 2, 4, 0) - l = QLabel(i18n("Direction:"), h) - d = self.directionWidget = QComboBox(h) - d.addItems([i18n("Up"), i18n("Neutral"), i18n("Down")]) - d.setItemIcon(0, KIcon("arrow-up")) - d.setItemIcon(2, KIcon("arrow-down")) - d.setCurrentIndex(1) - l.setBuddy(d) - h.setToolTip(i18n( - "Where to add articulations et cetera: " - "above or below the staff or in the default position.")) - - t = self.toolboxWidget = ToolBox(self) - # don't allow us to shrink below the minimum size of our children - self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) - width = max(w.minimumSizeHint().width() for w in t.widgets) + 12 - self.setMinimumWidth(width) - - -class ToolBox(SymbolManager, UserShortcutDispatcher, QToolBox): - """A QToolBox containing different panels. - - The mouse wheel pages through the panels. - - This object also manages the keyboard shortcuts and the loading of - LilyPond-generated icons in the right text color. - - The current page is saved in the config on exit. - - """ - def __init__(self, toolWidget): - self.toolWidget = toolWidget - self.tool = toolWidget.tool - self.mainwin = toolWidget.tool.mainwin - QToolBox.__init__(self, toolWidget) - SymbolManager.__init__(self) - UserShortcutDispatcher.__init__(self, self.mainwin.quickInsertShortcuts) - self.widgets = [ - Articulations(self), - Dynamics(self), - Spanners(self), - BarLines(self), - ] - self.mainwin.aboutToClose.connect(self.saveSettings) - self.loadSettings() - self._wheeldelta = 0 - - def loadSettings(self): - current = self.tool.config().readEntry('current', '') - for i, w in enumerate(self.widgets): - if w._name == current: - self.setCurrentIndex(i) - - def saveSettings(self): - self.tool.config().writeEntry('current', self.currentWidget()._name) - - def wheelEvent(self, ev): - self._wheeldelta -= ev.delta() - steps, self._wheeldelta = divmod(self._wheeldelta, 120) - i = self.currentIndex() + steps - if 0 <= i < self.count(): - self.setCurrentIndex(i) - ev.accept() - else: - ev.ignore() - - -class LqiPanel(ShortcutDispatcherClient, QWidget): - """ Abstract base class for LilyPond Quick Insert tools """ - - def __init__(self, toolbox, name, title, icon="", symbol="", tooltip=""): - QWidget.__init__(self, toolbox) - ShortcutDispatcherClient.__init__(self, toolbox, name) - self.toolbox = toolbox - self.mainwin = toolbox.mainwin - i = toolbox.addItem(self, title) - if icon: - toolbox.setItemIcon(i, KIcon(icon)) - elif symbol: - toolbox.addItemSymbol(toolbox, i, symbol) - if tooltip: - toolbox.setItemToolTip(i, tooltip) - - def direction(self): - """ The value of the generic direction widget. - - -1 == Down - 0 == Neutral - 1 == Up - - """ - return 1 - self.toolbox.toolWidget.directionWidget.currentIndex() - - -class ActionButton(QToolButton): - """ A toolbutton that manages its shortcut and title automatically. """ - def __init__(self, panel, name, title, - symbol=None, icon=None, tooltip=None, size=22): - QToolButton.__init__(self) - self.panel = panel - self.name = name - self.title = title - self.symbol = symbol - self.icon = icon - if symbol: - panel.toolbox.addSymbol(self, symbol, size) - elif icon: - self.setIcon(KIcon(icon)) - self.clicked.connect(self.fire) - self.setAutoRaise(True) - self.setIconSize(QSize(size, size)) - self.setToolTip(tooltip if tooltip else title) - - def fire(self): - self.panel.actionTriggered(self.name) - - def contextMenuEvent(self, ev): - menu = KMenu(self.panel.mainwin) - menu.aboutToHide.connect(menu.deleteLater) - a = menu.addAction(KIcon("accessories-character-map"), - i18n("Configure Keyboard Shortcut (%1)", - self.panel.shortcutText(self.name) or i18n("None"))) - a.triggered.connect(self.editShortcut) - menu.popup(ev.globalPos()) - - def editShortcut(self): - if self.symbol: - icon = self.panel.toolbox.symbolIcon(self.symbol, 22) - else: - icon = self.icon - self.panel.editShortcut(self.name, self.title, icon) - self.panel.mainwin.currentDocument().view.setFocus() - - -class Articulations(LqiPanel): - """ - A toolbox item with articulations. - Clicking an articulation will insert it in the text document. - If text (music) is selected, the articulation will be added to all notes. - """ - def __init__(self, toolbox): - super(Articulations, self).__init__(toolbox, 'articulation', - i18n("Articulations"), symbol='articulation_prall', - tooltip=i18n("Different kinds of articulations and other signs.")) - - layout = QVBoxLayout(self) - layout.setSpacing(0) - layout.setContentsMargins(0, 0, 0, 0) - self.setLayout(layout) - - # help text - self.setWhatsThis("

{0}

{1}

".format( - i18n("Click an articulation sign to add it to your document."), - i18n("If you select some music first, the articulation will " - "be added to all notes in the selection."))) - - self.shorthands = QCheckBox(i18n("Allow shorthands")) - self.shorthands.setChecked(True) - self.shorthands.setToolTip(i18n( - "Use short notation for some articulations like staccato.")) - layout.addWidget(self.shorthands) - - self.titles = dict(ly.articulation.articulations(i18n)) - for title, group in ly.articulation.groups(i18n): - box = QGroupBox(title) - layout.addWidget(box) - grid = QGridLayout() - grid.setSpacing(0) - box.setLayout(grid) - for num, (sign, title) in enumerate(group): - row, col = divmod(num, COLUMNS) - b = ActionButton(self, sign, title, 'articulation_' + sign, - tooltip='{0} (\\{1})'.format(title, sign)) - grid.addWidget(b, row, col) - layout.addStretch() - - def actionTriggered(self, sign): - """ - Write the clicked articulation to the document - (or add it to all selected pitches). - """ - if self.shorthands.isChecked() and sign in ly.articulation.shorthands: - art = '_-^'[self.direction()+1] + ly.articulation.shorthands[sign] - else: - art = ('_', '', '^')[self.direction()+1] + '\\' + sign - - # the actual writing is performed by the manipulator (see document.py) - doc = self.mainwin.currentDocument() - doc.manipulator().addArticulation(art) - doc.view.setFocus() - - def populateAction(self, name, action): - if name in self.titles: - action.setText(self.titles[name]) - action.setIcon(self.toolbox.symbolIcon('articulation_' + name)) - - -class Dynamics(LqiPanel): - """A toolbox item with slurs, spanners, etc.""" - def __init__(self, toolbox): - super(Dynamics, self).__init__(toolbox, 'dynamic', - i18n("Dynamics"), symbol='dynamic_f', - tooltip=i18n("Dynamic symbols.")) - - layout = QVBoxLayout(self) - layout.setSpacing(0) - layout.setContentsMargins(0, 0, 0, 0) - self.setLayout(layout) - - # help text - self.setWhatsThis("

{0}

{1}

{2}

".format( - i18n("Click a dynamic sign to add it to your document."), - i18n("If you select some music first, dynamic spanners will " - "be added the selected fragment."), - i18n("If you have selected some music and you click a sign " - "after a spanner, the sign will terminate the spanner."))) - - signs = QGroupBox(i18n("Signs")) - grid = QGridLayout() - grid.setSpacing(0) - signs.setLayout(grid) - - for num, sign in enumerate(ly.dynamic.marks): - row, col = divmod(num, COLUMNS) - b = ActionButton(self, sign, - i18n("Dynamic sign %1", "{0}".format(sign)), - 'dynamic_' + sign) - grid.addWidget(b, row, col) - - spanners = QGroupBox(i18n("Spanners")) - grid = QGridLayout() - grid.setSpacing(0) - spanners.setLayout(grid) - - self.dynamicSpanners = {} - for num, (sign, title) in enumerate(( - ('hairpin_cresc', i18n("Hairpin crescendo")), - ('cresc', i18n("Crescendo")), - ('hairpin_dim', i18n("Hairpin diminuendo")), - ('dim', i18n("Diminuendo")), - ('decresc', i18n("Decrescendo")), - )): - self.dynamicSpanners[sign] = title - b = ActionButton(self, sign, title, 'dynamic_' + sign) - row, col = divmod(num, COLUMNS) - grid.addWidget(b, row, col) - - layout.addWidget(signs) - layout.addWidget(spanners) - layout.addStretch() - - def actionTriggered(self, name): - # the actual writing is performed by the manipulator (see document.py) - doc = self.mainwin.currentDocument() - doc.manipulator().addDynamic(name, self.direction()) - doc.view.setFocus() - - def populateAction(self, name, action): - if name in self.dynamicSpanners: - action.setText(self.dynamicSpanners[name]) - elif name in ly.dynamic.marks: - action.setText(i18n("Dynamic sign %1", "\"{0}\"".format(name))) - action.setIcon(self.toolbox.symbolIcon('dynamic_' + name)) - - -class BarLines(LqiPanel): - """A toolbox item with barlines, etc.""" - def __init__(self, toolbox): - super(BarLines, self).__init__(toolbox, 'bar', - i18n("Bar Lines"), symbol='bar_single', - tooltip=i18n("Bar lines, breathing signs, etcetera.")) - layout = QVBoxLayout(self) - layout.setSpacing(0) - layout.setContentsMargins(0, 0, 0, 0) - self.setLayout(layout) - - bars = QGroupBox(i18n("Bar Lines")) - grid = QGridLayout() - grid.setSpacing(0) - bars.setLayout(grid) - - self.bars = {} - for num, (name, bar, title) in enumerate(( - ("double", "||", i18n("Double bar line")), - ("end", "|.", i18n("Ending bar line")), - ("dotted", ":", i18n("Dotted bar line")), - ("dashed", "dashed", i18n("Dashed bar line")), - ("invisible", "", i18n("Invisible bar line")), - ("repeat_start", "|:", i18n("Repeat start")), - ("repeat_double", ":|:", i18n("Repeat both")), - ("repeat_end", ":|", i18n("Repeat end")), - ("cswc", ":|.:", i18n("Repeat both (old)")), - ("cswsc", ":|.|:", i18n("Repeat both (classic)")), - ("tick", "'", i18n("Tick bar line")), - ("single", "|", i18n("Single bar line")), - ("sws", "|.|", i18n("Small-Wide-Small bar line")), - ("ws", ".|", i18n("Wide-Small bar line")), - ("ww", ".|.", i18n("Double wide bar line")), - ("segno", "S", i18n("Segno bar line")), - )): - self.bars[name] = (bar, title) - b = ActionButton(self, name, title, 'bar_' + name) - row, col = divmod(num, COLUMNS) - grid.addWidget(b, row, col) - layout.addWidget(bars) - - breathes = QGroupBox(i18n("Breathing Signs")) - grid = QGridLayout() - grid.setSpacing(0) - breathes.setLayout(grid) - - self.breathes = {} - for num, (name, title) in enumerate(( - ('rcomma', i18n("Default Breathing Sign")), - ('rvarcomma', i18n("Straight Breathing Sign")), - ('caesura_curved', i18n("Curved Caesura")), - ('caesura_straight', i18n("Straight Caesura")), - )): - self.breathes[name] = title - b = ActionButton(self, name, title, 'breathe_' + name) - row, col = divmod(num, COLUMNS) - grid.addWidget(b, row, col) - layout.addWidget(breathes) - layout.addStretch() - - def actionTriggered(self, name): - doc = self.mainwin.currentDocument() - if name in self.bars: - doc.manipulator().insertBarLine(self.bars[name][0]) - doc.view.setFocus() - elif name in self.breathes: - doc.manipulator().insertBreathingSign(name) - doc.view.setFocus() - - def populateAction(self, name, action): - if name in self.bars: - action.setText(self.bars[name][1]) - action.setIcon(self.toolbox.symbolIcon('bar_' + name)) - elif name in self.breathes: - action.setText(self.breathes[name]) - action.setIcon(self.toolbox.symbolIcon('breathe_' + name)) - - -class Spanners(LqiPanel): - """A toolbox item with slurs, spanners, etc.""" - def __init__(self, toolbox): - super(Spanners, self).__init__(toolbox, 'spanner', - i18n("Spanners"), symbol='slur_solid', - tooltip=i18n("Slurs, spanners, etcetera.")) - - layout = QVBoxLayout(self) - layout.setSpacing(0) - layout.setContentsMargins(0, 0, 0, 0) - self.setLayout(layout) - - box = QGroupBox(i18n("Spanners")) - box.setToolTip(i18n( - "These spanners need a music fragment to be selected.")) - grid = QGridLayout() - grid.setSpacing(0) - box.setLayout(grid) - - self.spanners = {} - - for num, (name, title, symbol) in enumerate(( - ('slur', i18n("Slur"), 'slur_solid'), - ('phrasing_slur', i18n("Phrasing Slur"), 'slur_solid'), - ('beam', i18n("Beam"), 'spanner_beam16'), - ('trill', i18n("Trill"), 'spanner_trill'), - )): - self.spanners[name] = (symbol, title) - b = ActionButton(self, name, title, symbol) - row, col = divmod(num, COLUMNS) - grid.addWidget(b, row, col) - layout.addWidget(box) - - box = QGroupBox(i18n("Arpeggios")) - box.setToolTip(i18n( - "Arpeggios are used with chords with multiple notes.")) - grid = QGridLayout() - grid.setSpacing(0) - box.setLayout(grid) - - self.arpeggios = {} - - for num, (name, title) in enumerate(( - ('arpeggio_normal', i18n("Arpeggio")), - ('arpeggio_arrow_up', i18n("Arpeggio with Up Arrow")), - ('arpeggio_arrow_down', i18n("Arpeggio with Down Arrow")), - ('arpeggio_bracket', i18n("Bracket Arpeggio")), - ('arpeggio_parenthesis', i18n("Parenthesis Arpeggio")), - )): - self.arpeggios[name] = title - b = ActionButton(self, name, title, name) - row, col = divmod(num, COLUMNS) - grid.addWidget(b, row, col) - layout.addWidget(box) - - box = QGroupBox(i18n("Glissandos")) - box.setToolTip(i18n( - "Glissandos are attached to a note and automatically " - "extend to the next note.")) - grid = QGridLayout() - grid.setSpacing(0) - box.setLayout(grid) - - self.glissandos = {} - - for num, (name, title) in enumerate(( - ('glissando_normal', i18n("Glissando")), - ('glissando_dashed', i18n("Dashed Glissando")), - ('glissando_dotted', i18n("Dotted Glissando")), - ('glissando_zigzag', i18n("Zigzag Glissando")), - ('glissando_trill', i18n("Trill Glissando")), - )): - self.glissandos[name] = title - b = ActionButton(self, name, title, name) - row, col = divmod(num, COLUMNS) - grid.addWidget(b, row, col) - layout.addWidget(box) - layout.addStretch() - - def actionTriggered(self, name): - doc = self.mainwin.currentDocument() - if name in self.spanners: - doc.manipulator().addSpanner(name, self.direction()) - elif name in self.arpeggios: - doc.manipulator().addArpeggio(name) - elif name in self.glissandos: - doc.manipulator().addGlissando(name) - doc.view.setFocus() - - def populateAction(self, name, action): - if name in self.spanners: - symbol, title = self.spanners[name] - action.setText(title) - action.setIcon(self.toolbox.symbolIcon(symbol)) - elif name in self.arpeggios: - action.setText(self.arpeggios[name]) - action.setIcon(self.toolbox.symbolIcon(name)) - elif name in self.glissandos: - action.setText(self.glissandos[name]) - action.setIcon(self.toolbox.symbolIcon(name)) - - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/mainapp.py frescobaldi-2.0.0/python/frescobaldi_app/mainapp.py --- frescobaldi-1.2.0/python/frescobaldi_app/mainapp.py 2010-10-04 07:50:24.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/mainapp.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1572 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -import os, re, sip, weakref -from dbus.service import method - -from PyQt4.QtCore import QDir, QEvent, QSize, QTimer, Qt -from PyQt4.QtGui import ( - QActionGroup, QColor, QIcon, QLabel, QPalette, QPixmap, QProgressBar, - QStackedWidget, QWidget) -from PyKDE4.kdecore import KConfig, KGlobal, KUrl, i18n -from PyKDE4.kdeui import ( - KActionMenu, KApplication, KDialog, KIcon, KIconLoader, KLineEdit, KMenu, - KMessageBox, KNotification, KStandardAction, KStandardGuiItem, KVBox) -from PyKDE4.kparts import KParts -from PyKDE4.ktexteditor import KTextEditor - -from signals import Signal - -import kateshell.app, kateshell.mainwindow -from kateshell.app import cacheresult - - -# Constants ... -# find specially formatted variables in a LilyPond source document -_variables_re = re.compile(r'^%%([a-z]+(?:-[a-z]+)*):[ \t]*(.+?)[ \t]*$', re.M) - - -class MainApp(kateshell.app.MainApp): - """ A Frescobaldi application instance """ - - defaultEncoding = 'UTF-8' - defaultMode = "LilyPond" - - def __init__(self, servicePrefix): - kateshell.app.MainApp.__init__(self, servicePrefix) - # just set now because we are translated - self.fileTypes = ["*.ly *.ily *.lyi|" + i18n("LilyPond files")] - # Put ourselves in environment so ktexteditservice can find us - os.environ["TEXTEDIT_DBUS_PATH"] = self.serviceName + '/MainApp' - os.environ["FRESCOBALDI_PID"] = str(os.getpid()) - # make files for stylesheets and LilyPond-generated pics easily found: - QDir.setSearchPaths('css', KGlobal.dirs().findDirs('appdata', 'css/')) - QDir.setSearchPaths('pics', KGlobal.dirs().findDirs('appdata', 'pics/')) - - def setupConfiguration(self, config): - # If the application got upgraded, run the install module - oldVersion = config.readEntry("version", "") - if oldVersion != self.version(): - config.writeEntry("version", self.version()) - from frescobaldi_app.install import install - install(self, oldVersion) - # force install ourselves as custom editor in okularpart - # when this key is True or unset (e.g. by an installer). - if config.readEntry('configure okularpart', True): - config.writeEntry('configure okularpart', False) - from frescobaldi_app.install import installOkularPartRC - installOkularPartRC() - - def openUrl(self, url, encoding=None): - # The URL can be python string, dbus string or KUrl - if not isinstance(url, KUrl): - url = KUrl(url) - nav = False - if url.protocol() == "textedit": - m = re.match(r"^(.*):(\d+):(\d+):(\d+)$", url.path()) - if m: - # We have a valid textedit:/ uri. - url = KUrl.fromPath(m.group(1).encode('latin1').decode("utf-8")) - line, char, col = map(int, m.group(2, 3, 4)) - nav = True - else: - # We can't open malformed textedit urls - url = KUrl() - d = kateshell.app.MainApp.openUrl(self, url, encoding) - if nav: - d.setCursorPosition(line, col, False) - return d - - @method("org.lilypond.TextEdit", in_signature='s', out_signature='b') - def openTextEditUrl(self, url): - """Opens the specified textedit:// URL. - - To be called by ktexteditservice (part of lilypond-kde4). - - """ - return bool(self.openUrl(url)) - - def createMainWindow(self): - """ use our own MainWindow """ - return MainWindow(self) - - def createDocument(self, url=None, encoding=None): - return Document(self, url, encoding) - - def defaultDirectory(self): - return config().readPathEntry("default directory", "") - - def findDocument(self, url): - """Finds the document at KUrl url. - - Also non-local or nameless documents are checked: see runlily.py - - """ - d = super(MainApp, self).findDocument(url) - if d: - return d - # now check for our LocalFileManagers ... - for d in self.documents: - manager = d.localFileManager() - if manager and manager.path() == url: - return d - return False - - def keepMetaInfo(self): - return config().readEntry("save metainfo", False) - - -class Document(kateshell.app.Document): - """ Our own Document type with LilyPond-specific features """ - - metainfoDefaults = { - "custom lilypond version": "", # lily version last used in custom dialog - "custom verbose": False, # custom dialog: was verbose checked? - "custom preview": True, # custom dialog: was preview checked? - "build time": 0.0, # remember build time - "preview": True, # was last run in preview mode? - } - - def __init__(self, *args, **kwargs): - super(Document, self).__init__(*args, **kwargs) - self.resetLocalFileManager() - self.urlChanged.connect(self.resetLocalFileManager) - - def documentIcon(self): - if self.app.mainwin.jobManager().job(self): - return "run-lilypond" - return super(Document, self).documentIcon() - - def viewCreated(self): - super(Document, self).viewCreated() - # delete some actions from the view before plugging in GUI - # trick found in kateviewmanager.cpp - for name in "set_confdlg", "editor_options": - action = self.view.actionCollection().action(name) - if action: - sip.delete(action) - # rename "Print..." action to make clear KatePart's print action prints - # the source text instead of LilyPond scores - action = self.view.actionCollection().action("file_print") - if action: - action.setText(i18n("Print Source...")) - # activate completion - iface = self.view.codeCompletionInterface() - if iface: - iface.registerCompletionModel(self.completionModel()) - - @cacheresult - def completionModel(self): - return CompletionModel(self) - - def contextMenu(self): - menu = KMenu(self.view) - menu.aboutToShow.connect(self.populateContextMenu) - return menu - - def populateContextMenu(self): - self.manipulator().populateContextMenu(self.view.contextMenu()) - - def aboutToClose(self): - self.resetLocalFileManager() - - def setCursorPosition(self, line, column, translate=True): - shiftPressed = KApplication.keyboardModifiers() & Qt.ShiftModifier - if self.view: - if shiftPressed: - # select from the current cursor position. - start = self.view.cursorPosition() - else: - self.view.removeSelection() - super(Document, self).setCursorPosition(line, column, translate) - if self.view and shiftPressed: - end = self.view.cursorPosition() - self.view.setSelection(KTextEditor.Range(start, end)) - self.manipulator().adjustSelectionToChords() - - def variables(self): - """Returns a dictionary with variables put in specially formatted LilyPond - comments, like: - %%varname: value - (double percent at start of line, varname, colon and value). - - Varname should consist of lowercase letters, and may contain (but not - end or start with) single hyphens. - - """ - return dict(_variables_re.findall(self.text())) - - def updatedFiles(self): - """Returns a function that can list updated files based on extension. - - Checks the mode of the last LilyPond run (preview or not) and honors - the %%master directives that would have been used by the Job. - - """ - if self.localFileManager(): - path = self.localFileManager().path() - else: - path = self.localPath() - # look for %%master directives - lvars = self.variables() - ly = (lvars.get('master-preview' if self.metainfo["preview"] - else 'master-publish') or lvars.get('master')) - if ly: - path = os.path.join(os.path.dirname(path), ly) - return updatedFiles(path) - - @cacheresult - def manipulator(self): - """Returns a singleton object for this document that can perform more - advanced manipulations.""" - import frescobaldi_app.document - return frescobaldi_app.document.DocumentManipulator(self) - - def currentIndent(self, cursor=None, checkColumn=True): - """Returns the indent of the line the given cursor is on, or of the - current line. - - If checkColumn is True (default), the indent returned is not deeper - than the column the cursor is on. - - """ - if cursor is None: - cursor = self.view.cursorPosition() - text = self.line(cursor.line()) - if checkColumn: - text = text[:cursor.column()] - return len(re.match(r'\s*', text).group().expandtabs(self.tabWidth())) - - def indent(self, text, start = None, startscheme = False): - """Convenience method to indent text according to settings of this - document.""" - import ly.indent - return ly.indent.indent(text, - start = start, - indentwidth = self.indentationWidth(), - tabwidth = self.tabWidth(), - usetabs = not self.indentationSpaces(), - startscheme = startscheme, - ) - - def needsLocalFileManager(self): - return self.url().isEmpty() or self.url().protocol() != "file" - - def localFileManager(self, create = False): - if create and not self._localFileManager: - import frescobaldi_app.runlily - self._localFileManager = frescobaldi_app.runlily.LocalFileManager(self) - return self._localFileManager - - def resetLocalFileManager(self): - self._localFileManager = None - - def lilyPondVersion(self): - """Returns the version of LilyPond this document uses (looking at - the \version "x.x.x" statement). - - Returns None if the document does not specify a version. - - """ - import ly.version - return ly.version.getVersion(self.text()) - - -class SymbolManager(object): - """Manages the LilyPond icons for objects like widgets and actions. - - Ensures that if the palette is changed, the icons are redrawn in the current - foreground color. You can mixin this with a widget or just instantiate it - and call the recolor method on palette changes (look at our changeEvent - method for an example). - - """ - def __init__(self): - # we store mapping obj->(icon_name, size) in a weak dict - # objs that have a setIcon method - self._objs = {} - # objs that have a setItemIcon method: obj->(index, icon_name, size) - self._itemobjs = {} - # objs that need to have setIconSize called after drawing the icons - self._sizeobjs = {} - self._ownsize = None # must setIconSize() be called on us? - # TODO: add support for models or objects with a special property - self._defaultSize = 22 - self._timer = QTimer() - self._timer.setSingleShot(True) - self._timer.timeout.connect(self.redrawSymbols) - self.triggerRedraw() - - def addSymbol(self, obj, icon_name, size=0): - self._objs[obj] = (icon_name, size) - - def addItemSymbol(self, obj, index, icon_name, size=0): - self._itemobjs.setdefault(obj, []).append((index, icon_name, size)) - - def setSymbolSize(self, obj, size): - if obj is self: - self._ownsize = size - else: - self._sizeobjs[obj] = size - - def defaultSymbolSize(self): - return self._defaultSize - - def setDefaultSymbolSize(self, size): - self._defaultSize = size - - def triggerRedraw(self, msecs = 0): - self._timer.start(msecs) - - def redrawSymbols(self): - for obj, (icon_name, size) in self._objs.items()[:]: # copy - try: - obj.setIcon(self.symbolIcon(icon_name, size)) - except RuntimeError: # underlying C/C++ object has been deleted - del self._objs[obj] - for obj, items in self._itemobjs.items()[:]: # copy - try: - for index, icon_name, size in items: - obj.setItemIcon(index, self.symbolIcon(icon_name, size)) - except RuntimeError: # underlying C/C++ object has been deleted - del self._itemobjs[obj] - for obj, size in self._sizeobjs.items()[:]: # copy - try: - obj.setIconSize(QSize(size, size)) - except RuntimeError: # underlying C/C++ object has been deleted - del self._sizeobjs[obj] - if self._ownsize: - try: - self.setIconSize(QSize(self._ownsize, self._ownsize)) - except RuntimeError: # underlying C/C++ object has been deleted - self._ownsize = None - - def symbolIcon(self, name, size=0): - size = size or self._defaultSize - pixmap = KIconLoader.global_().loadIcon(name, KIconLoader.User, size) - alpha = pixmap.alphaChannel() - pixmap.fill(KApplication.palette().color(QPalette.ButtonText)) - pixmap.setAlphaChannel(alpha) - return QIcon(pixmap) - - def changeEvent(self, ev): - """ - Respond to events, in particular palette events, - to recolor LilyPond symbol icons. - """ - if ev.type() == QEvent.PaletteChange: - self.triggerRedraw() - - -class MainWindow(SymbolManager, kateshell.mainwindow.MainWindow): - """ Our customized Frescobaldi MainWindow """ - - # called when Apply or Ok is clicked in the settings dialog. - settingsChanged = Signal() - - def __init__(self, app): - SymbolManager.__init__(self) - kateshell.mainwindow.MainWindow.__init__(self, app) - self.progressBar = QProgressBar() - self.progressBar.setMaximumHeight(16) - self.statusBar().addPermanentWidget(self.progressBar) - self.progressBar.hide() - self.currentDocumentChanged.connect(self.updateJobActions) - self.expansionShortcuts = ExpansionShortcuts(self) - self.charSelectShortcuts = CharSelectShortcuts(self) - self.quickInsertShortcuts = QuickInsertShortcuts(self) - self.jobManager().jobFinished.connect(self.setDocumentStatus) - self.jobManager().jobFinished.connect(self.notifyCompileFinished) - - @cacheresult - def actionManager(self): - """Returns the ActionManager, managing actions that can be performed - on files creating by LilyPond.""" - import frescobaldi_app.actions - return frescobaldi_app.actions.ActionManager(self) - - @cacheresult - def scoreWizard(self): - with self.app.busyCursor(): - import frescobaldi_app.scorewiz - return frescobaldi_app.scorewiz.ScoreWizard(self) - - @cacheresult - def applyRhythmDialog(self): - return ApplyRhythmDialog(self) - - @cacheresult - def expandManager(self): - import frescobaldi_app.expand - return frescobaldi_app.expand.ExpandManager(self) - - @cacheresult - def jobManager(self): - man = JobManager() - man.jobStarted.connect(self.updateJobActions) - man.jobFinished.connect(self.updateJobActions) - man.jobStarted.connect(self.setTabIcons) - man.jobFinished.connect(self.setTabIcons) - return man - - @cacheresult - def runLilyPondDialog(self): - import frescobaldi_app.runlily - return frescobaldi_app.runlily.RunLilyPondDialog(self) - - @cacheresult - def progressBarManager(self): - import frescobaldi_app.progress - return frescobaldi_app.progress.ProgressBarManager(self.jobManager(), - self.progressBar) - - @cacheresult - def blankStaffPaperWizard(self): - with self.app.busyCursor(): - import frescobaldi_app.blankpaper - return frescobaldi_app.blankpaper.Dialog(self) - - @cacheresult - def charSelectDialog(self): - with self.app.busyCursor(): - import frescobaldi_app.charselect - return frescobaldi_app.charselect.Dialog(self) - - def createSessionManager(self): - """Reimplemented from kateshell.mainwindow.MainWindow""" - return SessionManager(self) - - def setupActions(self): - super(MainWindow, self).setupActions() - - # LilyPond runner toolbar icon - @self.onAction(i18n("LilyPond"), "run-lilypond") - def lilypond_runner(): - d = self.currentDocument() - if d: - if KApplication.keyboardModifiers() & Qt.ShiftModifier: - self.runLilyPond("custom") - else: - job = self.jobManager().job(d) - job.abort() if job else self.runLilyPond("preview") - - # Score wizard - @self.onAction(i18n("Setup New Score..."), "text-x-lilypond", - key="Ctrl+Shift+N") - def lilypond_score_wizard(): - self.scoreWizard().show() - - # run LilyPond actions - @self.onAction(i18n("Run LilyPond (preview)"), "run-lilypond", - key="Ctrl+M") - def lilypond_run_preview(): - self.runLilyPond("preview") - - @self.onAction(i18n("Run LilyPond (publish)"), "run-lilypond", - key="Ctrl+Alt+P") - def lilypond_run_publish(): - self.runLilyPond("publish") - - @self.onAction(i18n("Run LilyPond (custom)..."), "run-lilypond", - key="Shift+Ctrl+M") - def lilypond_run_custom(): - self.runLilyPond("custom") - - @self.onAction(i18n("Interrupt LilyPond Job"), "process-stop") - def lilypond_abort(): - d = self.currentDocument() - if d: - job = self.jobManager().job(d) - if job: - job.abort() - - # File menu actions: - @self.onAction(i18n("Print Music..."), "document-print", - key="Ctrl+Shift+P") - def file_print_music(): - d = self.currentDocument() - self.actionManager().print_(d.updatedFiles()) - - @self.onAction(i18n("Email Documents..."), "mail-send", key="Ctrl+E") - def file_email_documents(): - d = self.currentDocument() - self.actionManager().email(d.updatedFiles(), d.metainfo["preview"]) - - # Edit menu actions: - @self.onSelAction(i18n("Cut and Assign"), "edit-cut", - key="Ctrl+Shift+C", tooltip=i18n( - "Cut selection and assign it to a LilyPond variable.")) - def edit_cut_assign(text): - self.currentDocument().manipulator().assignSelectionToVariable() - - @self.onAction(i18n("Repeat last note or chord"), key="Ctrl+;", - tooltip=i18n("Repeat the last music expression (note or chord).")) - def edit_repeat_last(): - self.currentDocument().manipulator().repeatLastExpression() - - @self.onAction(i18n("Insert or Manage Expansions..."), key="Ctrl+.", - tooltip=i18n("Expand last word or open the expansions dialog.")) - def edit_expand(): - self.expandManager().expand() - - @self.onAction(i18n("Special Characters..."), "accessories-character-map", - key="Ctrl+Y", tooltip=i18n("Insert special characters.")) - def edit_insert_specialchars(): - self.charSelectDialog().show() - - # (this action is currently only displayed in the contextmenu) - @self.onSelAction(i18n("Add to Expansions"), "list-add") - def edit_expand_add(text): - self.expandManager().addExpansion(text) - - @self.onAction(i18n("Next blank line"), "go-down-search", key="Alt+Down", - tooltip=i18n("Go to the next blank line.")) - def edit_next_blank_line(): - d = self.currentDocument() - for num in range(d.view.cursorPosition().line(), d.doc.lines() - 1): - if not isblank(d.line(num)) and isblank(d.line(num + 1)): - d.view.setCursorPosition( - KTextEditor.Cursor(num + 1, len(d.line(num + 1)))) - d.view.removeSelection() - return - - @self.onAction(i18n("Previous blank line"), "go-up-search", key="Alt+Up", - tooltip=i18n("Go to the previous blank line.")) - def edit_prev_blank_line(): - d = self.currentDocument() - for num in range(d.view.cursorPosition().line() - 1, -1, -1): - if isblank(d.line(num)) and (num == 0 or not isblank(d.line(num - 1))): - d.view.setCursorPosition(KTextEditor.Cursor(num, len(d.line(num)))) - d.view.removeSelection() - return - - @self.onAction(i18n("Select to next blank line"), key="Shift+Alt+Down", - tooltip=i18n( - "Selects text from the current position down to and " - "including the next blank line.")) - def edit_select_next_blank_line(): - d = self.currentDocument() - cursor = d.view.cursorPosition() - for num in range(cursor.line() + 1, d.doc.lines() - 2): - if isblank(d.line(num)) and not isblank(d.line(num + 1)): - newcur = KTextEditor.Cursor(num + 1, 0) - break - else: - docRange = d.doc.documentRange() - newcur = docRange.end() - if d.view.selection(): - r = d.view.selectionRange() - if cursor.position() == r.start().position(): - cursor = r.end() - elif cursor.position() == r.end().position(): - cursor = r.start() - else: - line = cursor.line() - while line < d.doc.lines() and isblank(d.line(line)): - line += 1 - cursor.setLine(line) - d.view.setSelection(KTextEditor.Range(cursor, newcur)) - d.view.setCursorPosition(newcur) - - @self.onAction(i18n("Select to previous blank line"), key="Shift+Alt+Up", - tooltip=i18n( - "Selects text from the current position up to right after the " - "previous blank line.")) - def edit_select_previous_blank_line(): - d = self.currentDocument() - cursor = d.view.cursorPosition() - for num in range(cursor.line() - 2, -1, -1): - if isblank(d.line(num)) and not isblank(d.line(num + 1)): - newcur = KTextEditor.Cursor(num + 1, 0) - break - else: - newcur = KTextEditor.Cursor(0, 0) - if d.view.selection(): - r = d.view.selectionRange() - if cursor.position() == r.start().position(): - cursor = r.end() - elif cursor.position() == r.end().position(): - cursor = r.start() - else: - line = cursor.line() - if line < d.doc.lines() - 1 and isblank(d.line(line)): - line += 1 - cursor.setLine(line) - d.view.setSelection(KTextEditor.Range(cursor, newcur)) - d.view.setCursorPosition(newcur) - - @self.onSelAction(i18n("Move selection to next blank line"), - key="Shift+Alt+Ctrl+Down", - tooltip=i18n("Moves selected block to next blank line.")) - def edit_moveto_next_blank_line(text): - self.currentDocument().manipulator().moveSelectionDown() - - @self.onSelAction(i18n("Move selection to previous blank line"), - key="Shift+Alt+Ctrl+Up", - tooltip=i18n("Moves selected block to previous blank line.")) - def edit_moveto_previous_blank_line(text): - self.currentDocument().manipulator().moveSelectionUp() - - # Generated files menu: - a = KActionMenu(KIcon("media-playback-start"), i18n("Play/View"), self) - self.actionCollection().addAction('lilypond_actions', a) - a.setDelayed(False) - def makefunc(action): - def populateMenu(): - menu = action.menu() - menu.clear() - doc = self.currentDocument() - if not doc: - return - self.actionManager().addActionsToMenu(doc.updatedFiles(), menu) - return populateMenu - a.menu().aboutToShow.connect(makefunc(a)) - - # actions and functionality for editing pitches - a = KActionMenu(KIcon("applications-education-language"), - i18n("Pitch Name Language"), self) - a.setToolTip(i18n("Change the LilyPond language used for pitch names " - "in this document or in the selection.")) - self.actionCollection().addAction('pitch_change_language', a) - a.menu().aboutToShow.connect((lambda action: - lambda: self.currentDocument().manipulator().populateLanguageMenu( - action.menu()))(a)) - - @self.onAction(i18n("Convert Relative to &Absolute"), tooltip=i18n( - "Converts the notes in the document or selection from relative to " - "absolute pitch.")) - def pitch_relative_to_absolute(): - self.currentDocument().manipulator().convertRelativeToAbsolute() - - @self.onAction(i18n("Convert Absolute to &Relative"), tooltip=i18n( - "Converts the notes in the document or selection from absolute to " - "relative pitch.")) - def pitch_absolute_to_relative(): - self.currentDocument().manipulator().convertAbsoluteToRelative() - - @self.onAction(i18n("Transpose..."), tooltip=i18n( - "Transposes all notes in the document or selection.")) - def pitch_transpose(): - self.currentDocument().manipulator().transpose() - - # actions and functionality for editing rhythms - @self.onSelAction(i18n("Double durations"), - tooltip=i18n("Double all the durations in the selection.")) - def durations_double(text): - import ly.duration - return ly.duration.doubleDurations(text) - - @self.onSelAction(i18n("Halve durations"), - tooltip=i18n("Halve all the durations in the selection.")) - def durations_halve(text): - import ly.duration - return ly.duration.halveDurations(text) - - @self.onSelAction(i18n("Dot durations"), - tooltip=i18n("Add a dot to all the durations in the selection.")) - def durations_dot(text): - import ly.duration - return ly.duration.dotDurations(text) - - @self.onSelAction(i18n("Undot durations"), tooltip=i18n( - "Remove one dot from all the durations in the selection.")) - def durations_undot(text): - import ly.duration - return ly.duration.undotDurations(text) - - @self.onSelAction(i18n("Remove scaling"), tooltip=i18n( - "Remove all scaling (*n/m) from the durations in the selection.")) - def durations_remove_scaling(text): - import ly.duration - return ly.duration.removeScaling(text) - - @self.onSelAction(i18n("Remove durations"), - tooltip=i18n("Remove all durations from the selection.")) - def durations_remove(text): - import ly.duration - return ly.duration.removeDurations(text) - - @self.onSelAction(i18n("Make implicit"), tooltip=i18n( - "Make durations implicit (remove repeated durations).")) - def durations_implicit(text): - import ly.duration - return ly.duration.makeImplicit(text) - - @self.onSelAction(i18n("Make implicit (per line)"), tooltip=i18n( - "Make durations implicit (remove repeated durations), " - "except for the first duration in a line.")) - def durations_implicit_per_line(text): - import ly.duration - return ly.duration.makeImplicitPerLine(text) - - @self.onSelAction(i18n("Make explicit"), - tooltip=i18n("Make durations explicit (add duration to every note, " - "even if it is the same as the preceding note).")) - def durations_explicit(text): - import ly.duration - return ly.duration.makeExplicit(text) - - @self.onSelAction(i18n("Apply rhythm..."), - tooltip=i18n("Apply an entered rhythm to the selected music.")) - def durations_apply_rhythm(text): - self.applyRhythmDialog().edit(text) - - @self.onSelAction(i18n("Copy rhythm"), - tooltip=i18n("Copy the rhythm of the selected music.")) - def durations_copy_rhythm(text): - import ly.duration - text = ' '.join(ly.duration.extractRhythm(text)) - KApplication.clipboard().setText(text) - - @self.onSelAction(i18n("Paste rhythm"), - tooltip=i18n("Paste a rhythm to the selected music.")) - def durations_paste_rhythm(text): - import ly.duration - rhythm = KApplication.clipboard().text() - return ly.duration.applyRhythm(text, rhythm) - - # Setup lyrics hyphen and de-hyphen action - @self.onSelAction(i18n("Hyphenate Lyrics Text"), keepSelection=False, - key="Ctrl+L") - def lyrics_hyphen(text): - import frescobaldi_app.hyphen - return frescobaldi_app.hyphen.hyphenate(text, self) - - @self.onSelAction(i18n("Remove hyphenation"), keepSelection=False) - def lyrics_dehyphen(text): - return text.replace(' -- ', '') - - @self.onSelAction(i18n("Copy Lyrics with hyphenation removed"), - keepSelection=False) - def lyrics_copy_dehyphen(text): - KApplication.clipboard().setText(text.replace(' -- ', '')) - - # Other actions - @self.onAction(i18n("Single Quote"), key="Ctrl+'") - def insert_quote_single(): - self.currentDocument().manipulator().insertTypographicalQuote() - - @self.onAction(i18n("Double Quote"), key='Ctrl+"') - def insert_quote_double(): - self.currentDocument().manipulator().insertTypographicalQuote(True) - - @self.onAction(i18n("Align"), "format-indent-more") - def source_indent(): - self.currentDocument().manipulator().indent() - - @self.onAction(i18n("Insert LilyPond version"), key="Ctrl+Shift+V") - def version_insert(): - import frescobaldi_app.version - frescobaldi_app.version.insertVersion(self) - - @self.onAction(i18n("Update with convert-ly")) - def version_convert_ly(): - import frescobaldi_app.version - frescobaldi_app.version.convertLy(self) - - @self.onAction(i18n("Open Current Folder"), "document-open-folder") - def file_open_current_folder(): - self.actionManager().openDirectory() - - # Settings - @self.onAction(KStandardAction.Preferences) - def options_configure(): - with self.app.busyCursor(): - import frescobaldi_app.settings - frescobaldi_app.settings.SettingsDialog(self).show() - - @self.onSelAction(i18n("Repeat selected music"), key="Ctrl+Shift+R", - keepSelection=False) - def edit_repeat(text): - return self.currentDocument().manipulator().wrapSelection(text, - "\\repeat volta 2 {") - - @self.onAction(i18n("Insert pair of braces"), "code-context", - key="Ctrl+{") - def edit_insert_braces(): - d = self.currentDocument() - if d.selectionText(): - d.replaceSelectionWith(d.manipulator().wrapSelection( - d.selectionText()), keepSelection=False) - else: - self.currentDocument().manipulator().insertTemplate("{\n(|)\n}") - - # Other wizards/tools: - @self.onAction(i18n("Create blank staff paper"), "text-plain") - def wizard_blank_staff_paper(): - self.blankStaffPaperWizard().show() - - def setupTools(self): - QuickInsertTool(self) - KonsoleTool(self) - LogTool(self) - KMidTool(self) - RumorTool(self) - PDFTool(self) - LilyDocTool(self) - - def runLilyPond(self, mode): - """Run LilyPond on the current document. - - mode is "preview", "publish" or "custom". - For "custom", a dialog is opened where the user can adjust the - parameters for the LilyPond run (such as which version to use). - - """ - d = self.currentDocument() - if not d: - return - if d.url().protocol() == "file" and d.isModified() and not ( - KMessageBox.warningContinueCancel(self, i18n( - "Your document has been modified and needs to be saved before " - "LilyPond can be started.\n\n" - "Save the document now?"), None, - KStandardGuiItem.save(), KStandardGuiItem.cancel(), - "save_on_run") == KMessageBox.Continue and d.save()): - return # cancelled save of local file - - # create a Job - import frescobaldi_app.runlily - job = frescobaldi_app.runlily.DocumentJob(d) - - # configure this Job - job.preview = False - if mode == "custom": - if not self.runLilyPondDialog().configureJob(job, d): - return # job configure dialog cancelled by user - else: - job.preview = mode == "preview" - # forces the session a certain version? - command = self.sessionManager().lilyPondCommand() - if not command: - if config("lilypond").readEntry("automatic version", False): - docVersion = d.lilyPondVersion() - if docVersion: - command = automaticLilyPondCommand(docVersion) - job.command = command or lilyPondCommand() - - # check if there is not already a job running. We do it now, so the - # custom dialog can be requested even when there is a job running. - if self.jobManager().job(d): - return KMessageBox.sorry(self, i18n( - "There is already a LilyPond job running " - "for this document."), i18n("Can't process document")) - - # check if the user has a forced point and click setting in the file - text = d.text() - import ly.rx - for m in ly.rx.point_and_click.finditer(text): - if m.group(1) or m.group(2): - on, off = m.start(1), m.start(2) - ask = lambda msg: KMessageBox.warningContinueCancel(self, - "

{0}

{1}

".format(msg, i18n("Continue anyway?")), - None, KStandardGuiItem.cont(), KStandardGuiItem.cancel(), - "point_and_click") == KMessageBox.Continue - if ((job.preview and off >= 0 and not ask(i18n( - "You want to run LilyPond in preview mode (with point and " - "click enabled), but your document contains a command to " - "turn point and click off."))) or - (not job.preview and on >= 0 and not ask(i18n( - "You want to run LilyPond in publish mode (with point and " - "click disabled), but your document contains a command to " - "turn point and click on.")))): - # cancelled - # put the cursor at the point and click command - import frescobaldi_app.document - cursor = frescobaldi_app.document.Cursor() - cursor.walk(text[:m.start()]) - d.view.setCursorPosition(cursor.kteCursor()) - return - - # init the progress bar (only done once) - self.progressBarManager() - # run the LilyPond Job - self.jobManager().run(job) - - def updateJobActions(self): - """Called when the current document (or its status) has changed.""" - doc = self.currentDocument() - running = bool(doc and self.jobManager().job(doc)) - act = self.actionCollection().action - act("lilypond_run_preview").setEnabled(not running) - act("lilypond_run_publish").setEnabled(not running) - act("lilypond_abort").setEnabled(running) - if running: - icon = "process-stop" - tip = i18n("Abort the running LilyPond process") - else: - icon = "run-lilypond" - tip = i18n("Run LilyPond in preview mode " - "(Shift-click for custom dialog)") - act("lilypond_runner").setIcon(KIcon(icon)) - act("lilypond_runner").setToolTip(tip) - - def setTabIcons(self, job): - """Called on start/stop of a job, to update the icon in the tab bar.""" - self.viewTabs.setDocumentStatus(job.document) - - def setDocumentStatus(self, job, success): - """Called when a job exits. """ - doc = job.document - # reset cursor position translations if LilyPond created a new PDF - if job.updatedFiles()("pdf"): - doc.resetCursorTranslations() - # remember if the last run used point and click or not - doc.metainfo["preview"] = job.preview - - def allActionCollections(self): - for name, coll in super(MainWindow, self).allActionCollections(): - yield name, coll - yield i18n("Expansion Manager"), self.expansionShortcuts.actionCollection() - yield i18n("Special Characters"), self.charSelectShortcuts.actionCollection() - yield i18n("Quick Insert"), self.quickInsertShortcuts.actionCollection() - - def saveSettings(self): - self.app.stateManager().cleanup() - super(MainWindow, self).saveSettings() - - def notifyCompileFinished(self, job, success): - """Called when a job exits, notify the user on longer compiles.""" - if job.buildTime >= 10 and self.isMinimized(): - n = KNotification("compileFinished", self) - if success: - n.setText(i18n( - "LilyPond has successfully compiled %1.", - job.document.documentName())) - else: - n.setText(i18n( - "LilyPond exited with an error compiling %1.", - job.document.documentName())) - n.sendEvent() - - -class ApplyRhythmDialog(KDialog): - def __init__(self, mainwin): - KDialog.__init__(self, mainwin) - self.setCaption(i18n("Apply Rhythm")) - self.setButtons(KDialog.ButtonCode( - KDialog.Ok | KDialog.Apply | KDialog.Cancel | KDialog.Help)) - self.setHelp("rhythm") - self.setModal(True) - v = KVBox(self) - v.setSpacing(4) - self.setMainWidget(v) - QLabel(i18n("Enter a rhythm:"), v) - self.lineedit = KLineEdit(v) - self.lineedit.setToolTip(i18n( - "Enter a rhythm using space separated duration values " - "(e.g. 8. 16 8 4 8)")) - self.applyClicked.connect(self.doApply) - self.okClicked.connect(self.doApply) - - def doApply(self): - import ly.duration - self.lineedit.completionObject().addItem(self.lineedit.text()) - self.parent().currentDocument().replaceSelectionWith( - ly.duration.applyRhythm(self.text, self.lineedit.text())) - - def edit(self, text): - self.text = text - self.show() - self.lineedit.setFocus() - self.lineedit.selectAll() - - -class KonsoleTool(kateshell.mainwindow.KPartTool): - """ A tool embedding a Konsole """ - _partlibrary = "libkonsolepart" - _partappname = "Konsole" - def __init__(self, mainwin): - import PyKDE4 - kde_4_5_or_higher = PyKDE4.kdecore.version() >= 263424 - icon = "utilities-terminal" if kde_4_5_or_higher else "terminal" - kateshell.mainwindow.KPartTool.__init__(self, mainwin, - "konsole", i18n("Terminal"), icon, - key="Meta+Alt+T", dock=kateshell.mainwindow.Bottom) - mainwin.currentDocumentChanged.connect(self.sync) - - def partLoaded(self): - d = self.mainwin.currentDocument() - if d and not d.url().isEmpty(): - url = d.url() - else: - url = KUrl.fromPath( - self.mainwin.app.defaultDirectory() or os.getcwd()) - self.openUrl(url) - - def slotAction(self): - if self.part and self.isActive() and not self.widget.hasFocus(): - self.widget.setFocus() - else: - self.toggle() - - def show(self): - super(KonsoleTool, self).show() - if self.part: - self.widget.setFocus() - - def sync(self, doc): - if (self.part and self._sync - and doc and doc.doc and not doc.url().isEmpty()): - # FIXME This does not work currently. - self.openUrl(doc.url()) - - def addMenuActions(self, m): - a = m.addAction(i18n("S&ynchronize Terminal with Current Document")) - a.setCheckable(True) - a.setChecked(self._sync) - a.triggered.connect(self.toggleSync) - - def toggleSync(self): - self._sync = not self._sync - - def readConfig(self, conf): - self._sync = conf.readEntry("sync", False) - - def writeConfig(self, conf): - conf.writeEntry("sync", self._sync) - - -class KMidTool(kateshell.mainwindow.Tool): - helpAnchor = "kmid" - def __init__(self, mainwin): - self.failed = False # failed the player to load? - kateshell.mainwindow.Tool.__init__(self, mainwin, - "kmid", i18n("MIDI Player"), "audio-midi", - key="Meta+Alt+M", dock=kateshell.mainwindow.Bottom) - - def factory(self): - import frescobaldi_app.kmid - player = frescobaldi_app.kmid.player(self) - if player: - return player - self.failed = True - label = QLabel(i18n( - "Could not load the KMid part.\n" - "Please install KMid 2.4.0 or higher.")) - label.setAlignment(Qt.AlignCenter) - return label - - -class PDFTool(kateshell.mainwindow.KPartTool): - _partlibrary = "okularpart" - _partappname = "Okular" - def __init__(self, mainwin): - self._config = {} - kateshell.mainwindow.KPartTool.__init__(self, mainwin, - "pdf", i18n("PDF Preview"), "application-pdf", - key="Meta+Alt+P", dock=kateshell.mainwindow.Right) - self._urlToOpen = None - self._currentUrl = None - # We open urls with a timer otherwise Okular is called - # too quickly when the user switches documents too fast. - self._timer = QTimer() - self._timer.setSingleShot(True) - self._timer.timeout.connect(self.timeoutFunc) - mainwin.aboutToClose.connect(self.appQuit) - if self._config["sync"]: - mainwin.currentDocumentChanged.connect(self.sync) - mainwin.jobManager().jobFinished.connect(self.openUpdatedPDF) - - def appQuit(self): - """ Called when the application exits. """ - self._timer.stop() - self.part and self.part.closeUrl() - - def timeoutFunc(self): - """(Internal) Called when the timer times out. - - If an url was recorded, it is opened now. - - """ - if self._urlToOpen: - super(PDFTool, self).openUrl(self._urlToOpen) - self._urlToOpen = None - self._timer.start(500) - - def _reallyOpenUrl(self, url): - """(Internal) Opens the url and starts a timer to prevent it from being - called too quickly again. - - If the timer is already running, the url is recorded and opened on - timeout(). - - """ - self._urlToOpen = url - self._timer.isActive() or self._timer.start(0) - - def openUrl(self, url): - """ Expects KUrl.""" - if not self.failed: - self.show() - if url != self._currentUrl: - self._currentUrl = url - self._reallyOpenUrl(url) - - def reloadUrl(self): - if self._currentUrl: - self._reallyOpenUrl(self._currentUrl) - - def sync(self, doc): - pdfs = doc.updatedFiles()("pdf") - if pdfs: - self.openUrl(KUrl(pdfs[0])) - - def openUpdatedPDF(self, job): - pdfs = job.updatedFiles()("pdf") - if pdfs: - self.openUrl(KUrl(pdfs[0])) - - def addMenuActions(self, m): - def act(name, title): - a = m.addAction(title) - a.setCheckable(True) - a.setChecked(self._config[name]) - a.triggered.connect(lambda: self.toggleAction(name)) - act("leftpanel", i18n("Show PDF Navigation Panel")) - act("minipager", i18n("Show PDF minipager")) - a = m.addAction(KIcon("configure"), i18n("Configure Okular...")) - a.triggered.connect(self.openOkularSettings) - m.addSeparator() - act("sync", i18n("S&ynchronize Preview with Current Document")) - a = m.addAction(KIcon("view-refresh"), i18n("Reload")) - a.triggered.connect(self.reloadUrl) - a.setEnabled(bool(self._currentUrl)) - - def openOkularSettings(self): - self.materialize() - if self.part: - a = self.part.actionCollection().action("options_configure") - if a: - a.trigger() - - def toggleAction(self, name): - c = self._config[name] = not self._config[name] - # if the part has already loaded, perform these settings. - if name == "leftpanel" and self.part: - self.part.actionCollection().action("show_leftpanel").setChecked(c) - elif name == "minipager" and self.part: - self._okularMiniBar().setVisible(c) - elif name == "sync": - if c: - self.mainwin.currentDocumentChanged.connect(self.sync) - self.mainwin.jobManager().jobFinished.connect(self.openUpdatedPDF) - d = self.mainwin.currentDocument() - if d: - self.sync(d) - else: - self.mainwin.currentDocumentChanged.disconnect(self.sync) - self.mainwin.jobManager().jobFinished.disconnect(self.openUpdatedPDF) - - def _okularMiniBar(self): - """ get the okular miniBar """ - return self.part.widget().findChild(QWidget, "miniBar").parent() - - def partLoaded(self): - if not self._config["minipager"]: - self._okularMiniBar().hide() - self.part.actionCollection().action("show_leftpanel").setChecked( - self._config["leftpanel"]) - # change shortcut context for actions that conflict with Kate's - for action in "view_scroll_up", "view_scroll_down", "close_find_bar": - self.part.actionCollection().action(action).setShortcutContext( - Qt.WidgetShortcut) - # default to single page layout - single = self.part.actionCollection().action("view_render_mode_single") - if single and not single.isChecked(): - single.trigger() - - def readConfig(self, conf): - for name, default in ( - ("minipager", True), - ("leftpanel", False), - ("sync", True)): - self._config[name] = conf.readEntry(name, default) - - def writeConfig(self, conf): - for name in "minipager", "leftpanel", "sync": - conf.writeEntry(name, self._config[name]) - - -class QuickInsertTool(kateshell.mainwindow.Tool): - helpAnchor = "quickinsert" - defaultWidth = 160 - def __init__(self, mainwin): - kateshell.mainwindow.Tool.__init__(self, mainwin, - "quickinsert", i18n("Quick Insert"), "document-properties", - key="Meta+Alt+I", dock=kateshell.mainwindow.Left) - - def factory(self): - import frescobaldi_app.lqi - return frescobaldi_app.lqi.QuickInsertPanel(self) - - -class LogTool(kateshell.mainwindow.Tool): - def __init__(self, mainwin): - self._config = {} - kateshell.mainwindow.Tool.__init__(self, mainwin, - "log", i18n("LilyPond Log"), "run-lilypond", - key="Meta+Alt+L", dock=kateshell.mainwindow.Bottom, - widget=QStackedWidget()) - self.logs = {} - label = QLabel("({0})".format(i18n("no log"))) - label.setAlignment(Qt.AlignCenter) - self.widget.addWidget(label) - mainwin.currentDocumentChanged.connect(self.showLog) - mainwin.app.documentClosed.connect(self.removeLog) - self.widget.destroyed.connect(lambda: self.logs.clear()) - mainwin.jobManager().jobStarted.connect(self.startJob) - mainwin.jobManager().jobFinished.connect(self.finishJob) - - def showLog(self, doc): - if doc in self.logs: - self.widget.setCurrentWidget(self.logs[doc]) - - def log(self, doc): - return self.logs.get(doc) - - def createLog(self, doc): - if doc not in self.logs: - from frescobaldi_app.runlily import Log - self.logs[doc] = Log(self, doc) - self.widget.addWidget(self.logs[doc]) - self.showLog(doc) - if not self._config["errors only"]: - self.show() - return self.logs[doc] - - def removeLog(self, doc): - if doc in self.logs: - sip.delete(self.logs[doc]) - del self.logs[doc] - if self.widget.count() == 1: - if not self._docked: - self.dock() - self.hide() - - def startJob(self, job): - log = self.createLog(job.document) - log.clear() - job.output.connect(log) - - def finishJob(self, job, success): - log = self.log(job.document) - if log and not success: - log.show() # even if LP didn't show an error location - - def addMenuActions(self, m): - def act(name, title): - a = m.addAction(title) - a.setCheckable(True) - a.setChecked(self._config[name]) - a.triggered.connect(lambda: self.toggleAction(name)) - act("errors only", i18n("Only show on errors")) - # context menu options of the Log, if there... - # (check it without importing runlily module) - if hasattr(self.widget.currentWidget(), "addContextMenuActions"): - self.widget.currentWidget().addContextMenuActions(m) - - def toggleAction(self, name): - self._config[name] = not self._config[name] - - def readConfig(self, conf): - for name, default in ( - ("errors only", False), - ): - self._config[name] = conf.readEntry(name, default) - - def writeConfig(self, conf): - for name in ("errors only",): - conf.writeEntry(name, self._config[name]) - - -class RumorTool(kateshell.mainwindow.Tool): - helpAnchor = "rumor" - def __init__(self, mainwin): - kateshell.mainwindow.Tool.__init__(self, mainwin, - "rumor", i18n("Rumor"), "media-record", - key="Meta+Alt+R", dock=kateshell.mainwindow.Bottom) - - def factory(self): - import frescobaldi_app.rumor - return frescobaldi_app.rumor.RumorPanel(self) - - -class LilyDocTool(kateshell.mainwindow.Tool): - helpAnchor = "lilydoc" - def __init__(self, mainwin): - kateshell.mainwindow.Tool.__init__(self, mainwin, - "lilydoc", i18n("LilyPond Documentation"), "lilydoc", - key="Meta+Alt+D", dock=kateshell.mainwindow.Right) - self._docFinder = None - - def factory(self): - self.docFinder() - import frescobaldi_app.lilydoc - return frescobaldi_app.lilydoc.LilyDoc(self) - - def docFinder(self): - if self._docFinder is None: - self.newDocFinder() - return self._docFinder - - def newDocFinder(self): - import frescobaldi_app.lilydoc - self._docFinder = frescobaldi_app.lilydoc.DocFinder(self) - - def openUrl(self, url): - self.materialize() - self.widget.openUrl(url) - self.show() - - -class JobManager(object): - """Manages running LilyPond jobs. - - Emits: - jobStarted(job) - jobFinished(job, success) - - """ - jobStarted = Signal() - jobFinished = Signal() - - def __init__(self): - self.jobs = {} - - def job(self, doc): - """Returns the job running for the given document. - - Returns None if no job is running. - - """ - return self.jobs.get(doc) - - def count(self): - """Returns the number of running jobs.""" - return len(self.jobs) - - def docs(self): - """Returns a list of documents that have a LilyPond job running.""" - return self.jobs.keys() - - def run(self, job): - """Runs a job. - - Adds the job to the list of running jobs, emits the jobStarted() signal, - and calls the job.start() method. The jobFinished() signal is emitted - when the job has finished. - - """ - if job.document in self.jobs: - return - self.jobs[job.document] = job - job.done.connect(self._finished) - self.jobStarted(job) - job.start() - - def _finished(self, success, job): - del self.jobs[job.document] - self.jobFinished(job, success) - - -class CompletionModel(KTextEditor.CodeCompletionModel): - def __init__(self, doc): - KTextEditor.CodeCompletionModel.__init__(self, doc.view) - self.doc = weakref.proxy(doc) - self.result = None - - def completionInvoked(self, view, word, invocationType): - import frescobaldi_app.completion - self.result = frescobaldi_app.completion.getCompletions( - self, view, word, invocationType) - self.reset() - - def index(self, row, column, parent): - return self.result.index(row, column, parent) - - def data(self, index, role): - return self.result.data(index, role) - - def executeCompletionItem(self, doc, word, row): - if not self.result.executeCompletionItem(doc, word, row): - KTextEditor.CodeCompletionModel.executeCompletionItem( - self, doc, word, row) - - def rowCount(self, parent): - return self.result.rowCount(parent) - - -class ExpansionShortcuts(kateshell.mainwindow.UserShortcutManager): - """Manages shortcuts for the expand dialog. - - This is setup initially so that keyboard shortcuts for expansions - work without the expandManager being loaded. Pressing a keyboard - shortcut actually loads the expansion manager to perform the action. - - """ - # which config group to store our shortcuts - configGroup = "expand shortcuts" - - def widget(self): - return self.mainwin.viewStack # where the text editor views are. - - def client(self): - return self.mainwin.expandManager() - - -class CharSelectShortcuts(kateshell.mainwindow.UserShortcutManager): - """Manages shortcuts for the charselect dialog.""" - configGroup = "charselect shortcuts" - - def widget(self): - return self.mainwin.viewStack # where the text editor views are. - - def client(self): - return self.mainwin.charSelectDialog() - - -class QuickInsertShortcuts(kateshell.mainwindow.UserShortcutManager): - """Manages shortcuts for the Quick Insert panel.""" - configGroup = "quickinsert shortcuts" - - def widget(self): - return self.mainwin.viewStack - - def client(self): - tool = self.mainwin.tools["quickinsert"] - tool.materialize() - return tool.widget.toolboxWidget - - -class SessionManager(kateshell.mainwindow.SessionManager): - def createEditorDialog(self): - import frescobaldi_app.sessions - return frescobaldi_app.sessions.EditorDialog(self) - - def lilyPondCommand(self): - """Returns the LilyPond command for this session, if configured. """ - if self.current(): - return self.config().readEntry('lilypond', '') - - -# Easily get our global config -def config(group="preferences"): - return KGlobal.config().group(group) - -def lilyPondCommand(): - """ The default configured LilyPond command. """ - return config("lilypond").readEntry("default", "lilypond") - -def lilyPondVersion(command = None): - """The version of the LilyPond binary command. - - If no command is given, the default LilyPond command is used. - - """ - import ly.version - return ly.version.LilyPondInstance(command or lilyPondCommand()).version() - -def otherCommand(command, lilypond=None): - """Returns the full path to the command (e.g. 'convert-ly') that belongs - to the given or default lilypond command.""" - if not lilypond: - lilypond = lilyPondCommand() - cmd = config("lilypond").group(lilypond).readEntry(command, command) - import ly.version - return ly.version.LilyPondInstance(lilypond).path_to(cmd) or cmd - -def convertLyCommand(lilypond=None): - """Returns the convert-ly command belonging to the given (or default) - lilypond command.""" - return otherCommand('convert-ly', lilypond) - -def automaticLilyPondCommand(version): - """Returns the LilyPond command that is suitable to compile a document - with version version. - - The version argument should be a ly.version.Version instance. - Returns None if no suitable LilyPond version is available. - - """ - # find the configured lilypond versions - conf = config("lilypond") - paths = conf.readEntry("paths", ["lilypond"]) - - # remove paths for which Automatic selection is turned off - paths = [p for p in paths if conf.group(p).readEntry("auto", True)] - - # get all versions - import ly.version - ver = dict((path, ly.version.LilyPondInstance(path).version()) - for path in paths) - - # sort on version - paths.sort(key=ver.get) - - # return lowerst possible version - for path in paths: - if ver[path] >= version: - return path - -# determine updated files by a LilyPond process. -def updatedFiles(lyfile, reftime=None): - """Returns a generator that yields updated files belonging to - LilyPond document lyfile. - - Calling the returned generator with an extension (e.g. 'pdf') returns files - newer than lyfile, with that extension. - - """ - import fnmatch - if lyfile and os.path.exists(lyfile): - if reftime is None: - reftime = os.path.getmtime(lyfile) - directory, name = os.path.split(lyfile) - escname = re.escape(os.path.splitext(name)[0]) # remove ext, escape - def generatorfunc(ext = "*"): - ext = fnmatch.translate(ext.lstrip('.')) - pat = re.compile(r'{0}(-[^-]+)*\.{1}'.format(escname, ext)) - try: - files = [f for f in os.listdir(directory) if pat.match(f)] - except OSError: - return [] - files.sort(key=filenamekey) - files = [os.path.join(directory, f) for f in files] - return [f for f in files if os.path.getmtime(f) >= reftime] - else: - def generatorfunc(ext=None): - return [] - generatorfunc.lyfile = lyfile - return generatorfunc - - -# is string an empty or blank line? -def isblank(text): - """True if text is empty or whitespace-only.""" - return not text or text.isspace() - -def filenamekey(filename): - """Returns a key for natural sorting file names containing numbers.""" - name, ext = os.path.splitext(filename) - l = tuple(int(s) if s.isdigit() else s for s in re.split(r'(\d+)', name)) - return l, ext - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/progress.py frescobaldi-2.0.0/python/frescobaldi_app/progress.py --- frescobaldi-1.2.0/python/frescobaldi_app/progress.py 2010-08-24 14:06:42.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/progress.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Code that manages the progress bar at the bottom of -the Frescobaldi main window -""" - -from PyQt4.QtCore import QTimer - -_ticks = 10 # ticks per second - -class ProgressBarManager(object): - - def __init__(self, jobmanager, progressbar): - self.bar = progressbar - self.man = jobmanager - self.timer = QTimer() - self.hideTimer = QTimer() - - self.timer.setInterval(1000 / _ticks) - self.timer.timeout.connect(self.timeout) - self.hideTimer.setInterval(3000) - self.hideTimer.setSingleShot(True) - self.hideTimer.timeout.connect(self.bar.hide) - self.man.jobStarted.connect(self.start) - self.man.jobFinished.connect(self.stop) - - def start(self, job): - """ Call this when a job has started. """ - doc = job.document - lastruntime = doc.metainfo["build time"] - if lastruntime == 0.0: - lastruntime = 3.0 + doc.lines() / 20 # very arbitrary estimate... - - if self.man.count() == 1: - self.hideTimer.stop() - self.bar.show() - self.bar.setValue(0) - self.bar.setMaximum(0) - self.timer.start() - self.bar.setMaximum(self.bar.maximum() + int(_ticks * lastruntime)) - - def stop(self, job, success): - """ Call this when a job has stopped. """ - if success: - job.document.metainfo["build time"] = job.buildTime - - if self.man.count() == 0: - self.timer.stop() - if success: - self.bar.setValue(self.bar.maximum()) - self.hideTimer.start() - else: - self.bar.hide() - - def timeout(self): - self.bar.setValue(self.bar.value() + 1) - - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/rumor.py frescobaldi-2.0.0/python/frescobaldi_app/rumor.py --- frescobaldi-1.2.0/python/frescobaldi_app/rumor.py 2010-01-05 13:09:43.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/rumor.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,651 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Frescobaldi module to run Rumor -""" - -import os, re, sys -from subprocess import Popen, PIPE - -from PyQt4.QtCore import QEvent, QRegExp, QSize, QTimer, Qt -from PyQt4.QtGui import ( - QCheckBox, QComboBox, QGridLayout, QHBoxLayout, QLabel, QPushButton, - QRegExpValidator, QToolButton, QTreeWidget, QTreeWidgetItem, QWidget) -from PyKDE4.kdecore import KGlobal, KProcess, KShell, i18n -from PyKDE4.kdeui import KDialog, KIcon, KMessageBox -from PyKDE4.ktexteditor import KTextEditor - -import ly.key, ly.parse -from frescobaldi_app.widgets import ProcessButtonBase, TempoControl - -class RumorPanel(QWidget): - def __init__(self, tool): - QWidget.__init__(self) - self.mainwin = tool.mainwin - - layout = QGridLayout(self) - - # large start-stop toggle button - layout.addWidget(RumorButton(self), 0, 0, 3, 1) - - # Tempo adjustment (spinbox + long slider) - t = TempoControl() - layout.addWidget(t.spinbox, 0, 2) - hb = QHBoxLayout() - layout.addLayout(hb, 0, 3) - hb.addWidget(t.tapButton) - hb.addWidget(t.slider) - self.tempo = t - - # Meter select (editable qcombobox defaulting to document) - self.meter = QComboBox() - self.meter.setEditable(True) - self.meter.addItems(( - AUTO(), - '1/4', '2/4', '3/4', '4/4', '5/4', '6/4', - '2/2', '3/2', - '3/8', '6/8', '9/8', '12/8', - '3/16', - )) - self.meter.setValidator(QRegExpValidator(QRegExp( - re.escape(AUTO()) + "|[1-9][0-9]*/(1|2|4|8|16|32|64|128)"), - self.meter)) - self.meter.setToolTip(i18n( - "The meter to use. Leave 'Auto' to let Frescobaldi determine " - "the meter from the LilyPond document.")) - layout.addWidget(self.meter, 1, 2) - - # Quantize (1,2,4,8,16,32,64 or 128, default to 16) - hb = QHBoxLayout() - layout.addLayout(hb, 1, 3) - l = QLabel(i18n("Quantize:")) - hb.addWidget(l) - self.quantize = QComboBox() - self.quantize.addItems([str(2**i) for i in range(8)]) - self.quantize.setCurrentIndex(4) - self.quantize.setToolTip(i18n( - "The shortest note duration to use.")) - hb.addWidget(self.quantize) - l.setBuddy(self.quantize) - - # Step recording: (checkbox, disables the three controls above) - self.step = QCheckBox(i18n("Step")) - self.step.setToolTip(i18n( - "Record LilyPond input note by note, without durations.")) - hb.addWidget(self.step) - - # Monophonic input (no chords) - self.mono = QCheckBox(i18n("Mono")) - self.mono.setToolTip(i18n( - "Record monophonic input, without chords.")) - hb.addWidget(self.mono) - - # Key signature select (any lilypond pitch, defaulting to document) - self.keysig = QComboBox() - self.keysig.addItem(AUTO()) - self.keysig.addItems(map("{0:d}".format, range(-7, 1))) - self.keysig.addItems(map("{0:+d}".format, range(1, 8))) - self.keysig.setToolTip(i18n( - "The number of accidentals. A negative number designates flats. " - "Leave 'Auto' to let Frescobaldi determine the key signature from " - "the LilyPond document.")) - layout.addWidget(self.keysig, 2, 2) - - # labels for controls: - l = QLabel(i18n("Tempo:")) - l.setBuddy(self.tempo.spinbox) - layout.addWidget(l, 0, 1) - l = QLabel(i18n("Meter:")) - l.setBuddy(self.meter) - layout.addWidget(l, 1, 1) - l = QLabel(i18n("Key:")) - l.setBuddy(self.keysig) - layout.addWidget(l, 2, 1) - - hb = QHBoxLayout() - layout.addLayout(hb, 2, 3) - - # Timidity button - self.timidity = TimidityButton(self) - hb.addWidget(self.timidity) - - # Button 'More Settings' - sb = QPushButton(i18n("Configure..."), clicked=self.slotSettingsButtonClicked) - sb.setToolTip(i18n("Adjust more settings, like MIDI input and output.")) - hb.addWidget(sb) - - # Save Button - sb = QPushButton(i18n("Save"), clicked=self.saveSettings) - sb.setToolTip(i18n("Set these settings as default.")) - hb.addWidget(sb) - - self.loadSettings() - - # display Rumor version on first start. - cmd = config("commands").readEntry("rumor", "rumor") - try: - v = Popen([cmd, '--version'], stdout=PIPE).communicate()[0].strip() - self.showMessage(i18n("Found rumor version %1.", v), 1000) - except OSError as e: - KMessageBox.error(self.mainwin, - i18n("Could not find Rumor: %1", unicode(e[1]))) - - def slotSettingsButtonClicked(self): - RumorSettings(self.mainwin).exec_() - - def saveSettings(self): - conf = config("rumor") - conf.writeEntry("tempo", self.tempo.tempo()) - conf.writeEntry("quantize", self.quantize.currentText()) - conf.writeEntry("step", self.step.isChecked()) - conf.writeEntry("mono", self.mono.isChecked()) - conf.writeEntry("meter", autofy(self.meter.currentText())) - conf.writeEntry("keysig", autofy(self.keysig.currentText())) - conf.writeEntry("timidity", self.timidity.isChecked()) - self.showMessage(i18n("Settings have been saved."), 1000) - - def loadSettings(self): - conf = config("rumor") - self.tempo.setTempo(conf.readEntry("tempo", 100)) - setComboBox(self.quantize, conf.readEntry("quantize", "16")) - self.step.setChecked(conf.readEntry("step", False)) - self.mono.setChecked(conf.readEntry("mono", False)) - setComboBox(self.meter, unautofy(conf.readEntry("meter", "auto"))) - setComboBox(self.keysig, unautofy(conf.readEntry("meter", "auto"))) - if conf.readEntry("timidity", False): - self.timidity.start() - - def showMessage(self, msg, timeout=0): - self.mainwin.statusBar().showMessage(msg, timeout) - - def getRumorArguments(self): - """ - Return the arguments needed to run Rumor conform the user's settings, - also set some state variables in self from configuration. - - """ - conf = config("rumor") - args = [] - doc = self.mainwin.currentDocument() - cursor = doc.view.cursorPosition() - # indent of current line - self.indent = re.match(r'\s*', doc.line()[:cursor.column()]).group() - # text from start to cursor - text = doc.textToCursor(cursor) - - # Language - lang = conf.readEntry("language", "auto") - if lang not in ( - 'ne', 'en', 'en-short', 'de', 'no', 'sv', 'it', 'ca', 'es'): - # determine lily language from document - lang = (ly.parse.documentLanguage(text) or "ne")[:2] - if lang == "po": lang = "es" - elif lang == "su": lang = "de" - elif lang == "en" and not re.search( - r'\b[a-g](flat|sharp)\b', text): - lang = "en-short" - elif lang == "vl": - # "vlaams" is not supported by Rumor - # TODO: rewrite the pitches output by Rumor :-) - lang == "it" - args.append("--lang=" + lang) - - # Step recording? - if self.step.isChecked(): - args.append("--flat") - else: - # No, set tempo, quantization and meter - args.append("--tempo={0}".format(self.tempo.tempo())) - args.append("--grain={0}".format(self.quantize.currentText())) - meter = autofy(self.meter.currentText()) - if meter == "auto": - # determine from document - find the latest \time command: - m = re.compile(r'.*\\time\s*(\d+/(1|2|4|8|16|32|64|128))(?!\d)', - re.DOTALL).match(text) - if m: - meter = m.group(1) - else: - meter = '4/4' - args.append("--meter=" + meter) - - # Key signature - acc = autofy(self.keysig.currentText()) - if acc == "auto": - # Determine key signature from document. - m = re.compile( - r'.*\\key\s+(' + '|'.join(ly.key.key2num[lang].keys()) + r')\s*\\' - r'(major|minor|(ion|dor|phryg|(mixo)?lyd|aeol|locr)ian)\b', - re.DOTALL).match(text) - if m: - pitch, mode = m.group(1,2) - acc = ly.key.key2num[lang][pitch] + ly.key.modes[mode] - else: - acc = 0 - else: - acc = int(acc) - acc += 2 # use sharps for half tones leading to second, fifth, sixth - args.append("--key=" + ly.key.num2key[lang][bound(acc, -8, 12)]) - - # Monophonic input? - if self.mono.isChecked(): - args.append("--no-chords") - - # Absolute pitches? - if conf.readEntry("absolute pitches", False): - args.append("--absolute-pitches") - - # Explicit durations? - if conf.readEntry("explicit durations", False): - args.append("--explicit-durations") - - # No barlines? - self.noBarlines = conf.readEntry("no barlines", False) - - # No dots? - if conf.readEntry("no dots", False): - args.append("--no-dots") - - # Legato? - if conf.readEntry("legato", False): - args.append("--legato") - - # Strip rests? - if conf.readEntry("strip rests", False): - args.append("--strip") - - # Guile scripts? - scripts = conf.readEntry("scripts", []) - if scripts: - paths = dict((os.path.basename(path), path) for path in rumorScripts()) - for s in scripts: - if s in paths: - args.append("--script=" + paths[s]) - - # input/output - i = conf.readEntry("midi in", "oss:1") - o = conf.readEntry("midi out", "oss:1") - if o.startswith('oss:'): - args.append("--oss=" + o.split(":")[1]) - elif re.match(r"\d", o) and re.match(r"\d", i): - args.append("--alsa={0},{1}".format(i, o)) - elif re.match(r"\d", o): - args.append("--alsa=" + o) - self.keyboardEmu = i == "keyboard" - - if self.keyboardEmu: - args.append("--kbd") - return args - - def insertRumorOutput(self, text): - """ Insert the output received from Rumor in the editor. """ - text = text.replace('\r', '') # remove carriage returns - if text == '\n': - return # discard single newline, typically output on exit. - if self.noBarlines: - text = text.replace('|', '') - text = text.replace('\n\n', '\n') # avoid empty lines - text = text.replace('\n', '\n' + self.indent) - self.mainwin.view().insertText(text) - - -class RumorButton(ProcessButtonBase, QToolButton): - def __init__(self, panel): - super(RumorButton, self).__init__() - self.setIconSize(QSize(48, 48)) - self.setIcon(KIcon("media-record")) - self.setText(i18n("Record")) - self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) - self.setToolTip(i18n("Start or stop Rumor MIDI-recording.")) - self.panel = panel - self._lastkey = None - self.panel.mainwin.aboutToClose.connect(self.quit) - - def initializeProcess(self, p): - rumor = config("commands").readEntry("rumor", "rumor") - cmd = [rumor] + self.panel.getRumorArguments() - if self.panel.keyboardEmu: - # Run Rumor in a pty when keyboard input is used. - runpty = KGlobal.dirs().findResource("appdata", "lib/runpty.py") - cmd[0:0] = [sys.executable, runpty] - p.setProgram(cmd) - p.setOutputChannelMode(KProcess.OnlyStdoutChannel) - - def started(self): - self.panel.showMessage(i18n("Rumor is recording, press ESC to stop.")) - self.panel.mainwin.installEventFilter(self) - self.panel.installEventFilter(self) - if self.panel.keyboardEmu: - self.panel.setFocus() - - def stop(self): - # Rumor wants to be killed with SIGINT - stop = lambda: os.kill(self.process().pid(), 2) - if self.panel.keyboardEmu: - self.writeInput(" ") - QTimer.singleShot(100, stop) - else: - stop() - - def quit(self): - """ Called when mainwindow will close. """ - if self.isRunning(): - os.kill(self.process().pid(), 2) - if not self.process().waitForFinished(3000): - self.process().kill() - - def readOutput(self, text): - self.panel.insertRumorOutput(unicode(text)) # text is a QByteArray - - def finished(self, exitCode, exitStatus): - self.panel.showMessage(i18n("Rumor stopped."), 1000) - self.panel.mainwin.removeEventFilter(self) - self.panel.removeEventFilter(self) - self.panel.mainwin.view().setFocus() - - def eventFilter(self, obj, ev): - """ - Event filter: - on mainwin to catch the ESC key to stop Rumor. - on self to also send input keys to Rumor. - """ - if ev.type() != QEvent.KeyPress: - return False - elif ev.key() == Qt.Key_Escape: - self.stop() - return True - elif obj == self.panel and self.panel.keyboardEmu: - if ev.key() in (Qt.Key_Enter, Qt.Key_Return): - self.panel.mainwin.view().insertText('\n' + self.panel.indent) - return True - elif not ev.isAutoRepeat() and ev.text(): - key = ev.text() - if key == " " or key != self._lastkey: - self._lastkey = key - else: - key = " " + key - self.writeInput(key) - return True - return False - - -class TimidityButton(ProcessButtonBase, QPushButton): - def __init__(self, panel): - super(TimidityButton, self).__init__(panel) - self.setText(i18n("TiMidity")) - self.setToolTip(i18n("Start or stop the TiMidity ALSA MIDI client.")) - self.setIcon(KIcon("media-playback-start")) - panel.mainwin.aboutToClose.connect(self.quit) - - def initializeProcess(self, p): - cmd, err = KShell.splitArgs(config("commands").readEntry("timidity", default_timidity_command)) - if err == KShell.NoError: - p.setProgram(cmd) - else: - pass # TODO: warn user about incorrect command - - -class RumorSettings(KDialog): - """ - Dialog with more Rumor settings. - """ - def __init__(self, mainwin): - KDialog.__init__(self, mainwin) - self.setAttribute(Qt.WA_DeleteOnClose) - self.setCaption(i18n("Rumor Settings")) - self.setButtons(KDialog.ButtonCode( - KDialog.Ok | KDialog.Cancel | KDialog.Help)) - self.setHelp("rumor") - - layout = QGridLayout(self.mainWidget()) - # MIDI input and output. - # Get the list of available OSS and ALSA devices - oslist = [('oss:{0}'.format(i), i18n("OSS device %1", i)) - for i in range(getOSSnrMIDIs())] - i = oslist + parseAconnect('i') + [("keyboard", i18n("Keyboard"))] - o = oslist + parseAconnect('o') - self.ilist, ititles = map(list, zip(*i)) - self.olist, otitles = map(list, zip(*o)) - - # input - l = QLabel(i18n("MIDI input:")) - layout.addWidget(l, 1, 0) - self.ibut = QComboBox() - self.ibut.addItems(ititles) - self.ibut.setToolTip(i18n("MIDI input to use. Choose 'Keyboard' if " - "you want to play on the keyboard of your computer.")) - layout.addWidget(self.ibut, 1, 1) - l.setBuddy(self.ibut) - - # output - l = QLabel(i18n("MIDI output:")) - layout.addWidget(l, 2, 0) - self.obut = QComboBox() - self.obut.addItems(otitles) - self.obut.setToolTip(i18n("MIDI output to use.")) - layout.addWidget(self.obut, 2, 1) - l.setBuddy(self.obut) - - # Language - l = QLabel(i18n("Language:")) - layout.addWidget(l, 3, 0) - self.lang = QComboBox() - self.lang.addItems(( - AUTO(), 'ne', 'en', 'en-short', 'de', 'no', 'sv', 'it', 'ca', 'es')) - self.lang.setToolTip(i18n("The LilyPond language you want Rumor to " - "output the pitches in.")) - layout.addWidget(self.lang, 3, 1) - l.setBuddy(self.lang) - - hb = QHBoxLayout() - layout.addLayout(hb, 4, 0, 1, 2) - # explicit durations - self.explDur = QCheckBox(i18n("Explicit durations")) - self.explDur.setToolTip(i18n( - "Add a duration after every note, even if it is the same as the " - "preceding note.")) - hb.addWidget(self.explDur) - - # absolute pitches - self.absPitches = QCheckBox(i18n("Absolute pitch")) - self.absPitches.setToolTip(i18n( - "Use absolute pitches instead of relative.")) - hb.addWidget(self.absPitches) - - hb = QHBoxLayout() - layout.addLayout(hb, 5, 0, 1, 2) - # No Barlines - self.noBar = QCheckBox(i18n("No barlines")) - self.noBar.setToolTip(i18n( - "Filter the barlines out of Rumor's output.")) - hb.addWidget(self.noBar) - - # No dots - self.noDots = QCheckBox(i18n("No dots")) - self.noDots.setToolTip(i18n( - "Do not use dotted notes, but ties instead.")) - hb.addWidget(self.noDots) - - # Legato - self.legato = QCheckBox(i18n("Legato")) - self.legato.setToolTip(i18n("Do not use rests, but give all notes " - "the maximum length.")) - hb.addWidget(self.legato) - - # Strip rests - self.stripRests = QCheckBox(i18n("Strip rests")) - self.stripRests.setToolTip(i18n( - "Strip leading and trialing rests from output.")) - hb.addWidget(self.stripRests) - - layout.addWidget(QLabel(i18n( - "Guile scripts to load:")), 6, 0, 1, 2) - - # Guile scripts listview - self.scripts = QTreeWidget() - self.scripts.setRootIsDecorated(False) - self.scripts.setHeaderLabels((i18n("Name"), i18n("Description"))) - self.scripts.setToolTip(i18n( - "Here you can select which Guile scripts you want Rumor to load. " - "Check \"What's this\" for more information.")) - localRumorDir = "~/.kde/share/apps/frescobaldi/rumor/" - self.scripts.setWhatsThis(i18n( - "Here you can select which Guile scripts you want Rumor to load. " - "You can add your own scripts by putting them in %1. " - "If the first line of your script starts with a semicolon (;) " - "that line will be shown as description.", localRumorDir)) - layout.addWidget(self.scripts, 7, 0, 1, 2) - - self.loadSettings() - - def done(self, result): - if result: - self.saveSettings() - KDialog.done(self, result) - - def loadSettings(self): - """ Load the settings """ - conf = config("rumor") - if 'oss:1' in self.ilist: - idefault = odefault = 'oss:1' - else: - idefault = 'kbd' - odefault = self.olist and self.olist[-1] or "" - i = conf.readEntry("midi in", idefault) - o = conf.readEntry("midi out", odefault) - if i in self.ilist: - self.ibut.setCurrentIndex(self.ilist.index(i)) - if o in self.olist: - self.obut.setCurrentIndex(self.olist.index(o)) - setComboBox(self.lang, unautofy(conf.readEntry("language", "auto"))) - self.absPitches.setChecked(conf.readEntry("absolute pitches", False)) - self.explDur.setChecked(conf.readEntry("explicit durations", False)) - self.noBar.setChecked(conf.readEntry("no barlines", False)) - self.noDots.setChecked(conf.readEntry("no dots", False)) - self.legato.setChecked(conf.readEntry("legato", False)) - self.stripRests.setChecked(conf.readEntry("strip rests", False)) - # Guile scripts - self.scripts.clear() - scripts = conf.readEntry("scripts", []) - for path in rumorScripts(): - name = os.path.basename(path) - try: - desc = open(path).readline().strip() - item = QTreeWidgetItem(self.scripts) - item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) - item.setCheckState(0, (name in scripts) and Qt.Checked or Qt.Unchecked) - item.setText(0, name) - if desc.startswith(';'): - item.setText(1, desc.strip(";")) - except IOError: - pass - for col in 0, 1: - self.scripts.resizeColumnToContents(col) - - def saveSettings(self): - """ Save the settings """ - conf = config("rumor") - conf.writeEntry("midi in", self.ilist[self.ibut.currentIndex()]) - conf.writeEntry("midi out", self.olist[self.obut.currentIndex()]) - conf.writeEntry("language", autofy(self.lang.currentText())) - conf.writeEntry("absolute pitches", self.absPitches.isChecked()) - conf.writeEntry("explicit durations", self.explDur.isChecked()) - conf.writeEntry("no barlines", self.noBar.isChecked()) - conf.writeEntry("no dots", self.noDots.isChecked()) - conf.writeEntry("legato", self.legato.isChecked()) - conf.writeEntry("strip rests", self.stripRests.isChecked()) - # Read script treeview - names = [] - for row in range(self.scripts.topLevelItemCount()): - item = self.scripts.topLevelItem(row) - if item.checkState(0) == Qt.Checked: - names.append(item.text(0)) - conf.writeEntry("scripts", names) - - - -def parseAconnect(channel): - """ - Returns a list of tuples ('0:0', 'Port name') of the - available MIDI ports for either reading (channel = 'i') - or writing (channel = 'o') - """ - option = channel == 'i' and '--input' or '--output' - cmd = config("commands").readEntry("aconnect", "aconnect") - res = [] - # run aconnect in the english (standard language) - env = dict(os.environ) - for key in "LANG", "LC_ALL", "LC_MESSAGES": - if key in env: - del env[key] - for line in Popen([cmd, option], stdout=PIPE, env=env).communicate()[0].splitlines(): - m = re.match(r"client\s*(\d+)|\s*(\d+)\s+'([^']+)'", line) - if m: - if m.group(1): - client = m.group(1) - elif client != "0": - port = "{0}:{1}".format(client, m.group(2)) - name = "{0} ({1})".format(port, m.group(3).strip()) - res.append((port, name)) - return res - -def getOSSnrMIDIs(): - """ - Get the number of MIDI devices when OSS is used - """ - try: - import struct, fcntl, ossaudiodev - return struct.unpack('i', fcntl.ioctl( - open("/dev/sequencer"), - ossaudiodev.SNDCTL_SEQ_NRMIDIS, - struct.pack('i', 0)))[0] - except: - return 0 - -def rumorScripts(): - return KGlobal.dirs().findAllResources("appdata", "rumor/*") - -def config(group="rumor"): - return KGlobal.config().group(group) - -def bound(x, minValue, maxValue): - """ Clips x according to the boundaries minValue and maxValue """ - return max(minValue, min(maxValue, x)) - -AUTO = lambda: i18n("Auto") -autofy = lambda s: s == AUTO() and "auto" or s -unautofy = lambda s: s == "auto" and AUTO() or s - -def setComboBox(c, text): - """ - Set a combobox to some value. To compensate for the loss - of QComboBox.setCurrentText()... - """ - index = c.findText(text) - if index == -1: - if c.isEditable(): - c.addItem(text) - c.setCurrentIndex(c.count() - 1) - else: - c.setCurrentIndex(index) - - -default_timidity_command = "timidity -Os -iA -B2,8 -EFreverb=0" diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/runlily.py frescobaldi-2.0.0/python/frescobaldi_app/runlily.py --- frescobaldi-1.2.0/python/frescobaldi_app/runlily.py 2010-09-29 09:41:54.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/runlily.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,803 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" Code to run LilyPond and display its output in a LogWidget """ - -import math, os, re, shutil, sys, tempfile, time -from itertools import count, repeat - -from PyQt4.QtCore import QProcess, QSize, QTimer, QUrl, Qt -from PyQt4.QtGui import ( - QBrush, QCheckBox, QColor, QFont, QLabel, QListWidget, QListWidgetItem, - QStackedWidget, QTextBrowser, QTextCharFormat, QTextCursor, QVBoxLayout, - QWidget) -from PyKDE4.kdecore import KGlobal, KPluginLoader, KProcess, KUrl, i18n -from PyKDE4.kdeui import ( - KApplication, KDialog, KIcon, KMenu, KMessageBox, KStandardGuiItem) -from PyKDE4.kio import KEncodingFileDialog - -from signals import Signal, SignalProxy - -from kateshell.app import resolvetabs_text -from frescobaldi_app.actions import openPDF -from frescobaldi_app.mainapp import ( - automaticLilyPondCommand, lilyPondCommand, lilyPondVersion, updatedFiles) - - -def config(group): - return KGlobal.config().group(group) - -# to find filenames with line:col pairs in LilyPond output -_ly_message_re = re.compile(r"^((.*?):(\d+)(?::(\d+))?)(?=:)", re.M) - - -class BasicLilyPondJob(object): - """ - Performs one job to run LilyPond. - - Set different parameters and then call start() to start. - The Signal done(success, self) is emitted when the job has finished. - The SignalProxy output(msg, type, newline=False) is emitted when there is output - (stderr and stdout). This proxy is called like Log and LogWidget. - Don't use (Basic)LilyPondJob for more than one run. - """ - - # these are default values for attributes that can be set: - - command = "lilypond" # lilypond command to run - arguments = ["--pdf"] # arguments - include = [] # directories to add to include path - lyfile = None # lilypond document filename to run on - - preview = False # run with point and click - verbose = False # run with --verbose - delfiles = True # delete intermediate files - - startTime = 0.0 # time.time() this job started - buildTime = 0.0 # time in seconds this job has been running - - done = Signal(fireOnce=True) - output = SignalProxy() - - def __init__(self): - pass - - def start(self): - """ Starts the process. """ - # save some values - self._directory, self._basename = os.path.split(self.lyfile) - - # construct the full LilyPond command. - cmd = [self.command] - self.verbose and cmd.append("--verbose") - cmd.append("-dpoint-and-click=" + scmbool(self.preview)) - cmd.append("-ddelete-intermediate-files=" + scmbool(self.delfiles)) - for path in self.include: - cmd.append("--include") - cmd.append(path) - cmd.extend(self.arguments) - cmd.append(self._basename) - - # create KProcess instance that does the work - p = self._p = KProcess() - p.setOutputChannelMode(KProcess.MergedChannels) - p.setWorkingDirectory(self._directory) - p.setProgram(cmd) - p.finished.connect(self._finished) - p.error.connect(self._error) - p.readyRead.connect(self._readOutput) - - mode = i18n("preview mode") if self.preview else i18n("publish mode") - version = lilyPondVersion(self.command) - if version: - self.output.writeLine(i18n("LilyPond %1 [%2] starting (%3)...", - format(version), self._basename, mode)) - else: - self.output.writeLine(i18n("LilyPond [%1] starting (%2)...", - self._basename, mode)) - - self.startTime = time.time() - p.start() - - def _exit(self, success): - """ Called when the job is finished (successfully or not). - - Emits the done(success, self) signal. - - """ - self.buildTime = time.time() - self.startTime - self.done(success, self) - - def abort(self): - """ Abort the LilyPond job """ - self._p.terminate() - - def kill(self): - """ Immediately kill the job, and disconnect it's output signals, etc. - - Will exit the job with success = False. - - """ - self._p.finished.disconnect(self._finished) - self._p.error.disconnect(self._error) - self._p.readyRead.disconnect(self._readOutput) - self._p.kill() - self._p.waitForFinished(2000) - self._exit(False) - - def _finished(self, exitCode, exitStatus): - if exitCode: - self.output.writeMsg(i18n("LilyPond [%1] exited with return code %2.", - self._basename, exitCode), "msgerr") - elif exitStatus: - self.output.writeMsg(i18n("LilyPond [%1] exited with exit status %2.", - self._basename, exitStatus), "msgerr") - else: - # We finished successfully, show elapsed time... - minutes, seconds = divmod(time.time() - self.startTime, 60) - f = "{0:.0f}'{1:.0f}\"" if minutes else '{1:.1f}"' - self.output.writeMsg(i18n("LilyPond [%1] finished (%2).", - self._basename, f.format(minutes, seconds)), "msgok") - - # otherwise we delete ourselves during our event handler, causing crash - QTimer.singleShot(0, lambda: self._exit(not (exitCode or exitStatus))) - - def _error(self, errCode): - """ Called when QProcess encounters an error """ - if errCode == QProcess.FailedToStart: - self.output.writeMsg(i18n( - "Could not start LilyPond. Please check path and permissions."), - "msgerr") - elif errCode == QProcess.ReadError: - self.output.writeMsg(i18n("Could not read from the LilyPond process."), - "msgerr") - elif self._p.state() == QProcess.NotRunning: - self.output.writeMsg(i18n("An unknown error occured."), "msgerr") - if self._p.state() == QProcess.NotRunning: - # otherwise we delete ourselves during our event handler, causing crash - QTimer.singleShot(0, lambda: self._exit(False)) - - def _readOutput(self): - encoding = sys.getfilesystemencoding() or 'utf-8' - text = str(self._p.readAllStandardOutput()).decode(encoding, 'replace') - parts = iter(_ly_message_re.split(text)) - # parts has an odd length(1, 6, 11 etc) - # message, etc. - self.output.write(next(parts)) - for url, path, line, col, msg in zip(*repeat(parts, 5)): - path = os.path.join(self._directory, path) - line = int(line or "1") or 1 - col = int(col or "0") - self.output.writeFileRef(url, path, line, col) - self.output.write(msg) - - def updatedFiles(self): - """ - Returns a function that can list updated files based on extension. - """ - return updatedFiles(self.lyfile, math.floor(self.startTime)) - - -class LilyPondJob(BasicLilyPondJob): - """ - A LilyPondJob with default settings from Frescobaldi config. - """ - def __init__(self): - super(LilyPondJob, self).__init__() - self.command = lilyPondCommand() - self.arguments = ["--pdf"] - self.verbose = config("preferences").readEntry("verbose lilypond output", False) - self.delfiles = config("preferences").readEntry("delete intermediate files", True) - self.include = config("preferences").readPathEntry("lilypond include path", []) - - -class DocumentJob(LilyPondJob): - """ - A job to be run on a Document instance. - The document is available in the document attribute. - """ - document = None - - def __init__(self, doc=None): - self.document = doc - super(DocumentJob, self).__init__() - - def start(self): - if self.document.needsLocalFileManager(): - # handle nonlocal or unnamed documents - lyfile = self.document.localFileManager(True).makeLocalFile() - else: - # look for %%master directives - lyfile = self.document.localPath() - lvars = self.document.variables() - ly = (lvars.get(self.preview and 'master-preview' or 'master-publish') - or lvars.get('master')) - if ly: - lyfile = os.path.join(os.path.dirname(lyfile), ly) - self.lyfile = lyfile - self.document.closed.connect(self.kill) - super(DocumentJob, self).start() - - -class RunLilyPondDialog(KDialog): - """ - A dialog where a DocumentJob can be configured before it's started. - """ - def __init__(self, mainwin): - self.mainwin = mainwin - KDialog.__init__(self, mainwin) - self.setCaption(i18n("Run LilyPond")) - self.setButtons(KDialog.ButtonCode( - KDialog.Help | KDialog.Ok | KDialog.Cancel )) - self.setButtonText(KDialog.Ok, i18n("Run LilyPond")) - self.setButtonIcon(KDialog.Ok, KIcon("run-lilypond")) - self.setHelp("running") - - layout = QVBoxLayout(self.mainWidget()) - - layout.addWidget(QLabel(i18n( - "Select which LilyPond version you want to run:"))) - - self.lilypond = QListWidget() - self.lilypond.setIconSize(QSize(22, 22)) - self.lilypond.setSpacing(4) - layout.addWidget(self.lilypond) - - self.preview = QCheckBox(i18n( - "Run LilyPond in preview mode (with Point and Click)")) - layout.addWidget(self.preview) - - self.verbose = QCheckBox(i18n("Run LilyPond with verbose output")) - layout.addWidget(self.verbose) - - def configureJob(self, job, doc=None): - """Configure a job, belonging to document. - - If the document is not given, it is expected to live in the document - attribute of the job. If there is already a job running, we just display, - but disable the Run button, until the old job finishes. - """ - doc = doc or job.document - - # populate the dialog based on remembered settings for this document - self.lilypond.clear() - - # find the configured lilypond versions - conf = config("lilypond") - paths = conf.readEntry("paths", ["lilypond"]) or ["lilypond"] - default = conf.readEntry("default", "lilypond") - - import ly.version - - # get all versions - ver = dict((path, lilyPondVersion(path)) for path in paths) - - # default - if default not in paths: - default = paths[0] - - # Sort on version - paths.sort(key=ver.get) - versions = [format(ver.get(p)) for p in paths] - - # Determine automatic version (lowest possible) - autopath = None - docVersion = doc.lilyPondVersion() - if docVersion: - autopath = automaticLilyPondCommand(docVersion) - - def addItem(version, path, icon, title, tooltip): - item = QListWidgetItem(self.lilypond) - item.setIcon(KIcon(icon)) - item.setText("{0}\n{1}: {2}".format(title, i18n("Command"), path)) - item.setToolTip(tooltip) - version or item.setFlags(Qt.NoItemFlags) - - # Add all available LilyPond versions: - for path in paths: - if ver[path]: - title = i18n("LilyPond %1", format(ver[path])) - tooltip = i18n("Use LilyPond version %1", format(ver[path])) - addenda, tips = [], [] - if path == default: - addenda.append(i18n("default")) - tips.append(i18n("Default LilyPond Version.")) - if path == autopath: - addenda.append(i18n("automatic")) - tips.append(i18n("Automatic LilyPond Version (determined from document).")) - if addenda: - title += " [{0}]".format(", ".join(addenda)) - tooltip += "\n{0}".format("\n".join(tips)) - addItem(format(ver[path]), path, "run-lilypond", title, - tooltip + "\n" + i18n("Path: %1", - ly.version.LilyPondInstance(path).command() or path)) - else: - addItem("", path, "dialog-error", - i18n("LilyPond (version unknown)"), - i18n("Use LilyPond (version unknown)\nPath: %1", - ly.version.LilyPondInstance(path).command() or path)) - - # Copy the settings from the document: - self.preview.setChecked(doc.metainfo["custom preview"]) - self.verbose.setChecked(doc.metainfo["custom verbose"]) - - try: - self.lilypond.setCurrentRow(versions.index( - doc.metainfo["custom lilypond version"])) - except ValueError: - cmd = autopath if autopath and conf.readEntry("automatic version", - False) else default - self.lilypond.setCurrentRow(paths.index(cmd)) - - # Focus our listbox: - self.lilypond.setFocus() - - # Disable the Run button if a job is running for this document - oldjob = self.mainwin.jobManager().job(doc) - self.enableButtonOk(not oldjob) - if oldjob: - enable = lambda: self.enableButtonOk(True) - oldjob.done.connect(enable) - - # Wait for user interaction: - result = self.exec_() - - # If a job was running, don't listen to it anymore - if oldjob: - oldjob.done.disconnect(enable) - - if not result: - return False # cancelled - - # Save the settings in the document's metainfo and configure job: - doc.metainfo["custom preview"] = job.preview = self.preview.isChecked() - doc.metainfo["custom verbose"] = job.verbose = self.verbose.isChecked() - index = self.lilypond.currentRow() - doc.metainfo["custom lilypond version"] = versions[index] - job.command = paths[index] - return True - - -class LogWidget(QTextBrowser): - - def __init__(self, parent=None): - QTextBrowser.__init__(self, parent) - self.setFocusPolicy(Qt.NoFocus) - self.setOpenLinks(False) - self.setOpenExternalLinks(False) - self.insertCursor = QTextCursor(self.document()) - self.formats = textFormats() - - def checkScroll(self, func): - """ - Checks if we were scrolled to the bottom, calls func and then - again makes sure to scroll to the bottom, if we were. - """ - sb = self.verticalScrollBar() - # were we scrolled to the bottom? - bottom = sb.value() == sb.maximum() - func() - # if yes, keep it that way. - if bottom: - sb.setValue(sb.maximum()) - - def write(self, text, format='log'): - self.checkScroll(lambda: - self.insertCursor.insertText(text, self.formats[format])) - - def writeMsg(self, text, format='msg'): - # start on a new line if necessary - if self.insertCursor.columnNumber() > 0: - self.write('\n', format) - self.write(text, format) - - def writeLine(self, text, format='msg'): - self.writeMsg(text + '\n', format) - - def writeFileRef(self, text, path, line, column, tooltip=None, format='log'): - self.write(text, format) - - -class Log(LogWidget): - """ - A more advanced version of the logwidget, designed for embedding - in a tool. - """ - def __init__(self, tool, doc): - self.tool = tool - self.doc = doc - self.anchors = {} - self.anchorgen = anchorgen() - LogWidget.__init__(self, tool.widget) - self.anchorClicked.connect(self.slotAnchorClicked) - # context menu: - self.setContextMenuPolicy(Qt.CustomContextMenu) - self.customContextMenuRequested.connect(self.showContextMenu) - - def clear(self): - self.anchors.clear() - self.anchorgen = anchorgen() - super(Log, self).clear() - - def show(self): - """ Really show our log, e.g. when there are errors """ - self.tool.showLog(self.doc) - self.tool.show() - - def writeFileRef(self, text, path, line, column, tooltip=None, format='url'): - anchor = next(self.anchorgen) - self.anchors[anchor] = FileRef(self.doc.app, path, line, column) - f = self.formats[format] - f.setAnchorHref(anchor) - f.setToolTip(tooltip or i18n("Click to edit this file")) - self.write(text, format) - self.show() # because this refers to a warning or error - - def slotAnchorClicked(self, url): - ref = self.anchors.get(str(url.path())) - if ref: - ref.activate() - - def showContextMenu(self, pos): - m = KMenu(self) - m.aboutToHide.connect(m.deleteLater) - m.addTitle(i18n("LilyPond Log")) - self.addContextMenuActions(m) - m.popup(self.mapToGlobal(pos)) - - def addContextMenuActions(self, menu): - a = menu.addAction(KIcon("edit-copy"), i18n("&Copy")) - a.triggered.connect(self.copyLog) - g = KStandardGuiItem.saveAs() - a = menu.addAction(g.icon(), g.text()) - a.triggered.connect(self.saveLogAs) - - def copyLog(self): - text = (self.textCursor().selection().toPlainText() - or self.toPlainText()) - if text: - KApplication.clipboard().setText(text) - - def saveLogAs(self): - startDir, fileName = os.path.split(self.doc.localPath()) - fileName = (os.path.splitext(fileName)[0] or "lilypond") + ".log" - dlg = KEncodingFileDialog(startDir, 'utf-8', '', - i18n("Save LilyPond Log as"), - KEncodingFileDialog.Saving, self) - dlg.setSelection(fileName) - dlg.setConfirmOverwrite(True) - if not dlg.exec_(): - return # Cancelled - encoding = dlg.selectedEncoding() - fileName = dlg.selectedFile() - text = (self.textCursor().selection().toPlainText() - or self.toPlainText()) - try: - with open(fileName, 'w') as f: - f.write(text.encode(encoding, 'replace')) - f.write('\n') - except (OSError, IOError) as e: - KMessageBox.error(self, - i18n("Could not save LilyPond log:\n\n%1", unicode(e))) - - -class FileRef(object): - """ - A reference to a file position (name, line, column). - Contacts documents if loaded and uses smart cursors to maintain the - position if the document is changed. - - Also listens to the application if a document is opened that might be - interesting for us. - """ - def __init__(self, app, path, line, column): - self.path = path - self.line = line - self.column = column - - self.smartCursor = None - self.doc = None - - # listen to the application: - self.app = app - self.app.documentMaterialized.connect(self.documentOpened) - # if named doc is loaded get a smart cursor - doc = self.app.findDocument(path) - if doc: - self.bind(doc) - - def bind(self, doc): - """ - Connects to the document (that must have our path) and tries - to get a SmartCursor from it. - If the document is closed, the binding is deleted. - TODO: update our cursor pos before document is closed... - """ - if doc.doc: - iface = doc.doc.smartInterface() - if iface: - column = resolvetabs_text(self.column, doc.line(self.line - 1)) - iface.smartMutex().lock() - iface.clearRevision() - self.smartCursor = iface.newSmartCursor(self.line - 1, column) - iface.smartMutex().unlock() - self.doc = doc - doc.closed.connect(self.unbind) - doc.urlChanged.connect(self.unbind) - # no need to listen anymore - self.app.documentMaterialized.disconnect(self.documentOpened) - - def unbind(self): - """ - Deletes the binding to a document. - """ - self.doc.closed.disconnect(self.unbind) - self.doc.urlChanged.disconnect(self.unbind) - self.smartCursor = None - self.doc = None - # listen again - self.app.documentMaterialized.connect(self.documentOpened) - - def activate(self): - """ - Open our file and put the cursor in the right place. - """ - doc = self.doc or self.app.openUrl(self.path) - doc.setActive() # this binds our document! (via documentMaterialized) - # If we're still not bound, it's because there wasn't a smartInterface. - # In that case we just position the cursor ourselves. - if self.doc: - self.doc.view.setCursorPosition(self.smartCursor) - else: - doc.setCursorPosition(self.line, self.column, translate=False) - - def documentOpened(self, doc): - if not self.doc and doc.localPath() == self.path: - self.bind(doc) - - -class LocalFileManager(object): - """ - Manages the local storage of remote or unnamed LilyPond files, - so LilyPond can be run on those files. - This is instantiated upon request (to save a remote or unnamed LilyPond - document to a local file), and is deleted (by the Document) as soon as the - url of the document changes or the document closes. - """ - def __init__(self, doc): - self.doc = doc - self.directory = tempfile.mkdtemp() - path = self.doc.url().path() - self.filename = path and os.path.basename(path) or "music.ly" - - def __del__(self): - shutil.rmtree(self.directory, ignore_errors=True) - - def path(self): - """ - Return the path, without actually saving the document contents. - """ - return os.path.join(self.directory, self.filename) - - def makeLocalFile(self): - """ - Return the path of the LilyPond file the unnamed or remote - file is cached to. If needed the contents of the document are saved - into this file as well. - """ - lyfile = self.path() - # Save the file to our local storage - # TODO: error handling - with open(lyfile, 'w') as f: - f.write(self.doc.text().encode(self.doc.encoding() or 'utf-8')) - return lyfile - - -class BackgroundJob(object): - """ - Manages LilyPond jobs in the background. Can display a dialog with the log - output if there was an error. - Subclass this at your liking. - """ - def __init__(self, log=None): - self.log = log or LogWidget() - self._directory = None - self.job = None - - def directory(self): - if self._directory is None: - self._directory = tempfile.mkdtemp() - return self._directory - - def run(self, text, fileName='output.ly'): - lyfile = os.path.join(self.directory(), fileName) - with open(lyfile, 'w') as f: - f.write(text.encode('utf-8')) - self.log.clear() - # ... and run LilyPond. - job = self.job = LilyPondJob() - job.lyfile = lyfile - job.output.connect(self.log) - job.done.connect(self.finished) - job.start() - - def finished(self): - """ - Called when the job is done. - """ - pass - - def cleanup(self): - """ - Stop a job if running and remove temporary files. - """ - if self.job: - self.job.done.disconnect(self.finished) - self.job.abort() - self.job = None - if self._directory: - shutil.rmtree(self._directory) - self._directory = None - - def showLog(self, message, title='', parent=None): - """ - Show the log in a simple modal dialog. - """ - dlg = KDialog(parent) - if title: - dlg.setCaption(title) - dlg.setButtons(KDialog.ButtonCode(KDialog.Close)) - dlg.setMainWidget(self.log) - self.log.writeMsg(message, 'msgerr') - dlg.setInitialSize(QSize(500, 300)) - return dlg.exec_() - - -class LilyPreviewWidget(BackgroundJob, QStackedWidget): - """ - A widget that can display a string of LilyPond code as a PDF. - If the code is changed, the PDF is automagically rebuilt. - Also the signal done(success) is then emitted. - """ - def __init__(self, *args): - QStackedWidget.__init__(self, *args) - BackgroundJob.__init__(self) - # The widget stack has two widgets, a log and a PDF preview. - # the Log is already created in BackgroundJob - self.addWidget(self.log) - self.setCurrentWidget(self.log) - - # the PDF preview, load Okular part. - # If not, we just run the default PDF viewer. - self.part = None - factory = KPluginLoader("okularpart").factory() - if factory: - part = factory.create(self) - if part: - self.part = part - self.addWidget(part.widget()) - self.setCurrentWidget(part.widget()) - # hide mini pager - w = part.widget().findChild(QWidget, "miniBar") - if w: - w.parent().hide() - # hide left panel - a = part.actionCollection().action("show_leftpanel") - if a and a.isChecked(): - a.toggle() - # default to single page layout - a = part.actionCollection().action("view_render_mode_single") - if a and not a.isChecked(): - a.trigger() - # change shortcut context for this one (bound to Esc) - a = part.actionCollection().action("close_find_bar") - if a: - a.setShortcutContext(Qt.WidgetShortcut) - - def preview(self, text): - """ - Runs LilyPond on the text and update the preview. - """ - if self.job: - self.job.disconnect(self.finished) - self.job.abort() - self.run(text, 'preview.ly') - self.setCurrentWidget(self.log) - - def finished(self): - pdfs = self.job.updatedFiles()("pdf") - if pdfs: - self.openPDF(pdfs[0]) - self.job = None - - def openPDF(self, fileName): - if self.part: - if self.part.openUrl(KUrl.fromPath(fileName)): - self.setCurrentWidget(self.part.widget()) - else: - openPDF(fileName, self.window()) - - -class LilyPreviewDialog(KDialog): - def __init__(self, parent): - KDialog.__init__(self, parent) - self.setCaption(i18n("PDF Preview")) - self.setButtons(KDialog.ButtonCode(KDialog.Close)) - self.preview = LilyPreviewWidget(self) - self.setMainWidget(self.preview) - self.setMinimumSize(QSize(400, 300)) - self.loadSettings() - self.finished.connect(self.slotFinished) - - def loadSettings(self): - self.restoreDialogSize(config("preview dialog")) - - def saveSettings(self): - self.saveDialogSize(config("preview dialog")) - - def slotFinished(self): - self.saveSettings() - self.preview.cleanup() - - def showPreview(self, ly): - self.preview.preview(ly) - self.exec_() - - - -def textFormats(): - """ Return a dict with text formats for the log view """ - log = QTextCharFormat() - log.setFontFamily("monospace") - - url = QTextCharFormat(log) - url.setForeground(QBrush(QColor("blue"))) - url.setFontUnderline(True) - url.setAnchor(True) - - msg = QTextCharFormat() - msg.setFontFamily("sans-serif") - msg.setFontWeight(QFont.Bold) - - msgok = QTextCharFormat(msg) - msgok.setForeground(QBrush(QColor("green"))) - - msgerr = QTextCharFormat(msg) - msgerr.setForeground(QBrush(QColor("red"))) - - return locals() - - -def anchorgen(num = 0): - """ - Generates an infinite row of anchor names, named - "anchor0", "anchor1", etc. - """ - for num in count(num): - yield "anchor{0}".format(num) - - -def scmbool(value): - """ - Returns the Scheme notation for the boolean value. - """ - return "#t" if value else "#f" - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/scorewiz/__init__.py frescobaldi-2.0.0/python/frescobaldi_app/scorewiz/__init__.py --- frescobaldi-1.2.0/python/frescobaldi_app/scorewiz/__init__.py 2010-11-07 12:44:57.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/scorewiz/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1133 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Score Wizard -""" - -import os, re, sip, sys, types -import ly, ly.dom -from fractions import Fraction - -from PyQt4.QtCore import QSize, QSizeF, QUrl, Qt -from PyQt4.QtGui import ( - QCheckBox, QComboBox, QGridLayout, QGroupBox, QHBoxLayout, QLabel, - QListWidget, QListWidgetItem, QSplitter, QStackedWidget, QTextBrowser, - QToolButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget) -from PyKDE4.kdecore import KGlobal, i18n, ki18n -from PyKDE4.kdeui import ( - KCompletion, KHBox, KIcon, KLineEdit, KPageDialog, KPushButton, - KStandardGuiItem, KVBox) - -from kateshell.app import cacheresult -from frescobaldi_app.mainapp import SymbolManager -from frescobaldi_app.widgets import TapButton -from frescobaldi_app.version import defaultVersion - -def config(group=None): - c = KGlobal.config().group("scorewiz") - if group: - c = c.group(group) - return c - - -class ScoreWizard(KPageDialog): - def __init__(self, mainwin): - KPageDialog.__init__(self, mainwin) - self.mainwin = mainwin - self.setFaceType(KPageDialog.Tabbed) - self.setButtons(KPageDialog.ButtonCode( - KPageDialog.Try | KPageDialog.Help | - KPageDialog.Ok | KPageDialog.Cancel | KPageDialog.Default)) - self.setButtonIcon(KPageDialog.Try, KIcon("run-lilypond")) - self.enableButton(KPageDialog.Try, False) - self.setCaption(i18n("Score Setup Wizard")) - self.setHelp("scorewiz") - self.completableWidgets = {} - self.titles = Titles(self) - self.parts = Parts(self) - self.settings = Settings(self) - self.loadCompletions() - self.restoreDialogSize(config("dialogsize")) - self.defaultClicked.connect(self.default) - self.tryClicked.connect(self.previewScore) - - def default(self): - self.titles.default() - self.parts.default() - self.settings.default() - - def previewScore(self): - self.previewDialog().showPreview() - - @cacheresult - def previewDialog(self): - from frescobaldi_app.scorewiz import preview - return preview.PreviewDialog(self) - - def complete(self, widget, name=None): - """ Save the completions of the specified widget """ - if not name: - name = widget.objectName() - self.completableWidgets[name] = widget - - def saveCompletions(self): - """ Saves completion items for all lineedits. """ - conf = config("completions") - for name, widget in self.completableWidgets.iteritems(): - items = widget.completionObject().items() - text = widget.text() - if len(text) > 1 and text not in items: - items.append(text) - conf.writeEntry(name, items) - - def loadCompletions(self): - """ Loads the completion data from the config. """ - conf = config("completions") - for name, widget in self.completableWidgets.iteritems(): - c = widget.completionObject() - c.setOrder(KCompletion.Sorted) - c.setItems(conf.readEntry(name, [])) - - def done(self, result): - self.saveDialogSize(config("dialogsize")) - self.saveCompletions() - self.settings.saveConfig() - if result: - # indent the text again using the user (document) settings: - text = self.builder().ly() - text = self.mainwin.currentDocument().indent(text) - self.mainwin.view().insertText(text) - KPageDialog.done(self, result) - - def builder(self): - """ Return a Builder that mimics our settings """ - return Builder(self) - - -class Titles(QWidget): - """ - A widget where users can fill in all the titles that are put - in the \header block. - """ - def __init__(self, parent): - QWidget.__init__(self, parent) - p = parent.addPage(self, i18n("Titles and Headers")) - - l = QHBoxLayout(self) - # The html view with the score layout example - t = QTextBrowser(self) - t.setOpenLinks(False) - t.setOpenExternalLinks(False) - - # ensure that the full HTML example page is displayed - t.setContentsMargins(2, 2, 2, 2) - t.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - t.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - t.setMinimumSize(QSize(350, 350)) - #t.document().documentLayout().documentSizeChanged.connect( - #lambda size: t.setMinimumSize(size.toSize() + QSize(4, 4))) - - headers = ly.headers(i18n) - msg = i18n("Click to enter a value.") - t.setHtml(titles_html.format( - copyrightmsg = i18n("bottom of first page"), - taglinemsg = i18n("bottom of last page"), - **dict((k, "{2}".format(msg, k, v)) - for k, v in headers))) - l.addWidget(t) - t.anchorClicked.connect(lambda qurl: - self.findChild(KLineEdit, qurl.toString()).setFocus()) - - g = QGridLayout() - g.setVerticalSpacing(1) - g.setColumnMinimumWidth(1, 200) - l.addLayout(g) - - for row, (name, title) in enumerate(headers): - l = QLabel(title + ":", self) - e = KLineEdit(self) - e.setObjectName(name) - l.setBuddy(e) - g.addWidget(l, row, 0) - g.addWidget(e, row, 1) - # set completion items - parent.complete(e) - - - def default(self): - """ Clear the text entries. """ - for w in self.findChildren(KLineEdit): - w.clear() - - def headers(self): - """ Iterate over the user-entered headers (name, value) """ - for h in ly.headerNames: - yield h, self.findChild(KLineEdit, h).text() - - -class Parts(QSplitter): - """ - The widget where users can select parts and adjust their settings. - """ - def __init__(self, parent): - QSplitter.__init__(self, parent) - parent.addPage(self, i18n("Parts")) - - # The part types overview widget. - v = KVBox() - self.addWidget(v) - QLabel('{0}'.format(i18n("Available parts:")), v) - allParts = QTreeWidget(v) - addButton = KPushButton(KStandardGuiItem.add(), v) - addButton.setToolTip(i18n("Add selected part to your score.")) - - # The listbox with selected parts - v = KVBox() - self.addWidget(v) - QLabel('{0}'.format(i18n("Score:")), v) - score = QListWidget(v) - self.score = score # so the partList method can find us - h = KHBox(v) - removeButton = KPushButton(KStandardGuiItem.remove(), h) - upButton = QToolButton(h) - upButton.setIcon(KIcon("go-up")) - downButton = QToolButton(h) - downButton.setIcon(KIcon("go-down")) - - # The StackedWidget with settings - partSettings = QStackedWidget() - self.addWidget(partSettings) - - self.setStretchFactor(0, 1) - self.setStretchFactor(1, 1) - self.setStretchFactor(2, 1) - self.setSizes((100, 100, 100)) - - allParts.setSelectionMode(QTreeWidget.ExtendedSelection) - allParts.setRootIsDecorated(False) - allParts.headerItem().setHidden(True) - score.setSelectionMode(QListWidget.ExtendedSelection) - score.setDragDropMode(QListWidget.InternalMove) - - class PartItem(QListWidgetItem): - """ - A part from the score, instantiating a config widget as well. - """ - def __init__(self, partClass): - name = partClass.name() # partClass.name is a ki18n object - QListWidgetItem.__init__(self, name, score) - self.w = QGroupBox(name) - partSettings.addWidget(self.w) - self.part = partClass() - layout = QVBoxLayout(self.w) - self.part.widgets(layout) - layout.addStretch(1) - if score.count() == 1: - score.setCurrentRow(0) - self.setSelected(True) - parent.enableButton(KPageDialog.Try, True) - - def showSettingsWidget(self): - partSettings.setCurrentWidget(self.w) - - def remove(self): - if score.count() == 1: - parent.enableButton(KPageDialog.Try, False) - sip.delete(self.w) - sip.delete(self) # TODO: check if necessary - - @allParts.itemDoubleClicked.connect - def addPart(item, col): - if hasattr(item, "partClass"): - PartItem(item.partClass) - - @allParts.itemClicked.connect - def toggleExpand(item, col): - item.setExpanded(not item.isExpanded()) - - @addButton.clicked.connect - def addSelectedParts(): - for item in allParts.selectedItems(): - PartItem(item.partClass) - - @removeButton.clicked.connect - def removeSelectedParts(): - for item in score.selectedItems(): - item.remove() - - def keepSel(func): - """ - Restore the selection and current element after reordering parts. - """ - def decorator(): - selItems = score.selectedItems() - curItem = score.currentItem() - func() - score.setCurrentItem(curItem) - for i in selItems: - i.setSelected(True) - return decorator - - @upButton.clicked.connect - @keepSel - def moveUp(): - """ Move selected parts up. """ - for row in range(1, score.count()): - if score.item(row).isSelected(): - item = score.takeItem(row) - score.insertItem(row - 1, item) - - @downButton.clicked.connect - @keepSel - def moveDown(): - """ Move selected parts down. """ - for row in range(score.count() - 1, -1, -1): - if score.item(row).isSelected(): - item = score.takeItem(row) - score.insertItem(row + 1, item) - - @score.currentItemChanged.connect - def showItem(cur, prev): - if cur: - cur.showSettingsWidget() - - from frescobaldi_app.scorewiz.parts import categories - for name, parts in categories(): - group = QTreeWidgetItem(allParts, [name]) - group.setFlags(Qt.ItemIsEnabled) - group.setIcon(0, KIcon("inode-directory")) - for part in parts: - p = QTreeWidgetItem(group, [part.name()]) - p.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) - p.partClass = part - - def default(self): - """ Clear the score """ - while self.score.count(): - self.score.item(0).remove() - - def partList(self): - """ Return user-configured part objects """ - return [self.score.item(row).part for row in range(self.score.count())] - - -class Settings(SymbolManager, QWidget): - """ - The widget where users can set other preferences. - """ - def __init__(self, parent): - QWidget.__init__(self, parent) - SymbolManager.__init__(self) - parent.addPage(self, i18n("Score settings")) - - h = QHBoxLayout(self) - v = QVBoxLayout() - h.addLayout(v) - score = QGroupBox(i18n("Score settings")) - v.addWidget(score) - lily = QGroupBox(i18n("LilyPond")) - v.addWidget(lily) - - v = QVBoxLayout() - h.addLayout(v) - prefs = QGroupBox(i18n("General preferences")) - v.addWidget(prefs) - instr = QGroupBox(i18n("Instrument names")) - v.addWidget(instr) - - # Score settings: - v = QVBoxLayout(score) - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("Key signature:"), h) - self.key = QComboBox(h) # the key names are filled in later - self.mode = QComboBox(h) - self.mode.addItems([title for name, title in ly.modes(i18n)]) - l.setBuddy(self.key) - - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("Time signature:"), h) - self.time = QComboBox(h) - self.time.setEditable(True) - self.time.addItems([ - '(4/4)', '(2/2)', - '2/4', '3/4', '4/4', '5/4', '6/4', '7/4', - '2/2', '3/2', '4/2', - '3/8', '5/8', '6/8', '7/8', '8/8', '9/8', '12/8', - '3/16', '6/16', '12/16']) - # palette sensitive icons for the first two items - self.addItemSymbol(self.time, 0, 'time_c44') - self.addItemSymbol(self.time, 1, 'time_c22') - l.setBuddy(self.time) - - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("Pickup measure:"), h) - self.pickup = QComboBox(h) - self.pickup.addItem(i18n("None")) - self.pickup.insertSeparator(1) - durs = [('note_' + d.replace('.', 'd'), d) for d in durations] - for icon, text in durs: - self.addItemSymbol(self.pickup, self.pickup.count(), icon) - self.pickup.addItem(text) - l.setBuddy(self.pickup) - - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("Metronome mark:"), h) - self.metroDur = QComboBox(h) - - l.setBuddy(self.metroDur) - for icon, text in durs: - self.addItemSymbol(self.metroDur, self.metroDur.count(), icon) - self.metroDur.addItem('') - l = QLabel('=', h) - l.setAlignment(Qt.AlignCenter) - l.setMaximumWidth(20) - self.metroVal = QComboBox(h) - self.metroVal.setEditable(True) - metroValues, start = [], 40 - for end, step in (60, 2), (72, 3), (120, 4), (144, 6), (210, 8): - metroValues.extend(range(start, end, step)) - start = end - # reverse so mousewheeling is more intuitive - self.metroValues = metroValues[::-1] - self.metroVal.addItems(map(str, self.metroValues)) - def tap(bpm): - """ Tap the tempo tap button """ - l = [abs(t - bpm) for t in self.metroValues] - m = min(l) - if m < 6: - self.metroVal.setCurrentIndex(l.index(m)) - TapButton(h, tap) - - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("Tempo indication:"), h) - self.tempoInd = KLineEdit(h) - parent.complete(self.tempoInd, "tempo") - l.setBuddy(self.tempoInd) - h.setToolTip(i18n("A tempo indication, e.g. \"Allegro.\"")) - - # LilyPond settings - v = QVBoxLayout(lily) - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("Pitch name language:"), h) - self.languageNames = list(sorted(ly.keyNames)) - self.lylang = QComboBox(h) - l.setBuddy(self.lylang) - self.lylang.addItem(i18n("Default")) - self.lylang.insertSeparator(1) - self.lylang.addItems([l.title() for l in self.languageNames]) - h.setToolTip(i18n( - "The LilyPond language you want to use for the pitch names.")) - self.lylang.currentIndexChanged.connect(self.slotLanguageChanged) - self.slotLanguageChanged(0) # init with default - - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("Version:"), h) - self.lyversion = QComboBox(h) - self.lyversion.setEditable(True) - l.setBuddy(self.lyversion) - version = defaultVersion() - if version: - self.lyversion.addItem(str(version)) - self.lyversion.addItems(('2.10.0', '2.11.0')) - h.setToolTip(i18n( - "The LilyPond version you will be using for this document.")) - - # General preferences - v = QVBoxLayout(prefs) - self.typq = QCheckBox(i18n("Use typographical quotes")) - self.typq.setToolTip(i18n( - "Replace normal quotes in titles with nice typographical quotes.")) - v.addWidget(self.typq) - self.tagl = QCheckBox(i18n("Remove default tagline")) - self.tagl.setToolTip(i18n( - "Suppress the default tagline output by LilyPond.")) - v.addWidget(self.tagl) - self.barnum = QCheckBox(i18n("Remove bar numbers")) - self.barnum.setToolTip(i18n( - "Suppress the display of measure numbers at the beginning of " - "every system.")) - v.addWidget(self.barnum) - self.midi = QCheckBox(i18n("Create MIDI output")) - self.midi.setToolTip(i18n( - "Create a MIDI file in addition to the PDF file.")) - v.addWidget(self.midi) - self.metro = QCheckBox(i18n("Show metronome mark")) - self.metro.setToolTip(i18n( - "If checked, show the metronome mark at the beginning of the " - "score. The MIDI output also uses the metronome setting.")) - v.addWidget(self.metro) - - self.book = QCheckBox(i18n("Wrap score in \\book block")) - self.book.setToolTip(i18n( - "If checked, wraps the \\score block inside a \\book block.")) - v.addWidget(self.book) - - # paper size: - h = KHBox() - v.addWidget(h) - h.setSpacing(2) - l = QLabel(i18n("Paper size:"), h) - self.paper = QComboBox(h) - l.setBuddy(self.paper) - self.paperLandscape = QCheckBox(i18n("Landscape"), h) - self.paper.addItem(i18n("Default")) - self.paper.addItems(ly.paperSizes) - self.paper.activated.connect(lambda i: self.paperLandscape.setEnabled(bool(i))) - - # Instrument names - instr.setCheckable(True) - self.instr = instr - v = QVBoxLayout(instr) - - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("First system:"), h) - self.instrFirst = QComboBox(h) - l.setBuddy(self.instrFirst) - self.instrFirst.addItems((i18n("Long"), i18n("Short"))) - h.setToolTip(i18n( - "Use long or short instrument names before the first system.")) - - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("Other systems:"), h) - self.instrOther = QComboBox(h) - l.setBuddy(self.instrOther) - self.instrOther.addItems((i18n("Long"), i18n("Short"), i18n("None"))) - h.setToolTip(i18n( - "Use short, long or no instrument names before the next systems.")) - - h = KHBox() - v.addWidget(h) - l = QLabel(i18n("Language:"), h) - self.instrLang = QComboBox(h) - l.setBuddy(self.instrLang) - self.instrLang.addItems((i18n("Default"), KGlobal.locale().languageCodeToName("en"))) - h.setToolTip(i18n("Which language to use for the instrument names.")) - - langs = KGlobal.dirs().findAllResources("locale", "*/LC_MESSAGES/frescobaldi.mo") - self.instrLanguages = list(sorted(set(lang.split('/')[-3] for lang in langs))) - self.instrLang.addItems(map(KGlobal.locale().languageCodeToName, self.instrLanguages)) - - self.default() - self.loadConfig() - - def saveConfig(self): - conf = config() - conf.writeEntry('language', self.getLanguage() or 'default') - conf.writeEntry('typographical', self.typq.isChecked()) - conf.writeEntry('remove tagline', self.tagl.isChecked()) - conf.writeEntry('remove barnumbers', self.barnum.isChecked()) - conf.writeEntry('midi', self.midi.isChecked()) - conf.writeEntry('metronome mark', self.metro.isChecked()) - conf.writeEntry('wrap in book', self.book.isChecked()) - if self.paper.currentIndex() > 0: - conf.writeEntry('paper size', ly.paperSizes[self.paper.currentIndex() - 1]) - conf.writeEntry('paper landscape', self.paperLandscape.isChecked()) - g = config('instrument names') - g.writeEntry('show', self.instr.isChecked()) - g.writeEntry('first', ['long', 'short'][self.instrFirst.currentIndex()]) - g.writeEntry('other', ['long', 'short', 'none'][self.instrOther.currentIndex()]) - g.writeEntry('lang', (['default', 'english'] + self.instrLanguages)[self.instrLang.currentIndex()]) - - def loadConfig(self): - conf = config() - self.setLanguage(conf.readEntry('language', 'default')) - self.typq.setChecked(conf.readEntry('typographical', True)) - self.tagl.setChecked(conf.readEntry('remove tagline', False)) - self.barnum.setChecked(conf.readEntry('remove barnumbers', False)) - self.midi.setChecked(conf.readEntry('midi', True)) - self.metro.setChecked(conf.readEntry('metronome mark', False)) - self.book.setChecked(conf.readEntry('wrap in book', False)) - - psize = conf.readEntry('paper size', "") - if psize in ly.paperSizes: - self.paper.setCurrentIndex(ly.paperSizes.index(psize) + 1) - self.paperLandscape.setChecked(conf.readEntry('paper landscape', False)) - self.paperLandscape.setEnabled(psize in ly.paperSizes) - - g = config('instrument names') - def readconf(entry, itemlist, defaultIndex): - item = g.readEntry(entry, itemlist[defaultIndex]) - if item in itemlist: - return itemlist.index(item) - else: - return defaultIndex - - first = readconf('first', ['long', 'short'], 0) - other = readconf('other', ['long', 'short', 'none'], 2) - lang = readconf('lang', ['default', 'english'] + self.instrLanguages, 0) - - self.instrFirst.setCurrentIndex(first) - self.instrOther.setCurrentIndex(other) - self.instrLang.setCurrentIndex(lang) - self.instr.setChecked(g.readEntry('show', True)) - - def default(self): - """ Set various items to their default state """ - self.lylang.setCurrentIndex(0) - self.key.setCurrentIndex(0) - self.mode.setCurrentIndex(0) - self.time.setCurrentIndex(0) - self.pickup.setCurrentIndex(0) - self.metroVal.setCurrentIndex(self.metroValues.index(100)) - self.metroDur.setCurrentIndex(durations.index('4')) - self.tempoInd.clear() - self.typq.setChecked(True) - self.tagl.setChecked(False) - self.barnum.setChecked(False) - self.midi.setChecked(True) - self.metro.setChecked(False) - self.book.setChecked(False) - self.paper.setCurrentIndex(0) - self.paperLandscape.setEnabled(False) - self.instrFirst.setCurrentIndex(0) - self.instrOther.setCurrentIndex(2) - self.instrLang.setCurrentIndex(0) - self.instr.setChecked(True) - - def getLanguage(self): - """ Return the configured LilyPond pitch language, '' for default. """ - if self.lylang.currentIndex() >= 2: - return self.languageNames[self.lylang.currentIndex() - 2] - else: - return '' - - def setLanguage(self, lang): - """ Sets the language combobox to the specified language """ - if lang not in self.languageNames: - self.lylang.setCurrentIndex(0) - else: - self.lylang.setCurrentIndex(self.languageNames.index(lang) + 2) - - def slotLanguageChanged(self, index): - """ Change the LilyPond language, affects key names """ - lang = index < 2 and "nederlands" or self.languageNames[index - 2] - key = self.key.currentIndex() - if key == -1: - key = 0 - self.key.clear() - self.key.addItems(ly.keyNames[lang]) - self.key.setCurrentIndex(key) - - -class Builder(object): - """ - Builds a LilyPond document, based on the preferences from the ScoreWizard. - The builder reads settings from the ScoreWizard, and is thus tightly - integrated with the ScoreWizard. - - Interacts also with the parts. The parts (in parts.py) may only use a few - functions, and should not interact with the Wizard directly! - - Parts may interact with: - - methods: - include to request filenames to be included - - addCodeBlock to add arbitrary strings to the output (e.g. functions) - - getInstrumentNames to translate instrument names - - setInstrumentNames to translate and set instrument names for a node - - setMidiInstrument to set the Midi instrument for a node - - getMidiTempo to get the configured tempo e.g."(ly:make-moment 100 4)" - - setMidiTempo to write the configured tempo in the given context - - properties: - lilyPondVersion a tuple like (2, 11, 64) describing the LilyPond the - document is built for. - - midi property is True if MIDI output is requested - - book True if the main \\score { } block is to be wrapped - inside a \\book { } block. A part may set this to True - if it is needed (e.g. when alternate output files are to - be created). - - """ - def __init__(self, wizard): - self.wizard = wizard - self.midi = wizard.settings.midi.isChecked() - self.book = wizard.settings.book.isChecked() - - def ly(self, doc=None): - """ Return LilyPond formatted output. """ - return self.printer().indent(doc or self.document()) - - def printer(self): - """ printer, that converts the ly.dom structure to LilyPond text. """ - p = ly.dom.Printer() - p.indentString = " " # FIXME get indent-width somehow... - p.typographicalQuotes = self.wizard.settings.typq.isChecked() - language = self.wizard.settings.getLanguage() - if language: - p.language = language - return p - - def document(self): - """ Get the document as a ly.dom tree structure """ - s = self.wizard.settings # easily access the settings tab. - - doc = ly.dom.Document() - - # instrument names language: - self.translate = lambda s: s # english (untranslated) - i = s.instrLang.currentIndex() - if i == 0: # default (translated) - self.translate = i18n - elif i >= 2: # other translation - try: - import gettext - self.translate = gettext.GNUTranslations(open( - KGlobal.dirs().findResource("locale", s.instrLanguages[i-2] + - "/LC_MESSAGES/frescobaldi.mo"))).ugettext - except IOError: - pass - - # keep track of include files: - self.includeFiles = [] - - # keep track of arbitrary code blocks: - self.codeBlocks = [] - - # version: - version = s.lyversion.currentText() - ly.dom.Version(version, doc) - ly.dom.BlankLine(doc) - self.lilyPondVersion = tuple(map(int, re.findall('\\d+', version))) - - # header: - h = ly.dom.Header() - for name, value in self.wizard.titles.headers(): - if value: - h[name] = value - if 'tagline' not in h and s.tagl.isChecked(): - ly.dom.Comment(i18n("Remove default LilyPond tagline"), h) - h['tagline'] = ly.dom.Scheme('#f') - if len(h): - doc.append(h) - ly.dom.BlankLine(doc) - - # paper size: - if s.paper.currentIndex(): - ly.dom.Scheme('(set-paper-size "{0}"{1})'.format( - s.paper.currentText(), - s.paperLandscape.isChecked() and " 'landscape" or ""), - ly.dom.Paper(doc)).after = 1 - ly.dom.BlankLine(doc) - - # insert code blocks here later - codeBlockOffset = len(doc) - - # get the part list - parts = self.wizard.parts.partList() - if parts: - self.buildScore(doc, parts) - - # pitch language: - language = s.getLanguage() - if language: - if self.lilyPondVersion >= (2, 13, 38): - doc.insert(1, ly.dom.Line('\\language "{0}"'.format(language))) - else: - self.include("{0}.ly".format(language)) - - # add code blocks, if any: - for code in self.codeBlocks[::-1]: - node = isinstance(code, basestring) and ly.dom.Line(code) or code() - node.after = 2 - doc.insert(codeBlockOffset, node) - - # add the files that want to be included at the beginning - if self.includeFiles: - doc.insert(2, ly.dom.BlankLine()) - for fileName in reversed(self.includeFiles): - doc.insert(2, ly.dom.Include(fileName)) - - # Finally, return the document - return doc - - def buildScore(self, doc, partList): - """ Creates a LilyPond score based on parts in partList """ - s = self.wizard.settings - - # a global = { } construct setting key and time sig, etc. - globalAssignment = ly.dom.Assignment('global') - g = ly.dom.Seq(globalAssignment) - - # First find out if we need to define a tempoMark section. - tempoText = s.tempoInd.text() - metro = s.metro.isChecked() - dur = durations[s.metroDur.currentIndex()] - val = s.metroVal.currentText() - if tempoText: - # Yes. - tm = ly.dom.Enclosed(ly.dom.Assignment('tempoMark', doc)) - ly.dom.BlankLine(doc) - ly.dom.Line('\\tempoMark', g) - ly.dom.Line( - "\\once \\override Score.RehearsalMark " - "#'self-alignment-X = #LEFT", tm) - ly.dom.Line( - "\\once \\override Score.RehearsalMark " - "#'break-align-symbols = #'(time-signature key-signature)", tm) - ly.dom.Line( - "\\once \\override Staff.TimeSignature " - "#'break-align-anchor-alignment = #LEFT", tm) - # Should we also display the metronome mark? - m = ly.dom.MarkupEnclosed('bold', ly.dom.Markup(ly.dom.Mark(tm))) - if metro: - # Constuct a tempo indication with metronome mark - ly.dom.QuotedString(tempoText + " ", m) - ly.dom.Line(r'\small \general-align #Y #DOWN \note #"{0}" #1 = {1}'.format(dur, val), m) - else: - # Constuct a tempo indication without metronome mark - ly.dom.QuotedString(tempoText, m) - elif metro: - # No, but display a metronome value - ly.dom.Tempo(dur, val, g).after = 1 - - # Add the global section's assignment to the document: - doc.append(globalAssignment) - ly.dom.BlankLine(doc) - - # key signature - note, alter = ly.keys[s.key.currentIndex()] - alter = Fraction(alter, 2) - mode = ly.modes()[s.mode.currentIndex()][0] - ly.dom.KeySignature(note, alter, mode, g).after = 1 - # time signature - match = re.search('(\\d+).*?(\\d+)', s.time.currentText()) - if match: - if s.time.currentText() in ('2/2', '4/4'): - if self.lilyPondVersion >= (2, 11, 44): - ly.dom.Line(r"\numericTimeSignature", g) - else: - ly.dom.Line(r"\override Staff.TimeSignature #'style = #'()", g) - num, beat = map(int, match.group(1, 2)) - ly.dom.TimeSignature(num, beat, g).after = 1 - # partial - if s.pickup.currentIndex() > 1: - dur, dots = partialDurations[s.pickup.currentIndex() - 2] - ly.dom.Partial(dur, dots, parent=g) - - # Now on to the parts! - # number instances of the same type (Choir I and Choir II, etc.) - types = {} - for part in partList: - types.setdefault(part.__class__, []).append(part) - for t in types.values(): - if len(t) > 1: - for num, part in enumerate(t): - part.num = num + 1 - else: - t[0].num = 0 - - # let each part build the LilyPond output - for part in partList: - part.run(self) - - # check for name collisions in assignment identifiers - refs = {} - for part in partList: - for a in part.assignments: - ref = a.name - name = ref.name - refs.setdefault(name, []).append((ref, part)) - for reflist in refs.values(): - if len(reflist) > 1: - for ref, part in reflist: - ref.name += part.identifier(lowerFirst=False) - - # collect all assignments - for part in partList: - for a in part.assignments: - doc.append(a) - ly.dom.BlankLine(doc) - - # create a \score and add all nodes: - score = ly.dom.Score() - sim = ly.dom.Simr(score) - - # if there is more than one part, make separate assignments for each - # part, so printing separate parts is easier - if len(partList) > 1: - for part in partList: - ref = ly.dom.Reference(part.identifier() + "Part") - p = ly.dom.Simr(ly.dom.Assignment(ref, doc)) - ly.dom.BlankLine(doc) - ly.dom.Identifier(ref, sim).after = 1 - for n in part.nodes: - p.append(n) - else: - for part in partList: - for n in part.nodes: - sim.append(n) - - # put the score in the document - if self.book: - book = ly.dom.Book() - book.append(score) - doc.append(book) - else: - doc.append(score) - - # Add some layout stuff - lay = ly.dom.Layout(score) - if s.barnum.isChecked(): - ly.dom.Line('\\remove "Bar_number_engraver"', - ly.dom.Context('Score', lay)) - if self.midi: - mid = ly.dom.Midi(score) - if tempoText or not metro: - self.setMidiTempo(ly.dom.Context('Score', mid)) - - # Add possible aftermath: - for part in partList: - if part.aftermath: - ly.dom.BlankLine(doc) - for n in part.aftermath: - doc.append(n) - - # clean up the parts: - for part in partList: - part.cleanup() - - ## - # The following methods are to be used by the parts. - ## - - def include(self, fileName): - """ - Request an \\include statement be placed at the beginning - of the output document. - """ - # We don't use a set, because we want to maintain the order. - if fileName not in self.includeFiles: - self.includeFiles.append(fileName) - - def addCodeBlock(self, code): - """ - Adds an arbitary Node to the output file, containing e.g. Scheme - functions. - - The argument is either a string, a function or an iterable (containing - other strings, functions and/or iterables). - - Strings and functions are recursively added to a list (if not already - present). Strings are written directly to the output document, e.g. for - added music functions or pieces of Ccheme code. Functions are called on - output time and should return one ly.dom.Node object that is inserted in - the output document. - """ - if not isinstance(code, (basestring, types.FunctionType)): - for c in code: - self.addCodeBlock(c) - elif code not in self.codeBlocks: - self.codeBlocks.append(code) - - def getInstrumentNames(self, names, num=0): - """ - Returns a tuple (longname, shortname). - - names is a ki18n string with a pipe symbol separating the - long and the short instrument name. (This way the abbreviated - instrument names remain translatable). - - If num > 0, it is added to the instrument name (e.g. Violine II) - """ - names = self.translate(names).split("|") - if num: - names = [name + " " + ly.romanize(num) for name in names] - return names - - def setInstrumentNames(self, node, names, num=0): - """ - Add instrument names to the given node, which should be of - ly.dom.ContextType. - - For instrumentNames and num, see getInstrumentNames. - (instrumentNames may also be a tuple of ly.dom.LyNode objects.) - """ - s = self.wizard.settings - if s.instr.isChecked(): - if not isinstance(names, (tuple, list)): - names = self.getInstrumentNames(names, num) - ly.dom.addInstrumentNameEngraverIfNecessary(node) - w = node.getWith() - first = names[s.instrFirst.currentIndex()] - w['instrumentName'] = first - if s.instrOther.currentIndex() < 2: - other = names[s.instrOther.currentIndex()] - # if these are markup objects, copy them otherwise the assignment - # to shortInstrumentName takes it away from the instrumentName. - if other is first and isinstance(first, ly.dom.Node): - other = other.copy() - w['shortInstrumentName'] = other - - def setMidiInstrument(self, node, midiInstrument): - """ - Sets the MIDI instrument for the node, if the user wants MIDI output. - """ - if self.midi: - node.getWith()['midiInstrument'] = midiInstrument - - def getMidiTempo(self): - """ - Returns the configured tempo as a string e.g. "(ly:make-moment 100 4)" - """ - s = self.wizard.settings - base, mul = midiDurations[s.metroDur.currentIndex()] - val = int(s.metroVal.currentText()) * mul - return "(ly:make-moment {0} {1})".format(val, base) - - def setMidiTempo(self, node): - """ - Writes the configured tempo to the 'tempoWholesPerMinute' variable - of the given context (should be subclass of ly.dom.HandleVars). - """ - node['tempoWholesPerMinute'] = ly.dom.Scheme(self.getMidiTempo()) - - -class PartBase(object): - """ - Abstract base class for parts in the Parts widget. - Classes provide basic information. - Instances provide a settings widget and can create LilyPond output. - """ - - # The name of our part type in the dialog, mark for translation using ki18n! - _name = "unnamed" - - def __init__(self): - self.num = 0 - - def cleanup(self): - """ - Delete previously built assignments, nodes and aftermath - """ - self.assignments = [] - self.nodes = [] - self.aftermath = [] - - def run(self, builder): - """ - This method is called by the score wizard to build our part. - It initializes the nodes and assignments and calls the build - method. You should not reimplement this method, but rather the - build method. - """ - self.cleanup() - self.build(builder) - - @classmethod - def name(cls): - """ - Return the translated part name. - You should not override this method, but set the part name as an ki18n - object in the _name class attribute. - """ - return cls._name.toString() - - def identifier(self, lowerFirst=True): - """ - Returns an untranslated name, usable as LilyPond identifier, - with the first letter lowered by default. - """ - name = self.__class__.__name__ - if lowerFirst: - name = name[0].lower() + name[1:] - if self.num: - name += ly.romanize(self.num) - return name - - def widgets(self, layout): - """ - Reimplement this method to add widgets with settings - to the given layout. - """ - layout.addWidget(QLabel('({0})'.format(i18n("No settings available.")))) - - def build(self, builder): - """ - May add assignments and created nodes to respectively - self.assignments and self.nodes. - builder is a Builder instance providing access to users settings. - You must implement this method in your part subclasses. - - You may also add ly.dom.Node objects to the self.aftermath list. These - are reproduces below the main score and can be used to create additional - score sections or markups, etc. - """ - pass - - -titles_html = r""" - - - - - - - - - - - - - - - - - - - - - - - -
{dedication}
{title}
{subtitle}
{subsubtitle}
{poet}{instrument}{composer}
{meter} {arranger}
{piece} {opus}
{copyright} ({copyrightmsg})
{tagline} ({taglinemsg})
-""" - -durations = ['16', '16.', '8', '8.', '4', '4.', '2', '2.', '1', '1.'] -midiDurations = ((16,1),(32,3),(8,1),(16,3),(4,1),(8,3),(2,1),(4,3),(1,1),(2,3)) -partialDurations = ((4,0),(4,1),(3,0),(3,1),(2,0),(2,1),(1,0),(1,1),(0,0),(0,1)) diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/scorewiz/parts.py frescobaldi-2.0.0/python/frescobaldi_app/scorewiz/parts.py --- frescobaldi-1.2.0/python/frescobaldi_app/scorewiz/parts.py 2010-01-26 18:13:31.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/scorewiz/parts.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1525 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Part types for the Score Wizard (scorewiz/__init__.py). -In separate file to ease maintenance. -""" - -from fractions import Fraction -from collections import defaultdict -from itertools import cycle, islice, chain, repeat - -from PyQt4.QtCore import QRegExp, Qt -from PyQt4.QtGui import ( - QCheckBox, QComboBox, QGroupBox, QLabel, QRadioButton, QRegExpValidator, - QSpinBox, QVBoxLayout) -from PyKDE4.kdecore import i18n, ki18n -from PyKDE4.kdeui import KHBox, KVBox - -import ly -from ly.dom import * -import frescobaldi_app.scorewiz - -I18N_NOOP = lambda s: s - - -# Widgets used by different part types - -def voicesWidget( - layout, title=None, minValue=1, maxValue=4, default=1, tooltip=None): - """ - Creates a widget for setting the number of voices. - Adds a HBox to the layout and returns the created QSpinBox. - """ - h = KHBox() - l = QLabel(title or i18n("Voices:"), h) - sb = QSpinBox(h) - sb.setRange(minValue, maxValue) - sb.setValue(default) - l.setBuddy(sb) - sb.setToolTip(tooltip or i18n("How many voices to put in this staff.")) - layout.addWidget(h) - return sb - - -# Base classes for the part types in this file. -# (For the real part type classes see below.) - -class Part(frescobaldi_app.scorewiz.PartBase): - """ - The base class for our part types. - Adds some convenience methods for often used tasks. - """ - def assign(self, name=None): - """ - Creates an assignment. name is a string name, if not given - the class name is used with the first letter lowered. - returns the assignment and the reference for the name. - """ - ref = Reference(name or self.identifier()) - a = Assignment(ref) - self.assignments.append(a) - return a, ref - - def assignMusic(self, name=None, octave=0, transposition=None): - """ - Creates a \\relative stub and an assignment for it. - Returns the contents of the stub for other possible manipulations, - and the Reference object. - """ - a, ref = self.assign(name) - stub = Relative(a) - Pitch(octave, 0, 0, stub) - s = Seq(stub) - Identifier('global', s).after = 1 - if transposition is not None: - toct, tnote, talter = transposition - Pitch(toct, tnote, Fraction(talter, 2), Transposition(s)) - LineComment(i18n("Music follows here."), s) - BlankLine(s) - return s, ref - - -class SingleVoicePart(Part): - """ - The abstract base class for single voice part types. - The build function just creates one staff with one voice, - and uses the .clef, .transposition, .midiInstrument and .instrumentNames - class (or instance) attributes. - """ - - # A subclass could set a clef for the staff (e.g. "bass") - clef = None - - # The octave for the \relative command - octave = 1 - - # A subclass could set a transposition here. - transposition = None - - # The MIDI instrument to use: see - # http://lilypond.org/doc/latest/Documentation/user/lilypond/MIDI-instrument-names - midiInstrument = None - - # The instrument names, both long and short, combined with a pipe symbol, to - # ease the translation (otherwise the short names would be incomprehensible.) - instrumentNames = "longname|shortname" - - def build(self, builder, braces=False): - """ - Build a single staff, with instrument name, midi instrument, octave and - possible transposition. Returns the staff and the stub for other - possible manipulations. - """ - stub, ref = self.assignMusic(None, self.octave, self.transposition) - staff = Staff() - builder.setInstrumentNames(staff, self.instrumentNames, self.num) - builder.setMidiInstrument(staff, self.midiInstrument) - s = braces and Seq(staff) or Seqr(staff) - if self.clef: - Clef(self.clef, s) - Identifier(ref, s) - self.nodes.append(staff) - return staff, stub - - -class StringPart(SingleVoicePart): - """ - All string instruments - """ - pass - - -class TablaturePart(SingleVoicePart): - """ - A class for instruments that support TabStaffs. - Can easily support multi-voice staves. - """ - octave = 0 - tunings = () # may contain a list of tunings. - tabFormat = '' # can contain a tablatureFormat value. - - def widgets(self, layout): - h = KHBox() - layout.addWidget(h) - l = QLabel(i18n("Staff type:"), h) - self.staffType = QComboBox(h) - l.setBuddy(self.staffType) - self.staffType.addItems(( - i18n("Normal staff"), - i18n("Tablature"), - i18n("Both"))) - if self.tunings: - self.staffType.activated.connect(self.slotTabEnable) - self.widgetsTuning(layout) - self.slotTabEnable(0) - - def widgetsTuning(self, layout): - """ Implement widgets related to tuning """ - h = KHBox() - layout.addWidget(h) - l = QLabel(i18n("Tuning:"), h) - self.tuningSel = QComboBox(h) - l.setBuddy(self.tuningSel) - self.tuningSel.addItem(i18n("Default")) - self.tuningSel.addItems([name.toString() for name, t in self.tunings]) - self.tuningSel.setCurrentIndex(1) - - def slotTabEnable(self, enable): - """ - Called when the user changes the staff type. - Non-zero if the user wants a TabStaff. - """ - self.tuningSel.setEnabled(bool(enable)) - - def voiceCount(self): - """ - Returns the number of voices. Can be made user-settable in subclasses. - """ - return 1 - - def build(self, builder): - # First make assignments for the voices we want to create - numVoices = self.voiceCount() - if numVoices == 1: - voices = (self.identifier(),) - elif numVoices == 2: - order = 1, 2 - voices = 'upper', 'lower' - elif numVoices == 3: - order = 1, 3, 2 - voices = 'upper', 'middle', 'lower' - else: - order = 1, 2, 3, 4 - voices = [self.identifier() + ly.nums(i) for i in order] - - refs = [self.assignMusic(name, self.octave, self.transposition)[1] - for name in voices] - - staffType = self.staffType.currentIndex() - if staffType in (0, 2): - # create a normal staff - staff = Staff() - seq = Seqr(staff) - if self.clef: - Clef(self.clef, seq) - mus = Simr(seq) - for ref in refs[:-1]: - Identifier(ref, mus) - VoiceSeparator(mus) - Identifier(refs[-1], mus) - builder.setMidiInstrument(staff, self.midiInstrument) - - if staffType in (1, 2): - # create a tab staff - tabstaff = TabStaff() - if self.tabFormat: - tabstaff.getWith()['tablatureFormat'] = Scheme(self.tabFormat) - self.setTunings(tabstaff) - sim = Simr(tabstaff) - if numVoices == 1: - Identifier(refs[0], sim) - else: - for num, ref in zip(order, refs): - s = Seq(TabVoice(parent=sim)) - Text('\\voice' + ly.nums(num), s) - Identifier(ref, s) - - if staffType == 0: - # only a normal staff - p = staff - elif staffType == 1: - # only a TabStaff - builder.setMidiInstrument(tabstaff, self.midiInstrument) - p = tabstaff - else: - # both TabStaff and normal staff - p = StaffGroup() - s = Sim(p) - s.append(staff) - s.append(tabstaff) - - builder.setInstrumentNames(p, self.instrumentNames, self.num) - self.nodes.append(p) - - def setTunings(self, tab): - if self.tunings and self.tuningSel.currentIndex() > 0: - tuning = self.tunings[self.tuningSel.currentIndex() - 1][1] - tab.getWith()['stringTunings'] = Scheme(tuning) - - -class WoodWindPart(SingleVoicePart): - """ - All woodwind instruments - """ - pass - - -class BrassPart(SingleVoicePart): - """ - All brass instruments. - """ - pass - - -class VocalPart(Part): - """ - Base class for vocal stuff. - """ - midiInstrument = 'choir aahs' - - def assignLyrics(self, name, verse=0): - """ - Creates an empty assignment for lyrics. - Returns the reference for the name. - """ - l = LyricMode() - if verse: - name = name + ly.nums(verse) - Line('\\set stanza = "{0}."'.format(verse), l) - a, ref = self.assign(name) - a.append(l) - LineComment(i18n("Lyrics follow here."), l) - BlankLine(l) - return ref - - def widgets(self, layout): - self.stanzaWidget(layout) - self.ambitusWidget(layout) - - def stanzaWidget(self, layout): - h = KHBox() - layout.addWidget(h) - l = QLabel(i18n("Stanzas:"), h) - self.stanzas = QSpinBox(h) - self.stanzas.setRange(1, 99) - l.setBuddy(self.stanzas) - h.setToolTip(i18n("The number of stanzas.")) - - def ambitusWidget(self, layout): - self.ambitus = QCheckBox(i18n("Ambitus")) - layout.addWidget(self.ambitus) - self.ambitus.setToolTip(i18n( - "Show the pitch range of the voice at the beginning of the staff.")) - - def addStanzas(self, node): - """ - Add stanzas in self.stanzas.value() to the given (Voice) node - using \\addlyrics. - """ - if self.stanzas.value() == 1: - Identifier(self.assignLyrics('verse'), AddLyrics(node)) - else: - for i in range(self.stanzas.value()): - Identifier(self.assignLyrics('verse', i + 1), AddLyrics(node)) - - -class VocalSoloPart(VocalPart, SingleVoicePart): - """ - Base class for solo voices - """ - def build(self, builder): - staff, stub = SingleVoicePart.build(self, builder, braces=True) - stub.insert(1, Line('\\dynamicUp')) # just after the \global - self.addStanzas(staff) - if self.ambitus.isChecked(): - Line('\\consists "Ambitus_engraver"', staff.getWith()) - - -class KeyboardPart(Part): - """ - Base class for keyboard instruments. - """ - def buildStaff(self, builder, name, octave, numVoices=1, node=None, clef=None): - """ - Build a staff with the given number of voices and name. - """ - staff = Staff(name, parent=node) - builder.setMidiInstrument(staff, self.midiInstrument) - c = Seqr(staff) - if clef: - Clef(clef, c) - if numVoices == 1: - stub, ref = self.assignMusic(name, octave) - Identifier(ref, c) - else: - c = Sim(c) - for i in range(1, numVoices): - stub, ref = self.assignMusic(name + ly.nums(i), octave) - Identifier(ref, c) - VoiceSeparator(c) - stub, ref = self.assignMusic(name + ly.nums(numVoices), octave) - Identifier(ref, c) - return staff - - def build(self, builder): - """ setup structure for a 2-staff PianoStaff. """ - p = PianoStaff() - builder.setInstrumentNames(p, self.instrumentNames, self.num) - s = Sim(p) - # add two staves, with a respective number of voices. - self.buildStaff(builder, 'right', 1, self.upperVoices.value(), s) - self.buildStaff(builder, 'left', 0, self.lowerVoices.value(), s, "bass") - self.nodes.append(p) - - def widgets(self, layout): - l = QLabel('{0} ({1})'.format( - i18n("Adjust how many separate voices you want on each staff."), - i18n("This is primarily useful when you write polyphonic music " - "like a fuge."))) - l.setWordWrap(True) - layout.addWidget(l) - self.upperVoices = voicesWidget(layout, i18n("Right hand:")) - self.lowerVoices = voicesWidget(layout, i18n("Left hand:")) - - -class PitchedPercussionPart(SingleVoicePart): - """ - All pitched percussion instruments. - """ - pass - - -############################################################################# -# # -# Below the part types are defined. You may add new instruments/part types. # -# The categories() function below returns all parts, neatly categorized. # -# Of course you should also put your part in there, in a sensible group. # -# # -############################################################################# - -class Chords(Part): - _name = ki18n("Chord names") - - def build(self, builder): - p = ChordNames() - a, ref = self.assign('chordNames') - Identifier(ref, p) - s = ChordMode(a) - Identifier('global', s).after = 1 - i = self.chordStyle.currentIndex() - if i > 0: - Line('\\{0}Chords'.format( - ('german', 'semiGerman', 'italian', 'french')[i-1]), s) - LineComment(i18n("Chords follow here."), s) - BlankLine(s) - self.nodes.append(p) - if self.guitarFrets.isChecked(): - f = FretBoards() - Identifier(ref, f) - self.nodes.append(f) - builder.include("predefined-guitar-fretboards.ly") - - def widgets(self, layout): - h = KHBox() - layout.addWidget(h) - l = QLabel(i18n("Chord style:"), h) - self.chordStyle = QComboBox(h) - l.setBuddy(self.chordStyle) - self.chordStyle.addItems(( - i18n("Default"), - i18n("German"), - i18n("Semi-German"), - i18n("Italian"), - i18n("French"))) - self.guitarFrets = QCheckBox(i18n("Guitar fret diagrams")) - self.guitarFrets.setToolTip(i18n( - "Show predefined guitar fret diagrams below the chord names " - "(LilyPond 2.12 and above).")) - layout.addWidget(self.guitarFrets) - - -class BassFigures(Part): - _name = ki18n("Figured Bass") - - def build(self, builder): - a, ref = self.assign('figBass') - s = FigureMode(a) - p = FiguredBass() - Identifier(ref, p) - Identifier('global', s) - LineComment(i18n("Figures follow here."), s) - BlankLine(s) - if self.useExtenderLines.isChecked(): - p.getWith()['useBassFigureExtenders'] = Scheme('#t') - self.nodes.append(p) - - def widgets(self, layout): - self.useExtenderLines = QCheckBox(i18n("Use extender lines")) - layout.addWidget(self.useExtenderLines) - - -class Violin(StringPart): - _name = ki18n("Violin") - instrumentNames = I18N_NOOP("Violin|Vl.") - midiInstrument = 'violin' - - -class Viola(StringPart): - _name = ki18n("Viola") - instrumentNames = I18N_NOOP("Viola|Vla.") - midiInstrument = 'viola' - clef = 'alto' - octave = 0 - - -class Cello(StringPart): - _name = ki18n("Cello") - instrumentNames = I18N_NOOP("Cello|Cl.") - midiInstrument = 'cello' - clef = 'bass' - octave = -1 - - -class Contrabass(StringPart): - _name = ki18n("Contrabass") - instrumentNames = I18N_NOOP("Contrabass|Cb.") - midiInstrument = 'contrabass' - clef = 'bass' - octave = -1 - - -class BassoContinuo(Cello): - _name = ki18n("Basso continuo") - instrumentNames = I18N_NOOP("Basso Continuo|B.c.") - - def build(self, builder): - p = Staff() - builder.setInstrumentNames(p, self.instrumentNames, self.num) - builder.setMidiInstrument(p, self.midiInstrument) - s = Sim(p) - Clef("bass", s) - stub, ref = self.assignMusic('bcMusic', self.octave, self.transposition) - Identifier(ref, s) - a, ref = self.assign('bcFigures') - b = FigureMode(a) - Identifier(ref, s) - Identifier('global', b) - Line("\\override Staff.BassFigureAlignmentPositioning " - "#'direction = #DOWN", b) - LineComment(i18n("Figures follow here."), b) - BlankLine(b) - self.nodes.append(p) - - -class Mandolin(TablaturePart): - _name = ki18n("Mandolin") - instrumentNames = I18N_NOOP("Mandolin|Mdl.") - midiInstrument = 'acoustic guitar (steel)' - tunings = ( - (ki18n("Mandolin tuning"), 'mandolin-tuning'), - ) - - -class Banjo(TablaturePart): - _name = ki18n("Banjo") - instrumentNames = I18N_NOOP("Banjo|Bj.") - midiInstrument = 'banjo' - tabFormat = 'fret-number-tablature-format-banjo' - tunings = ( - (ki18n("Open G-tuning (aDGBD)"), 'banjo-open-g-tuning'), - (ki18n("C-tuning (gCGBD)"), 'banjo-c-tuning'), - (ki18n("Modal tuning (gDGCD)"), 'banjo-modal-tuning'), - (ki18n("Open D-tuning (aDF#AD)"), 'banjo-open-d-tuning'), - (ki18n("Open Dm-tuning (aDFAD)"), 'banjo-open-dm-tuning'), - ) - def widgetsTuning(self, layout): - super(Banjo, self).widgetsTuning(layout) - self.fourStrings = QCheckBox(i18n("Four strings (instead of five)")) - layout.addWidget(self.fourStrings) - - def slotTabEnable(self, enable): - super(Banjo, self).slotTabEnable(enable) - self.fourStrings.setEnabled(bool(enable)) - - def setTunings(self, tab): - if not self.fourStrings.isChecked(): - super(Banjo, self).setTunings(tab) - else: - tab.getWith()['stringTunings'] = Scheme( - '(four-string-banjo {0})'.format( - self.tunings[self.tuningSel.currentIndex()][1])) - - -class ClassicalGuitar(TablaturePart): - _name = ki18n("Classical guitar") - instrumentNames = I18N_NOOP("Guitar|Gt.") - midiInstrument = 'acoustic guitar (nylon)' - clef = "treble_8" - tunings = ( - (ki18n("Guitar tuning"), 'guitar-tuning'), - (ki18n("Open G-tuning"), 'guitar-open-g-tuning'), - ) - - def widgets(self, layout): - super(ClassicalGuitar, self).widgets(layout) - self.numVoices = voicesWidget(layout) - - def voiceCount(self): - return self.numVoices.value() - - -class JazzGuitar(ClassicalGuitar): - _name = ki18n("Jazz guitar") - instrumentNames = I18N_NOOP("Jazz guitar|J.Gt.") - midiInstrument = 'electric guitar (jazz)' - - -class Bass(TablaturePart): - _name = ki18n("Bass") - instrumentNames = I18N_NOOP("Bass|Bs.") #FIXME - midiInstrument = 'acoustic bass' - clef = 'bass_8' - octave = -2 - tunings = ( - (ki18n("Bass tuning"), 'bass-tuning'), - ) - - -class ElectricBass(Bass): - _name = ki18n("Electric bass") - instrumentNames = I18N_NOOP("Electric bass|E.Bs.") - midiInstrument = 'electric bass (finger)' - - -class Harp(KeyboardPart): - _name = ki18n("Harp") - instrumentNames = I18N_NOOP("Harp|Hp.") - midiInstrument = 'harp' - - def build(self, builder): - """ setup structure for a 2-staff PianoStaff. """ - p = PianoStaff() - builder.setInstrumentNames(p, self.instrumentNames, self.num) - s = Sim(p) - # add two staves, with a respective number of voices. - self.buildStaff(builder, 'upper', 1, self.upperVoices.value(), s) - self.buildStaff(builder, 'lower', 0, self.lowerVoices.value(), s, "bass") - self.nodes.append(p) - - def widgets(self, layout): - super(Harp, self).widgets(layout) - self.upperVoices.parent().findChild(QLabel).setText(i18n("Upper staff:")) - self.lowerVoices.parent().findChild(QLabel).setText(i18n("Lower staff:")) - - -class Flute(WoodWindPart): - _name = ki18n("Flute") - instrumentNames = I18N_NOOP("Flute|Fl.") - midiInstrument = 'flute' - - -class Piccolo(WoodWindPart): - _name = ki18n("Piccolo") - instrumentNames = I18N_NOOP("Piccolo|Pic.") - midiInstrument = 'piccolo' - transposition = (1, 0, 0) - - -class BassFlute(WoodWindPart): - _name = ki18n("Bass flute") - instrumentNames = I18N_NOOP("Bass flute|Bfl.") - midiInstrument = 'flute' - transposition = (-1, 4, 0) - - -class Oboe(WoodWindPart): - _name = ki18n("Oboe") - instrumentNames = I18N_NOOP("Oboe|Ob.") - midiInstrument = 'oboe' - - -class OboeDAmore(WoodWindPart): - _name = ki18n("Oboe d'Amore") - instrumentNames = I18N_NOOP("Oboe d'amore|Ob.d'am.") - midiInstrument = 'oboe' - transposition = (-1, 5, 0) - - -class EnglishHorn(WoodWindPart): - _name = ki18n("English Horn") - instrumentNames = I18N_NOOP("English horn|Eng.h.") - midiInstrument = 'english horn' - transposition = (-1, 3, 0) - - -class Bassoon(WoodWindPart): - _name = ki18n("Bassoon") - instrumentNames = I18N_NOOP("Bassoon|Bn.") - midiInstrument = 'bassoon' - clef = 'bass' - octave = -1 - - -class ContraBassoon(WoodWindPart): - _name = ki18n("Contrabassoon") - instrumentNames = I18N_NOOP("Contrabassoon|C.Bn.") - midiInstrument = 'bassoon' - transposition = (-1, 0, 0) - clef = 'bass' - octave = -1 - - -class Clarinet(WoodWindPart): - _name = ki18n("Clarinet") - instrumentNames = I18N_NOOP("Clarinet|Cl.") - midiInstrument = 'clarinet' - transposition = (-1, 6, -1) - - -class SopraninoSax(WoodWindPart): - _name = ki18n("Sopranino Sax") - instrumentNames = I18N_NOOP("Sopranino Sax|SiSx.") - midiInstrument = 'soprano sax' - transposition = (0, 2, -1) # es' - - -class SopranoSax(WoodWindPart): - _name = ki18n("Soprano Sax") - instrumentNames = I18N_NOOP("Soprano Sax|SoSx.") - midiInstrument = 'soprano sax' - transposition = (-1, 6, -1) # bes - - -class AltoSax(WoodWindPart): - _name = ki18n("Alto Sax") - instrumentNames = I18N_NOOP("Alto Sax|ASx.") - midiInstrument = 'alto sax' - transposition = (-1, 2, -1) # es - - -class TenorSax(WoodWindPart): - _name = ki18n("Tenor Sax") - instrumentNames = I18N_NOOP("Tenor Sax|TSx.") - midiInstrument = 'tenor sax' - transposition = (-2, 6, -1) # bes, - - -class BaritoneSax(WoodWindPart): - _name = ki18n("Baritone Sax") - instrumentNames = I18N_NOOP("Baritone Sax|BSx.") - midiInstrument = 'baritone sax' - transposition = (-2, 2, -1) # es, - - -class BassSax(WoodWindPart): - _name = ki18n("Bass Sax") - instrumentNames = I18N_NOOP("Bass Sax|BsSx.") - midiInstrument = 'baritone sax' - transposition = (-3, 6, -1) # bes,, - - -class SopranoRecorder(WoodWindPart): - _name = ki18n("Soprano recorder") - instrumentNames = I18N_NOOP("Soprano recorder|S.rec.") - midiInstrument = 'recorder' - transposition = (1, 0, 0) - - -class AltoRecorder(WoodWindPart): - _name = ki18n("Alto recorder") - instrumentNames = I18N_NOOP("Alto recorder|A.rec.") - midiInstrument = 'recorder' - - -class TenorRecorder(WoodWindPart): - _name = ki18n("Tenor recorder") - instrumentNames = I18N_NOOP("Tenor recorder|T.rec.") - midiInstrument = 'recorder' - - -class BassRecorder(WoodWindPart): - _name = ki18n("Bass recorder") - instrumentNames = I18N_NOOP("Bass recorder|B.rec.") - midiInstrument = 'recorder' - clef = 'bass' - octave = -1 - - -class HornF(BrassPart): - _name = ki18n("Horn in F") - instrumentNames = I18N_NOOP("Horn in F|Hn.F.") - midiInstrument = 'french horn' - transposition = (-1, 3, 0) - - -class TrumpetC(BrassPart): - _name = ki18n("Trumpet in C") - instrumentNames = I18N_NOOP("Trumpet in C|Tr.C") - midiInstrument = 'trumpet' - - -class TrumpetBb(TrumpetC): - _name = ki18n("Trumpet in Bb") - instrumentNames = I18N_NOOP("Trumpet in Bb|Tr.Bb") - transposition = (-1, 6, -1) - - -class Trombone(BrassPart): - _name = ki18n("Trombone") - instrumentNames = I18N_NOOP("Trombone|Trb.") - midiInstrument = 'trombone' - clef = 'bass' - octave = -1 - - -class Tuba(BrassPart): - _name = ki18n("Tuba") - instrumentNames = I18N_NOOP("Tuba|Tb.") - midiInstrument = 'tuba' - transposition = (-2, 6, -1) - - -class BassTuba(BrassPart): - _name = ki18n("Bass Tuba") - instrumentNames = I18N_NOOP("Bass Tuba|B.Tb.") - midiInstrument = 'tuba' - transposition = (-2, 0, 0) - clef = 'bass' - octave = -1 - - -class SopranoVoice(VocalSoloPart): - _name = ki18n("Soprano") - instrumentNames = I18N_NOOP("Soprano|S.") - - -class MezzoSopranoVoice(VocalSoloPart): - _name = ki18n("Mezzo soprano") - instrumentNames = I18N_NOOP("Mezzo-soprano|Ms.") - - -class AltoVoice(VocalSoloPart): - _name = ki18n("Alto") - instrumentNames = I18N_NOOP("Alto|A.") - octave = 0 - - -class TenorVoice(VocalSoloPart): - _name = ki18n("Tenor") - instrumentNames = I18N_NOOP("Tenor|T.") - octave = 0 - clef = 'treble_8' - - -class BassVoice(VocalSoloPart): - _name = ki18n("Bass") - instrumentNames = I18N_NOOP("Bass|B.") - octave = -1 - clef = 'bass' - - -class LeadSheet(VocalPart, Chords): - _name = ki18n("Lead sheet") - - def build(self, builder): - """ - Create chord names, song and lyrics. - Optional a second staff with a piano accompaniment. - """ - if self.chords.isChecked(): - Chords.build(self, builder) - if self.accomp.isChecked(): - p = ChoirStaff() - #TODO: instrument names ? - #TODO: different midi instrument for voice and accompaniment ? - s = Sim(p) - mel = Sim(Staff(parent=s)) - v1 = Voice(parent=mel) - s1 = Seq(v1) - Text('\\voiceOne', s1) - stub, ref = self.assignMusic('melody', 1) - Identifier(ref, s1) - s2 = Seq(Voice(parent=mel)) - Text('\\voiceTwo', s2) - stub, ref = self.assignMusic('accRight', 0) - Identifier(ref, s2) - acc = Seq(Staff(parent=s)) - Clef('bass', acc) - stub, ref = self.assignMusic('accLeft', -1) - Identifier(ref, acc) - if self.ambitus.isChecked(): - # We can't use \addlyrics when the voice has a \with {} - # section, because it creates a nested Voice context. - # So if the ambitus engraver should be added to the Voice, - # we don't use \addlyrics but create a new Lyrics context. - # So in that case we don't use addStanzas, but insert the - # Lyrics contexts manually inside our ChoirStaff. - v1.cid = Reference('melody') - Line('\\consists "Ambitus_engraver"', v1.getWith()) - count = self.stanzas.value() # number of stanzas - if count == 1: - l = Lyrics() - s.insert(acc.parent(), l) - ref = self.assignLyrics('verse') - Identifier(ref, LyricsTo(v1.cid, l)) - else: - for i in range(count): - l = Lyrics() - s.insert(acc.parent(), l) - ref = self.assignLyrics('verse', i + 1) - Identifier(ref, LyricsTo(v1.cid, l)) - else: - self.addStanzas(v1) - else: - stub, ref = self.assignMusic('melody', 1) - p = Staff() - Identifier(ref, Seq(p)) - self.addStanzas(p) - if self.ambitus.isChecked(): - Line('\\consists "Ambitus_engraver"', p.getWith()) - self.nodes.append(p) - - def widgets(self, layout): - l = QLabel('{0}'.format(i18n( - "The Lead Sheet provides a staff with chord names above " - "and lyrics below it. A second staff is optional."))) - l.setWordWrap(True) - layout.addWidget(l) - self.chords = QGroupBox(i18n("Chord names")) - self.chords.setCheckable(True) - self.chords.setChecked(True) - layout.addWidget(self.chords) - l = QVBoxLayout() - self.chords.setLayout(l) - Chords.widgets(self, l) - self.accomp = QCheckBox(i18n("Add accompaniment staff")) - self.accomp.setToolTip(i18n( - "Adds an accompaniment staff and also puts an accompaniment " - "voice in the upper staff.")) - layout.addWidget(self.accomp) - VocalPart.widgets(self, layout) - - -class Choir(VocalPart): - _name = ki18n("Choir") - - def widgets(self, layout): - l = QLabel('

{0} ({1})

'.format( - i18n("Please select the voices for the choir. " - "Use the letters S, A, T, or B. A hyphen denotes a new staff."), - i18n("Hint: For a double choir you can use two choir parts."))) - l.setWordWrap(True) - layout.addWidget(l) - h = KHBox() - layout.addWidget(h) - l = QLabel(i18n("Voicing:"), h) - self.voicing = QComboBox(h) - l.setBuddy(self.voicing) - self.voicing.setEditable(True) - self.voicing.setCompleter(None) - self.voicing.setValidator(QRegExpValidator( - QRegExp("[SATB]+(-[SATB]+)*", Qt.CaseInsensitive), self.voicing)) - self.voicing.addItems(( - 'SA-TB', 'S-A-T-B', - 'SA', 'S-A', 'SS-A', 'S-S-A', - 'TB', 'T-B', 'TT-B', 'T-T-B', - 'SS-A-T-B', 'S-A-TT-B', 'SS-A-TT-B', - 'S-S-A-T-T-B', 'S-S-A-A-T-T-B-B', - )) - self.stanzaWidget(layout) - h = KHBox() - layout.addWidget(h) - l = QLabel(i18n("Lyrics:"), h) - self.lyrics = QComboBox(h) - l.setBuddy(self.lyrics) - for index, (text, tooltip) in enumerate(( - (i18n("All voices same lyrics"), - i18n("A set of the same lyrics is placed between all staves.")), - (i18n("Every voice same lyrics"), - i18n("Every voice gets its own lyrics, using the same text as the" - " other voices.")), - (i18n("Every voice different lyrics"), - i18n("Every voice gets a different set of lyrics.")), - (i18n("Distribute stanzas"), - i18n("One set of stanzas is distributed across the staves.")))): - self.lyrics.addItem(text) - self.lyrics.setItemData(index, tooltip, Qt.ToolTipRole) - self.lyrics.setCurrentIndex(0) - self.ambitusWidget(layout) - self.pianoReduction = QCheckBox(i18n("Piano reduction")) - self.pianoReduction.setToolTip(i18n( - "Adds an automatically generated piano reduction.")) - layout.addWidget(self.pianoReduction) - self.rehearsalMidi = QCheckBox(i18n("Rehearsal MIDI files")) - self.rehearsalMidi.setToolTip(i18n( - "Creates a rehearsal MIDI file for every voice, " - "even if no MIDI output is generated for the main score.")) - layout.addWidget(self.rehearsalMidi) - - identifiers = { - 'S': 'soprano', - 'A': 'alto', - 'T': 'tenor', - 'B': 'bass', - } - - octaves = { - 'S': SopranoVoice.octave, - 'A': AltoVoice.octave, - 'T': TenorVoice.octave, - 'B': BassVoice.octave, - } - - instrumentNames = { - 'S': SopranoVoice.instrumentNames, - 'A': AltoVoice.instrumentNames, - 'T': TenorVoice.instrumentNames, - 'B': BassVoice.instrumentNames, - } - - def build(self, builder): - # normalize voicing - staves = self.voicing.currentText().upper() - # remove unwanted characters - staves = re.sub(r'[^SATB-]+', '', staves) - # remove double hyphens, and from begin and end - staves = re.sub('-+', '-', staves).strip('-') - if not staves: - return - - splitStaves = staves.split('-') - numStaves = len(splitStaves) - staffCIDs = defaultdict(int) # number same-name staff Context-IDs - voiceCounter = defaultdict(int) # dict to number same voice types - maxNumVoices = max(map(len, splitStaves)) # largest number of voices - numStanzas = self.stanzas.value() - lyrics = defaultdict(list) # lyrics grouped by stanza number - pianoReduction = defaultdict(list) - rehearsalMidis = [] - - p = ChoirStaff() - choir = Sim(p) - self.nodes.append(p) - - # print main instrumentName if there are more choirs, and we - # have more than one staff. - if numStaves > 1 and self.num: - builder.setInstrumentNames(p, I18N_NOOP("Choir|Ch."), self.num) - - # get the preferred way of adding lyrics - lyrAllSame, lyrEachSame, lyrEachDiff, lyrSpread = ( - self.lyrics.currentIndex() == i for i in range(4)) - lyrEach = lyrEachSame or lyrEachDiff - - # stanzas to print (0 = don't print stanza number): - if numStanzas == 1: - allStanzas = [0] - else: - allStanzas = list(range(1, numStanzas + 1)) - - # Which stanzas to print where: - if lyrSpread and numStanzas > 1 and numStaves > 2: - spaces = numStaves - 1 - count, rest = divmod(max(numStanzas, spaces), spaces) - stanzaSource = cycle(allStanzas) - stanzaGroups = (islice(stanzaSource, num) for num in chain( - repeat(count + 1, rest), repeat(count, numStaves - rest))) - else: - stanzaGroups = repeat(allStanzas, numStaves) - - # a function to set staff affinity (in LilyPond 2.13.4 and above): - if builder.lilyPondVersion >= (2, 13, 4): - def setStaffAffinity(context, affinity): - Line("\\override VerticalAxisGroup " - "#'staff-affinity = #" + affinity, context.getWith()) - else: - def setStaffAffinity(lyricsContext, affinity): - pass - - # a function to make a column markup: - if builder.lilyPondVersion >= (2, 11, 57): - columnCommand = 'center-column' - else: - columnCommand = 'center-align' - def makeColumnMarkup(names): - node = Markup() - column = MarkupEnclosed(columnCommand, node) - for name in names: - QuotedString(name, column) - return node - - stavesLeft = numStaves - for staff, stanzas in zip(splitStaves, stanzaGroups): - # are we in the last staff? - stavesLeft -= 1 - # the number of voices in this staff - numVoices = len(staff) - # sort the letters in order SATB - staff = ''.join(i * staff.count(i) for i in 'SATB') - # Create the staff for the voices - s = Staff(parent=choir) - builder.setMidiInstrument(s, self.midiInstrument) - - # Build a list of the voices in this staff. - # Each entry is a tuple(name, num). - # name is one of 'S', 'A', 'T', or 'B' - # num is an integer: 0 when a voice occurs only once, or >= 1 when - # there are more voices of the same type (e.g. Soprano I and II) - voices = [] - for voice in staff: - if staves.count(voice) > 1: - voiceCounter[voice] += 1 - voices.append((voice, voiceCounter[voice])) - - # Add the instrument names to the staff: - if numVoices == 1: - voice, num = voices[0] - builder.setInstrumentNames(s, self.instrumentNames[voice], num) - else: - # stack instrument names (long and short) in a markup column. - builder.setInstrumentNames(s, - map(makeColumnMarkup, zip(*[builder.getInstrumentNames( - self.instrumentNames[voice], num) for voice, num in voices]))) - - # Make the { } or << >> holder for this staff's children. - # If *all* staves have only one voice, addlyrics is used. - # In that case, don't remove the braces. - staffMusic = (Seq if lyrEach and maxNumVoices == 1 else - Seqr if numVoices == 1 else Simr)(s) - - # Set the clef for this staff: - if 'B' in staff: - Clef('bass', staffMusic) - elif 'T' in staff: - Clef('treble_8', staffMusic) - - # Determine voice order (\voiceOne, \voiceTwo etc.) - if numVoices == 1: - order = (0,) - elif numVoices == 2: - order = 1, 2 - elif staff in ('SSA', 'TTB'): - order = 1, 3, 2 - elif staff in ('SAA', 'TBB'): - order = 1, 2, 4 - elif staff in ('SSAA', 'TTBB'): - order = 1, 3, 2, 4 - else: - order = range(1, numVoices + 1) - - # What name would the staff get if we need to refer to it? - # If a name (like 's' or 'sa') is already in use in this part, - # just add a number ('ss2' or 'sa2', etc.) - staffCIDs[staff] += 1 - cid = Reference(staff.lower() + - str(staffCIDs[staff] if staffCIDs[staff] > 1 else "")) - - # Create voices and their lyrics: - for (voice, num), voiceNum in zip(voices, order): - name = self.identifiers[voice] - if num: - name += ly.nums(num) - stub, ref = self.assignMusic(name, self.octaves[voice]) - lyrName = name + 'Verse' if lyrEachDiff else 'verse' - - # Use \addlyrics if all staves have exactly one voice. - if lyrEach and maxNumVoices == 1: - for verse in stanzas: - lyrics[verse].append((AddLyrics(s), lyrName)) - Identifier(ref, staffMusic) - else: - voiceName = self.identifiers[voice] + str(num or '') - v = Voice(voiceName, parent=staffMusic) - voiceMusic = Seqr(v) - if voiceNum: - Text('\\voice' + ly.nums(voiceNum), voiceMusic) - Identifier(ref, voiceMusic) - - if stanzas and (lyrEach or (voiceNum <= 1 and - (stavesLeft or numStaves == 1))): - # Create the lyrics. If they should be above the staff, - # give the staff a suitable name, and use alignAbove- - # Context to align the Lyrics above the staff. - above = voiceNum & 1 if lyrEach else False - if above and s.cid is None: - s.cid = cid - - for verse in stanzas: - l = Lyrics(parent=choir) - if above: - l.getWith()['alignAboveContext'] = cid - setStaffAffinity(l, "DOWN") - elif not lyrEach and stavesLeft: - setStaffAffinity(l, "CENTER") - lyrics[verse].append((LyricsTo(voiceName, l), lyrName)) - - # Add ambitus: - if self.ambitus.isChecked(): - ambitusContext = (s if numVoices == 1 else v).getWith() - Line('\\consists "Ambitus_engraver"', ambitusContext) - if voiceNum > 1: - Line("\\override Ambitus #'X-offset = #{0}".format( - (voiceNum - 1) * 2.0), ambitusContext) - - pianoReduction[voice].append(ref) - rehearsalMidis.append((voice, num, ref, lyrName)) - - # Assign the lyrics, so their definitions come after the note defs. - # (These refs are used again below in the midi rehearsal routine.) - refs = {} - for verse in allStanzas: - for node, name in lyrics[verse]: - if (name, verse) not in refs: - refs[(name, verse)] = self.assignLyrics(name, verse) - Identifier(refs[(name, verse)], node) - - # Create the piano reduction if desired - if self.pianoReduction.isChecked(): - a, ref = self.assign('pianoReduction') - self.nodes.append(Identifier(ref)) - piano = PianoStaff(parent=a) - - sim = Sim(piano) - rightStaff = Staff(parent=sim) - leftStaff = Staff(parent=sim) - right = Seq(rightStaff) - left = Seq(leftStaff) - - # Determine the ordering of voices in the staves - upper = pianoReduction['S'] + pianoReduction['A'] - lower = pianoReduction['T'] + pianoReduction['B'] - - preferUpper = 1 - if not upper: - # Male choir - upper = pianoReduction['T'] - lower = pianoReduction['B'] - Clef("treble_8", right) - Clef("bass", left) - preferUpper = 0 - elif not lower: - # Female choir - upper = pianoReduction['S'] - lower = pianoReduction['A'] - else: - Clef("bass", left) - - # Otherwise accidentals can be confusing - Line("#(set-accidental-style 'piano)", right) - Line("#(set-accidental-style 'piano)", left) - - # Move voices if unevenly spread - if abs(len(upper) - len(lower)) > 1: - voices = upper + lower - half = (len(voices) + preferUpper) / 2 - upper = voices[:half] - lower = voices[half:] - - for staff, voices in (Simr(right), upper), (Simr(left), lower): - if voices: - for v in voices[:-1]: - Identifier(v, staff) - VoiceSeparator(staff).after = 1 - Identifier(voices[-1], staff) - - # Make the piano part somewhat smaller - Line("fontSize = #-1", piano.getWith()) - Line("\\override StaffSymbol #'staff-space = #(magstep -1)", - piano.getWith()) - - # Nice to add Mark engravers - Line('\\consists "Mark_engraver"', rightStaff.getWith()) - Line('\\consists "Metronome_mark_engraver"', rightStaff.getWith()) - - # Keep piano reduction out of the MIDI output - if builder.midi: - Line('\\remove "Staff_performer"', rightStaff.getWith()) - Line('\\remove "Staff_performer"', leftStaff.getWith()) - - # Create MIDI files if desired - if self.rehearsalMidi.isChecked(): - builder.book = True # force \book { } block - - a, rehearsalMidi = self.assign('rehearsalMidi') - - func = SchemeList(a) - func.pre = '#(' # hack - Text('define-music-function', func) - Line('(parser location name midiInstrument lyrics) ' - '(string? string? ly:music?)', func) - choir = Sim(Command('unfoldRepeats', SchemeLily(func))) - - self.aftermath.append(Comment(i18n("Rehearsal MIDI files:"))) - - for voice, num, ref, lyrName in rehearsalMidis: - # Append voice to the rehearsalMidi function - name = self.identifiers[voice] + str(num or '') - seq = Seq(Voice(name, parent=Staff(name, parent=choir))) - Text('s1*0\\f', seq) # add one dynamic - Identifier(ref, seq) # add the reference to the voice - - # Append score to the aftermath (stuff put below the main score) - if self.num: - suffix = "choir{0}-{1}".format(self.num, name) - else: - suffix = name - self.aftermath.append( - Line('#(define output-suffix "{0}")'.format(suffix))) - book = Book() - self.aftermath.append(book) - self.aftermath.append(BlankLine()) - score = Score(book) - - # TODO: make configurable - if voice in ('SA'): - midiInstrument = "soprano sax" - else: - midiInstrument = "tenor sax" - - cmd = Command(rehearsalMidi, score) - QuotedString(name, cmd) - QuotedString(midiInstrument, cmd) - Identifier(refs[(lyrName, stanzas[0])], cmd) - Midi(score) - - Text("\\context Staff = $name", choir) - seq = Seq(choir) - Line("\\set Score.midiMinimumVolume = #0.5", seq) - Line("\\set Score.midiMaximumVolume = #0.5", seq) - Line("\\set Score.tempoWholesPerMinute = #" + builder.getMidiTempo(), seq) - Line("\\set Staff.midiMinimumVolume = #0.8", seq) - Line("\\set Staff.midiMaximumVolume = #1.0", seq) - Line("\\set Staff.midiInstrument = $midiInstrument", seq) - lyr = Lyrics(parent=choir) - lyr.getWith()['alignBelowContext'] = Text('$name') - Text("\\lyricsto $name $lyrics", lyr) - - -class Piano(KeyboardPart): - _name = ki18n("Piano") - instrumentNames = I18N_NOOP("Piano|Pno.") - midiInstrument = 'acoustic grand' - - -class Harpsichord(KeyboardPart): - _name = ki18n("Harpsichord") - instrumentNames = I18N_NOOP("Harpsichord|Hs.") - midiInstrument = 'harpsichord' - - -class Clavichord(KeyboardPart): - _name = ki18n("Clavichord") - instrumentNames = I18N_NOOP("Clavichord|Clv.") - midiInstrument = 'clav' - - -class Organ(KeyboardPart): - _name = ki18n("Organ") - instrumentNames = I18N_NOOP("Organ|Org.") - midiInstrument = 'church organ' - - def widgets(self, layout): - super(Organ, self).widgets(layout) - self.pedalVoices = voicesWidget(layout, i18n("Pedal:"), 0, - tooltip=i18n("Set to 0 to disable the pedal altogether.")) - - def build(self, builder): - super(Organ, self).build(builder) - if self.pedalVoices.value(): - self.nodes.append(self.buildStaff(builder, - 'pedal', -1, self.pedalVoices.value(), clef="bass")) - - -class Celesta(KeyboardPart): - _name = ki18n("Celesta") - instrumentNames = I18N_NOOP("Celesta|Cel.") - midiInstrument = 'celesta' - - -class Timpani(PitchedPercussionPart): - _name = ki18n("Timpani") - instrumentNames = I18N_NOOP("Timpani|Tmp.") - midiInstrument = 'timpani' - clef = 'bass' - octave = -1 - - -class Xylophone(PitchedPercussionPart): - _name = ki18n("Xylophone") - instrumentNames = I18N_NOOP("Xylophone|Xyl.") - midiInstrument = 'xylophone' - - -class Marimba(PitchedPercussionPart): - _name = ki18n("Marimba") - instrumentNames = I18N_NOOP("Marimba|Mar.") - midiInstrument = 'marimba' - - -class Vibraphone(PitchedPercussionPart): - _name = ki18n("Vibraphone") - instrumentNames = I18N_NOOP("Vibraphone|Vib.") - midiInstrument = 'vibraphone' - - -class TubularBells(PitchedPercussionPart): - _name = ki18n("Tubular bells") - instrumentNames = I18N_NOOP("Tubular bells|Tub.") - midiInstrument = 'tubular bells' - - -class Glockenspiel(PitchedPercussionPart): - _name = ki18n("Glockenspiel") - instrumentNames = I18N_NOOP("Glockenspiel|Gls.") - midiInstrument = 'glockenspiel' - - -class Drums(Part): - _name = ki18n("Drums") - instrumentNames = I18N_NOOP("Drums|Dr.") - - def assignDrums(self, name = None): - """ - Creates an empty name = \drummode assignment and returns - the reference for the name. - """ - a, ref = self.assign(name) - s = DrumMode(a) - Identifier('global', s) - LineComment(i18n("Drums follow here."), s) - BlankLine(s) - return ref - - def build(self, builder): - p = DrumStaff() - s = Simr(p) - if self.drumVoices.value() > 1: - for i in range(1, self.drumVoices.value()+1): - q = Seq(DrumVoice(parent=s)) - Text('\\voice' + ly.nums(i), q) - ref = self.assignDrums('drum' + ly.nums(i)) - Identifier(ref, q) - else: - ref = self.assignDrums('drum') - Identifier(ref, s) - builder.setInstrumentNames(p, self.instrumentNames, self.num) - i = self.drumStyle.currentIndex() - if i > 0: - v = ('drums', 'timbales', 'congas', 'bongos', 'percussion')[i] - p.getWith()['drumStyleTable'] = Scheme(v + '-style') - v = (5, 2, 2, 2, 1)[i] - Line("\\override StaffSymbol #'line-count = #{0}".format(v), p.getWith()) - if self.drumStems.isChecked(): - Line("\\override Stem #'stencil = ##f", p.getWith()) - Line("\\override Stem #'length = #3 % " + i18n("keep some distance."), - p.getWith()) - self.nodes.append(p) - - def widgets(self, layout): - self.drumVoices = voicesWidget(layout) - h = KHBox() - layout.addWidget(h) - l = QLabel(i18n("Style:"), h) - self.drumStyle = QComboBox(h) - l.setBuddy(self.drumStyle) - self.drumStyle.addItems(( - i18n("Drums (5 lines, default)"), - i18n("Timbales-style (2 lines)"), - i18n("Congas-style (2 lines)"), - i18n("Bongos-style (2 lines)"), - i18n("Percussion-style (1 line)"))) - self.drumStems = QCheckBox(i18n("Remove stems")) - self.drumStems.setToolTip(i18n("Remove the stems from the drum notes.")) - layout.addWidget(self.drumStems) - - - - -# The structure of the overview -def categories(): - return ( - (i18n("Strings"), ( - Violin, - Viola, - Cello, - Contrabass, - BassoContinuo, - )), - (i18n("Plucked strings"), ( - Mandolin, - Banjo, - ClassicalGuitar, - JazzGuitar, - Bass, - ElectricBass, - Harp, - )), - (i18n("Woodwinds"), ( - Flute, - Piccolo, - BassFlute, - Oboe, - OboeDAmore, - EnglishHorn, - Bassoon, - ContraBassoon, - Clarinet, - SopraninoSax, - SopranoSax, - AltoSax, - TenorSax, - BaritoneSax, - BassSax, - SopranoRecorder, - AltoRecorder, - TenorRecorder, - BassRecorder, - )), - (i18n("Brass"), ( - HornF, - TrumpetC, - TrumpetBb, - Trombone, - Tuba, - BassTuba, - )), - (i18n("Vocal"), ( - LeadSheet, - SopranoVoice, - MezzoSopranoVoice, - AltoVoice, - TenorVoice, - BassVoice, - Choir, - )), - (i18n("Keyboard instruments"), ( - Piano, - Harpsichord, - Clavichord, - Organ, - Celesta, - )), - (i18n("Percussion"), ( - Timpani, - Xylophone, - Marimba, - Vibraphone, - TubularBells, - Glockenspiel, - Drums, - )), - (i18n("Special"), ( - Chords, - BassFigures, - )), - ) diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/scorewiz/preview.py frescobaldi-2.0.0/python/frescobaldi_app/scorewiz/preview.py --- frescobaldi-1.2.0/python/frescobaldi_app/scorewiz/preview.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/scorewiz/preview.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Preview dialog for the Score Wizard (scorewiz/__init__.py). -In separate file to ease maintenance. -""" - -import math -import ly, ly.dom - -from frescobaldi_app.runlily import LilyPreviewDialog -from frescobaldi_app.scorewiz import config - -class PreviewDialog(LilyPreviewDialog): - def __init__(self, scorewiz): - self.scorewiz = scorewiz - LilyPreviewDialog.__init__(self, scorewiz) - - def loadSettings(self): - self.restoreDialogSize(config("preview")) - - def saveSettings(self): - self.saveDialogSize(config("preview")) - - def showPreview(self): - builder = self.scorewiz.builder() - builder.midi = False # not needed - doc = builder.document() - - keysig = doc.findChild(ly.dom.KeySignature) - timesig = doc.findChild(ly.dom.TimeSignature) - partial = doc.findChild(ly.dom.Partial) - # create a list of durations for the example notes. - durs = [] - if partial: - durs.append((partial.dur, partial.dots)) - if timesig: - dur = int(math.log(int(timesig.beat), 2)) - num = min(int(timesig.num)*2, 10) - else: - dur, num = 2, 4 - durs += [(dur, 0)] * num - - def addItems(stub, generator): - for dur, dots in durs: - node = next(generator) - node.append(ly.dom.Duration(dur, dots)) - stub.append(node) - - lyrics = lyricsGen(len(durs)) - # iter over all the Assignments to add example notes etc. - for a in doc.findChildren(ly.dom.Assignment, 1): - stub = a[-1] - if isinstance(stub, ly.dom.LyricMode): - stub.append(next(lyrics)) - elif isinstance(stub, ly.dom.Relative): - addItems(stub[-1], pitchGen(keysig)) - elif isinstance(stub, ly.dom.ChordMode): - addItems(stub, chordGen(keysig)) - elif isinstance(stub, ly.dom.FigureMode): - addItems(stub, figureGen()) - elif isinstance(stub, ly.dom.DrumMode): - addItems(stub, drumGen()) - - LilyPreviewDialog.showPreview(self, builder.ly(doc)) - - -# Generators for different kinds of example input -def pitchGen(startPitch): - note = startPitch.note - while True: - for n in (note, note, (note + 9 ) % 7, (note + 8) % 7, - note, (note + 11) % 7, note): - chord = ly.dom.Chord() - ly.dom.Pitch(-1, n, startPitch.alter, parent=chord) - yield chord - -def chordGen(startPitch): - for n in pitchGen(startPitch): - yield n - for i in 1, 2, 3: - yield ly.dom.TextDur("\\skip") - -def lyricsGen(length): - while True: - for i in "ha", "hi", "ho", "he", "hu": - result = [i]*length - result[0] = result[0].title() - yield ly.dom.Text(' '.join(result)) - -def figureGen(): - while True: - for i in 5, 6, 3, 8, 7: - for s in "<{0}>".format(i), "\\skip", "\\skip": - yield ly.dom.TextDur(s) - -def drumGen(): - while True: - for s in "bd", "hh", "sn", "hh": - yield ly.dom.TextDur(s) - - - \ No newline at end of file diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/sessions.py frescobaldi-2.0.0/python/frescobaldi_app/sessions.py --- frescobaldi-1.2.0/python/frescobaldi_app/sessions.py 2010-09-03 21:30:21.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/sessions.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Code for managing editor sessions, inherits the base code from kateshell. -""" - -from PyQt4.QtGui import QComboBox, QGridLayout, QLabel, QWidget -from PyKDE4.kdecore import i18n, KGlobal -from PyKDE4.kdeui import KIcon - -import ly.version -import kateshell.sessions - - -class EditorDialog(kateshell.sessions.EditorDialog): - def __init__(self, manager): - super(EditorDialog, self).__init__(manager) - page = QWidget(self) - item = self.lilyPond = self.addPage(page, i18n("LilyPond")) - item.setHeader(i18n("LilyPond-related settings")) - item.setIcon(KIcon("run-lilypond")) - - layout = QGridLayout(page) - - l = QLabel(i18n("LilyPond version to use:")) - ver = self.lilyVer = QComboBox() - l.setBuddy(ver) - l.setToolTip(i18n( - "Here you can set a fixed LilyPond version to run on documents " - "in this session.\n" - "See What's This (Shift+F1) for more information.")) - l.setWhatsThis(i18n( - "Here you can set a fixed LilyPond version to run on documents " - "in this session.\n\n" - "The LilyPond version selected here is run by default on your " - "documents, and it's also used by the \"Insert Version\" command.")) - ver.setToolTip(l.toolTip()) - ver.setWhatsThis(l.whatsThis()) - layout.addWidget(l, 0, 0) - layout.addWidget(ver, 0, 1) - self.loadLilyPondVersions() - manager.mainwin.settingsChanged.connect(self.loadLilyPondVersions) - - def loadLilyPondVersions(self): - """ Puts configured lilypond versions in our ComboBox. """ - conf = config("lilypond") - paths = conf.readEntry("paths", ["lilypond"]) or ["lilypond"] - default = conf.readEntry("default", "lilypond") - - # get all versions - ver = dict((path, ly.version.LilyPondInstance(path).version()) - for path in paths) - paths.sort(key=ver.get) - self._paths = paths - self.lilyVer.clear() - self.lilyVer.addItem(i18n("Default")) - self.lilyVer.addItems([format(ver[p]) for p in paths]) - - def loadSessionDefaults(self): - super(EditorDialog, self).loadSessionDefaults() - self.lilyVer.setCurrentIndex(0) - - def loadSessionConfig(self, conf): - super(EditorDialog, self).loadSessionConfig(conf) - path = conf.readEntry('lilypond', '') - try: - index = self._paths.index(path) + 1 - except ValueError: - index = 0 - self.lilyVer.setCurrentIndex(index) - - def saveSessionConfig(self, conf): - super(EditorDialog, self).saveSessionConfig(conf) - conf.writeEntry('lilypond', - ([''] + self._paths)[self.lilyVer.currentIndex()]) - - -# Easily get our global config -def config(group): - return KGlobal.config().group(group) diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/settings.py frescobaldi-2.0.0/python/frescobaldi_app/settings.py --- frescobaldi-1.2.0/python/frescobaldi_app/settings.py 2010-10-01 18:56:31.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/settings.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,956 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Config dialog -""" - -from PyQt4.QtCore import QSize, Qt -from PyQt4.QtGui import ( - QCheckBox, QComboBox, QGridLayout, QGroupBox, QHBoxLayout, QLabel, - QLineEdit, QListWidget, QListWidgetItem, QRadioButton, QTextEdit, QTreeView, - QVBoxLayout, QWidget) -from PyKDE4.kdecore import KGlobal, KUrl, i18n -from PyKDE4.kdeui import ( - KDialog, KHBox, KIcon, KMessageBox, KPageDialog, KPushButton, - KStandardGuiItem, KVBox) -from PyKDE4.kio import KFile, KUrlRequester - -from signals import Signal - -import ly.version -from kateshell.app import cacheresult -from kateshell.widgets import ( - ExecLineEdit, ExecArgsLineEdit, FilePathEdit, ListEdit) - -# these modules provide their own default settings or update functions -import frescobaldi_app.hyphen, frescobaldi_app.mainapp, frescobaldi_app.rumor - - -class SettingsDialog(KPageDialog): - def __init__(self, mainwin): - KPageDialog.__init__(self, mainwin) - self.setAttribute(Qt.WA_DeleteOnClose) - self.mainwin = mainwin - self.setFaceType(KPageDialog.Tree) - self.setButtons(KPageDialog.ButtonCode( - KPageDialog.Reset | KPageDialog.Default | KPageDialog.Apply | - KPageDialog.Ok | KPageDialog.Cancel | KPageDialog.Help)) - self.setCaption(i18n("Configure")) - self.setHelp("settings-dialog") - self.setDefaultButton(KPageDialog.Ok) - self.applyClicked.connect(self.saveSettings) - self.defaultClicked.connect(self.slotDefaultClicked) - self.resetClicked.connect(self.loadSettings) - self.currentPageChanged.connect(self.slotCurrentPageChanged) - - self.pages = [ - GeneralPreferences(self), - LilyPondPreferences(self), - Commands(self), - RumorSettings(self), - EditorComponent(self), - ] - self.loadSettings() - # make icons in tree somewhat larger - tree = self.findChild(QTreeView) - if tree: - tree.setIconSize(QSize(22, 22)) - # restore our dialog size - self.restoreDialogSize(config("settings dialog")) - self.finished.connect(lambda: self.saveDialogSize(config("settings dialog"))) - - def changed(self, changed=True): - self.enableButton(KPageDialog.Apply, changed) - - def done(self, result): - if result: - self.saveSettings() - KPageDialog.done(self, result) - - def slotDefaultClicked(self): - for page in self.pages: - page.defaults() - self.changed(True) - - def loadSettings(self): - for page in self.pages: - page.loadSettings() - self.changed(False) - - def saveSettings(self): - for page in self.pages: - page.saveSettings() - page.applySettings() - self.changed(False) - self.mainwin.settingsChanged() - - def slotCurrentPageChanged(self, current, before): - self.setHelp(getattr(current.widget(), "help", "settings-dialog")) - - -class SettingsBase(object): - """ Base class for a unit that contains settings. """ - def defaults(self): - """ Implement in subclass: reset settings to default. """ - pass - - def loadSettings(self): - """ Implement in subclass: load settings from configfile. """ - pass - - def saveSettings(self): - """ Implement in subclass: write settings to configfile. """ - pass - - def applySettings(self): - """ Implement in subclass: do something after the new settings have been - saved. """ - pass - - -class SettingsPage(QWidget, SettingsBase): - """ Base class for a page with settings, possibly in SettingsGroups. """ - - changed = Signal() - - def __init__(self, dialog): - QWidget.__init__(self, dialog) - self.dialog = dialog - self.setLayout(QVBoxLayout()) - self.groups = [] - self.changed.connect(lambda: dialog.changed()) - - def defaults(self): - for group in self.groups: - group.defaults() - - def loadSettings(self): - for group in self.groups: - group.loadSettings() - - def saveSettings(self): - for group in self.groups: - group.saveSettings() - - def applySettings(self): - for group in self.groups: - group.applySettings() - - -class SettingsGroup(QGroupBox, SettingsBase): - """ Base class for a group box with settings """ - def __init__(self, title, page): - """ page is a SettingsPage """ - QGroupBox.__init__(self, title, page) - page.layout().addWidget(self) - page.layout().addStretch(1) - page.groups.append(self) - self.changed = page.changed # quick connect :-) - self.page = page - - -class CheckGroup(SettingsGroup): - """ Base class for a group box with check boxes. """ - - configGroup = None # must define a name in subclass - - def __init__(self, title, page): - super(CheckGroup, self).__init__(title, page) - self.checks = [] - - def addCheckBox(self, title, name, default): - b = QCheckBox(title, self, clicked=self.changed) - self.checks.append((b, name, default)) - return b - - def defaults(self): - for widget, name, default in self.checks: - widget.setChecked(default) - - def loadSettings(self): - conf = config(self.configGroup) - for widget, name, default in self.checks: - widget.setChecked(conf.readEntry(name, default)) - - def saveSettings(self): - conf = config(self.configGroup) - for widget, name, default in self.checks: - conf.writeEntry(name, widget.isChecked()) - - -class GeneralPreferences(SettingsPage): - """ - General preferences. - """ - def __init__(self, dialog): - super(GeneralPreferences, self).__init__(dialog) - item = dialog.addPage(self, i18n("General Preferences")) - item.setHeader(i18n("General Frescobaldi Preferences")) - item.setIcon(KIcon("configure")) - - SessionsStartup(self) - SavingDocument(self) - Warnings(self) - PointAndClick(self) - - -class LilyPondPreferences(SettingsPage): - """ - LilyPond preferences. - """ - def __init__(self, dialog): - super(LilyPondPreferences, self).__init__(dialog) - item = dialog.addPage(self, i18n("LilyPond Preferences")) - item.setHeader(i18n("LilyPond Preferences")) - item.setIcon(KIcon("run-lilypond")) - self.help = 'settings-lilypond' - - LilyPondVersions(self) - LilyPondDocumentVersion(self) - RunningLilyPond(self) - - -class Commands(SettingsPage): - """ - Settings regarding paths and helper apps. - """ - def __init__(self, dialog): - super(Commands, self).__init__(dialog) - item = dialog.addPage(self, i18n("Paths")) - item.setHeader(i18n("Paths to programs or data used by Frescobaldi")) - item.setIcon(KIcon("utilities-terminal")) - self.help = 'settings-paths' - - HelperApps(self) - LilyDocBrowser(self) - HyphenationSettings(self) - - -class RumorSettings(SettingsPage): - """ - Settings regarding rumor and associated programs. - """ - def __init__(self, dialog): - super(RumorSettings, self).__init__(dialog) - item = dialog.addPage(self, i18n("Rumor MIDI input")) - item.setHeader(i18n("Rumor MIDI input plugin settings")) - item.setIcon(KIcon("media-record")) - self.help = 'rumor' - - RumorCommands(self) - - -class EditorComponent(SettingsPage): - """ - Settings from the KatePart editing component. - """ - def __init__(self, dialog): - super(EditorComponent, self).__init__(dialog) - editorItem = dialog.addPage(self, i18n("Editor Component")) - editorItem.setHeader(i18n("Editor Component Options")) - editorItem.setIcon(KIcon("accessories-text-editor")) - self.help = 'settings-editor-component' - - TabBarSettings(self) - - self.editorPages = [] - editor = dialog.mainwin.app.editor - # Get the KTextEditor config pages. - for i in range(editor.configPages()): - cPage = editor.configPage(i, self) - cPage.changed.connect(self.changed) - self.editorPages.append(cPage) - item = dialog.addSubPage(editorItem, cPage, editor.configPageName(i)) - item.setHeader(editor.configPageFullName(i)) - item.setIcon(editor.configPageIcon(i)) - cPage.help = 'settings-editor-component' - - def saveSettings(self): - super(EditorComponent, self).saveSettings() - for page in self.editorPages: - page.apply() - - -class RunningLilyPond(CheckGroup): - - configGroup = "preferences" - - def __init__(self, page): - super(RunningLilyPond, self).__init__(i18n("Running LilyPond"), page) - layout = QVBoxLayout(self) - layout.setSpacing(0) - - layout.addWidget( - self.addCheckBox(i18n("Let LilyPond delete intermediate output files"), - "delete intermediate files", True)) - layout.addWidget( - self.addCheckBox(i18n("Run LilyPond with verbose output"), - "verbose lilypond output", False)) - - h = KHBox() - QLabel(i18n("LilyPond include path:"), h) - self.includePath = FilePathEdit(h) - self.includePath.changed.connect(page.changed) - layout.addWidget(h) - - def defaults(self): - super(RunningLilyPond, self).defaults() - self.includePath.clear() - - def loadSettings(self): - super(RunningLilyPond, self).loadSettings() - self.includePath.setValue( - config("preferences").readPathEntry("lilypond include path", [])) - - def saveSettings(self): - super(RunningLilyPond, self).saveSettings() - conf = config("preferences") - conf.writePathEntry("lilypond include path", - self.includePath.value()) - - -class SavingDocument(CheckGroup): - - configGroup = "preferences" - - def __init__(self, page): - super(SavingDocument, self).__init__(i18n("When saving documents"), page) - layout = QVBoxLayout(self) - layout.setSpacing(0) - - layout.addWidget( - self.addCheckBox(i18n("Remember cursor position, bookmarks, etc."), - "save metainfo", False)) - - # default directory - h = KHBox() - l = QLabel(i18n("Default directory:"), h) - self.folder = KUrlRequester(h) - l.setBuddy(self.folder) - tooltip = i18n("The default folder for your LilyPond documents (optional).") - l.setToolTip(tooltip) - self.folder.setToolTip(tooltip) - layout.addWidget(h) - self.folder.setMode(KFile.Mode( - KFile.Directory | KFile.ExistingOnly | KFile.LocalOnly)) - self.folder.button().setIcon(KIcon("document-open-folder")) - self.folder.textChanged.connect(page.changed) - - def defaults(self): - super(SavingDocument, self).defaults() - - def loadSettings(self): - super(SavingDocument, self).loadSettings() - self.folder.setPath( - config("preferences").readPathEntry("default directory", "")) - - def saveSettings(self): - super(SavingDocument, self).saveSettings() - config("preferences").writePathEntry("default directory", - self.folder.url().path()) - - -class LilyPondDocumentVersion(SettingsGroup): - - def __init__(self, page): - super(LilyPondDocumentVersion, self).__init__(i18n( - "LilyPond version number to use for new documents"), page) - - grid = QGridLayout(self) - grid.setSpacing(0) - - self.versionOptions = {} - self.customVersion = QLineEdit(textChanged=page.changed) - - def changed(dummy): - page.changed() - self.customVersion.setEnabled(self.versionOptions["custom"].isChecked()) - - for title, name in ( - (i18n("Use version number of installed LilyPond"), "lilypond"), - (i18n("Use version number of last convert-ly rule"), "convert-ly"), - (i18n("Use custom version number:"), "custom"), - ): - self.versionOptions[name] = QRadioButton(title, toggled=changed) - - self.customVersion.setToolTip(i18n( - "Enter a valid LilyPond version number, e.g. 2.12.0")) - self.versionOptions["custom"].clicked.connect(lambda: self.customVersion.setFocus()) - - grid.addWidget(self.versionOptions["lilypond"], 0, 0, 1, 2) - grid.addWidget(self.versionOptions["convert-ly"], 1, 0, 1, 2) - grid.addWidget(self.versionOptions["custom"], 2, 0, 1, 1) - grid.addWidget(self.customVersion, 2, 1, 1, 1) - - def defaults(self): - self.customVersion.clear() - self.versionOptions["lilypond"].setChecked(True) - - def loadSettings(self): - conf = config("preferences") - self.customVersion.setText(conf.readEntry("custom version", "")) - name = conf.readEntry("default version", "") - if name not in self.versionOptions: - name = "lilypond" - self.versionOptions[name].setChecked(True) - - def saveSettings(self): - conf = config("preferences") - conf.writeEntry("custom version", self.customVersion.text()) - for name, widget in self.versionOptions.items(): - if widget.isChecked(): - conf.writeEntry("default version", name) - break - - -class Warnings(CheckGroup): - - configGroup = "Notification Messages" - - def __init__(self, page): - super(Warnings, self).__init__(i18n("Warnings and Notifications"), page) - layout = QVBoxLayout(self) - layout.setSpacing(0) - - layout.addWidget( - self.addCheckBox(i18n("Warn when a document contains a conflicting point and click setting"), - "point_and_click", True)) - layout.addWidget( - self.addCheckBox(i18n("Warn when a document needs to be saved before LilyPond is run"), - "save_on_run", True)) - layout.addWidget( - self.addCheckBox(i18n("Warn when saving a session would overwrite another"), - "session_overwrite", True)) - - -class PointAndClick(SettingsGroup): - def __init__(self, page): - super(PointAndClick, self).__init__(i18n("Point and Click"), page) - - layout = QHBoxLayout(self) - self.button = KPushButton(i18n("Enable Point and Click")) - self.button.setFixedSize(self.button.sizeHint()) - l = QLabel(i18n( - "Click this button if Point and Click does not work. " - "See Shift+F1 (What's This) for more information.")) - l.setWordWrap(True) - l.setWhatsThis(i18n( - "On its first run, Frescobaldi tries to auto-configure Okular " - "(which provides the PDF preview) to call Frescobaldi when a " - "clickable object is clicked." - "\n\n" - "But this setting can get lost when you move Frescobaldi to a " - "different location or when other applications reconfigure Okular." - "\n\n" - "Click this button to configure Frescobaldi as 'custom editor' " - "inside Okular. This works best when all instances of Okular are " - "closed and the PDF preview has not yet been opened.")) - self.button.setWhatsThis(l.whatsThis()) - self.button.clicked.connect(self.installOkularPartRC) - layout.addWidget(self.button) - layout.addWidget(l) - - def installOkularPartRC(self): - import frescobaldi_app.install - frescobaldi_app.install.installOkularPartRC() - config("").writeEntry("configure okularpart", True) - KMessageBox.information(self, i18n( - "The Okular PDF preview has been reconfigured.\n\n" - "If you already opened the PDF preview, " - "restart Frescobaldi for the new settings to take effect.")) - - -class HelperApps(SettingsGroup): - def __init__(self, page): - super(HelperApps, self).__init__(i18n("Helper applications"), page) - - layout = QGridLayout(self) - self.commands = [] - for name, default, title, lineedit, tooltip in ( - ('pdf viewer', '', i18n("PDF Viewer:"), ExecArgsLineEdit, - i18n("PDF Viewer") + " " + - i18n("(leave empty for operating system default)")), - ('midi player', '', i18n("MIDI Player:"), ExecArgsLineEdit, - i18n("MIDI Player") + " " + - i18n("(leave empty for operating system default)")), - ): - label = QLabel(title) - widget = lineedit() - widget.textEdited.connect(page.changed) - label.setBuddy(widget) - label.setToolTip(tooltip) - widget.setToolTip(tooltip) - row = layout.rowCount() - layout.addWidget(label, row, 0) - layout.addWidget(widget, row, 1) - self.commands.append((widget, name, default)) - - def defaults(self): - for widget, name, default in self.commands: - widget.setText(default) - - def loadSettings(self): - conf = config("commands") - for widget, name, default in self.commands: - widget.setText(conf.readEntry(name, default)) - - def saveSettings(self): - conf = config("commands") - for widget, name, default in self.commands: - if widget.text() or not default: - conf.writeEntry(name, widget.text()) - - -class LilyDocBrowser(SettingsGroup): - def __init__(self, page): - super(LilyDocBrowser, self).__init__(i18n("LilyPond Documentation"), page) - - layout = QVBoxLayout(self) - layout.setSpacing(0) - - h = KHBox() - l = QLabel(i18n("Url:"), h) - self.lilydoc = KUrlRequester(h) - self.lilydoc.textChanged.connect(page.changed) - l.setBuddy(self.lilydoc) - tooltip = i18n( - "Url or path to the LilyPond documentation.") - l.setToolTip(tooltip) - self.lilydoc.setToolTip(tooltip) - self.lilydoc.fileDialog().setCaption(i18n("LilyPond Documentation")) - layout.addWidget(h) - self.lilydoc.setMode(KFile.Mode( - KFile.File | KFile.Directory | KFile.ExistingOnly)) - - def defaults(self): - self.lilydoc.setUrl(KUrl()) - - def loadSettings(self): - self.lilydoc.setUrl(KUrl( - config("preferences").readEntry("lilypond documentation", ""))) - - def saveSettings(self): - config("preferences").writeEntry( - "lilypond documentation", self.lilydoc.url().url()) - - def applySettings(self): - lilydoc = self.page.dialog.mainwin.tools.get('lilydoc') - if lilydoc: - lilydoc.newDocFinder() - - -class HyphenationSettings(SettingsGroup): - def __init__(self, page): - super(HyphenationSettings, self).__init__(i18n("Lyrics Hyphenation"), page) - - layout = QVBoxLayout(self) - layout.setSpacing(0) - - # hyphen paths - l = QLabel(i18n( - "Paths to search for hyphenation dictionaries of OpenOffice.org, " - "Scribus, KOffice, etc, one per line. " - "If you leave out the starting slash, the prefixes from the " - "KDEDIRS environment variable are prepended.")) - l.setWordWrap(True) - self.hyphenPaths = QTextEdit(textChanged=page.changed) - l.setBuddy(self.hyphenPaths) - layout.addWidget(l) - layout.addWidget(self.hyphenPaths) - - def setHyphenPaths(self, paths): - self.hyphenPaths.setPlainText('\n'.join(paths)) - - def defaults(self): - self.setHyphenPaths(frescobaldi_app.hyphen.defaultPaths) - - def loadSettings(self): - paths = config("hyphenation").readEntry("paths", frescobaldi_app.hyphen.defaultPaths) - self.setHyphenPaths(paths) - - def saveSettings(self): - paths = [p for p in self.hyphenPaths.toPlainText().splitlines() if p] - config("hyphenation").writeEntry("paths", paths) - - def applySettings(self): - # reload the table of hyphenation dictionaries - frescobaldi_app.hyphen.findDicts() - - -class RumorCommands(SettingsGroup): - def __init__(self, page): - super(RumorCommands, self).__init__(i18n( - "Commands used by the Rumor MIDI input module"), page) - - layout = QGridLayout(self) - - self.commands = [] - for name, default, title, lineedit, tooltip in ( - ('rumor', 'rumor', "Rumor:", ExecLineEdit, - i18n("Name or full path of the Rumor program.")), - ('aconnect', 'aconnect', "Aconnect:", ExecLineEdit, - i18n("Name or full path of the aconnect program (part of ALSA, " - "for MIDI input and playback using Rumor).")), - ('timidity', frescobaldi_app.rumor.default_timidity_command, - "Timidity:", ExecArgsLineEdit, - i18n("Full command to start Timidity (or any other program) " - "as an ALSA MIDI client.")), - ): - label = QLabel(title) - widget = lineedit() - widget.textEdited.connect(page.changed) - label.setBuddy(widget) - label.setToolTip(tooltip) - widget.setToolTip(tooltip) - row = layout.rowCount() - layout.addWidget(label, row, 0) - layout.addWidget(widget, row, 1) - self.commands.append((widget, name, default)) - - def defaults(self): - for widget, name, default in self.commands: - widget.setText(default) - - def loadSettings(self): - conf = config("commands") - for widget, name, default in self.commands: - widget.setText(conf.readEntry(name, default)) - - def saveSettings(self): - conf = config("commands") - for widget, name, default in self.commands: - if widget.text(): - conf.writeEntry(name, widget.text()) - - -class LilyPondVersions(SettingsGroup): - """Manage multiple versions of LilyPond.""" - def __init__(self, page): - super(LilyPondVersions, self).__init__(i18n("LilyPond versions to use:"), page) - layout = QVBoxLayout(self) - - self.instances = LilyPondInfoList(self) - self.instances.changed.connect(page.changed) - layout.addWidget(self.instances) - self.auto = QCheckBox(i18n( - "Enable automatic version selection " - "(choose LilyPond version from document)"), - clicked=page.changed) - layout.addWidget(self.auto) - - def defaults(self): - """ Reset ourselves to default state. """ - self.instances.clear() - info = self.instances.createItem() - self.instances.addItem(info) - self.instances.setCurrentItem(info) - self.auto.setChecked(False) - - def loadSettings(self): - self.instances.clear() - conf = config("lilypond") - self.auto.setChecked(conf.readEntry("automatic version", False)) - paths = conf.readEntry("paths", ["lilypond"]) - default = conf.readEntry("default", "lilypond") - # sort on version and move erratic entries to the end - paths.sort(key=lambda path: ly.version.LilyPondInstance(path).version() or (999,)) - for path in paths: - info = LilyPondInfoItem(path) - info.loadSettings(conf.group(path)) - info.default = path == default - self.instances.addItem(info) - if info.default: - self.instances.setCurrentItem(info) - - def saveSettings(self): - paths = [] - default = "" - conf = config("lilypond") - conf.deleteGroup() - for info in self.instances.items(): - paths.append(info.lilypond) - if info.default: - default = info.lilypond - info.saveSettings(conf.group(info.lilypond)) - if not paths: - paths = ["lilypond"] - if not default: - default = paths[0] - conf.writeEntry("paths", paths) - conf.writeEntry("default", default) - conf.writeEntry("automatic version", self.auto.isChecked()) - - -class TabBarSettings(CheckGroup): - """ - Settings for the document tab bar provided by kateshell. - """ - configGroup = "tab bar" - - def __init__(self, page): - super(TabBarSettings, self).__init__(i18n("Document Tabs"), page) - layout = QVBoxLayout(self) - layout.setSpacing(0) - - layout.addWidget( - self.addCheckBox(i18n("Close Button"), "close button", True)) - layout.addWidget( - self.addCheckBox(i18n("Large Tabs"), "expanding", False)) - layout.addWidget( - self.addCheckBox(i18n("Tabs can be moved"), "movable", True)) - - def applySettings(self): - self.page.dialog.mainwin.viewTabs.readSettings() - - -class LilyPondInfoList(ListEdit): - """ - Manages a list of LilyPondInfo instances. - """ - @cacheresult - def lilyPondInfoDialog(self): - return LilyPondInfoDialog(self) - - def createItem(self): - return LilyPondInfoItem() - - def openEditor(self, item): - dlg = self.lilyPondInfoDialog() - dlg.loadInfo(item) - if dlg.exec_(): - dlg.saveInfo(item) - # force reread of LilyPond version - ly.version.LilyPondInstance(item.lilypond, False) - return True - return False - - def itemChanged(self, item): - item.changed() - self.setCurrentItem(item) - - -class LilyPondInfo(object): - """ - Encapsulates information about a LilyPond instance. - - Attributes: - lilypond the lilypond command (default "lilypond") - commands a dict with the values of the commands, relative to the directory - of the lilypond command; the name is also the default value for - the command. - default whether to set this lilypond command as the default - auto whether to include this command in automatic version selection - """ - def __init__(self, lilypond="lilypond"): - self.lilypond = lilypond - self.commands = dict((name, name) for name, descr in self.commandNames()) - self.default = False - self.auto = True - - @staticmethod - def commandNames(): - """ - Returns a tuple with two-tuples (name, description) of commands - that can be configured as belonging to a LilyPond instance. - The name is also the default value for the command. - """ - return ( - ("convert-ly", i18n("Convert-ly:")), - ("lilypond-book", i18n("Lilypond-book:")), - ) - - def loadSettings(self, group): - for cmd, descr in self.commandNames(): - self.commands[cmd] = group.readEntry(cmd, cmd) - self.auto = group.readEntry("auto", True) - - def saveSettings(self, group): - for cmd, descr in self.commandNames(): - group.writeEntry(cmd, self.commands[cmd]) - group.writeEntry("auto", self.auto) - - -class LilyPondInfoItem(QListWidgetItem, LilyPondInfo): - def __init__(self, lilypond="lilypond"): - QListWidgetItem.__init__(self) - LilyPondInfo.__init__(self, lilypond) - - def changed(self): - """ Call this when this item needs to redisplay itself. """ - lp = self.lilypond - lilypond = ly.version.LilyPondInstance(lp) - if lilypond.version(): - lp += " ({0})".format(lilypond.version()) - self.setIcon(KIcon("run-lilypond")) - self.setToolTip( - '' - '' - '' - '
{0}: {1}
{2}: {3}
'.format( - i18n("Path"), lilypond.command() or "", - i18n("Version"), lilypond.version())) - else: - self.setIcon(KIcon("dialog-error")) - self.setToolTip(i18n("Can't determine LilyPond version.")) - if self.default: - lp += " [{0}]".format(i18n("default")) - # reset the default state for others - for c in range(self.listWidget().count()): - item = self.listWidget().item(c) - if item is not self and item.default: - item.default = False - item.changed() - self.setText(lp) - - -class LilyPondInfoDialog(KDialog): - """ - A dialog to edit attributes of a LilyPondInfo instance. - """ - def __init__(self, parent): - KDialog.__init__(self, parent) - self.setButtons(KDialog.ButtonCode( - KDialog.Ok | KDialog.Cancel | KDialog.Help | KDialog.User1)) - self.setCaption(i18n("LilyPond")) - self.setHelp("settings-paths-lilypond") - self.setButtonText(KDialog.User1, i18n("Download...")) - self.setButtonIcon(KDialog.User1, KIcon("download")) - self.setButtonToolTip(KDialog.User1, i18n( - "Download new binary LilyPond releases.")) - self.user1Clicked.connect(self.downloadLilyPond) - layout = QGridLayout(self.mainWidget()) - - l = QLabel(i18n("LilyPond Command:")) - self.lilypond = KUrlRequester() - l.setBuddy(self.lilypond) - self.lilypond.lineEdit().setToolTip(i18n( - "Name or full path of the LilyPond program.")) - self.lilypond.fileDialog().setCaption(i18n("LilyPond Command")) - layout.addWidget(l, 0, 0, 1, 2) - layout.addWidget(self.lilypond, 1, 0, 1, 2) - - self.commands = {} - row = 2 - for name, description in LilyPondInfo.commandNames(): - l = QLabel(description) - e = self.commands[name] = QLineEdit() - l.setBuddy(e) - layout.addWidget(l, row, 0, Qt.AlignRight) - layout.addWidget(e, row, 1) - row += 1 - self.default = QCheckBox(i18n("Set as default")) - layout.addWidget(self.default, row, 1) - self.auto = QCheckBox(i18n("Include in automatic version selection")) - layout.addWidget(self.auto, row+1, 1) - - def loadInfo(self, info): - """ Display the settings in the LilyPondInfo object in our dialog. """ - self.lilypond.setText(info.lilypond) - for name, value in info.commands.items(): - self.commands[name].setText(value) - self.default.setChecked(info.default) - self.auto.setChecked(info.auto) - - def saveInfo(self, info): - """ Write the settings in our dialog to the LilyPondInfo object. """ - info.lilypond = self.lilypond.text() - for name, widget in self.commands.items(): - info.commands[name] = widget.text() - info.default = self.default.isChecked() - info.auto = self.auto.isChecked() - - def downloadLilyPond(self): - from frescobaldi_app.download import LilyPondDownloadDialog - LilyPondDownloadDialog(self).exec_() - - -class SessionsStartup(SettingsGroup): - - def __init__(self, page): - super(SessionsStartup, self).__init__(i18n( - "Session to load if Frescobaldi is started without arguments"), page) - - grid = QGridLayout(self) - grid.setSpacing(0) - - self.sessionOptions = {} - self.customSession = QComboBox(currentIndexChanged=page.changed) - - def changed(dummy): - page.changed() - self.customSession.setEnabled(self.sessionOptions["custom"].isChecked()) - - for title, name in ( - (i18n("Start with no session"), "none"), - (i18n("Start with last used session"), "lastused"), - (i18n("Start with session:"), "custom"), - ): - self.sessionOptions[name] = QRadioButton(title, toggled=changed) - - self.customSession.setToolTip(i18n("Choose a session.")) - self.sessionOptions["custom"].clicked.connect( - lambda: self.customSession.setFocus()) - - grid.addWidget(self.sessionOptions["none"], 0, 0, 1, 2) - grid.addWidget(self.sessionOptions["lastused"], 1, 0, 1, 2) - grid.addWidget(self.sessionOptions["custom"], 2, 0, 1, 1) - grid.addWidget(self.customSession, 2, 1, 1, 1) - - self.customSession.addItem(i18n("Choose...")) - self.customSession.addItems(page.dialog.mainwin.sessionManager().names()) - - def defaults(self): - current = self.page.dialog.mainwin.sessionManager().current() - if current: - for index in range(1, self.customSession.count() + 1): - if self.customSession.itemText(index) == current: - self.customSession.setCurrentIndex(index) - self.sessionOptions["none"].setChecked(True) - - def loadSettings(self): - conf = config("preferences") - session = conf.readEntry("custom session", "") - if session: - for index in range(1, self.customSession.count() + 1): - if self.customSession.itemText(index) == session: - self.customSession.setCurrentIndex(index) - name = conf.readEntry("default session", "") - if name not in self.sessionOptions: - name = "none" - self.sessionOptions[name].setChecked(True) - - def saveSettings(self): - conf = config("preferences") - if self.customSession.currentIndex() > 0: - session = self.customSession.currentText() - else: - session = "none" - conf.writeEntry("custom session", session) - for name, widget in self.sessionOptions.items(): - if widget.isChecked(): - conf.writeEntry("default session", name) - break - - -def config(group): - return KGlobal.config().group(group) - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/version.py frescobaldi-2.0.0/python/frescobaldi_app/version.py --- frescobaldi-1.2.0/python/frescobaldi_app/version.py 2010-09-03 20:50:13.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/version.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" Functions to run convert-ly and insert the LilyPond version """ - -from subprocess import Popen, PIPE -import ly.tokenize, ly.version - -from PyKDE4.kdecore import i18n, KGlobal -from PyKDE4.kdeui import KMessageBox -from PyKDE4.ktexteditor import KTextEditor - -from frescobaldi_app.mainapp import lilyPondCommand, convertLyCommand - -def defaultVersion(): - """ - Returns the LilyPond version according to the user's preference: - the version of the currently installed LilyPond, the version of the last - rule in convert-ly, or a custom version. - """ - lilypond = ly.version.LilyPondInstance(lilyPondCommand()) - - prefs = config("preferences") - pver = prefs.readEntry("default version", "lilypond") - - version = '' - if pver == "custom": - version = ly.version.Version.fromString(prefs.readEntry("custom version", "")) - elif pver == "convert-ly": - version = lilypond.lastConvertLyRuleVersion() - return version or lilypond.version() - -def insertVersion(mainwin): - """ - Insert the current LilyPond version into the current document - if it does not already have a version command. - """ - doc = mainwin.currentDocument() - for token in ly.tokenize.LineColumnTokenizer().tokens(doc.text()): - if token == "\\version": - doc.view.setCursorPosition(KTextEditor.Cursor(token.line, token.column)) - KMessageBox.sorry(mainwin, - i18n("Your document has already a LilyPond version statement."), - i18n("Version already set")) - return - else: - lilypond = mainwin.sessionManager().lilyPondCommand() - version = (lilypond and ly.version.LilyPondInstance(lilypond).version() - or defaultVersion()) - if version: - doc.doc.insertLine(0, '\\version "{0}"'.format(version)) - else: - KMessageBox.sorry(mainwin, - i18n("Can't determine the version of LilyPond. " - "Please check your LilyPond installation.")) - -def convertLy(mainwin): - """ - Run the current document through convert-ly. - """ - doc = mainwin.currentDocument() - text = doc.text() - docVersion = ly.version.getVersion(text) - lilyVersion = ly.version.LilyPondInstance(lilyPondCommand()).version() - - if not docVersion: - KMessageBox.sorry(mainwin, i18n( - "Can't determine the LilyPond version of the current document." - " Please add a \\version statement with the correct version.")) - elif not lilyVersion: - KMessageBox.sorry(mainwin, i18n( - "Can't determine the version of LilyPond. " - "Please check your LilyPond installation.")) - elif docVersion >= lilyVersion: - KMessageBox.information(mainwin, i18n( - "This LilyPond document is already up-to-date.")) - else: - # Ok, let's run convert-ly. - # We add the from-version. Only in that case convert-ly wants to - # read from stdin. - try: - out, err = Popen( - (convertLyCommand(), "-f", str(docVersion), "-"), - stdin=PIPE, stdout=PIPE, stderr=PIPE - ).communicate(text.encode('utf8')) - if out: - doc.setText("{0}\n\n%{{\n{1}\n%}}\n".format(out.decode('utf8'), err.decode('utf8'))) - KMessageBox.information(mainwin, i18n( - "The document has been processed with convert-ly. You'll find " - "the messages of convert-ly in a comment block at the end. " - "You still may have to edit some parts manually.")) - else: - msg = "

" + err.decode('utf8').replace('\n', '
') - KMessageBox.information(mainwin, i18n( - "The document has been processed with convert-ly, but " - "remained unchanged. This is the message given by " - "convert-ly: %1", msg)) - except OSError as e: - msg = unicode(e) - KMessageBox.error(mainwin, i18n("Could not start convert-ly: %1", msg)) - - -def config(group): - return KGlobal.config().group(group) - diff -Nru frescobaldi-1.2.0/python/frescobaldi_app/widgets.py frescobaldi-2.0.0/python/frescobaldi_app/widgets.py --- frescobaldi-1.2.0/python/frescobaldi_app/widgets.py 2010-09-05 20:57:05.000000000 +0000 +++ frescobaldi-2.0.0/python/frescobaldi_app/widgets.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,236 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Some special widgets -""" - -import os -from time import time - -from PyQt4.QtCore import QProcess, Qt -from PyQt4.QtGui import QComboBox, QPushButton, QSlider, QSpinBox -from PyKDE4.kdecore import i18n, KProcess - -from frescobaldi_app.mainapp import SymbolManager - - -class TapButton(QPushButton): - """ - A button the user can tap a tempo on. - - The callback is a function that is called - with the number of beats per minute. - """ - def __init__(self, parent, callback): - QPushButton.__init__(self, i18n("Tap"), parent) - self.tapTime = 0.0 - def tap(): - self.tapTime, t = time(), self.tapTime - callback(int(60.0 / (self.tapTime - t))) - self.pressed.connect(tap) - self.setToolTip(i18n("Click this button a few times to set the tempo.")) - - -class ProcessButtonBase(object): - """ - to be subclassed together with a QPushButton or a QToolButton - A button that starts a process when clicked, and stops it when - clicked again. - """ - def __init__(self, *args): - super(ProcessButtonBase, self).__init__(*args) - self.setCheckable(True) - self._p = KProcess() - self.clicked.connect(self.slotClicked) - - def slotClicked(self): - if self.isRunning(): - self.setChecked(True) # keep pressed down - self.stop() - else: - self.start() - - def isRunning(self): - return self._p.state() != QProcess.NotRunning - - def start(self): - """ Starts the process, calling the initializeProcess method first.""" - p = KProcess() # create a new one (FIXME: really needed?) - self._p = p - self.destroyed.connect(p.terminate) - p.finished.connect(self.slotFinished) - p.error.connect(self.slotError) - p.started.connect(self.slotStarted) - p.readyRead.connect(self.slotReadyRead) - p.readyReadStandardError.connect(self.slotReadyReadStandardError) - p.readyReadStandardOutput.connect(self.slotReadyReadStandardOutput) - self.initializeProcess(p) - p.start() - - def slotFinished(self, exitCode, exitStatus): - self.setChecked(False) - self.finished(exitCode, exitStatus) - - def slotError(self, errorCode): - self.setChecked(False) - self.error(errorCode) - - def slotStarted(self): - self.setChecked(True) - self.started() - - def slotReadyRead(self): - self.readOutput(self._p.readAll()) - - def slotReadyReadStandardError(self): - self.readStderr(self._p.readAllStandardError()) - - def slotReadyReadStandardOutput(self): - self.readStdout(self._p.readAllStandardOutput()) - - def stop(self): - """ Abort the running process """ - self._p.terminate() - - def quit(self): - """ - Really stop. After return of this function, the process - has been stopped neatly. - """ - if self.isRunning(): - self.stop() - if not self._p.waitForFinished(3000): - self._p.kill() - - def process(self): - """ Return the current KProcess instance. """ - return self._p - - def started(self): - """ Called when the process really has been started. """ - pass - - def finished(self, exitCode, exitStatus): - """ Called when the process has finished. """ - pass - - def error(self, errorCode): - """ Called when there was an error. """ - pass - - def writeInput(self, text): - """ Call to write input to the running process """ - self._p.write(text) - - def readOutput(self, qbytearray): - """ Called with the read output if available. """ - pass - - def readStderr(self, qbytearray): - """ Called with the read standard error if available. """ - pass - - def readStdout(self, qbytearray): - """ Called with the read standard output if available. """ - pass - - def initializeProcess(self, p): - """ - This method should be reimplemented to initialize the - process the way you want it (e.g. set command and args, working - directory, channels to open, etc. - """ - p.setProgram(("kdialog", "--sorry", "Not Implemented")) - - -class TempoControl(object): - """ - A combination of a spinbox, slider, and tap button to set the tempo. - You must add them to a layout - """ - minBPM = 30 - maxBPM = 400 - - def __init__(self): - self.spinbox = QSpinBox() - self.spinbox.setRange(self.minBPM, self.maxBPM) - self.spinbox.setToolTip(i18n("The tempo in beats per minute.")) - - self.slider = QSlider(Qt.Horizontal) - self.slider.setRange(self.minBPM, self.maxBPM) - - def tap(bpm): - """ Tap the tempo """ - if self.minBPM <= bpm <= self.maxBPM: - self.setTempo(bpm) - self.tapButton = TapButton(None, tap) - - # setup signals - self.slider.valueChanged.connect(self.spinbox.setValue) - self.spinbox.valueChanged.connect(self.slider.setValue) - - self.slider.setMinimumWidth(200) - self.setTempo(100) # default - - def tempo(self): - return self.spinbox.value() - - def setTempo(self, value): - self.spinbox.setValue(value) - - -class ClefSelector(SymbolManager, QComboBox): - """ - A ComboBox to select a clef. - - Set resp. noclef and/or tab to True for those allowing the user - to choose those clef/staff types. - """ - def __init__(self, parent=None, noclef=False, tab=False): - SymbolManager.__init__(self) - QComboBox.__init__(self, parent) - self.setDefaultSymbolSize(48) - self.setSymbolSize(self, 48) - self.clefs = [ - ('treble', i18n("Treble")), - ('alto', i18n("Alto")), - ('tenor', i18n("Tenor")), - ('treble_8', i18n("Treble 8")), - ('bass', i18n("Bass")), - ('percussion', i18n("Percussion")), - ] - if tab: - self.clefs.append(('tab', i18n("Tab clef"))) - if noclef: - self.clefs.insert(0, ('', i18n("No Clef"))) - self.addItems([title for name, title in self.clefs]) - for index, (name, title) in enumerate(self.clefs): - self.addItemSymbol(self, index, 'clef_' + (name or 'none')) - - def clef(self): - """ - Returns the LilyPond name of the selected clef, or the empty string - for no clef. - """ - return self.clefs[self.currentIndex()][0] - - diff -Nru frescobaldi-1.2.0/python/hyphenator.py frescobaldi-2.0.0/python/hyphenator.py --- frescobaldi-1.2.0/python/hyphenator.py 2010-01-23 21:21:15.000000000 +0000 +++ frescobaldi-2.0.0/python/hyphenator.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,263 +0,0 @@ -""" - -This is a Pure Python module to hyphenate text. - -It is inspired by Ruby's Text::Hyphen, but currently reads standard *.dic files, -that must be installed separately. - -In the future it's maybe nice if dictionaries could be distributed together with -this module, in a slightly prepared form, like in Ruby's Text::Hyphen. - -Wilbert Berendsen, March 2008 -info@wilbertberendsen.nl - -License: LGPL. More info: http://python-hyphenator.googlecode.com/ - -""" -from __future__ import unicode_literals - -import re - - -__all__ = ("Hyphenator",) - -# cache of per-file HyphenationDictionary objects -_hdcache = {} - -# precompile some regular expressions -parse = re.compile(r'(\d?)(\D?)').findall - - -# Match ^^xx where xx is a two-digit hexadecimal value -_hex_re = re.compile(r'\^{2}([0-9a-f]{2})') - -# replace the matched hex string with the corresponding unicode character -_hex_repl = lambda matchObj: unichr(int(matchObj.group(1), 16)) - -def replace_hex(text): - """Replaces ^^xx (where xx is a two-digit hexadecimal value) occurrences - by the corresponding unicode character. - - """ - return _hex_re.sub(_hex_repl, text) - - -class ParsedAlternative(object): - """Parse nonstandard hyphen pattern alternative. - - when called with an odd value, the instance returns an integer with data - attribute (DataInt) about the current position in the pattern. - - """ - def __init__(self, pat, alt): - alt = alt.split(',') - self.change = alt[0] - if len(alt) > 2: - self.index = int(alt[1]) - self.cut = int(alt[2]) + 1 - else: - self.index = 1 - self.cut = len(re.sub(r'[\d\.]', '', pat)) + 1 - if pat.startswith('.'): - self.index += 1 - - def __call__(self, val): - self.index -= 1 - val = int(val) - if val & 1: - return DataInt(val, (self.change, self.index, self.cut)) - else: - return val - - -class DataInt(int): - """An integer with a data attribute. - - Just an int some other data can be stuck to in a data attribute. - Instantiate with ref=other to use the data from the other DataInt. - - """ - def __new__(cls, value, data=None, ref=None): - obj = int.__new__(cls, value) - if ref and type(ref) is DataInt: - obj.data = ref.data - else: - obj.data = data - return obj - - -class HyphenationDictionary(object): - """Reads a hyph_*.dic file and stores the hyphenation patterns. - - Parameters: - filename : filename of hyph_*.dic pattern file to read - - """ - def __init__(self, filename): - self.patterns = {} - with open(filename) as f: - charset = f.readline().strip() - if charset.startswith('charset '): - charset = charset[8:].strip() - - for pat in f: - pat = pat.decode(charset).strip() - if not pat or pat[0] == '%': - continue - # replace ^^hh with the real character - pat = replace_hex(pat) - # read nonstandard hyphen alternatives - if '/' in pat: - pat, alt = pat.split('/', 1) - factory = ParsedAlternative(pat, alt) - else: - factory = int - tag, values = zip(*[(s, factory(i or "0")) - for i, s in parse(pat)]) - # if only zeros, skip this pattern - if any(values): - # strip zeros and store start offset. - start, end = 0, len(values) - while not values[start]: - start += 1 - while not values[end-1]: - end -= 1 - self.patterns[''.join(tag)] = start, values[start:end] - self.cache = {} - self.maxlen = max(map(len, self.patterns)) - - def positions(self, word): - """Returns a list of positions where the word can be hyphenated. - - E.g. for the dutch word 'lettergrepen' this method returns - the list [3, 6, 9]. - - Each position is a 'data int' (DataInt) with a data attribute. - If the data attribute is not None, it contains a tuple with - information about nonstandard hyphenation at that point: - (change, index, cut) - - change: is a string like 'ff=f', that describes how hyphenation - should take place. - index: where to substitute the change, counting from the current - point - cut: how many characters to remove while substituting the nonstandard - hyphenation - - """ - word = word.lower() - try: - return self.cache[word] - except KeyError: - pass - prepWord = '.' + word + '.' - res = [0] * (len(prepWord) + 1) - for i in range(len(prepWord) - 1): - for j in range(i + 1, min(i + self.maxlen, len(prepWord)) + 1): - p = self.patterns.get(prepWord[i:j]) - if p: - offset, values = p - s = slice(i + offset, i + offset + len(values)) - res[s] = map(max, values, res[s]) - - positions = [DataInt(i - 1, ref=r) for i, r in enumerate(res) if r % 2] - self.cache[word] = positions - return positions - - -class Hyphenator(object): - """Reads a hyph_*.dic file and stores the hyphenation patterns. - - Provides methods to hyphenate strings in various ways. - Parameters: - -filename : filename of hyph_*.dic to read - -left: make the first syllabe not shorter than this - -right: make the last syllabe not shorter than this - -cache: if true (default), use a cached copy of the dic file, if possible - - left and right may also later be changed: - h = Hyphenator(file) - h.left = 1 - - """ - def __init__(self, filename, left=2, right=2, cache=True): - self.left = left - self.right = right - if not cache or filename not in _hdcache: - _hdcache[filename] = HyphenationDictionary(filename) - self.hd = _hdcache[filename] - - def positions(self, word): - """Returns a list of positions where the word can be hyphenated. - - See also HyphenationDictionary.positions. The points that are too far to - the left or right are removed. - - """ - right = len(word) - self.right - return [i for i in self.hd.positions(word) if self.left <= i <= right] - - def iterate(self, word): - """Iterate over all hyphenation possibilities, the longest first.""" - if isinstance(word, str): - word = word.decode('latin1') - for p in reversed(self.positions(word)): - if p.data: - # get the nonstandard hyphenation data - change, index, cut = p.data - if word.isupper(): - change = change.upper() - c1, c2 = change.split('=') - yield word[:p+index] + c1, c2 + word[p+index+cut:] - else: - yield word[:p], word[p:] - - def wrap(self, word, width, hyphen='-'): - """Returns the longest possible first part and the last part of the - hyphenated word. - - The first part has the hyphen already attached. Returns None, if there - is no hyphenation point before width, or if the word could not be - hyphenated. - - """ - width -= len(hyphen) - for w1, w2 in self.iterate(word): - if len(w1) <= width: - return w1 + hyphen, w2 - - def inserted(self, word, hyphen='-'): - """Returns the word as a string with all the possible hyphens inserted. - - E.g. for the dutch word 'lettergrepen' this method returns the string - 'let-ter-gre-pen'. The hyphen string to use can be given as the second - parameter, that defaults to '-'. - - """ - if isinstance(word, str): - word = word.decode('latin1') - l = list(word) - for p in reversed(self.positions(word)): - if p.data: - # get the nonstandard hyphenation data - change, index, cut = p.data - if word.isupper(): - change = change.upper() - l[p + index : p + index + cut] = change.replace('=', hyphen) - else: - l.insert(p, hyphen) - return ''.join(l) - - __call__ = iterate - - -if __name__ == "__main__": - import sys - dict_file = sys.argv[1] - word = sys.argv[2].decode('latin1') - - h = Hyphenator(dict_file, left=1, right=1) - - for i in h(word): - print i - diff -Nru frescobaldi-1.2.0/python/kateshell/app.py frescobaldi-2.0.0/python/kateshell/app.py --- frescobaldi-1.2.0/python/kateshell/app.py 2010-09-12 18:17:07.000000000 +0000 +++ frescobaldi-2.0.0/python/kateshell/app.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1223 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -import os, re, sip, sys, time, weakref -from contextlib import contextmanager -from functools import wraps - -import dbus, dbus.service, dbus.mainloop.qt -from dbus.service import method, signal - -from signals import Signal - -from PyQt4.QtCore import QObject, QThread, Qt, SIGNAL -from PyQt4.QtGui import QCursor -from PyKDE4.kdecore import i18n, KConfig, KGlobal, KUrl -from PyKDE4.kdeui import KApplication, KMessageBox, KStandardGuiItem -from PyKDE4.kio import KEncodingFileDialog -from PyKDE4.ktexteditor import KTextEditor - -from kateshell import DBUS_IFACE_PREFIX - - -# Make the Qt mainloop the default one -dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True) - - -# Easily get our global config -def config(group="kateshell"): - return KGlobal.config().group(group) - - -def cacheresult(func): - """Method decorator that caches the result of method calls. - - The method is invoked and the return value cached in a dictionary with - the arguments tuple as key. - - When the method is invoked and the arguments tuple is available in the - cache, the cached value is returned instead of invoking the method again. - The decorator does not keep references to the arguments and the object the - method belongs to. - - """ - cache = weakref.WeakKeyDictionary() - @wraps(func) - def wrapper(obj, *args): - h = hash(args) - try: - return cache[obj][h] - except KeyError: - result = cache.setdefault(obj, {})[h] = func(obj, *args) - return result - return wrapper - - -def naturalsort(text): - """Returns a key for the list.sort() method. - - Intended to sort strings in a human way, for e.g. version numbers. - - """ - return tuple(int(s) if s.isdigit() else s for s in re.split(r'(\d+)', text)) - - -@contextmanager -def blockSignals(widget): - """Creates a context for a widget to perform code with blocked signals. - - Usage: - - with blockSignals(widget) as w: - ... - - """ - block = widget.blockSignals(True) - try: - yield widget - finally: - widget.blockSignals(block) - - -class DBusItem(dbus.service.Object): - """An exported DBus item for our application. - - Uses the class name as the DBus object name. - Intended to be subclassed. - - """ - def __init__(self, serviceName, path=None): - self.serviceName = serviceName - if path is None: - path = '/' + self.__class__.__name__ - bus = dbus.SessionBus() - bus_name = dbus.service.BusName(self.serviceName, bus) - dbus.service.Object.__init__(self, bus_name, bytes(path)) - - -class MainApp(DBusItem): - """Our main application instance. - - Also exposes some methods to DBus. Instantiated only once. - - Emits four signals to Python others can connect to: - activeChanged(Document) - documentCreated(Document) - documentMaterialized(Document) - documentClosed(Document) - - """ - activeChanged = Signal() - documentCreated = Signal() - documentMaterialized = Signal() - documentClosed = Signal() - - iface = DBUS_IFACE_PREFIX + "MainApp" - defaultEncoding = 'UTF-8' - defaultMode = None - fileTypes = [] - - def __init__(self, servicePrefix): - # We manage our own documents. - self.documents = [] - self.history = [] # latest shown documents - - # KApplication needs to be instantiated before any D-Bus stuff - self.kapp = KApplication() - - # Here we can setup config() stuff before MainWindow and its tools - # are created. - config = KGlobal.config().group("") # root group - self.setupConfiguration(config) - config.sync() - - # DBus init - serviceName = "{0}{1}".format(servicePrefix, os.getpid()) - DBusItem.__init__(self, serviceName, '/MainApp') - - # We support only one MainWindow. - self.mainwin = self.createMainWindow() - self.kapp.setTopWidget(self.mainwin) - - # Get our beloved editor :-) - self.editor = KTextEditor.EditorChooser.editor() - self.editor.readConfig() - - # restore session etc. - self._sessionStartedFromCommandLine = False - - def setupConfiguration(self, config): - """Opportunity to manipulate the root group of the global KConfig. - - This method is called after KApplication is created but before - DBus init and Mainwindow creation. - - You can implement this method in a subclass; the default implementation - does nothing. - - """ - pass - - @cacheresult - def stateManager(self): - return StateManager(self) - - def defaultDirectory(self): - return '' - - def createMainWindow(self): - import kateshell.mainwindow - return kateshell.mainwindow.MainWindow(self) - - def createDocument(self, url="", encoding=None): - return Document(self, url, encoding) - - def findDocument(self, url): - """ Return the opened document or False. """ - if not isinstance(url, KUrl): - url = KUrl(url) - # we use string comparison, because sometimes percent encoding - # issues make the same QUrls look different, esp when dragged - # from KMail... - url = url.toString() - for d in self.documents: - if d.url().toString() == url: - return d - return False - - @method(iface, in_signature='ss', out_signature='o') - def openUrl(self, url, encoding=None): - if not isinstance(url, KUrl): - url = KUrl(url) - # If no encoding given, set default or check if we can remember it - if not encoding: - encoding = self.defaultEncoding - if self.keepMetaInfo() and not url.isEmpty(): - group = self.stateManager().groupForUrl(url) - if group: - encoding = group.readEntry("encoding", "") - # If there is only one document open and it is empty, nameless and - # unmodified, use it. - if (not url.isEmpty() - and len(self.documents) == 1 - and not self.documents[0].isModified() - and self.documents[0].url().isEmpty()): - d = self.documents[0] - d.openUrl(url, encoding) - else: - d = (not url.isEmpty() and self.findDocument(url) - or self.createDocument(url, encoding)) - return d - - @method(iface, in_signature='', out_signature='o') - def new(self): - return self.createDocument() - - def run(self, sender=None): - """ - Last minute setup and enter the KDE event loop. - At the very last, instantiates one empty doc if nothing loaded yet. - """ - if self.kapp.isSessionRestored(): - self.mainwin.restore(1, False) - elif (len(self.documents) == 0 - and not self._sessionStartedFromCommandLine): - # restore named session? - action = config("preferences").readEntry("default session", "") - if action == "lastused": - self.mainwin.sessionManager().restoreLastSession() - elif action == "custom": - session = config("preferences").readEntry("custom session", "") - if session in self.mainwin.sessionManager().names(): - self.mainwin.sessionManager().switch(session) - if len(self.documents) == 0: - self.createDocument().setActive() - sys.excepthook = self.handleException - self.mainwin.show() - self.kapp.exec_() - KGlobal.config().sync() - - @method(iface, in_signature='s', out_signature='b') - def isOpen(self, url): - """Returns true if the specified URL is opened.""" - if not isinstance(url, KUrl): - url = KUrl(url) - return bool(self.findDocument(url)) - - @method(iface, in_signature='', out_signature='o') - def activeDocument(self): - """Returns the currently active document.""" - return self.history[-1] - - @method(iface, in_signature='', out_signature='') - def back(self): - """Sets the previous document active.""" - i = self.documents.index(self.activeDocument()) - 1 - self.documents[i].setActive() - - @method(iface, in_signature='', out_signature='') - def forward(self): - """Sets the next document active.""" - i = self.documents.index(self.activeDocument()) + 1 - i %= len(self.documents) - self.documents[i].setActive() - - @method(iface, in_signature='', out_signature='b') - def quit(self): - """Quits the application. Returns True if succeeded.""" - return self.mainwin.close() - - @method(iface, in_signature='', out_signature='') - def show(self): - """Raises our mainwindow if minimized.""" - self.mainwin.setWindowState( - self.mainwin.windowState() & ~Qt.WindowMinimized | Qt.WindowActive) - - @method(iface, in_signature='s', out_signature='b') - def startSession(self, session): - """Switch to the given session. - - Use "none" to switch to the empty session. - If the session does not exist, it is created on the fly. - Returns True if the switch succeeded. - - """ - self._sessionStartedFromCommandLine = True - return self.mainwin.sessionManager().switch(session) - - @method(iface, in_signature='', out_signature='s') - def currentSession(self): - """Returns the name of the current session. - - Returns "none" if there is no active session. - - """ - return self.mainwin.sessionManager().current() or "none" - - def addDocument(self, doc): - """Internal. Called when a new Document is created.""" - self.documents.append(doc) - self.history.append(doc) - self.documentCreated(doc) - - def removeDocument(self, doc): - """Internal. Called when a Document is closed.""" - if doc in self.documents: - # Was this the active document? Then activate previous active doc. - if doc is self.activeDocument() and len(self.documents) > 1: - self.history[-2].setActive() - self.documents.remove(doc) - self.history.remove(doc) - # Create empty document if last closed - self.documents or self.createDocument().setActive() - - @signal(iface, signature='o') - def activeDocumentChanged(self, doc): - self.history.remove(doc) - self.history.append(doc) - self.activeChanged(doc) # emit our signal - - @method(iface, in_signature='', out_signature='s') - def programName(self): - """Returns the name of the application.""" - return KGlobal.mainComponent().aboutData().programName() - - @method(iface, in_signature='', out_signature='s') - def version(self): - """Returns the version of our application.""" - return KGlobal.mainComponent().aboutData().version() - - def handleException(self, exctype, excvalue, exctb): - """Called when a Python exception goes unhandled. - - Catches KeyboardInterrupt and shows a dialog for other errors. - Also writes the traceback to stderr. - - """ - from traceback import format_exception - sys.stderr.write(''.join(format_exception(exctype, excvalue, exctb))) - - if exctype != KeyboardInterrupt: - from kateshell.exception import ExceptionDialog - ExceptionDialog(self, exctype, excvalue, exctb) - - def keepMetaInfo(self): - """Returns whether meta information about documents should be kept. - - For example the state of the view, cursor position, encoding etc. - The default implementation returns False, reimplement this to return - e.g. a user's configured setting. - - """ - return False - - @contextmanager - def busyCursor(self, cursor=None): - """Performs code with a busy cursor set for the application. - - The default cursor to use is the Qt.WaitCursor. Usage: - - with app.busyCursor(): - ... - - """ - if cursor is None: - cursor = QCursor(Qt.WaitCursor) - KApplication.setOverrideCursor(cursor) - try: - yield - finally: - KApplication.restoreOverrideCursor() - - def debug(self, message): - """Write message to stderr.""" - message = "{0}: {1}\n".format( - self.programName(), "\n ".join(message.splitlines())) - sys.stderr.write(message) - - -class Document(DBusItem): - """A loaded text document. - - We support lazy document instantiation: only when a view is requested, - we create the KTextEditor document and view. - - We emit these signals: - urlChanged(doc) - captionChanged(doc) - statusChanged(doc) - selectionChanged(doc) - saved(doc, bool saveAs) - closed(doc) - - """ - - __instance_counter = 0 - iface = DBUS_IFACE_PREFIX + "Document" - - urlChanged = Signal() - captionChanged = Signal() - statusChanged = Signal() - selectionChanged = Signal() - saved = Signal() - closed = Signal() - - # In this dict names and default values can be set for properties that are - # saved by the state manager (if the user wants to keep state info) - # This dict must be set in the class. The instance copies the values in - # the metainfo dict. This dict can be manipulated, but only the entries with - # keys that also appear in this metainfoDefaults dict are saved. The values - # must be usable in KConfigGroup.readEntry and .writeEntry calls. - metainfoDefaults = {} - - def __init__(self, app, url="", encoding=None): - Document.__instance_counter += 1 - path = "/Document/{0}".format(Document.__instance_counter) - DBusItem.__init__(self, app.serviceName, path) - - if not isinstance(url, KUrl): - url = KUrl(url) - - self.app = app - self.metainfo = self.metainfoDefaults.copy() - self.doc = None # this is going to hold the KTextEditor doc - self.view = None # this is going to hold the KTextEditor view - self._url = url # as long as no doc is really loaded, this - # is the url - self._edited = False # has this document been modified and saved? - self._cursor = None # line, col. None = not set. - self._encoding = encoding or self.app.defaultEncoding # encoding [UTF-8] - self._cursorTranslator = None # for translating cursor positions - - self.app.addDocument(self) - - def materialize(self): - """Really load the document, create doc and view etc.""" - if self.doc: - return - self.doc = self.app.editor.createDocument(self.app.mainwin) - self.doc.setEncoding(self._encoding) - self.view = self.doc.createView(self.app.mainwin) - if not self._url.isEmpty(): - self.doc.openUrl(self._url) - elif self.app.defaultMode: - self.doc.setMode(self.app.defaultMode) - - # init the cursor translations (so that point and click keeps working - # while the document changes) - self.resetCursorTranslations() - - if self._cursor is not None: - self.setCursorPosition(*self._cursor) - - QObject.connect(self.doc, SIGNAL("documentSavedOrUploaded(KTextEditor::Document*, bool)"), self.slotDocumentSavedOrUploaded) - QObject.connect(self.doc, SIGNAL("documentUrlChanged(KTextEditor::Document*)"), self.slotDocumentUrlChanged) - QObject.connect(self.doc, SIGNAL("completed()"), self.slotCompleted) - QObject.connect(self.doc, SIGNAL("modifiedChanged(KTextEditor::Document*)"), self.slotModifiedChanged) - QObject.connect(self.view, SIGNAL("cursorPositionChanged(KTextEditor::View*, const KTextEditor::Cursor&)"), self.slotViewStatusChanged) - QObject.connect(self.view, SIGNAL("viewModeChanged(KTextEditor::View*)"), self.slotViewStatusChanged) - QObject.connect(self.view, SIGNAL("informationMessage(KTextEditor::View*)"), self.slotViewStatusChanged) - QObject.connect(self.view, SIGNAL("selectionChanged(KTextEditor::View*)"), self.slotSelectionChanged) - - # Allow for dropping urls on the view - QObject.connect(self.view, SIGNAL("dropEventPass(QDropEvent *)"), self.app.mainwin.dropEvent) - - # delete some actions from the view before plugging in GUI - # trick found in kateviewmanager.cpp - for name in "file_save", "file_save_as": - action = self.view.actionCollection().action(name) - if action: - sip.delete(action) - - # set default context menu - self.view.setContextMenu(self.contextMenu()) - # read state information (view settings etc.) - if self.app.keepMetaInfo(): - self.app.stateManager().loadState(self) - # Let the world know ... - self.app.documentMaterialized(self) - self.viewCreated() - - # some slots, to avoid lambdas for Qt signals, not to be inherited - def slotDocumentSavedOrUploaded(self, doc, saveAs): - self.saved(self, saveAs) - - def slotDocumentUrlChanged(self): - self.urlChanged(self) - self.captionChanged(self) - - def slotCompleted(self): - self.captionChanged(self) - - def slotModifiedChanged(self): - if not self.isModified(): - self._edited = True - self.captionChanged(self) - - def slotViewStatusChanged(self): - self.statusChanged(self) - - def slotSelectionChanged(self): - self.selectionChanged(self) - - def contextMenu(self): - """Override this to set your own context menu.""" - return self.view.defaultContextMenu() - - def viewCreated(self): - """Called when the view for this document is created. - - Override this in subclasses to do things after the KTextEditor.View - for this document has materialized. - """ - pass - - def openUrl(self, url, encoding): - """Internal. Opens a different url and re-init some stuff. - - (Only call this on a Document that has already materialized.) - - """ - self.materialize() - self.setEncoding(encoding) - if not self.doc.openUrl(url): - self.slotDocumentUrlChanged() # otherwise signal is not emitted - if self.app.keepMetaInfo(): - self.app.stateManager().loadState(self) - self.resetCursorTranslations() - - @method(iface, in_signature='', out_signature='b') - def save(self): - """Saves the document, asking for a file name if necessary. - - Returns True if saving succeeded, otherwise False. - - """ - if self.doc: - if self.url().isEmpty(): - return self.saveAs() - else: - return self.doc.save() - return True - - @method(iface, in_signature='', out_signature='b') - def saveAs(self): - """Saves the document, always asking for a file name. - - Returns True if saving succeeded, otherwise False. - - """ - if self.doc: - dlg = KEncodingFileDialog( - self.app.mainwin.sessionManager().basedir() or - self.app.defaultDirectory(), - self.doc.encoding(), - '\n'.join(self.app.fileTypes + ["*|" + i18n("All Files")]), - i18n("Save File"), - KEncodingFileDialog.Saving, - self.app.mainwin) - dlg.setSelection(self.url().url()) - dlg.setConfirmOverwrite(True) - if not dlg.exec_(): - return False # Cancelled - self.doc.setEncoding(dlg.selectedEncoding()) - return self.doc.saveAs(dlg.selectedUrl()) - return True - - @method(iface, in_signature='s', out_signature='') - def setEncoding(self, encoding): - """Sets the encoding for this document.""" - if self.doc: - self.doc.setEncoding(encoding) - else: - self._encoding = encoding - - @method(iface, in_signature='', out_signature='s') - def encoding(self): - """Returns the encoding for this document.""" - if self.doc: - return self.doc.encoding() - else: - return self._encoding - - def url(self): - """Returns the KUrl of this document.""" - if self.doc: - return self.doc.url() - else: - return self._url - - @method(iface, in_signature='', out_signature='s') - def prettyUrl(self): - """Returns a printable, pretty URL for this document.""" - return self.url().pathOrUrl() - - @method(iface, in_signature='', out_signature='s') - def localPath(self): - """Returns the local file path for the document.""" - return self.url().toLocalFile() or "" - - @method(iface, in_signature='', out_signature='s') - def documentName(self): - """Returns a printable name for this document. - - Normally this is the filename or "Untitled". - - """ - if self.doc: - return self.doc.documentName() or "" - else: - return self.url().fileName() or i18n("Untitled") - - def documentIcon(self): - """Returns None or a suitable icon name for this document""" - if self.isModified(): - return "document-save" - elif self.isEdited(): - return "dialog-ok-apply" - elif self.doc: - return "dialog-ok" - - @method(iface, in_signature='', out_signature='b') - def isModified(self): - """Returns true if the document has unsaved changes.""" - return self.doc and self.doc.isModified() - - @method(iface, in_signature='', out_signature='b') - def isEdited(self): - """Returns true if the document has already been modified and saved.""" - return self._edited - - @method(iface, in_signature='', out_signature='b') - def isEmpty(self): - """Returns True if the document is empty. - - Returns False if the document has not materialized yet. - - """ - if self.doc: - return self.doc.isEmpty() - return False # if not loaded, because we don't know it yet. - - @method(iface, in_signature='', out_signature='b') - def isActive(self): - """Returns True if this document is the active one.""" - return bool(self.doc) and self.app.activeDocument() is self - - @method(iface, in_signature='', out_signature='') - def setActive(self): - """Makes the document the active (shown) document.""" - if not self.isActive(): - self.materialize() - self.app.activeDocumentChanged(self) - self.view.setFocus() - self.view.activateWindow() - - @method(iface, in_signature='iib', out_signature='') - def setCursorPosition(self, line, column, translate=True): - """Sets the cursor in this document. - - Lines start at 1, columns at 0. - A TAB character counts as (max, depending on column) 8 characters. - - If translate is True, the cursor position is translated from the state - saved by the current CursorTranslator to the current state of the - document. This way, external references to positions in the document - remain working, even if the document is edited, until the - CursorTranslator is updated (which typically happens if a new build is - started). - - """ - if self.view: - line -= 1 # katepart numbers lines from zero - if translate: - cursor = self._cursorTranslator.cursor(line, column) - else: - column = resolvetabs_text(column, self.line(line)) - cursor = KTextEditor.Cursor(line, column) - self.view.setCursorPosition(cursor) - else: - self._cursor = (line, column) - - @method(iface, in_signature='', out_signature='s') - def text(self): - """Returns the full text of the document.""" - return self.doc and self.doc.text() or "" - - @method(iface, in_signature='s', out_signature='b') - def setText(self, text): - """Set the given text as new document content.""" - self.materialize() - if self.doc.setText(text): - self.resetCursorTranslations() - return True - return False - - @method(iface, in_signature='', out_signature='i') - def lines(self): - """Returns the number of lines.""" - return self.doc and self.doc.lines() or 0 - - def textLines(self): - """Returns the full document text as a list of lines.""" - if self.doc: - return [line or "" - for line in self.doc.textLines(self.doc.documentRange())] - else: - return [] - - @method(iface, in_signature='b', out_signature='b') - def close(self, prompt=True): - """Closes this document, returning True if closing succeeded.""" - if self.doc: - if prompt and not self.queryClose(): - return False - if not self.doc.closeUrl(False): - return False # closing did not succeed, but that'd be abnormal - if self.app.keepMetaInfo(): - self.app.stateManager().saveState(self) - self.closed(self) # before we are really deleted - self.aboutToClose() - self.app.documentClosed(self) - self._cursorTranslator = None - self.view and sip.delete(self.view) - self.doc and sip.delete(self.doc) - self.app.removeDocument(self) - self.remove_from_connection() # remove our exported D-Bus object - return True - - def queryClose(self): - """Ask user if document modified and saves if desired.""" - # Many stuff copied from KatePart - if not self.doc or not self.isModified(): - return True - res = KMessageBox.warningYesNoCancel(self.app.mainwin, i18n( - "The document \"%1\" has been modified.\n" - "Do you want to save your changes or discard them?", - self.documentName()), i18n("Close Document"), - KStandardGuiItem.save(), KStandardGuiItem.discard()) - if res == KMessageBox.Yes: - self.save() - elif res == KMessageBox.No: - return True - else: # cancel - return False - - def aboutToClose(self): - """Called just before a document is really closed. - - Implement this if you want to save some last minute state, etc. - After calling this the view and document (if they have materialized) - will be deleted. - - This method will also be called if the document never materialized. - So check if self.view really is a View before you do something with it. - - """ - pass - - def viewActions(self): - """Iterate over the View actions for which the state could be saved.""" - if self.view: - for name in ( - "view_dynamic_word_wrap", - "view_word_wrap_marker", "view_border", "view_line_numbers", - "view_scrollbar_marks", "view_folding_markers"): - action = self.view.actionCollection().action(name) - if action: - yield name, action - - def readConfig(self, group): - """This can be called by a StateManager after the document materialized. - - You can read stuff from the KConfigGroup group, to adjust settings for - the loaded document and its view. - - """ - # load custom properties - for name, default in self.metainfoDefaults.items(): - self.metainfo[name] = group.readEntry(name, default) - # restore some options from the view menu - for name, action in self.viewActions(): - if group.hasKey(name): - value = group.readEntry(name, False) - if value != action.isChecked(): - action.trigger() - # cursor position - line = group.readEntry("line", 0) - column = group.readEntry("column", 0) - if line < self.doc.lines(): - self.view.setCursorPosition(KTextEditor.Cursor(line, column)) - # bookmarks - markiface = self.doc.markInterface() - if markiface: - marks = group.readEntry("bookmarks", "") - if re.match(r"\d+:\d+(,\d+:\d+)*$", marks): - for m in marks.split(','): - line, mark = map(int, m.split(':')) - if line < self.doc.lines(): - markiface.addMark(line, mark) - - def writeConfig(self, group): - """This can be called by a StateManager, normally just before closing. - - You can write stuff to the KConfigGroup group, to save settings for the - document and its view. - - """ - # save custom properties - for name, default in self.metainfoDefaults.items(): - if self.metainfo[name] != default: - group.writeEntry(name, self.metainfo[name]) - else: - group.deleteEntry(name) - # save some options in the view menu - for name, action in self.viewActions(): - group.writeEntry(name, action.isChecked()) - # cursor position - cursor = self.view.cursorPosition() - group.writeEntry("line", cursor.line()) - group.writeEntry("column", cursor.column()) - # bookmarks - # markInterface().marks() crashes so we use mark() instead... - markiface = self.doc.markInterface() - if markiface: - marks = [] - for line in range(self.doc.lines()): - m = markiface.mark(line) - if m: - marks.append("{0}:{1}".format(line, m)) - group.writeEntry("bookmarks", ','.join(marks)) - # also save the encoding - group.writeEntry("encoding", self.encoding()) - - def line(self, lineNumber = None): - """Returns the text of the given or current line.""" - if self.doc: - if lineNumber is None: - lineNumber = self.view.cursorPosition().line() - return self.doc.line(lineNumber) or "" - - def textToCursor(self, line=None, column=None): - """Returns the text from the start of the document to the given - cursor position. - - If line and column are None, the current cursor position is used. - If column is None, line is expected to be a KTextEditor.Cursor object. - - """ - if self.view: - if line is None: - line = self.view.cursorPosition() - if column is None: - column = line.column() - line = line.line() - return self.doc.text(KTextEditor.Range(0, 0, line, column)) or "" - - def selectionText(self): - """Returns the selected text or an empty string.""" - if self.view and self.view.selection(): - return self.view.selectionText() or "" - - def selectionOrDocument(self): - """Returns a tuple(text, start). - - If there is a selection, start is the position in the text the selection - starts, and text is the document text from the (0, 0) to the end of the - selection. If there is no selection, the whole document text is returned - and start=0. - - """ - docRange = self.doc.documentRange() - selRange = self.view.selectionRange() - if self.view.selection() and selRange.start().position() != selRange.end().position(): - text = self.textToCursor(selRange.end()) - line, column = selRange.start().position() - return text, cursorToPosition(line, column, text) - return self.text(), 0 - - def replaceSelectionWith(self, text, keepSelection=True): - """Convenience method. Replaces the selection (if any) with text. - - If keepSelection is true, select the newly inserted text again. - - """ - v, d = self.view, self.doc - selRange = v.selectionRange() # copy othw. crash in KDE 4.3 /PyQt 4.5.x. - cur = v.selection() and selRange.start() or v.cursorPosition() - line, col = cur.line(), cur.column() - if v.selection(): - d.replaceText(selRange, text) - else: - v.insertText(text) - if keepSelection: - lines = text.count('\n') - endline = line + lines - if lines: - endcol = len(text) - text.rfind('\n') - 1 - else: - endcol = col + len(text) - v.setSelection(KTextEditor.Range(line, col, endline, endcol)) - else: - v.removeSelection() - - @contextmanager - def editContext(self): - """Context to perform operations on the document in one Undo-block. - - Usage: - - with doc.editContext(): - ... - - """ - self.doc.startEditing() - try: - yield - finally: - self.doc.endEditing() - - def resetCursorTranslations(self): - """Clears the cursor translations that keep Point and Click - working while the document changes. - - Call this when a build has succeeded and cursor positions produced - by build errors or build output coincide with the current document text. - - """ - if self.doc: - self._cursorTranslator = CursorTranslator(self) - - def kateModeVariables(self): - """Returns a dict with katemoderc variables. - - The current mode is used. Returns None if there is no document mode - active and there is no application default mode. - - """ - mode = self.doc and self.doc.mode() or self.app.defaultMode - if mode: - c = KConfig("katemoderc", KConfig.NoGlobals) - v = c.group(mode).readEntry("Variables", "") - return dict(re.findall(r"([a-z]+(?:-[a-z]+)*)\s+([^;]*)", v)) - - #BUG: Reimplemented below as the variableInterface does not seem to work... - #def kateVariable(self, varName): - #""" - #Returns the value of the kate variable varName, if set in the document - #or in the modeline for the current document mode. - #""" - #if self.doc: - #iface = self.doc.variableInterface() - #if iface: - #v = iface.variable(varName) - #if v: - #return v - #d = self.kateModeVariables() - #if d: - #return d.get(varName) - - def kateVariable(self, varName): - """Returns the value of the kate variable varName. - - Looks in the document and in the modeline for the current document mode. - Returns None if the variable is not set. - """ - lines = self.textLines() - del lines[10:-10] # only look at the first and last ten lines. - for line in lines: - if 'kate:' in line: - m = re.search(r"[:;]\s*\b{0}\s+([^;]+)".format(varName), line) - if m: - return m.group(1) - d = self.kateModeVariables() - if d: - return d.get(varName) - - def tabWidth(self): - """Returns the width of the tab character in this document.""" - v = self.kateVariable("tab-width") - if v and v.isdigit(): - return int(v) - group = KGlobal.config().group("Kate Document Defaults") - return group.readEntry("Tab Width", 8) - - def indentationWidth(self): - """Returns the indent-width for the current document.""" - v = self.kateVariable("indent-width") - if v and v.isdigit(): - return int(v) - group = KGlobal.config().group("Kate Document Defaults") - return group.readEntry("Indentation Width", 2) - - def indentationSpaces(self): - """Returns True if indent uses spaces, otherwise False.""" - v = self.kateVariable("space-indent") or self.kateVariable("replace-tabs") - if v: - return v in ('on', '1', 'yes', 'y', 'true') - group = config("Kate Document Defaults") - return bool(group.readEntry('Basic Config Flags', 0) & 0x2000000) - - -class StateManager(object): - """Manages state and meta-info for documents. - - Asks Documents to save information like bookmarks and cursor position, etc. - The information is saved in the 'metainfos' config file in the applications - data directory. - - """ - def __init__(self, app): - self.app = app - self.metainfos = KConfig("metainfos", KConfig.NoGlobals, "appdata") - - def groupForUrl(self, url, create=False): - """Returns a KConfigGroup for the given KUrl. - - Returns None if the group does not exist and create==False. - - """ - if not url.isEmpty(): - encodedurl = url.prettyUrl() - if create or self.metainfos.hasGroup(encodedurl): - return self.metainfos.group(encodedurl.encode('utf-8')) - - def loadState(self, doc): - """Asks the Document to read its state from our config.""" - group = self.groupForUrl(doc.url()) - if group: - last = group.readEntry("time", 0.0) - # when it is a local file, only load the state when the - # file was not modified later - if not doc.localPath() or ( - os.path.exists(doc.localPath()) and - os.path.getmtime(doc.localPath()) <= last): - doc.readConfig(group) - - def saveState(self, doc): - """Asks the Document to save its state to our config.""" - if doc.view and not doc.url().isEmpty(): - group = self.groupForUrl(doc.url(), True) - group.writeEntry("time", time.time()) - doc.writeConfig(group) - group.sync() - - def cleanup(self): - """Purge entries that are not used for more than a month.""" - for g in self.metainfos.groupList(): - group = self.metainfos.group(g.encode('utf-8')) - last = group.readEntry("time", 0.0) - if (time.time() - last) / 86400 > 31: - group.deleteGroup() - self.metainfos.sync() - - -class CursorTranslator(object): - """Translates cursor positions after a document is edited. - - This object makes a kind of snapshot of a document and makes it - possible to translate cursor positions in that snapshot to the correct - place in the current document. - - """ - def __init__(self, doc): - """ doc should be a kateshell.app.Document instance """ - self.savedTabs = map(tabindices, doc.textLines()) - self.iface = doc.doc.smartInterface() - if self.iface: - self.revision = self.iface.currentRevision() - - def __del__(self): - """ Remove our grip on the document. """ - if self.iface: - self.iface.releaseRevision(self.revision) - - def cursor(self, line, column): - """Translates a cursor position to the current document. - - Also resolves tabs (i.e. the column parameter is the virtual position). - Returns a KTextEditor.Cursor instance. - - """ - if line < len(self.savedTabs) and self.savedTabs[line]: - column = resolvetabs_indices(column, self.savedTabs[line]) - cursor = KTextEditor.Cursor(line, column) - if self.iface: - # Just because KDE 4.5 does a qFatal if useRevision is called in the - # main thread, and the Python KDE4 bindings not yet provide the new - # MovingInterface stuff, we need to create a background thread just - # to translate cursors from a certain document revision. - @anonymousThread - def translateCursor(cursor): - self.iface.smartMutex().lock() - self.iface.useRevision(self.revision) - cursor = self.iface.translateFromRevision(cursor, - KTextEditor.SmartCursor.MoveOnInsert) - self.iface.clearRevision() - self.iface.smartMutex().unlock() - return cursor - cursor = translateCursor(cursor) - return cursor - - -class _AnonymousThread(QThread): - """Runs a function in an anonymous QThread. - - Exceptions are re-raised in the main thread. - - """ - def __init__(self, func, args, kwargs): - super(_AnonymousThread, self).__init__() - self.func = lambda: func(*args, **kwargs) - self._result = None - self._exc_info = None - self.start() - self.wait() - - def run(self): - try: - self._result = self.func() - except: - self._exc_info = sys.exc_info() - sys.exc_clear() - - def result(self): - """Returns a tuple (result, exception).""" - return self._result, self._exc_info - - -def anonymousThread(func): - """Returns a wrapper for a func to run it in an anonymous QThread. - - When called, waits for the function to complete and returns its result. - - """ - def wrapper(*args, **kwargs): - result, exc_info = _AnonymousThread(func, args, kwargs).result() - if exc_info: - raise exc_info[1], None, exc_info[2] - return result - return wrapper - - -def tabindices(text): - """Returns a list of positions in text at which a tab character is found. - - If no tab character is found, returns None. - - """ - result = [] - tab = text.find('\t') - while tab != -1: - result.append(tab) - tab = text.find('\t', tab + 1) - return result or None - -def resolvetabs_text(column, text): - """Translates virtual column to the character column in a text string. - - Assumes tab stops are on 8 character positions. - Parses text for tab stops and resolves column (a virtual position) - to point to the correct character position in the text. - - """ - return resolvetabs_indices(column, tabindices(text)) - -def resolvetabs_indices(column, indices): - """Translates virtual column to the character index in a text. - - Assumes tab stops are on 8 character positions. - indices should be a list of tabstops (see the tabindices function). - - """ - if not indices or column < indices[0]: - return column - charcol, realcol = 0, 0 - # TODO: this loop can probably be optimized - while True: - if charcol in indices: - realcol = realcol + 8 & -8 - else: - realcol += 1 - if realcol > column: - return charcol - charcol += 1 - -def cursorToPosition(line, column, text): - """Returns the character position in text of a cursor with line and column. - - Line and column both start with 0. - Returns -1 if the position falls outside the text. - - """ - pos = 0 - for i in range(line): - pos = text.find('\n', pos) + 1 - if not pos: - return -1 - new = text.find('\n', pos) - if new == -1: - new = len(text) - pos += column - if pos > new: - return -1 - return pos - diff -Nru frescobaldi-1.2.0/python/kateshell/exception.py frescobaldi-2.0.0/python/kateshell/exception.py --- frescobaldi-1.2.0/python/kateshell/exception.py 2010-08-19 09:46:53.000000000 +0000 +++ frescobaldi-2.0.0/python/kateshell/exception.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Exception dialog for unhandled Python exceptions -(which are bugs in our program). -""" - -import traceback - -from PyQt4.QtGui import QLabel, QTextBrowser, QTextCursor, QVBoxLayout -from PyKDE4.kdecore import KGlobal, KToolInvocation, i18n -from PyKDE4.kdeui import KDialog, KIcon - -class ExceptionDialog(KDialog): - - def __init__(self, app, exctype, excvalue, exctb): - KDialog.__init__(self, app.mainwin) - self.app = app - self.tbshort = ''.join(traceback.format_exception_only(exctype, excvalue)) - self.tbfull = ''.join(traceback.format_exception(exctype, excvalue, exctb)) - - l = QVBoxLayout(self.mainWidget()) - l.addWidget(QLabel(u"{0}".format(i18n( - "An internal error has occurred:")))) - b = QTextBrowser() - l.addWidget(b) - self.setCaption(i18n("Internal Error")) - b.setText(self.tbfull) - b.moveCursor(QTextCursor.End) - self.setButtons(KDialog.ButtonCode( - KDialog.User1 | KDialog.Close)) - self.setButtonIcon(KDialog.User1, KIcon("tools-report-bug")) - self.setButtonText(KDialog.User1, i18n("Email Bug Report...")) - self.user1Clicked.connect(self.reportBug) - self.resize(600,300) - self.exec_() - - def reportBug(self): - self.accept() - - about = KGlobal.mainComponent().aboutData() - subject = u"[{0} {1}] {2}".format( - about.programName(), about.version(), self.tbshort) - body = u"{0} {1}\n\n{2}\n{3}\n\n".format( - about.programName(), about.version(), self.tbfull, - i18n("Optionally describe what you were doing below:")) - to = about.bugAddress() - cc, bcc = '', '' - KToolInvocation.invokeMailer(to, cc, bcc, subject, body) - diff -Nru frescobaldi-1.2.0/python/kateshell/fileprinter.py frescobaldi-2.0.0/python/kateshell/fileprinter.py --- frescobaldi-1.2.0/python/kateshell/fileprinter.py 2010-07-07 20:03:46.000000000 +0000 +++ frescobaldi-2.0.0/python/kateshell/fileprinter.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,264 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Code to print PDF (or PS) files to a QPrinter. -Based on ideas from Okular's core/fileprinter.cpp. -""" - -import os -import shutil -import subprocess -from itertools import repeat - -from PyQt4.QtGui import QPrintEngine, QPrinter -from PyKDE4.kdecore import KShell, KStandardDirs - - -# Exceptions: -class NoPrintCommandFound(Exception): - """Raised if no valid print command can be found.""" - pass - -class CommandNotFound(Exception): - """Raised if the command could not be started.""" - pass - -class CommandFailed(Exception): - """Raised if the command could be started but exited with a non-zero - return value.""" - -def printFiles(fileNames, printer): - """Prints a list of files (PS or PDF) via a printer command. - - The printer command is constructed by quering the QPrinter object. - If there is more than one PDF file, print to file should have been disabled - in the QPrintDialog that configured the printer. - - """ - output = printer.outputFileName() - if output: - # Print to File, determine suffixes, assume one file - fileName = fileNames[0] - inext, outext = (os.path.splitext(name)[1].lower() - for name in (fileName, output)) - if inext == outext: - # just copy - shutil.copyfile(fileName, output) - else: - cmd = "pdf2ps" if outext == ".ps" else "ps2pdf" - try: - ret = subprocess.call([cmd, fileName, output]) - if ret: - raise CommandFailed(KShell.joinArgs([cmd, fileName, output]), ret) - except OSError: - raise CommandNotFound(cmd) - return - - # print to a printer - - cmd = [] - - # Which exe? - for exe in "lpr-cups", "lpr.cups", "lpr", "lp": - if KStandardDirs.findExe(exe): - break - else: - raise NoPrintCommandFound() - - cmd.append(exe) - - # Add the arguments. - - # printer name - if exe == "lp": - cmd.append('-d') - else: - cmd.append('-P') - cmd.append(printer.printerName()) - - # helper for adding (Cups) options to the command line - def option(s): - cmd.append('-o') - cmd.append(s) - - # copies - try: - copies = printer.actualNumCopies() - except AttributeError: # only available in Qt >= 4.6 - copies = printer.numCopies() - - if exe == "lp": - cmd.append('-n') - cmd.append(format(copies)) - else: - cmd.append('-#{0}'.format(copies)) - - # job name - if printer.docName(): - if exe == "lp": - cmd.append('-t') - cmd.append(printer.docName()) - elif exe.startswith('lpr'): - cmd.append('-J') - cmd.append(printer.docName()) - - # page range - if printer.printRange() == QPrinter.PageRange: - pageRange = "{0}-{1}".format(printer.fromPage(), printer.toPage()) - if exe == "lp": - cmd.append('-P') - cmd.append(pageRange) - else: - option('page-ranges={0}'.format(pageRange)) - - # CUPS-specific options; detect if CUPS is available. - test = QPrinter() - test.setNumCopies(2) - cups = test.numCopies() == 1 - - if cups: - - # media, size etc. - media = [] - size = printer.paperSize() - if size == QPrinter.Custom: - media.append("Custom.{0}x{1}mm".format(printer.heightMM(), printer.widthMM())) - elif size in PAGE_SIZES: - media.append(PAGE_SIZES[size]) - - # media source - source = printer.paperSource() - if source in PAPER_SOURCES: - media.append(PAPER_SOURCES[source]) - - if media: - option('media={0}'.format(",".join(media))) - - # orientation - orientation = printer.orientation() - if orientation in ORIENTATIONS: - option(ORIENTATIONS[orientation]) - - # double sided - duplex = printer.duplex() - if duplex == QPrinter.DuplexNone: - option("sides=one-sided") - elif duplex == QPrinter.DuplexAuto: - if orientation == QPrinter.Landscape: - option("sides=two-sided-short-edge") - else: - option("sides=two-sided-long-edge") - elif duplex == QPrinter.DuplexLongSide: - option("sides=two-sided-long-edge") - elif duplex == QPrinter.DuplexShortSide: - option("sides=two-sided-short-edge") - - # page order - if printer.pageOrder() == QPrinter.LastPageFirst: - option("outputorder=reverse") - else: - option("outputorder=normal") - - # collate copies - if printer.collateCopies(): - option("Collate=True") - else: - option("Collate=False") - - # page margins - if printer.printEngine().property(QPrintEngine.PPK_PageMargins): - left, top, right, bottom = printer.getPageMargins(QPrinter.Point) - option("page-left={0}".format(left)) - option("page-top={0}".format(top)) - option("page-right={0}".format(right)) - option("page-bottom={0}".format(bottom)) - - # cups properties - properties = printer.printEngine().property(QPrintEngine.PrintEnginePropertyKey(0xfe00)) - for name, value in zip(*repeat(iter(properties), 2)): - option("{0}={1}".format(name, value) if value else name) - - # file names - cmd.extend(fileNames) - try: - ret = subprocess.call(cmd) - if ret: - raise CommandFailed(KShell.joinArgs(cmd), ret) - except OSError: - raise CommandNotFound(cmd[0]) - - -PAGE_SIZES = { - QPrinter.A0: "A0", - QPrinter.A1: "A1", - QPrinter.A2: "A2", - QPrinter.A3: "A3", - QPrinter.A4: "A4", - QPrinter.A5: "A5", - QPrinter.A6: "A6", - QPrinter.A7: "A7", - QPrinter.A8: "A8", - QPrinter.A9: "A9", - QPrinter.B0: "B0", - QPrinter.B1: "B1", - QPrinter.B10: "B10", - QPrinter.B2: "B2", - QPrinter.B3: "B3", - QPrinter.B4: "B4", - QPrinter.B5: "B5", - QPrinter.B6: "B6", - QPrinter.B7: "B7", - QPrinter.B8: "B8", - QPrinter.B9: "B9", - QPrinter.C5E: "C5", # Correct Translation? - QPrinter.Comm10E: "Comm10", # Correct Translation? - QPrinter.DLE: "DL", # Correct Translation? - QPrinter.Executive: "Executive", - QPrinter.Folio: "Folio", - QPrinter.Ledger: "Ledger", - QPrinter.Legal: "Legal", - QPrinter.Letter: "Letter", - QPrinter.Tabloid: "Tabloid", -} - -PAPER_SOURCES = { - # QPrinter.Auto: "", - QPrinter.Cassette: "Cassette", - QPrinter.Envelope: "Envelope", - QPrinter.EnvelopeManual: "EnvelopeManual", - QPrinter.FormSource: "FormSource", - QPrinter.LargeCapacity: "LargeCapacity", - QPrinter.LargeFormat: "LargeFormat", - QPrinter.Lower: "Lower", - QPrinter.MaxPageSource: "MaxPageSource", - QPrinter.Middle: "Middle", - QPrinter.Manual: "Manual", - QPrinter.OnlyOne: "OnlyOne", - QPrinter.Tractor: "Tractor", - QPrinter.SmallFormat: "SmallFormat", -} - -ORIENTATIONS = { - QPrinter.Portrait: "portrait", - QPrinter.Landscape: "landscape", -} - diff -Nru frescobaldi-1.2.0/python/kateshell/__init__.py frescobaldi-2.0.0/python/kateshell/__init__.py --- frescobaldi-1.2.0/python/kateshell/__init__.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/kateshell/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - - -import dbus -from PyKDE4.kdecore import KUrl - -# interface for our object types (MainApp and Document) -DBUS_IFACE_PREFIX = 'org.frescobaldi.kateshell.' - -def runningApp(servicePrefix, pid=None): - """ - Returns a proxy object for an instance of our app running on the DBus - session bus, if it is there, or False if none. - - Using the proxy object, we can command the remote app almost - like a local one. - """ - bus = dbus.SessionBus(private=True) - names = [n for n in bus.list_names() if n.startswith(servicePrefix)] - if names: - if pid and servicePrefix + pid in names: - name = servicePrefix + pid - else: - name = names[0] - print "Found running instance:", name - return Proxy(bus.get_object(name, '/MainApp')) - return False - -def newApp(servicePrefix): - from kateshell.app import MainApp - return MainApp(servicePrefix) - - -class Proxy(object): - """ - A wrapper around a dbus proxy object. - - Methods calls are automagically directed to the correct interface, - using some code in the __init__ method. - - When a remote object call would return a dbus.ObjectPath, we return - the same wrapper for the referenced dbus proxy object. - This way we can handle remote DBus objects in a Pythonic way: - - app = Proxy(bus.get_object(...)) - doc = app.createDoc() - doc.callMethod() - """ - def __init__(self, obj): - self.obj = obj - for i in 'MainApp', 'Document': - if obj.object_path.startswith("/"+i): - self.iface = dbus.Interface(obj, dbus_interface=DBUS_IFACE_PREFIX + i) - return - self.iface = None - - def __getattr__(self, attr): - if self.iface: - meth = getattr(self.iface, attr) - if callable(meth): - def proxy_func(*args): - # convert args from KUrl to unicode - args = list(args) - for i in range(len(args)): - if isinstance(args[i], KUrl): - args[i] = args[i].url() - # call the method - res = meth(*args) - # Return same proxy if the returned object is a reference - if isinstance(res, dbus.ObjectPath): - bus = dbus.SessionBus(private=True) - res = Proxy(bus.get_object(self.obj.bus_name, res)) - return res - return proxy_func - return getattr(self.obj, attr) - - def run(self): - """ - Tell the remote app to show if necessary and cancel our own - startup notification - """ - if self.iface: - self.iface.show() - import PyKDE4.kdeui - PyKDE4.kdeui.KStartupInfo.appStarted() - diff -Nru frescobaldi-1.2.0/python/kateshell/mainwindow.py frescobaldi-2.0.0/python/kateshell/mainwindow.py --- frescobaldi-1.2.0/python/kateshell/mainwindow.py 2010-09-12 18:17:07.000000000 +0000 +++ frescobaldi-2.0.0/python/kateshell/mainwindow.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1471 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -import itertools, os, re, sip, weakref - -from PyQt4.QtCore import QEvent, QTimer, Qt, SLOT, pyqtSignature -from PyQt4.QtGui import ( - QAction, QActionGroup, QDialog, QKeySequence, QLabel, QPixmap, QSplitter, - QStackedWidget, QTabBar, QVBoxLayout, QWidget) -from PyKDE4.kdecore import ( - KConfig, KGlobal, KPluginLoader, KToolInvocation, KUrl, i18n) -from PyKDE4.kdeui import ( - KAcceleratorManager, KAction, KActionCollection, KActionMenu, KDialog, - KEditToolBar, KHBox, KIcon, KKeySequenceWidget, KMenu, KMessageBox, - KMultiTabBar, KShortcut, KShortcutsDialog, KShortcutsEditor, - KStandardAction, KStandardGuiItem, KToggleFullScreenAction, KVBox) -from PyKDE4.kparts import KParts -from PyKDE4.ktexteditor import KTextEditor -from PyKDE4.kio import KEncodingFileDialog - -from signals import Signal - -import kateshell.app -from kateshell.app import cacheresult, naturalsort - -# Easily get our global config -def config(group="kateshell"): - return KGlobal.config().group(group) - - -Top = KMultiTabBar.Top -Right = KMultiTabBar.Right -Bottom = KMultiTabBar.Bottom -Left = KMultiTabBar.Left - - -def addAccelerators(actions): - """Adds accelerators to the list of actions. - - Actions that have accelerators are skipped, but the accelerators they use - are recorded. This can be used for e.g. menus that are created on the fly, - and not picked up by KAcceleratorManager. - - """ - todo, used = [], [] - for a in actions: - if a.text(): - m = re.search(r'&(\w)', a.text()) - used.append(m.group(1).lower()) if m else todo.append(a) - for a in todo: - text = a.text() - for m in itertools.chain(re.finditer(r'\b\w', text), - re.finditer(r'\B\w', text)): - if m.group().lower() not in used: - used.append(m.group().lower()) - a.setText(text[:m.start()] + '&' + text[m.start():]) - break - - -class MainWindow(KParts.MainWindow): - """An editor main window. - - Emits the following (Python) signals: - - currentDocumentChanged(Document) if the active document changes or its url. - - aboutToClose() when the window will be closed. - - """ - currentDocumentChanged = Signal() - aboutToClose = Signal() - - def __init__(self, app): - KParts.MainWindow.__init__(self) - self.app = app - self._currentDoc = None - self.docks = {} - self.tools = {} - - # status bar - sb = self.statusBar() - self.sb_linecol = QLabel(sb) - sb.addWidget(self.sb_linecol, 0) - - self.sb_modified = QLabel(sb) - self.sb_modified.setFixedSize(16, 16) - sb.addWidget(self.sb_modified, 0) - - self.sb_insmode = QLabel(sb) - sb.addWidget(self.sb_insmode, 0) - - self.sb_selmode = QLabel(sb) - sb.addWidget(self.sb_selmode, 0) - - tab_bottom = TabBar(Bottom, sb) - sb.addWidget(tab_bottom, 0) - - # window layout - h = KHBox(self) - self.setCentralWidget(h) - tab_left = TabBar(Left, h) - s = QSplitter(Qt.Horizontal, h) - tab_right = TabBar(Right, h) - - self.docks[Left] = Dock(s, tab_left, "go-previous", i18n("Left Sidebar")) - s.addWidget(self.docks[Left]) - v = KVBox(s) - s.addWidget(v) - self.docks[Right] = Dock(s, tab_right, "go-next", i18n("Right Sidebar")) - s.addWidget(self.docks[Right]) - - s.setStretchFactor(0, 0) - s.setStretchFactor(1, 1) - s.setStretchFactor(2, 1) - s.setChildrenCollapsible(False) - s.setSizes((100, 400, 600)) - - tab_top = TabBar(Top, v) - s1 = QSplitter(Qt.Vertical, v) - - self.docks[Top] = Dock(s1, tab_top, "go-up", i18n("Top Sidebar")) - s1.addWidget(self.docks[Top]) - # tabbar and editor view widget stack together in one widget - w = QWidget() - layout = QVBoxLayout() - w.setLayout(layout) - layout.setContentsMargins(0, 0, 0, 0) - layout.setSpacing(0) - self.viewTabs = self.createViewTabBar() - layout.addWidget(self.viewTabs) - self.viewStack = QStackedWidget() - layout.addWidget(self.viewStack) - s1.addWidget(w) - self.docks[Bottom] = Dock(s1, tab_bottom, "go-down", i18n("Bottom Sidebar")) - s1.addWidget(self.docks[Bottom]) - - s1.setStretchFactor(0, 0) - s1.setStretchFactor(1, 1) - s1.setStretchFactor(2, 0) - s1.setChildrenCollapsible(False) - - # Set some reasonable default sizes for top and bottom dock, to - # prevent the embedded terminal taking up a too large default space. - s1.setSizes((140, 200, 140)) - - self.viewStack.setMinimumSize(200, 100) - - self._selectionActions = [] - self.setupActions() # Let subclasses add more actions - self.setupTools() # Initialize the tools before loading ui.rc - self.setStandardToolBarMenuEnabled(True) - self.createShellGUI(True) # ui.rc is loaded automagically - - if not self.initialGeometrySet(): - self.resize(700, 480) - - self.setupGeneratedMenus() - self.setAutoSaveSettings() - self.loadSettings() - self.setAcceptDrops(True) - app.documentCreated.connect(self.addToRecentFiles) - app.documentMaterialized.connect(self.addDocument) - app.activeChanged.connect(self.setCurrentDocument) - app.documentClosed.connect(self.removeDocument) - self.sessionManager().sessionChanged.connect(self.updateCaption) - - def setupActions(self): - self.act('file_new', KStandardAction.New, self.newDocument) - self.act('file_open', KStandardAction.Open, self.openDocument) - self.act('file_close', KStandardAction.Close, - lambda: self.app.activeDocument().close()) - self.act('file_save', KStandardAction.Save, - lambda: self.app.activeDocument().save()) - self.act('file_save_as', KStandardAction.SaveAs, - lambda: self.app.activeDocument().saveAs()) - self.act('file_close_other', i18n("Close Other Documents"), - self.closeOtherDocuments) - self.act('file_quit', KStandardAction.Quit, self.app.quit) - self.act('doc_back', KStandardAction.Back, self.app.back) - self.act('doc_forward', KStandardAction.Forward, self.app.forward) - self.showPath = self.act('options_show_full_path', i18n("Show Path"), - self.updateCaption) - self.showPath.setCheckable(True) - self.showTabs = self.act('options_show_tabs', i18n("Show Document Tabs"), - lambda: self.viewTabs.setVisible(self.showTabs.isChecked())) - self.showTabs.setCheckable(True) - - # full screen - a = self.actionCollection().addAction(KStandardAction.FullScreen, 'fullscreen') - a.toggled.connect(lambda t: KToggleFullScreenAction.setFullScreen(self, t)) - # recent files. - self.openRecent = KStandardAction.openRecent( - self, SLOT("slotOpenRecent(KUrl)"), self) - self.actionCollection().addAction( - self.openRecent.objectName(), self.openRecent) - self.act('options_configure_toolbars', KStandardAction.ConfigureToolbars, - self.editToolbars) - self.act('options_configure_keys', KStandardAction.KeyBindings, - self.editKeys) - - # tool views submenu - a = KActionMenu(i18n("&Tool Views"), self) - self.actionCollection().addAction('options_toolviews', a) - def makefunc(action): - def populate(): - menu = action.menu() - menu.clear() - for tool in self.tools.itervalues(): - menu.addSeparator() - menu.addAction(tool.action()) - tool.addMenuActions(menu) - return populate - a.menu().aboutToShow.connect(makefunc(a)) - - # sessions menu - @self.onAction(i18n("New..."), "document-new") - def sessions_new(): - self.sessionManager().new() - - @self.onAction(KStandardGuiItem.save().text(), "document-save") - def sessions_save(): - self.sessionManager().save() - - @self.onAction(i18n("Manage Sessions..."), "view-choose") - def sessions_manage(): - self.sessionManager().manage() - - - def setupTools(self): - """Implement this to create the Tool instances. - - This is called before the ui.rc file is loaded, so the user can - configure the keyboard shortcuts for the tools. - """ - pass - - def xmlGuiContainer(self, name): - """Returns the XMLGUI container with name. - - If not present, the local ui.rc file is probably erroneous, - inform the user via a message box. - - """ - obj = self.factory().container(name, self) - if obj: - return obj - else: - KMessageBox.error(self, i18n( - "Could not find the XMLGUI container \"%1\".\n\n" - "Probably the local ui.rc file contains errors. " - "It is recommended to delete this file because elements in the " - "user interface will be missing. " - "This is the full path of the file:\n\n%2\n", - name, os.path.join( - KGlobal.dirs().saveLocation('appdata'), - self.xmlFile()))) - - def setupGeneratedMenus(self): - """This should setup menus that are generated on show. - - The generated menus that are setup here must be rebound to the XMLGUI if - the toolbars are reconfigured by the user, that's why they must be setup - in this method. This method is called again if the user changes the - toolbars. - - """ - # Set up the documents menu so that it shows all open documents. - docMenu = self.xmlGuiContainer("documents") - if docMenu: - docGroup = QActionGroup(docMenu) - docGroup.setExclusive(True) - docGroup.triggered.connect(lambda a: a.doc().setActive()) - - def populateDocMenu(): - for a in docGroup.actions(): - sip.delete(a) - for d in self.app.documents: - a = KAction(d.documentName(), docGroup) - a.setCheckable(True) - a.doc = weakref.ref(d) - icon = d.documentIcon() - if icon: - a.setIcon(KIcon(icon)) - if d is self._currentDoc: - a.setChecked(True) - docGroup.addAction(a) - docMenu.addAction(a) - addAccelerators(docMenu.actions()) - docMenu.setParent(docMenu.parent()) # BUG: SIP otherwise looses outer scope - docMenu.aboutToShow.connect(populateDocMenu) - - # sessions menu - sessMenu = self.xmlGuiContainer("sessions") - if sessMenu: - sessGroup = QActionGroup(sessMenu) - sessGroup.setExclusive(True) - - def populateSessMenu(): - for a in sessGroup.actions(): - sip.delete(a) - - sm = self.sessionManager() - sessions = sm.names() - current = sm.current() - - if not sessions: - return - # "No Session" action - a = KAction(i18n("No Session"), sessGroup) - a.setCheckable(True) - if not current: - a.setChecked(True) - else: - a.triggered.connect(lambda: sm.switch(None)) - sessGroup.addAction(a) - sessMenu.addAction(a) - sessGroup.addAction(sessMenu.addSeparator()) - # other sessions: - for name in sessions: - a = KAction(name, sessGroup) - a.setCheckable(True) - if name == current: - a.setChecked(True) - a.triggered.connect((lambda name: lambda: sm.switch(name))(name)) - sessGroup.addAction(a) - sessMenu.addAction(a) - addAccelerators(sessMenu.actions()) - sessMenu.setParent(sessMenu.parent()) # BUG: SIP otherwise looses outer scope - sessMenu.aboutToShow.connect(populateSessMenu) - - @cacheresult - def sessionManager(self): - return self.createSessionManager() - - def createSessionManager(self): - """Override this to return a different session manager.""" - return SessionManager(self) - - def act(self, name, texttype, func, - icon=None, tooltip=None, whatsthis=None, key=None): - """Create an action and add it to own actionCollection.""" - if isinstance(texttype, KStandardAction.StandardAction): - a = self.actionCollection().addAction(texttype, name) - else: - a = self.actionCollection().addAction(name) - a.setText(texttype) - a.triggered.connect(func) - if icon: a.setIcon(KIcon(icon)) - if tooltip: a.setToolTip(tooltip) - if whatsthis: a.setWhatsThis(whatsthis) - if key: a.setShortcut(KShortcut(key)) - return a - - def selAct(self, *args, **kwargs): - a = self.act(*args, **kwargs) - self._selectionActions.append(a) - return a - - def onAction(self, texttype, icon=None, tooltip=None, whatsthis=None, key=None): - """Decorator to add a function to an action. - - The name of the function becomes the name of the action. - - """ - def decorator(func): - self.act(func.func_name, texttype, func, icon, tooltip, whatsthis, key) - return func - return decorator - - def onSelAction(self, texttype, icon=None, tooltip=None, whatsthis=None, key=None, - warn=True, keepSelection=True): - """Decorator to add a function that is run on the selection to an action. - - The name of the function becomes the name of the action. - If there is no selection, the action is automatically disabled. - - """ - def decorator(func): - def selfunc(): - doc = self.currentDocument() - if doc: - text = doc.selectionText() - if text: - result = func(text) - if result is not None: - doc.replaceSelectionWith(result, keepSelection) - elif warn: - KMessageBox.sorry(self, i18n("Please select some text first.")) - self.selAct(func.func_name, texttype, selfunc, icon, tooltip, whatsthis, key) - return func - return decorator - - def setCurrentDocument(self, doc): - """Called when the application makes a different Document active.""" - if self._currentDoc: - self._currentDoc.urlChanged.disconnect(self.slotUrlChanged) - self._currentDoc.captionChanged.disconnect(self.updateCaption) - self._currentDoc.statusChanged.disconnect(self.updateStatusBar) - self._currentDoc.selectionChanged.disconnect(self.updateSelection) - self.guiFactory().removeClient(self._currentDoc.view) - self._currentDoc = doc - self.guiFactory().addClient(doc.view) - self.viewStack.setCurrentWidget(doc.view) - doc.urlChanged.connect(self.slotUrlChanged) - doc.captionChanged.connect(self.updateCaption) - doc.statusChanged.connect(self.updateStatusBar) - doc.selectionChanged.connect(self.updateSelection) - self.updateCaption() - self.updateStatusBar() - self.updateSelection() - self.currentDocumentChanged(doc) # emit our signal - - def addDocument(self, doc): - """Internal. Add Document to our viewStack.""" - self.viewStack.addWidget(doc.view) - - def removeDocument(self, doc): - """Internal. Remove Document from our viewStack.""" - self.viewStack.removeWidget(doc.view) - if doc is self._currentDoc: - self.guiFactory().removeClient(doc.view) - self._currentDoc = None - - def view(self): - """Returns the current view or None if none.""" - if self._currentDoc: - return self._currentDoc.view - - def currentDocument(self): - """Returns the current Document or None if none.""" - return self._currentDoc - - def slotUrlChanged(self, doc=None): - """Called when the url of the current Document changes.""" - self.addToRecentFiles(doc) - self.currentDocumentChanged(doc or self._currentDoc) - - def updateCaption(self): - """Called when the window title needs to be redisplayed.""" - session = self.sessionManager().current() - caption = "{0}: ".format(session) if session else "" - doc = self.currentDocument() - if doc: - name = (self.showPath.isChecked() and doc.prettyUrl() or - doc.documentName()) - if len(name) > 72: - name = '...' + name[-69:] - caption += name - if doc.isModified(): - caption += " [{0}]".format(i18n("modified")) - self.sb_modified.setPixmap(KIcon("document-save").pixmap(16)) - else: - self.sb_modified.setPixmap(QPixmap()) - self.setCaption(caption) - - def updateStatusBar(self): - """Called when the status bar needs to be redisplayed.""" - doc = self.currentDocument() - pos = doc.view.cursorPositionVirtual() - line, col = pos.line()+1, pos.column() - self.sb_linecol.setText(i18n("Line: %1 Col: %2", line, col)) - self.sb_insmode.setText(doc.view.viewMode()) - - def updateSelection(self): - """Called when the selection changes.""" - doc = self.currentDocument() - enable = doc.view.selection() and not doc.view.selectionRange().isEmpty() - for a in self._selectionActions: - a.setEnabled(enable) - if doc.view.blockSelection(): - text, tip = i18n("BLOCK"), i18n("Block selection mode") - else: - text, tip = i18n("LINE"), i18n("Line selection mode") - self.sb_selmode.setText(" {0} ".format(text)) - self.sb_selmode.setToolTip(tip) - - def editKeys(self): - """Opens a window to edit the keyboard shortcuts.""" - with self.app.busyCursor(): - dlg = KShortcutsDialog(KShortcutsEditor.AllActions, - KShortcutsEditor.LetterShortcutsDisallowed, self) - for name, collection in self.allActionCollections(): - dlg.addCollection(collection, name) - dlg.configure() - - def allActionCollections(self): - """Iterator over KActionCollections. - - Yields all KActionCollections that need to be checked if the user - wants to alter a keyboard shortcut. - - Each item is a two-tuple (name, KActionCollection). - - """ - yield KGlobal.mainComponent().aboutData().programName(), self.actionCollection() - if self.view(): - yield None, self.view().actionCollection() - - def editToolbars(self): - """Opens a window to edit the toolbar(s).""" - conf = config("MainWindow") - self.saveMainWindowSettings(conf) - dlg = KEditToolBar(self.guiFactory(), self) - def newToolbarConfig(): - self.applyMainWindowSettings(conf) - self.setupGeneratedMenus() - dlg.newToolbarConfig.connect(newToolbarConfig) - dlg.setModal(True) - dlg.show() - - def newDocument(self): - """Create a new empty document.""" - self.app.createDocument().setActive() - - def openDocument(self): - """Open an existing document.""" - res = KEncodingFileDialog.getOpenUrlsAndEncoding( - self.app.defaultEncoding, - self.currentDocument().url().url() - or self.sessionManager().basedir() or self.app.defaultDirectory(), - '\n'.join(self.app.fileTypes + ["*|" + i18n("All Files")]), - self, i18n("Open File")) - docs = [self.app.openUrl(url, res.encoding) - for url in res.URLs if not url.isEmpty()] - if docs: - docs[-1].setActive() - - def addToRecentFiles(self, doc=None): - """Add url of document to recently opened files.""" - doc = doc or self.currentDocument() - if doc: - url = doc.url() - if not url.isEmpty() and url not in self.openRecent.urls(): - self.openRecent.addUrl(url) - - @pyqtSignature("KUrl") - def slotOpenRecent(self, url): - """Called by the open recent files action.""" - self.app.openUrl(url).setActive() - - def queryClose(self): - """Called when the user wants to close the MainWindow. - - Returns True if the application may quit. - - """ - if self.app.kapp.sessionSaving(): - sc = self.app.kapp.sessionConfig() - self.saveDocumentList(sc.group("documents")) - self.sessionManager().saveProperties(sc.group("session")) - # just ask, cancel at any time will keep all documents. - for d in self.app.history[::-1]: # iterate over a copy, current first - if d.isModified(): - d.setActive() - if not d.queryClose(): - return False # cancelled - # Then close the documents - self.currentDocumentChanged.clear() # disconnect all tools etc. - self.aboutToClose() - for d in self.app.history[:]: # iterate over a copy - d.close(False) - # save some settings - self.saveSettings() - return True - - def closeOtherDocuments(self): - """Close all documents except the current document.""" - # iterate over a copy, current first, except current document - docs = self.app.history[-2::-1] - for d in docs: - if d.isModified(): - if not d.queryClose(): - return # cancelled - for d in docs: - d.close(False) - - def readGlobalProperties(self, conf): - """Called on session restore, loads the list of open documents.""" - self.loadDocumentList(conf.group("documents")) - self.sessionManager().readProperties(conf.group("session")) - - def saveDocumentList(self, cg): - """Stores the list of documents to the given KConfigGroup.""" - urls = [d.url().url() for d in self.viewTabs.docs] # order of tabs - d = self.currentDocument() - current = self.viewTabs.docs.index(d) if d else -1 - cg.writePathEntry("urls", urls) - cg.writeEntry("active", current) - cg.sync() - - def loadDocumentList(self, cg): - """Loads the documents mentioned in the given KConfigGroup.""" - urls = cg.readPathEntry("urls", []) - active = cg.readEntry("active", 0) - if any(urls): - docs = [self.app.openUrl(KUrl(url)) for url in urls] - if docs: - if active < 0 or active >= len(docs): - active = len(docs) - 1 - docs[active].setActive() - - def loadSettings(self): - """Load some settings from our configfile.""" - self.openRecent.loadEntries(config("recent files")) - self.showPath.setChecked(config().readEntry("show full path", False)) - self.showTabs.setChecked(config().readEntry("show tabs", True)) - self.viewTabs.setVisible(self.showTabs.isChecked()) - - def saveSettings(self): - """Store settings in our configfile.""" - self.openRecent.saveEntries(config("recent files")) - config().writeEntry("show full path", self.showPath.isChecked()) - config().writeEntry("show tabs", self.showTabs.isChecked()) - # also all the tools: - for tool in self.tools.itervalues(): - tool.saveSettings() - # also the main editor object: - self.app.editor.writeConfig() - # write them back - config().sync() - - def createViewTabBar(self): - return ViewTabBar(self) - - def dragEnterEvent(self, event): - event.setAccepted(KUrl.List.canDecode(event.mimeData())) - - def dropEvent(self, event): - if KUrl.List.canDecode(event.mimeData()): - urls = KUrl.List.fromMimeData(event.mimeData()) - docs = map(self.app.openUrl, urls) - if docs: - docs[-1].setActive() - - -class ViewTabBar(QTabBar): - """The tab bar above the document editor view.""" - def __init__(self, mainwin): - QTabBar.__init__(self) - KAcceleratorManager.setNoAccel(self) - self.mainwin = mainwin - self.docs = [] - # get the documents to create their tabs. - for doc in mainwin.app.documents: - self.addDocument(doc) - if doc.isActive(): - self.setCurrentDocument(doc) - mainwin.app.documentCreated.connect(self.addDocument) - mainwin.app.documentClosed.connect(self.removeDocument) - mainwin.app.documentMaterialized.connect(self.setDocumentStatus) - self.currentChanged.connect(self.slotCurrentChanged) - mainwin.currentDocumentChanged.connect(self.setCurrentDocument) - try: - self.setTabsClosable - self.tabCloseRequested.connect(self.slotTabCloseRequested) - except AttributeError: - pass - try: - self.setMovable - self.tabMoved.connect(self.slotTabMoved) - except AttributeError: - pass - self.readSettings() - - def readSettings(self): - # closeable? only in Qt >= 4.6 - try: - self.setTabsClosable(config("tab bar").readEntry("close button", True)) - except AttributeError: - pass - - # expanding? only in Qt >= 4.5 - try: - self.setExpanding(config("tab bar").readEntry("expanding", False)) - except AttributeError: - pass - - # movable? only in Qt >= 4.5 - try: - self.setMovable(config("tab bar").readEntry("movable", True)) - except AttributeError: - pass - - def addDocument(self, doc): - if doc not in self.docs: - self.docs.append(doc) - self.blockSignals(True) - self.addTab('') - self.blockSignals(False) - self.setDocumentStatus(doc) - doc.urlChanged.connect(self.setDocumentStatus) - doc.captionChanged.connect(self.setDocumentStatus) - - def removeDocument(self, doc): - if doc in self.docs: - index = self.docs.index(doc) - self.docs.remove(doc) - self.blockSignals(True) - self.removeTab(index) - self.blockSignals(False) - - def setDocumentStatus(self, doc): - if doc in self.docs: - index = self.docs.index(doc) - self.setTabIcon(index, KIcon(doc.documentIcon() or "text-plain")) - self.setTabText(index, doc.documentName()) - - def setCurrentDocument(self, doc): - """ Raise the tab belonging to this document.""" - if doc in self.docs: - index = self.docs.index(doc) - self.blockSignals(True) - self.setCurrentIndex(index) - self.blockSignals(False) - - def slotCurrentChanged(self, index): - """ Called when the user clicks a tab. """ - self.docs[index].setActive() - - def slotTabCloseRequested(self, index): - """ Called when the user clicks the close button. """ - self.docs[index].close() - - def slotTabMoved(self, index_from, index_to): - """ Called when the user moved a tab. """ - doc = self.docs.pop(index_from) - self.docs.insert(index_to, doc) - - def contextMenuEvent(self, ev): - """ Called when the right mouse button is clicked on the tab bar. """ - tab = self.tabAt(ev.pos()) - if tab >= 0: - menu = KMenu() - self.addMenuActions(menu, self.docs[tab]) - menu.exec_(ev.globalPos()) - - def addMenuActions(self, menu, doc): - """ Populate the menu with actions relevant for the document. """ - g = KStandardGuiItem.save() - a = menu.addAction(g.icon(), g.text()) - a.triggered.connect(lambda: doc.save()) - g = KStandardGuiItem.saveAs() - a = menu.addAction(g.icon(), g.text()) - a.triggered.connect(lambda: doc.saveAs()) - menu.addSeparator() - g = KStandardGuiItem.close() - a = menu.addAction(g.icon(), g.text()) - a.triggered.connect(lambda: doc.close()) - - -class TabBar(KMultiTabBar): - """Our own tabbar with some nice defaults.""" - def __init__(self, orientation, parent, maxSize=18): - KMultiTabBar.__init__(self, orientation, parent) - self.setStyle(KMultiTabBar.KDEV3ICON) - if maxSize: - if orientation in (KMultiTabBar.Bottom, KMultiTabBar.Top): - self.setMaximumHeight(maxSize) - else: - self.setMaximumWidth(maxSize) - self._tools = [] - - def addTool(self, tool): - self._tools.append(tool) - self.appendTab(tool.icon().pixmap(16), tool._id, tool.title()) - tab = self.tab(tool._id) - tab.setFocusPolicy(Qt.NoFocus) - tab.setToolTip(u"{0}
{1}".format(tool.title(), - i18n("Right-click for tab options"))) - tab.setContextMenuPolicy(Qt.CustomContextMenu) - tab.clicked.connect(tool.toggle) - tab.setParent(tab.parent()) # BUG: otherwise SIP looses outer scope - tab.customContextMenuRequested.connect( - lambda pos: tool.showContextMenu(tab.mapToGlobal(pos))) - - def removeTool(self, tool): - self._tools.remove(tool) - self.removeTab(tool._id) - - def showTool(self, tool): - self.tab(tool._id).setState(True) - - def hideTool(self, tool): - self.tab(tool._id).setState(False) - - def updateState(self, tool): - tab = self.tab(tool._id) - tab.setIcon(tool.icon()) - tab.setText(tool.title()) - - -class Dock(QStackedWidget): - """A dock where tools can be added to. - - Hides itself when there are no tools visible. - When it receives a tool, a button is created in the associated tabbar. - - """ - def __init__(self, parent, tabbar, icon, title): - QStackedWidget.__init__(self, parent) - self.tabbar = tabbar - self.title = title - self.icon = icon and KIcon(icon) or KIcon() - self._tools = [] # a list of the tools we host - self._currentTool = None # the currently active tool, if any - self.hide() # by default - - def addTool(self, tool): - """ Add a tool to our tabbar, save dock and tabid in the tool """ - self.tabbar.addTool(tool) - self._tools.append(tool) - if tool.isActive(): - self.showTool(tool) - - def removeTool(self, tool): - """ Remove a tool from our dock. """ - self.tabbar.removeTool(tool) - self._tools.remove(tool) - if tool is self._currentTool: - self._currentTool = None - self.hide() - - def showTool(self, tool): - """Internal: only to be called by tool.show(). - - Use tool.show() to make a tool active. - - """ - if tool not in self._tools or tool is self._currentTool: - return - if self.indexOf(tool.widget) == -1: - self.addWidget(tool.widget) - self.setCurrentWidget(tool.widget) - self.tabbar.showTool(tool) - cur = self._currentTool - self._currentTool = tool - if cur: - cur.hide() - else: - self.show() - - def hideTool(self, tool): - """Internal: only to be called by tool.hide(). - - Use tool.hide() to make a tool inactive. - - """ - self.tabbar.hideTool(tool) - if tool is self._currentTool: - self._currentTool = None - self.hide() - - def currentTool(self): - return self._currentTool - - def updateState(self, tool): - self.tabbar.updateState(tool) - - -class DockDialog(QDialog): - """A QDialog that (re)docks itself when closed.""" - def __init__(self, tool): - QDialog.__init__(self, tool.mainwin) - QVBoxLayout(self).setContentsMargins(0, 0, 0, 0) - self.tool = tool - self.setAttribute(Qt.WA_DeleteOnClose, False) - self.updateState() - - def show(self): - # Take the widget by adding it to our layout - self.layout().addWidget(self.tool.widget) - if self.tool.dialogSize: - self.resize(self.tool.dialogSize) - QDialog.show(self) - if self.tool.dialogPos: - self.move(self.tool.dialogPos) - - def done(self, r): - self.tool.dialogSize = self.size() - self.tool.dialogPos = self.pos() - self.tool.dock() - QDialog.done(self, r) - - def updateState(self): - title = KDialog.makeStandardCaption(self.tool.title(), self, - KDialog.HIGCompliantCaption) - self.setWindowTitle(title) - self.setWindowIcon(self.tool.icon()) - - def keyPressEvent(self, e): - if e.key() != Qt.Key_Escape: - QDialog.keyPressEvent(self, e) - - -class Tool(object): - """A Tool, that can be docked or undocked in/from the MainWindow. - - Intended to be subclassed. - - """ - allowedPlaces = Top, Right, Bottom, Left - defaultHeight = 300 - defaultWidth = 500 - - helpAnchor, helpAppName = "", "" - - __instance_counter = 0 - - def __init__(self, mainwin, name, - title="", icon="", key="", dock=Right, - widget=None): - self._id = Tool.__instance_counter - self._active = False - self._docked = True - self._dock = None - self._dialog = None - self.dialogSize = None - self.dialogPos = None - self.mainwin = mainwin - self.name = name - mainwin.tools[name] = self - action = KAction(mainwin, triggered=self.slotAction) # action to toggle our view - mainwin.actionCollection().addAction("tool_" + name, action) - if key: - action.setShortcut(KShortcut(key)) - self.widget = widget - self.setTitle(title) - self.setIcon(icon) - self.setDock(dock) - Tool.__instance_counter += 1 - self.loadSettings() - - def action(self): - return self.mainwin.actionCollection().action("tool_" + self.name) - - def slotAction(self): - """Called when our action is triggered. - - Default behaviour is to toggle the visibility of our tool. - Override this to implement other behaviour when our action is called - (e.g. focus instead of hide). - - """ - self.toggle() - - def materialize(self): - """If not yet done, calls self.factory() to get the widget of our tool. - - The widget is stored in the widget instance attribute. - Use this to make tools 'lazy': only instantiate the widget and load - other modules if needed as soon as the user wants to show the tool. - - """ - if self.widget is None: - with self.mainwin.app.busyCursor(): - self.widget = self.factory() - - def factory(self): - """Should return this Tool's widget when it must become visible. - - I you didn't supply a widget on init, you must override this method. - - """ - return QWidget() - - def delete(self): - """Completely remove the tool. - - Its association with the mainwindow is removed, and it will be - garbage collected as soon as the last reference to it is lost. - - """ - if not self._docked: - self.dock() - self._dock.removeTool(self) - if self.widget: - sip.delete(self.widget) - if self._dialog: - sip.delete(self._dialog) - sip.delete(self.action()) - del self._dock, self.widget, self._dialog - del self.mainwin.tools[self.name] - - def show(self): - """ Bring our tool into view. """ - self.materialize() - if self._docked: - self._active = True - self._dock.showTool(self) - else: - self._dialog.raise_() - - def hide(self): - """ Hide our tool. """ - if self._docked: - self._active = False - self._dock.hideTool(self) - view = self.mainwin.view() - if view: - view.setFocus() - - def toggle(self): - """ Toggle visibility if docked. """ - if self._docked: - if self._active: - self.hide() - else: - self.show() - - def isActive(self): - """ Returns True if the tool is currently the active one in its dock.""" - return self._active - - def isDocked(self): - """ Returns True if the tool is docked. """ - return self._docked - - def setDock(self, place): - """ Puts the tool in one of the four places. - - place is one of (KMultiTabBar).Top, Right, Bottom, Left - - """ - dock = self.mainwin.docks.get(place, self._dock) - if dock is self._dock: - return - if self._docked: - if self._dock: - self._dock.removeTool(self) - dock.addTool(self) - self._dock = dock - - def undock(self): - """ Undock our widget """ - if not self._docked: - return - self._dock.removeTool(self) - self.materialize() - self._docked = False - if not self._dialog: - size = self._dock.size() - if size.height() <= 0: - size.setHeight(self.defaultHeight) - if size.width() <= 0: - size.setWidth(self.defaultWidth) - self.dialogSize = size - self._dialog = DockDialog(self) - self._dialog.show() - self.widget.show() - - def dock(self): - """ Dock and hide the dialog window """ - if self._docked: - return - self._dialog.hide() - self._docked = True - self._dock.addTool(self) - - def icon(self): - return self._icon - - def setIcon(self, icon): - self._icon = icon and KIcon(icon) or KIcon() - self.action().setIcon(self._icon) - self.updateState() - - def title(self): - return self._title - - def setTitle(self, title): - self._title = title - self.action().setText(self._title) - self.updateState() - - def updateState(self): - if self._docked: - if self._dock: - self._dock.updateState(self) - else: - self._dialog.updateState() - - def showContextMenu(self, globalPos): - """Show a popup menu to manipulate this tool.""" - m = KMenu(self.mainwin) - places = [place for place in Left, Right, Top, Bottom - if place in self.allowedPlaces - and self.mainwin.docks.get(place, self._dock) is not self._dock] - if places: - m.addTitle(KIcon("transform-move"), i18n("Move To")) - for place in places: - dock = self.mainwin.docks[place] - a = m.addAction(dock.icon, dock.title) - a.triggered.connect((lambda place: lambda: self.setDock(place))(place)) - m.addSeparator() - a = m.addAction(KIcon("tab-detach"), i18n("Undock")) - a.triggered.connect(self.undock) - self.addMenuActions(m) - if self.helpAnchor or self.helpAppName: - m.addSeparator() - a = m.addAction(KIcon("help-contextual"), KStandardGuiItem.help().text()) - a.triggered.connect(self.help) - m.aboutToHide.connect(m.deleteLater) - m.popup(globalPos) - - def addMenuActions(self, menu): - """Use this to add your own actions to a tool menu.""" - pass - - def config(self): - """ Return a suitable configgroup for our settings. """ - return config("tool_" + self.name) - - def loadSettings(self): - """ Do not override this method, use readConfig instead. """ - conf = self.config() - self.readConfig(conf) - - def saveSettings(self): - """ Do not override this method, use writeConfig instead. """ - conf = self.config() - self.writeConfig(conf) - - def readConfig(self, conf): - """Implement this in your subclass to read additional config data.""" - pass - - def writeConfig(self, conf): - """Implement this in your subclass to write additional config data.""" - pass - - def help(self): - """Invokes Help on our tool. - - See the helpAnchor and helpAppName attributes. - - """ - KToolInvocation.invokeHelp(self.helpAnchor, self.helpAppName) - - -class KPartTool(Tool): - """A Tool where the widget is loaded via the KParts system.""" - - # set this to the library name you want to load - _partlibrary = "" - # set this to the name of the app containing this part - _partappname = "" - - def __init__(self, mainwin, name, title="", icon="", key="", dock=Right): - self.part = None - self.failed = False - Tool.__init__(self, mainwin, name, title, icon, key, dock) - - def factory(self): - if self.part: - return - factory = KPluginLoader(self._partlibrary).factory() - if factory: - part = factory.create(self.mainwin) - if part: - self.part = part - part.destroyed.connect(self.slotDestroyed, Qt.DirectConnection) - QTimer.singleShot(0, self.partLoaded) - return part.widget() - self.failed = True - return QLabel("

{0}

{1}

".format( - i18n("Could not load %1", self._partlibrary), - i18n("Please install %1", self._partappname or self._partlibrary))) - - def partLoaded(self): - """ Called when part is loaded. Use this to apply settings, etc.""" - pass - - def delete(self): - if self.part: - self.part.destroyed.disconnect(self.slotDestroyed) - super(KPartTool, self).delete() - - def slotDestroyed(self): - self.part = None - self.failed = False - self.widget = None - if not sip.isdeleted(self.mainwin): - if self._docked: - self.hide() - elif self._dialog: - self._active = False - self._dialog.done(0) - - def openUrl(self, url): - """ Expects KUrl.""" - if self.part: - self.part.openUrl(url) - - -class UserShortcutManager(object): - """Manages user-defined keyboard shortcuts. - - Keyboard shortcuts can be loaded without loading the module they belong to. - If a shortcut is triggered, the module is loaded on demand and the action - triggered. - - You should subclass this base class and implement the widget() and client() - methods. - - """ - - # which config group to store our shortcuts - configGroup = "user shortcuts" - - # the shortcut type to use - shortcutContext = Qt.WidgetWithChildrenShortcut - - def __init__(self, mainwin): - self.mainwin = mainwin - self._collection = KActionCollection(self.widget()) - self._collection.setConfigGroup(self.configGroup) - self._collection.addAssociatedWidget(self.widget()) - # load the shortcuts - group = KGlobal.config().group(self.configGroup) - for key in group.keyList(): - if group.readEntry(key, ""): - self.addAction(key) - self._collection.readSettings() - - def widget(self): - """Should return the widget where the actions should be added to.""" - pass - - def client(self): - """Should return the object that can further process our actions. - - Most times this will be a kateshell.shortcut.ShortcutClientBase instance. - - It should have the following methods: - - actionTriggered(name) - - populateAction(name, action) - - """ - pass - - def addAction(self, name): - """(Internal) Create a new action with name name. - - If existing, return the existing action. - - """ - action = self._collection.action(name) - if not action: - action = self._collection.addAction(name) - action.setShortcutContext(self.shortcutContext) - action.triggered.connect(lambda: self.client().actionTriggered(name)) - return action - - def actionCollection(self): - """Returns the action collection, populated with texts and icons.""" - for action in self._collection.actions()[:]: - if action.shortcut().isEmpty(): - sip.delete(action) - else: - self.client().populateAction(action.objectName(), action) - return self._collection - - -class SessionManager(object): - """Manages sessions (basically lists of open documents). - - Sessions are stored in the appdata/sessions configfile, with each session - in its own group. - - """ - sessionChanged = Signal() - sessionAdded = Signal() - - def __init__(self, mainwin): - self.mainwin = mainwin - mainwin.aboutToClose.connect(self.shutdown) - self._current = None - self.sessionConfig = None - self.reConfig() - - def reConfig(self): - """Destroys and recreate the sessions KConfig object. - - Intended as a workaround for BUG 192266 in bugs.KDE.org. - Otherwise deleting sessions does not work well. - Call this after using deleteGroup. - """ - if self.sessionConfig: - self.sessionConfig.sync() - sip.delete(self.sessionConfig) - self.sessionConfig = KConfig("sessions", KConfig.NoGlobals, "appdata") - - def config(self, session=None): - """Returns the config group for the named or current session. - - If session=False or 0, returns always the root KConfigGroup. - If session=None (default), returns the group for the current session, - if the current session is None, returns the root group. - - """ - if session: - return self.sessionConfig.group(session) - if session is None and self._current: - return self.sessionConfig.group(self._current) - return self.sessionConfig.group(None) - - def manage(self): - """Opens the Manage Sessions dialog.""" - self.managerDialog().show() - - @cacheresult - def managerDialog(self): - return self.createManagerDialog() - - def createManagerDialog(self): - """Override this to return a subclass of ManagerDialog.""" - import kateshell.sessions - return kateshell.sessions.ManagerDialog(self) - - @cacheresult - def editorDialog(self): - """Returns a dialog to edit properties of the session.""" - return self.createEditorDialog() - - def createEditorDialog(self): - """Override this to return a subclass of EditorDialog.""" - import kateshell.sessions - return kateshell.sessions.EditorDialog(self) - - def switch(self, name): - """Switches to the given session. - - Use None or "none" for the no-session state. - If the given session does not exist, it is created from the current - setup. - - """ - if name == "none": - name = None - self.autoSave() - - if name: - if self.config(False).hasGroup(name): - # existing group, close all the documents - docs = self.mainwin.app.history[:] # copy - for d in docs[::-1]: # in reversed order - if not d.queryClose(): - return False - for d in docs: - d.close(False) - self.mainwin.loadDocumentList(self.config(name)) - else: - # this group did not exist, create it - self.addSession(name) - self._current = name - self.sessionChanged() - return True - - def names(self): - """Returns a list of names of all sessions.""" - names = self.sessionConfig.groupList() - names.sort(key=naturalsort) - return names - - def current(self): - """Returns the name of the current session, or None if none.""" - return self._current - - def save(self): - """Saves the current session.""" - if self._current is None: - self.new() - else: - self.mainwin.saveDocumentList(self.config()) - - def autoSave(self): - """Saves the current session if the session wants to be autosaved.""" - if self._current and self.config().readEntry("autosave", True): - self.save() - self.config().sync() - - def shutdown(self): - """Called on application exit.""" - self.config(False).writeEntry("lastused", self.current() or "none") - self.autoSave() - - def restoreLastSession(self): - """Restores the last saved session.""" - name = self.config(False).readEntry("lastused", "none") - if name != "none": - self.switch(name) - - def saveProperties(self, conf): - """Save our state in a session group of QSessionManager.""" - conf.writeEntry("name", self._current or "none") - conf.sync() - - def readProperties(self, conf): - """Restore our state from a QSessionManager session group.""" - name = conf.readEntry("name", "none") - self._current = None if name == "none" else name - if self._current: - self.sessionChanged() - - def new(self): - """Prompts for a name for a new session. - - If the user enters a name and accepts the dialog, the session is - created and switched to. - - """ - name = self.editorDialog().edit() - if name: - # switch there with the current document list - self.mainwin.saveDocumentList(self.config(name)) - self._current = name - self.sessionChanged() - self.sessionAdded() - - def deleteSession(self, name): - """Deletes the named session.""" - if name == self._current: - self._current = None - self.sessionChanged() - self.config(name).deleteGroup() - self.reConfig() - - def renameSession(self, old, new): - """Renames a session. - - The document list is taken over but not the other settings. - Both names must be valid session names, and old must exist. - - """ - oldConfig = self.config(old) - newConfig = self.config(new) - newConfig.writePathEntry("urls", oldConfig.readPathEntry("urls", [])) - newConfig.writeEntry("active", oldConfig.readEntry("active", 0)) - - if old == self._current: - self._current = new - self.sessionChanged() - self.config(old).deleteGroup() - self.reConfig() - - def addSession(self, name): - """Adds the named session, with the current document list.""" - if not self.config(False).hasGroup(name): - self.mainwin.saveDocumentList(self.config(name)) - - def basedir(self): - """Returns the configured base directory for this session, if any.""" - if self._current: - return self.config().readPathEntry("basedir", "") - diff -Nru frescobaldi-1.2.0/python/kateshell/sessions.py frescobaldi-2.0.0/python/kateshell/sessions.py --- frescobaldi-1.2.0/python/kateshell/sessions.py 2010-09-03 20:31:17.000000000 +0000 +++ frescobaldi-2.0.0/python/kateshell/sessions.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,215 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Code for managing editor sessions. -See SessionManager (started on startup) in mainwindow.py. -""" - -from PyQt4.QtGui import QCheckBox, QGridLayout, QLabel, QLineEdit, QVBoxLayout, QWidget -from PyKDE4.kdecore import KUrl, i18n -from PyKDE4.kdeui import KDialog, KHBox, KIcon, KMessageBox, KPageDialog, KStandardGuiItem -from PyKDE4.kio import KFile, KUrlRequester - -import kateshell.widgets -from kateshell.app import cacheresult - - -class ManagerDialog(KDialog): - """A dialog to list the sessions and edit, add or delete them.""" - def __init__(self, manager): - KDialog.__init__(self, manager.mainwin) - self.sm = manager - self.setCaption(i18n("Manage Sessions")) - self.setButtons(KDialog.ButtonCode(KDialog.Help | KDialog.Close)) - self.setHelp("sessions") - self.sessions = SessionList(self) - self.setMainWidget(self.sessions) - self.sm.sessionAdded.connect(self.load) - - def show(self): - self.load() - KDialog.show(self) - - def load(self): - self.sessions.load() - - -class SessionList(kateshell.widgets.ListEdit): - """Manage the list of sessions.""" - def __init__(self, dialog): - self.sm = dialog.sm # SessionManager - super(SessionList, self).__init__(dialog) - - def load(self): - names, current = self.sm.names(), self.sm.current() - self.setValue(names) - if current in names: - self.setCurrentRow(names.index(current)) - - def removeItem(self, item): - self.sm.deleteSession(item.text()) - super(SessionList, self).removeItem(item) - - def openEditor(self, item): - name = self.sm.editorDialog().edit(item.text()) - if name: - item.setText(name) - return True - - -class EditorDialog(KPageDialog): - """A dialog to edit properties of a session. - - You can subclass this to add more settings to a session config dialog. - Add more pages in the __init__() method, and inherit the validate() method - to check the input if necessary. Implement the load and save methods to - load and save the settings. - - """ - def __init__(self, manager): - super(EditorDialog, self).__init__(manager.mainwin) - self.mainwin = manager.mainwin - self.sm = manager - self.setButtons(KDialog.ButtonCode( - KDialog.Help | KDialog.Ok | KDialog.Cancel)) - self.setFaceType(KPageDialog.List) - self.setHelp("sessions") - - # First page with name and auto-save option - page = QWidget(self) - item = self.firstPage = self.addPage(page, i18n("Session")) - item.setHeader(i18n("Properties of this session")) - item.setIcon(KIcon("configure")) - - layout = QGridLayout(page) - - l = QLabel(i18n("Name:")) - self.name = QLineEdit() - l.setBuddy(self.name) - layout.addWidget(l, 0, 0) - layout.addWidget(self.name, 0, 1) - - self.autosave = QCheckBox(i18n( - "Always save the list of documents in this session")) - layout.addWidget(self.autosave, 1, 1) - - l = QLabel(i18n("Base directory:")) - self.basedir = KUrlRequester() - self.basedir.setMode(KFile.Mode( - KFile.Directory | KFile.ExistingOnly | KFile.LocalOnly)) - l.setBuddy(self.basedir) - layout.addWidget(l, 2, 0) - layout.addWidget(self.basedir, 2, 1) - - def edit(self, name=None): - """Edit the named or new (if not given) session.""" - # load the session - self._originalName = name - if name: - self.setCaption(i18n("Edit session: %1", name)) - self.name.setText(name) - conf = self.sm.config(name) - self.autosave.setChecked(conf.readEntry("autosave", True)) - self.basedir.setUrl(KUrl(conf.readPathEntry("basedir", ""))) - self.loadSessionConfig(conf) - else: - self.setCaption(i18n("Edit new session")) - self.name.clear() - self.name.setFocus() - self.autosave.setChecked(True) - self.basedir.setUrl(KUrl()) - self.loadSessionDefaults() - self.setCurrentPage(self.firstPage) - if self.exec_(): - # save - name = self.name.text() - if self._originalName and name != self._originalName: - self.sm.renameSession(self._originalName, name) - conf = self.sm.config(name) - conf.writeEntry("autosave", self.autosave.isChecked()) - conf.writePathEntry("basedir", self.basedir.url().path()) - self.saveSessionConfig(conf) - return name - - def done(self, result): - if not result or self.validate(): - super(EditorDialog, self).done(result) - - def validate(self): - """Checks if the input is acceptable. - - If this method returns True, the dialog is accepted when OK is clicked. - Otherwise a messagebox could be displayed, and the dialog will remain - visible. - """ - # strip off whitespace - name = self.name.text().strip() - self.name.setText(name) - - if not name: - self.setCurrentPage(self.firstPage) - self.name.setFocus() - KMessageBox.error(self, i18n("Please enter a session name.")) - if self._originalName: - self.name.setText(self._originalName) - return False - - if name == 'none': - self.setCurrentPage(self.firstPage) - self.name.setFocus() - KMessageBox.error(self, i18n( - "Please do not use the name '%1'.", "none")) - return False - - if '&' in name: - self.setCurrentPage(self.firstPage) - self.name.setFocus() - KMessageBox.error(self, i18n( - "Please do not use the ampersand (&) character " - "in a session name.")) - return False - - if self._originalName != name and name in self.sm.names(): - self.setCurrentPage(self.firstPage) - self.name.setFocus() - if KMessageBox.warningContinueCancel(self, i18n( - "Another session with the name %1 exists already.\n\n" - "Do you want to overwrite it?", name), None, - KStandardGuiItem.overwrite(), KStandardGuiItem.cancel(), - "session_overwrite") == KMessageBox.Cancel: - return False - - return True - - def loadSessionDefaults(self): - """Implement to set defaults for your new session.""" - pass - - def loadSessionConfig(self, conf): - """Implement to load settings from the config group for this session.""" - pass - - def saveSessionConfig(self, conf): - """Implement to save settings to the config group for this session.""" - pass - - diff -Nru frescobaldi-1.2.0/python/kateshell/shortcut.py frescobaldi-2.0.0/python/kateshell/shortcut.py --- frescobaldi-1.2.0/python/kateshell/shortcut.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/kateshell/shortcut.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,234 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Helper classes for communication with UserShortcutManager (in mainwindow.py) -and general user shortcut stuff. - -In separate module so this can be lazy-loaded on demand. -""" - -import weakref - -from PyQt4.QtGui import QGridLayout, QKeySequence, QLabel -from PyKDE4.kdecore import KGlobal, i18n -from PyKDE4.kdeui import KDialog, KKeySequenceWidget, KShortcut - -from kateshell.app import blockSignals - - -class ShortcutClientBase(object): - """ - Abstract base class for objects that need to manage shortcuts. - """ - def __init__(self, userShortcutManager): - self._manager = userShortcutManager - self._collection = userShortcutManager._collection - - def populateAction(self, name, action): - """ - Must implement this to populate the action based on the given name. - """ - pass - - def actionTriggered(self, name): - """ - Must implement this to perform the action that belongs to name. - """ - pass - - -class ShortcutClient(ShortcutClientBase): - """ - Base class for objects that need to manage shortcuts. - """ - def resolveName(self, name): - return name - - def shortcutActions(self): - """ - Yields two-tuples(name, action) for all our actions. - """ - for action in self._collection.actions()[:]: # copy - yield action.objectName(), action - - def shortcut(self, name): - """ - Returns the shortcut for action, if existing. - """ - resolvedName = self.resolveName(name) - action = self._collection.action(resolvedName) - if action: - if not action.shortcut().isEmpty(): - return action.shortcut() - self.removeShortcut(name) - - def setShortcut(self, name, shortcut): - """ - Sets the shortcut for the named action. - Creates an action if not existing. - Deletes the action if set to an empty key sequence. - """ - resolvedName = self.resolveName(name) - if not shortcut.isEmpty(): - action = self._manager.addAction(resolvedName) - action.setShortcut(shortcut) - self._collection.writeSettings(None, True, action) - else: - self.removeShortcut(name) - - def removeShortcut(self, name): - """ - Deletes the given action if existing. - """ - resolvedName = self.resolveName(name) - action = self._collection.action(resolvedName) - if action: - action.deleteLater() - KGlobal.config().group(self._manager.configGroup).deleteEntry(resolvedName) - - def shortcuts(self): - """ - Returns the list of names we have non-empty shortcuts for. - """ - return [name - for name, action in self.shortcutActions() - if not action.shortcut().isEmpty()] - - def shakeHands(self, names): - """ - Deletes all actions not in names, and returns a list of the names - we have valid actions for. - """ - result = [] - for name, action in self.shortcutActions(): - if name not in names: - self.removeShortcut(name) - elif not action.shortcut().isEmpty(): - result.append(name) - return result - - def shortcutText(self, name): - """ - Returns the shortcut keys as a readable string, e.g. "Ctrl+Alt+D" - """ - key = self.shortcut(name) - return key and key.toList()[0].toString() or '' - - def keySetCheckActionCollections(self, keySequenceWidget): - keySequenceWidget.setCheckActionCollections( - [coll for name, coll in self._manager.mainwin.allActionCollections()]) - - def keyLoadShortcut(self, keySequenceWidget, name): - """ - Sets the KKeySequenceWidget in key to the sequence stored for name. - """ - key = self.shortcut(name) - with blockSignals(keySequenceWidget) as w: - w.setKeySequence(key and key.toList()[0] or QKeySequence()) - - def keySaveShortcut(self, keySequenceWidget, name, keySequence = None): - """ - Stores the shortcut in the KKeySequenceWidget under 'name'. - """ - if keySequence is None: - keySequence = keySequenceWidget.keySequence() - keySequenceWidget.applyStealShortcut() - self.setShortcut(name, KShortcut(keySequence)) - - def editShortcut(self, name, title, icon=None, globalPos=None): - """ - Shows a dialog to set a keyboard shortcut for a name (string). - The title argument should contain a description for this action. - """ - dlg = KDialog(self._manager.mainwin) - dlg.setCaption(i18n("Configure Keyboard Shortcut")) - dlg.setButtons(KDialog.ButtonCode(KDialog.Ok | KDialog.Cancel)) - l = QGridLayout(dlg.mainWidget()) - l.setHorizontalSpacing(12) - if icon: - pic = QLabel() - pic.setPixmap(icon.pixmap(22)) - l.addWidget(pic, 0, 0) - l.addWidget(QLabel("

{0}
{1}

".format( - i18n("Press the button to configure the keyboard shortcut for:"), title)), 0, 1) - key = KKeySequenceWidget() - l.addWidget(key, 1, 1) - self.keySetCheckActionCollections(key) - self.keyLoadShortcut(key, name) - if dlg.exec_(): - self.keySaveShortcut(key, name) - - -class UserShortcutDispatcher(ShortcutClientBase): - """ - Communicates with a UserShortcuts object to handle shortcuts for - different clients. - - Objects that wants to use this class can either mix it in or instantiate - it as an helper object. - - Clients register with a string name, and all the shortcut names for that - client get that name prepended. - """ - def __init__(self, userShortcutManager): - self._manager = userShortcutManager - self._clients = weakref.WeakValueDictionary() - - def registerClient(self, client, name): - self._clients[name] = client - - def populateAction(self, name, action): - """ Dispatch to the correct client. """ - if ':' in name: - client, name = name.split(':', 1) - if client in self._clients: - self._clients[client].populateAction(name, action) - - def actionTriggered(self, name): - """ Dispatch to the correct client. """ - if ':' in name: - client, name = name.split(':', 1) - if client in self._clients: - self._clients[client].actionTriggered(name) - - -class ShortcutDispatcherClient(ShortcutClient): - """ - Base class for clients of a UserShortcutDispatcher. - """ - def __init__(self, dispatcher, name): - ShortcutClient.__init__(self, dispatcher._manager) - dispatcher.registerClient(self, name) - self._name = name - - def resolveName(self, name): - return self._name + ":" + name - - def shortcutActions(self): - """ - Yields two-tuples(name, action) for all our actions. - """ - for action in self._collection.actions()[:]: # copy - if action.objectName().startswith(self._name + ":"): - yield action.objectName().split(":", 1)[1], action - - diff -Nru frescobaldi-1.2.0/python/kateshell/widgets.py frescobaldi-2.0.0/python/kateshell/widgets.py --- frescobaldi-1.2.0/python/kateshell/widgets.py 2010-09-05 20:57:05.000000000 +0000 +++ frescobaldi-2.0.0/python/kateshell/widgets.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,298 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Some nice widgets. -""" - -import os - -from PyQt4.QtCore import QRegExp, QTimeLine -from PyQt4.QtGui import ( - QFileDialog, QGridLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem, - QPainter, QPixmap, QRegExpValidator, QWidget) -from PyKDE4.kdecore import i18n -from PyKDE4.kdeui import ( - KDialog, KLineEdit, KPushButton, KStandardGuiItem, KVBox) - -from signals import Signal - - -class ExecLineEdit(QLineEdit): - """ - A QLineEdit to enter a filename or path. - The background changes to red if the entered path is not an - executable command. - """ - def __init__(self, *args): - QLineEdit.__init__(self, *args) - self.textChanged.connect(self._checkexec) - - def _get(self, filename): - return filename - - def _checkexec(self, filename): - if not findexe(self._get(filename)): - self.setStyleSheet("QLineEdit { background-color: #FAA }") - else: - self.setStyleSheet("") - - -class ExecArgsLineEdit(ExecLineEdit): - """ - An ExecLineEdit that allows arguments in the command string. - """ - def _get(self, filename): - if filename: - return filename.split()[0] - else: - return '' - - -class ListEdit(QWidget): - """A widget to edit a list of items (e.g. a list of directories).""" - - # emitted when anything changed in the listbox. - changed = Signal() - - def __init__(self, *args, **kwargs): - QWidget.__init__(self, *args, **kwargs) - layout = QGridLayout(self) - self.setLayout(layout) - - self.addButton = KPushButton(KStandardGuiItem.add()) - self.editButton = KPushButton(KStandardGuiItem.configure()) - self.removeButton = KPushButton(KStandardGuiItem.remove()) - self.listBox = QListWidget() - - layout.setContentsMargins(1, 1, 1, 1) - layout.setSpacing(0) - layout.addWidget(self.listBox, 0, 0, 4, 1) - layout.addWidget(self.addButton, 0, 1) - layout.addWidget(self.editButton, 1, 1) - layout.addWidget(self.removeButton, 2, 1) - - @self.addButton.clicked.connect - def addClicked(): - item = self.createItem() - if self.openEditor(item): - self.addItem(item) - - @self.editButton.clicked.connect - def editClicked(): - item = self.listBox.currentItem() - item and self.editItem(item) - - @self.removeButton.clicked.connect - def removeClicked(): - item = self.listBox.currentItem() - if item: - self.removeItem(item) - - @self.listBox.itemDoubleClicked.connect - def itemDoubleClicked(item): - item and self.editItem(item) - - self.listBox.model().layoutChanged.connect(self.changed) - - def updateSelection(): - selected = bool(self.listBox.currentItem()) - self.editButton.setEnabled(selected) - self.removeButton.setEnabled(selected) - self.changed.connect(updateSelection) - self.listBox.itemSelectionChanged.connect(updateSelection) - updateSelection() - - def createItem(self): - return QListWidgetItem() - - def addItem(self, item): - self.listBox.addItem(item) - self.itemChanged(item) - self.changed() - - def removeItem(self, item): - self.listBox.takeItem(self.listBox.row(item)) - self.changed() - - def editItem(self, item): - if self.openEditor(item): - self.itemChanged(item) - self.changed() - - def setCurrentItem(self, item): - self.listBox.setCurrentItem(item) - - def setCurrentRow(self, row): - self.listBox.setCurrentRow(row) - - def openEditor(self, item): - """Opens an editor (dialog) for the item. - - Returns True if the dialog was accepted and the item edited. - Returns False if the dialog was cancelled (the item must be left - unedited). - """ - pass - - def itemChanged(self, item): - """Called after an item has been added or edited. - - Re-implement to do something at this moment if needed, e.g. alter the - text or display of other items. - """ - pass - - def setValue(self, strings): - """Sets the listbox to a list of strings.""" - self.listBox.clear() - self.listBox.addItems(strings) - self.changed() - - def value(self): - """Returns the list of paths in the listbox.""" - return [self.listBox.item(i).text() - for i in range(self.listBox.count())] - - def setItems(self, items): - """Sets the listbox to a list of items.""" - self.listBox.clear() - for item in items: - self.listBox.addItem(item) - self.changed() - - def items(self): - """Returns the list of items in the listbox.""" - return [self.listBox.item(i) - for i in range(self.listBox.count())] - - def clear(self): - """Clears the listbox.""" - self.listBox.clear() - self.changed() - - -class FilePathEdit(ListEdit): - """ - A widget to edit a list of directories (e.g. a file path). - """ - def __init__(self, *args, **kwargs): - super(FilePathEdit, self).__init__(*args, **kwargs) - - def openEditor(self, item): - """Asks the user for an (existing) directory.""" - directory = item.text() - directory = QFileDialog.getExistingDirectory(self, None, directory) - if directory: - item.setText(directory) - return True - return False - - -class StackFader(QWidget): - """ - A widget that creates smooth transitions in a QStackedWidget. - """ - def __init__(self, stackedWidget): - QWidget.__init__(self, stackedWidget) - self.curIndex = None - self.timeline = QTimeLine() - self.timeline.setDuration(333) - self.timeline.finished.connect(self.hide) - self.timeline.valueChanged.connect(self.animate) - stackedWidget.currentChanged.connect(self.start) - self.hide() - - def start(self, index): - if self.curIndex is not None: - stack = self.parent() - old, new = stack.widget(self.curIndex), stack.widget(index) - if old and new: - self.old_pixmap = QPixmap(new.size()) - old.render(self.old_pixmap) - self.pixmap_opacity = 1.0 - self.resize(new.size()) - self.timeline.start() - self.raise_() - self.show() - self.curIndex = index - - def paintEvent(self, ev): - painter = QPainter() - painter.begin(self) - painter.setOpacity(self.pixmap_opacity) - painter.drawPixmap(0, 0, self.old_pixmap) - painter.end() - - def animate(self, value): - self.pixmap_opacity = 1.0 - value - self.repaint() - - -# some handy "static" functions -def promptText(parent, message, title = None, text="", rx=None, help=None): - """ - Prompts for a text. Returns None on cancel, otherwise the input string. - rx = if given, regexp string that the input must validate against - help = if given, the docbook id in the help menu handbook. - """ - d = KDialog(parent) - buttons = KDialog.Ok | KDialog.Cancel - if help: - buttons |= KDialog.Help - d.setHelp(help) - d.setButtons(KDialog.ButtonCode(buttons)) - if title: - d.setCaption(title) - v = KVBox() - v.setSpacing(4) - d.setMainWidget(v) - QLabel(message, v) - edit = KLineEdit(v) - if rx: - edit.setValidator(QRegExpValidator(QRegExp(rx), edit)) - edit.setText(text) - d.show() - edit.setFocus() - if d.exec_(): - return edit.text() - - -# utility functions used by above classes: -def isexe(path): - """ - Return path if it is an executable file, otherwise False - """ - return os.access(path, os.X_OK) and path - -def findexe(filename): - """ - Look up a filename in the system PATH, and return the full - path if it can be found. If the path is absolute, return it - unless it is not an executable file. - """ - if os.path.isabs(os.path.expanduser(filename)): - return isexe(os.path.expanduser(filename)) - for p in os.environ.get("PATH", os.defpath).split(os.pathsep): - if isexe(os.path.join(p, filename)): - return os.path.join(p, filename) - return False - diff -Nru frescobaldi-1.2.0/python/ly/articulation.py frescobaldi-2.0.0/python/ly/articulation.py --- frescobaldi-1.2.0/python/ly/articulation.py 2010-01-28 14:30:17.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/articulation.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -shorthands = { - 'marcato': '^', - 'stopped': '+', - 'tenuto': '-', - 'staccatissimo': '|', - 'accent': '>', - 'staccato': '.', - 'portato': '_', - } - -def groups(i18nFunc=None): - i18n = i18nFunc or (lambda s: s) - return ( - (i18n("Articulation"), ( - ('accent', i18n("Accent")), - ('marcato', i18n("Marcato")), - ('staccatissimo', i18n("Staccatissimo")), - ('staccato', i18n("Staccato")), - ('portato', i18n("Portato")), - ('tenuto', i18n("Tenuto")), - ('espressivo', i18n("Espressivo")), - )), - (i18n("Ornaments"), ( - ('trill', i18n("Trill")), - ('prall', i18n("Prall")), - ('mordent', i18n("Mordent")), - ('turn', i18n("Turn")), - ('prallprall', i18n("Prall prall")), - ('prallmordent', i18n("Prall mordent")), - ('upprall', i18n("Up prall")), - ('downprall', i18n("Down prall")), - ('upmordent', i18n("Up mordent")), - ('downmordent', i18n("Down mordent")), - ('prallup', i18n("Prall up")), - ('pralldown', i18n("Prall down")), - ('lineprall', i18n("Line prall")), - ('reverseturn', i18n("Reverse turn")), - )), - (i18n("Signs"), ( - ('fermata', i18n("Fermata")), - ('shortfermata', i18n("Short fermata")), - ('longfermata', i18n("Long fermata")), - ('verylongfermata', i18n("Very long fermata")), - ('segno', i18n("Segno")), - ('coda', i18n("Coda")), - ('varcoda', i18n("Varcoda")), - ('signumcongruentiae', i18n("Signumcongruentiae")), - )), - (i18n("Other"), ( - ('upbow', i18n("Upbow")), - ('downbow', i18n("Downbow")), - ('snappizzicato', i18n("Snappizzicato")), - ('open', i18n("Open (e.g. brass)")), - ('stopped', i18n("Stopped (e.g. brass)")), - ('flageolet', i18n("Flageolet")), - ('thumb', i18n("Thumb")), - ('lheel', i18n("Left heel")), - ('rheel', i18n("Right heel")), - ('ltoe', i18n("Left toe")), - ('rtoe', i18n("Right toe")), - ('halfopen', i18n("Half open (e.g. hi-hat)")), - )), - ) - -def articulations(i18nFunc=None): - """ - Yields two-tuples (name, translated title) for all articulations, - usable to e.g. create a dict. - """ - for title, group in groups(i18nFunc): - for articulation in group: - yield articulation - diff -Nru frescobaldi-1.2.0/python/ly/colors.py frescobaldi-2.0.0/python/ly/colors.py --- frescobaldi-1.2.0/python/ly/colors.py 2010-01-28 14:03:59.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/colors.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,705 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -LilyPond named colors, taken from LilyPond source files -""" - -colors_predefined = ( - # name, (r, g, b) - ('black', (0.0, 0.0, 0.0)), - ('white', (1.0, 1.0, 1.0)), - ('red', (1.0, 0.0, 0.0)), - ('green', (0.0, 1.0, 0.0)), - ('blue', (0.0, 0.0, 1.0)), - ('cyan', (0.0, 1.0, 1.0)), - ('magenta', (1.0, 0.0, 1.0)), - ('yellow', (1.0, 1.0, 0.0)), - ('grey', (0.5, 0.5, 0.5)), - ('darkred', (0.5, 0.0, 0.0)), - ('darkgreen', (0.0, 0.5, 0.0)), - ('darkblue', (0.0, 0.0, 0.5)), - ('darkcyan', (0.0, 0.5, 0.5)), - ('darkmagenta', (0.5, 0.0, 0.5)), - ('darkyellow', (0.5, 0.5, 0.0)), -) - - -colors_x11 = ( - # name, (r, g, b) - ("snow", (1.00000000, 0.98039216, 0.98039216)), - ("GhostWhite", (0.97254902, 0.97254902, 1.00000000)), - ("WhiteSmoke", (0.96078431, 0.96078431, 0.96078431)), - ("gainsboro", (0.86274510, 0.86274510, 0.86274510)), - ("FloralWhite", (1.00000000, 0.98039216, 0.94117647)), - ("OldLace", (0.99215686, 0.96078431, 0.90196078)), - ("linen", (0.98039216, 0.94117647, 0.90196078)), - ("AntiqueWhite", (0.98039216, 0.92156863, 0.84313725)), - ("PapayaWhip", (1.00000000, 0.93725490, 0.83529412)), - ("BlanchedAlmond", (1.00000000, 0.92156863, 0.80392157)), - ("bisque", (1.00000000, 0.89411765, 0.76862745)), - ("PeachPuff", (1.00000000, 0.85490196, 0.72549020)), - ("NavajoWhite", (1.00000000, 0.87058824, 0.67843137)), - ("moccasin", (1.00000000, 0.89411765, 0.70980392)), - ("cornsilk", (1.00000000, 0.97254902, 0.86274510)), - ("ivory", (1.00000000, 1.00000000, 0.94117647)), - ("LemonChiffon", (1.00000000, 0.98039216, 0.80392157)), - ("seashell", (1.00000000, 0.96078431, 0.93333333)), - ("honeydew", (0.94117647, 1.00000000, 0.94117647)), - ("MintCream", (0.96078431, 1.00000000, 0.98039216)), - ("azure", (0.94117647, 1.00000000, 1.00000000)), - ("AliceBlue", (0.94117647, 0.97254902, 1.00000000)), - ("lavender", (0.90196078, 0.90196078, 0.98039216)), - ("LavenderBlush", (1.00000000, 0.94117647, 0.96078431)), - ("MistyRose", (1.00000000, 0.89411765, 0.88235294)), - ("white", (1.00000000, 1.00000000, 1.00000000)), - ("black", (0.00000000, 0.00000000, 0.00000000)), - ("DarkSlateGray", (0.18431373, 0.30980392, 0.30980392)), - ("DarkSlateGrey", (0.18431373, 0.30980392, 0.30980392)), - ("DimGray", (0.41176471, 0.41176471, 0.41176471)), - ("DimGrey", (0.41176471, 0.41176471, 0.41176471)), - ("SlateGray", (0.43921569, 0.50196078, 0.56470588)), - ("SlateGrey", (0.43921569, 0.50196078, 0.56470588)), - ("LightSlateGray", (0.46666667, 0.53333333, 0.60000000)), - ("LightSlateGrey", (0.46666667, 0.53333333, 0.60000000)), - ("gray", (0.74509804, 0.74509804, 0.74509804)), - ("grey", (0.74509804, 0.74509804, 0.74509804)), - ("LightGrey", (0.82745098, 0.82745098, 0.82745098)), - ("LightGray", (0.82745098, 0.82745098, 0.82745098)), - ("MidnightBlue", (0.09803922, 0.09803922, 0.43921569)), - ("navy", (0.00000000, 0.00000000, 0.50196078)), - ("NavyBlue", (0.00000000, 0.00000000, 0.50196078)), - ("CornflowerBlue", (0.39215686, 0.58431373, 0.92941176)), - ("DarkSlateBlue", (0.28235294, 0.23921569, 0.54509804)), - ("SlateBlue", (0.41568627, 0.35294118, 0.80392157)), - ("MediumSlateBlue", (0.48235294, 0.40784314, 0.93333333)), - ("LightSlateBlue", (0.51764706, 0.43921569, 1.00000000)), - ("MediumBlue", (0.00000000, 0.00000000, 0.80392157)), - ("RoyalBlue", (0.25490196, 0.41176471, 0.88235294)), - ("blue", (0.00000000, 0.00000000, 1.00000000)), - ("DodgerBlue", (0.11764706, 0.56470588, 1.00000000)), - ("DeepSkyBlue", (0.00000000, 0.74901961, 1.00000000)), - ("SkyBlue", (0.52941176, 0.80784314, 0.92156863)), - ("LightSkyBlue", (0.52941176, 0.80784314, 0.98039216)), - ("SteelBlue", (0.27450980, 0.50980392, 0.70588235)), - ("LightSteelBlue", (0.69019608, 0.76862745, 0.87058824)), - ("LightBlue", (0.67843137, 0.84705882, 0.90196078)), - ("PowderBlue", (0.69019608, 0.87843137, 0.90196078)), - ("PaleTurquoise", (0.68627451, 0.93333333, 0.93333333)), - ("DarkTurquoise", (0.00000000, 0.80784314, 0.81960784)), - ("MediumTurquoise", (0.28235294, 0.81960784, 0.80000000)), - ("turquoise", (0.25098039, 0.87843137, 0.81568627)), - ("cyan", (0.00000000, 1.00000000, 1.00000000)), - ("LightCyan", (0.87843137, 1.00000000, 1.00000000)), - ("CadetBlue", (0.37254902, 0.61960784, 0.62745098)), - ("MediumAquamarine", (0.40000000, 0.80392157, 0.66666667)), - ("aquamarine", (0.49803922, 1.00000000, 0.83137255)), - ("DarkGreen", (0.00000000, 0.39215686, 0.00000000)), - ("DarkOliveGreen", (0.33333333, 0.41960784, 0.18431373)), - ("DarkSeaGreen", (0.56078431, 0.73725490, 0.56078431)), - ("SeaGreen", (0.18039216, 0.54509804, 0.34117647)), - ("MediumSeaGreen", (0.23529412, 0.70196078, 0.44313725)), - ("LightSeaGreen", (0.12549020, 0.69803922, 0.66666667)), - ("PaleGreen", (0.59607843, 0.98431373, 0.59607843)), - ("SpringGreen", (0.00000000, 1.00000000, 0.49803922)), - ("LawnGreen", (0.48627451, 0.98823529, 0.00000000)), - ("green", (0.00000000, 1.00000000, 0.00000000)), - ("chartreuse", (0.49803922, 1.00000000, 0.00000000)), - ("MediumSpringGreen", (0.00000000, 0.98039216, 0.60392157)), - ("GreenYellow", (0.67843137, 1.00000000, 0.18431373)), - ("LimeGreen", (0.19607843, 0.80392157, 0.19607843)), - ("YellowGreen", (0.60392157, 0.80392157, 0.19607843)), - ("ForestGreen", (0.13333333, 0.54509804, 0.13333333)), - ("OliveDrab", (0.41960784, 0.55686275, 0.13725490)), - ("DarkKhaki", (0.74117647, 0.71764706, 0.41960784)), - ("khaki", (0.94117647, 0.90196078, 0.54901961)), - ("PaleGoldenrod", (0.93333333, 0.90980392, 0.66666667)), - ("LightGoldenrodYellow", (0.98039216, 0.98039216, 0.82352941)), - ("LightYellow", (1.00000000, 1.00000000, 0.87843137)), - ("yellow", (1.00000000, 1.00000000, 0.00000000)), - ("gold", (1.00000000, 0.84313725, 0.00000000)), - ("LightGoldenrod", (0.93333333, 0.86666667, 0.50980392)), - ("goldenrod", (0.85490196, 0.64705882, 0.12549020)), - ("DarkGoldenrod", (0.72156863, 0.52549020, 0.04313725)), - ("RosyBrown", (0.73725490, 0.56078431, 0.56078431)), - ("IndianRed", (0.80392157, 0.36078431, 0.36078431)), - ("SaddleBrown", (0.54509804, 0.27058824, 0.07450980)), - ("sienna", (0.62745098, 0.32156863, 0.17647059)), - ("peru", (0.80392157, 0.52156863, 0.24705882)), - ("burlywood", (0.87058824, 0.72156863, 0.52941176)), - ("beige", (0.96078431, 0.96078431, 0.86274510)), - ("wheat", (0.96078431, 0.87058824, 0.70196078)), - ("SandyBrown", (0.95686275, 0.64313725, 0.37647059)), - ("tan", (0.82352941, 0.70588235, 0.54901961)), - ("chocolate", (0.82352941, 0.41176471, 0.11764706)), - ("firebrick", (0.69803922, 0.13333333, 0.13333333)), - ("brown", (0.64705882, 0.16470588, 0.16470588)), - ("DarkSalmon", (0.91372549, 0.58823529, 0.47843137)), - ("salmon", (0.98039216, 0.50196078, 0.44705882)), - ("LightSalmon", (1.00000000, 0.62745098, 0.47843137)), - ("orange", (1.00000000, 0.64705882, 0.00000000)), - ("DarkOrange", (1.00000000, 0.54901961, 0.00000000)), - ("coral", (1.00000000, 0.49803922, 0.31372549)), - ("LightCoral", (0.94117647, 0.50196078, 0.50196078)), - ("tomato", (1.00000000, 0.38823529, 0.27843137)), - ("OrangeRed", (1.00000000, 0.27058824, 0.00000000)), - ("red", (1.00000000, 0.00000000, 0.00000000)), - ("HotPink", (1.00000000, 0.41176471, 0.70588235)), - ("DeepPink", (1.00000000, 0.07843137, 0.57647059)), - ("pink", (1.00000000, 0.75294118, 0.79607843)), - ("LightPink", (1.00000000, 0.71372549, 0.75686275)), - ("PaleVioletRed", (0.85882353, 0.43921569, 0.57647059)), - ("maroon", (0.69019608, 0.18823529, 0.37647059)), - ("MediumVioletRed", (0.78039216, 0.08235294, 0.52156863)), - ("VioletRed", (0.81568627, 0.12549020, 0.56470588)), - ("magenta", (1.00000000, 0.00000000, 1.00000000)), - ("violet", (0.93333333, 0.50980392, 0.93333333)), - ("plum", (0.86666667, 0.62745098, 0.86666667)), - ("orchid", (0.85490196, 0.43921569, 0.83921569)), - ("MediumOrchid", (0.72941176, 0.33333333, 0.82745098)), - ("DarkOrchid", (0.60000000, 0.19607843, 0.80000000)), - ("DarkViolet", (0.58039216, 0.00000000, 0.82745098)), - ("BlueViolet", (0.54117647, 0.16862745, 0.88627451)), - ("purple", (0.62745098, 0.12549020, 0.94117647)), - ("MediumPurple", (0.57647059, 0.43921569, 0.85882353)), - ("thistle", (0.84705882, 0.74901961, 0.84705882)), - ("snow1", (1.00000000, 0.98039216, 0.98039216)), - ("snow2", (0.93333333, 0.91372549, 0.91372549)), - ("snow3", (0.80392157, 0.78823529, 0.78823529)), - ("snow4", (0.54509804, 0.53725490, 0.53725490)), - ("seashell1", (1.00000000, 0.96078431, 0.93333333)), - ("seashell2", (0.93333333, 0.89803922, 0.87058824)), - ("seashell3", (0.80392157, 0.77254902, 0.74901961)), - ("seashell4", (0.54509804, 0.52549020, 0.50980392)), - ("AntiqueWhite1", (1.00000000, 0.93725490, 0.85882353)), - ("AntiqueWhite2", (0.93333333, 0.87450980, 0.80000000)), - ("AntiqueWhite3", (0.80392157, 0.75294118, 0.69019608)), - ("AntiqueWhite4", (0.54509804, 0.51372549, 0.47058824)), - ("bisque1", (1.00000000, 0.89411765, 0.76862745)), - ("bisque2", (0.93333333, 0.83529412, 0.71764706)), - ("bisque3", (0.80392157, 0.71764706, 0.61960784)), - ("bisque4", (0.54509804, 0.49019608, 0.41960784)), - ("PeachPuff1", (1.00000000, 0.85490196, 0.72549020)), - ("PeachPuff2", (0.93333333, 0.79607843, 0.67843137)), - ("PeachPuff3", (0.80392157, 0.68627451, 0.58431373)), - ("PeachPuff4", (0.54509804, 0.46666667, 0.39607843)), - ("NavajoWhite1", (1.00000000, 0.87058824, 0.67843137)), - ("NavajoWhite2", (0.93333333, 0.81176471, 0.63137255)), - ("NavajoWhite3", (0.80392157, 0.70196078, 0.54509804)), - ("NavajoWhite4", (0.54509804, 0.47450980, 0.36862745)), - ("LemonChiffon1", (1.00000000, 0.98039216, 0.80392157)), - ("LemonChiffon2", (0.93333333, 0.91372549, 0.74901961)), - ("LemonChiffon3", (0.80392157, 0.78823529, 0.64705882)), - ("LemonChiffon4", (0.54509804, 0.53725490, 0.43921569)), - ("cornsilk1", (1.00000000, 0.97254902, 0.86274510)), - ("cornsilk2", (0.93333333, 0.90980392, 0.80392157)), - ("cornsilk3", (0.80392157, 0.78431373, 0.69411765)), - ("cornsilk4", (0.54509804, 0.53333333, 0.47058824)), - ("ivory1", (1.00000000, 1.00000000, 0.94117647)), - ("ivory2", (0.93333333, 0.93333333, 0.87843137)), - ("ivory3", (0.80392157, 0.80392157, 0.75686275)), - ("ivory4", (0.54509804, 0.54509804, 0.51372549)), - ("honeydew1", (0.94117647, 1.00000000, 0.94117647)), - ("honeydew2", (0.87843137, 0.93333333, 0.87843137)), - ("honeydew3", (0.75686275, 0.80392157, 0.75686275)), - ("honeydew4", (0.51372549, 0.54509804, 0.51372549)), - ("LavenderBlush1", (1.00000000, 0.94117647, 0.96078431)), - ("LavenderBlush2", (0.93333333, 0.87843137, 0.89803922)), - ("LavenderBlush3", (0.80392157, 0.75686275, 0.77254902)), - ("LavenderBlush4", (0.54509804, 0.51372549, 0.52549020)), - ("MistyRose1", (1.00000000, 0.89411765, 0.88235294)), - ("MistyRose2", (0.93333333, 0.83529412, 0.82352941)), - ("MistyRose3", (0.80392157, 0.71764706, 0.70980392)), - ("MistyRose4", (0.54509804, 0.49019608, 0.48235294)), - ("azure1", (0.94117647, 1.00000000, 1.00000000)), - ("azure2", (0.87843137, 0.93333333, 0.93333333)), - ("azure3", (0.75686275, 0.80392157, 0.80392157)), - ("azure4", (0.51372549, 0.54509804, 0.54509804)), - ("SlateBlue1", (0.51372549, 0.43529412, 1.00000000)), - ("SlateBlue2", (0.47843137, 0.40392157, 0.93333333)), - ("SlateBlue3", (0.41176471, 0.34901961, 0.80392157)), - ("SlateBlue4", (0.27843137, 0.23529412, 0.54509804)), - ("RoyalBlue1", (0.28235294, 0.46274510, 1.00000000)), - ("RoyalBlue2", (0.26274510, 0.43137255, 0.93333333)), - ("RoyalBlue3", (0.22745098, 0.37254902, 0.80392157)), - ("RoyalBlue4", (0.15294118, 0.25098039, 0.54509804)), - ("blue1", (0.00000000, 0.00000000, 1.00000000)), - ("blue2", (0.00000000, 0.00000000, 0.93333333)), - ("blue3", (0.00000000, 0.00000000, 0.80392157)), - ("blue4", (0.00000000, 0.00000000, 0.54509804)), - ("DodgerBlue1", (0.11764706, 0.56470588, 1.00000000)), - ("DodgerBlue2", (0.10980392, 0.52549020, 0.93333333)), - ("DodgerBlue3", (0.09411765, 0.45490196, 0.80392157)), - ("DodgerBlue4", (0.06274510, 0.30588235, 0.54509804)), - ("SteelBlue1", (0.38823529, 0.72156863, 1.00000000)), - ("SteelBlue2", (0.36078431, 0.67450980, 0.93333333)), - ("SteelBlue3", (0.30980392, 0.58039216, 0.80392157)), - ("SteelBlue4", (0.21176471, 0.39215686, 0.54509804)), - ("DeepSkyBlue1", (0.00000000, 0.74901961, 1.00000000)), - ("DeepSkyBlue2", (0.00000000, 0.69803922, 0.93333333)), - ("DeepSkyBlue3", (0.00000000, 0.60392157, 0.80392157)), - ("DeepSkyBlue4", (0.00000000, 0.40784314, 0.54509804)), - ("SkyBlue1", (0.52941176, 0.80784314, 1.00000000)), - ("SkyBlue2", (0.49411765, 0.75294118, 0.93333333)), - ("SkyBlue3", (0.42352941, 0.65098039, 0.80392157)), - ("SkyBlue4", (0.29019608, 0.43921569, 0.54509804)), - ("LightSkyBlue1", (0.69019608, 0.88627451, 1.00000000)), - ("LightSkyBlue2", (0.64313725, 0.82745098, 0.93333333)), - ("LightSkyBlue3", (0.55294118, 0.71372549, 0.80392157)), - ("LightSkyBlue4", (0.37647059, 0.48235294, 0.54509804)), - ("SlateGray1", (0.77647059, 0.88627451, 1.00000000)), - ("SlateGray2", (0.72549020, 0.82745098, 0.93333333)), - ("SlateGray3", (0.62352941, 0.71372549, 0.80392157)), - ("SlateGray4", (0.42352941, 0.48235294, 0.54509804)), - ("LightSteelBlue1", (0.79215686, 0.88235294, 1.00000000)), - ("LightSteelBlue2", (0.73725490, 0.82352941, 0.93333333)), - ("LightSteelBlue3", (0.63529412, 0.70980392, 0.80392157)), - ("LightSteelBlue4", (0.43137255, 0.48235294, 0.54509804)), - ("LightBlue1", (0.74901961, 0.93725490, 1.00000000)), - ("LightBlue2", (0.69803922, 0.87450980, 0.93333333)), - ("LightBlue3", (0.60392157, 0.75294118, 0.80392157)), - ("LightBlue4", (0.40784314, 0.51372549, 0.54509804)), - ("LightCyan1", (0.87843137, 1.00000000, 1.00000000)), - ("LightCyan2", (0.81960784, 0.93333333, 0.93333333)), - ("LightCyan3", (0.70588235, 0.80392157, 0.80392157)), - ("LightCyan4", (0.47843137, 0.54509804, 0.54509804)), - ("PaleTurquoise1", (0.73333333, 1.00000000, 1.00000000)), - ("PaleTurquoise2", (0.68235294, 0.93333333, 0.93333333)), - ("PaleTurquoise3", (0.58823529, 0.80392157, 0.80392157)), - ("PaleTurquoise4", (0.40000000, 0.54509804, 0.54509804)), - ("CadetBlue1", (0.59607843, 0.96078431, 1.00000000)), - ("CadetBlue2", (0.55686275, 0.89803922, 0.93333333)), - ("CadetBlue3", (0.47843137, 0.77254902, 0.80392157)), - ("CadetBlue4", (0.32549020, 0.52549020, 0.54509804)), - ("turquoise1", (0.00000000, 0.96078431, 1.00000000)), - ("turquoise2", (0.00000000, 0.89803922, 0.93333333)), - ("turquoise3", (0.00000000, 0.77254902, 0.80392157)), - ("turquoise4", (0.00000000, 0.52549020, 0.54509804)), - ("cyan1", (0.00000000, 1.00000000, 1.00000000)), - ("cyan2", (0.00000000, 0.93333333, 0.93333333)), - ("cyan3", (0.00000000, 0.80392157, 0.80392157)), - ("cyan4", (0.00000000, 0.54509804, 0.54509804)), - ("DarkSlateGray1", (0.59215686, 1.00000000, 1.00000000)), - ("DarkSlateGray2", (0.55294118, 0.93333333, 0.93333333)), - ("DarkSlateGray3", (0.47450980, 0.80392157, 0.80392157)), - ("DarkSlateGray4", (0.32156863, 0.54509804, 0.54509804)), - ("aquamarine1", (0.49803922, 1.00000000, 0.83137255)), - ("aquamarine2", (0.46274510, 0.93333333, 0.77647059)), - ("aquamarine3", (0.40000000, 0.80392157, 0.66666667)), - ("aquamarine4", (0.27058824, 0.54509804, 0.45490196)), - ("DarkSeaGreen1", (0.75686275, 1.00000000, 0.75686275)), - ("DarkSeaGreen2", (0.70588235, 0.93333333, 0.70588235)), - ("DarkSeaGreen3", (0.60784314, 0.80392157, 0.60784314)), - ("DarkSeaGreen4", (0.41176471, 0.54509804, 0.41176471)), - ("SeaGreen1", (0.32941176, 1.00000000, 0.62352941)), - ("SeaGreen2", (0.30588235, 0.93333333, 0.58039216)), - ("SeaGreen3", (0.26274510, 0.80392157, 0.50196078)), - ("SeaGreen4", (0.18039216, 0.54509804, 0.34117647)), - ("PaleGreen1", (0.60392157, 1.00000000, 0.60392157)), - ("PaleGreen2", (0.56470588, 0.93333333, 0.56470588)), - ("PaleGreen3", (0.48627451, 0.80392157, 0.48627451)), - ("PaleGreen4", (0.32941176, 0.54509804, 0.32941176)), - ("SpringGreen1", (0.00000000, 1.00000000, 0.49803922)), - ("SpringGreen2", (0.00000000, 0.93333333, 0.46274510)), - ("SpringGreen3", (0.00000000, 0.80392157, 0.40000000)), - ("SpringGreen4", (0.00000000, 0.54509804, 0.27058824)), - ("green1", (0.00000000, 1.00000000, 0.00000000)), - ("green2", (0.00000000, 0.93333333, 0.00000000)), - ("green3", (0.00000000, 0.80392157, 0.00000000)), - ("green4", (0.00000000, 0.54509804, 0.00000000)), - ("chartreuse1", (0.49803922, 1.00000000, 0.00000000)), - ("chartreuse2", (0.46274510, 0.93333333, 0.00000000)), - ("chartreuse3", (0.40000000, 0.80392157, 0.00000000)), - ("chartreuse4", (0.27058824, 0.54509804, 0.00000000)), - ("OliveDrab1", (0.75294118, 1.00000000, 0.24313725)), - ("OliveDrab2", (0.70196078, 0.93333333, 0.22745098)), - ("OliveDrab3", (0.60392157, 0.80392157, 0.19607843)), - ("OliveDrab4", (0.41176471, 0.54509804, 0.13333333)), - ("DarkOliveGreen1", (0.79215686, 1.00000000, 0.43921569)), - ("DarkOliveGreen2", (0.73725490, 0.93333333, 0.40784314)), - ("DarkOliveGreen3", (0.63529412, 0.80392157, 0.35294118)), - ("DarkOliveGreen4", (0.43137255, 0.54509804, 0.23921569)), - ("khaki1", (1.00000000, 0.96470588, 0.56078431)), - ("khaki2", (0.93333333, 0.90196078, 0.52156863)), - ("khaki3", (0.80392157, 0.77647059, 0.45098039)), - ("khaki4", (0.54509804, 0.52549020, 0.30588235)), - ("LightGoldenrod1", (1.00000000, 0.92549020, 0.54509804)), - ("LightGoldenrod2", (0.93333333, 0.86274510, 0.50980392)), - ("LightGoldenrod3", (0.80392157, 0.74509804, 0.43921569)), - ("LightGoldenrod4", (0.54509804, 0.50588235, 0.29803922)), - ("LightYellow1", (1.00000000, 1.00000000, 0.87843137)), - ("LightYellow2", (0.93333333, 0.93333333, 0.81960784)), - ("LightYellow3", (0.80392157, 0.80392157, 0.70588235)), - ("LightYellow4", (0.54509804, 0.54509804, 0.47843137)), - ("yellow1", (1.00000000, 1.00000000, 0.00000000)), - ("yellow2", (0.93333333, 0.93333333, 0.00000000)), - ("yellow3", (0.80392157, 0.80392157, 0.00000000)), - ("yellow4", (0.54509804, 0.54509804, 0.00000000)), - ("gold1", (1.00000000, 0.84313725, 0.00000000)), - ("gold2", (0.93333333, 0.78823529, 0.00000000)), - ("gold3", (0.80392157, 0.67843137, 0.00000000)), - ("gold4", (0.54509804, 0.45882353, 0.00000000)), - ("goldenrod1", (1.00000000, 0.75686275, 0.14509804)), - ("goldenrod2", (0.93333333, 0.70588235, 0.13333333)), - ("goldenrod3", (0.80392157, 0.60784314, 0.11372549)), - ("goldenrod4", (0.54509804, 0.41176471, 0.07843137)), - ("DarkGoldenrod1", (1.00000000, 0.72549020, 0.05882353)), - ("DarkGoldenrod2", (0.93333333, 0.67843137, 0.05490196)), - ("DarkGoldenrod3", (0.80392157, 0.58431373, 0.04705882)), - ("DarkGoldenrod4", (0.54509804, 0.39607843, 0.03137255)), - ("RosyBrown1", (1.00000000, 0.75686275, 0.75686275)), - ("RosyBrown2", (0.93333333, 0.70588235, 0.70588235)), - ("RosyBrown3", (0.80392157, 0.60784314, 0.60784314)), - ("RosyBrown4", (0.54509804, 0.41176471, 0.41176471)), - ("IndianRed1", (1.00000000, 0.41568627, 0.41568627)), - ("IndianRed2", (0.93333333, 0.38823529, 0.38823529)), - ("IndianRed3", (0.80392157, 0.33333333, 0.33333333)), - ("IndianRed4", (0.54509804, 0.22745098, 0.22745098)), - ("sienna1", (1.00000000, 0.50980392, 0.27843137)), - ("sienna2", (0.93333333, 0.47450980, 0.25882353)), - ("sienna3", (0.80392157, 0.40784314, 0.22352941)), - ("sienna4", (0.54509804, 0.27843137, 0.14901961)), - ("burlywood1", (1.00000000, 0.82745098, 0.60784314)), - ("burlywood2", (0.93333333, 0.77254902, 0.56862745)), - ("burlywood3", (0.80392157, 0.66666667, 0.49019608)), - ("burlywood4", (0.54509804, 0.45098039, 0.33333333)), - ("wheat1", (1.00000000, 0.90588235, 0.72941176)), - ("wheat2", (0.93333333, 0.84705882, 0.68235294)), - ("wheat3", (0.80392157, 0.72941176, 0.58823529)), - ("wheat4", (0.54509804, 0.49411765, 0.40000000)), - ("tan1", (1.00000000, 0.64705882, 0.30980392)), - ("tan2", (0.93333333, 0.60392157, 0.28627451)), - ("tan3", (0.80392157, 0.52156863, 0.24705882)), - ("tan4", (0.54509804, 0.35294118, 0.16862745)), - ("chocolate1", (1.00000000, 0.49803922, 0.14117647)), - ("chocolate2", (0.93333333, 0.46274510, 0.12941176)), - ("chocolate3", (0.80392157, 0.40000000, 0.11372549)), - ("chocolate4", (0.54509804, 0.27058824, 0.07450980)), - ("firebrick1", (1.00000000, 0.18823529, 0.18823529)), - ("firebrick2", (0.93333333, 0.17254902, 0.17254902)), - ("firebrick3", (0.80392157, 0.14901961, 0.14901961)), - ("firebrick4", (0.54509804, 0.10196078, 0.10196078)), - ("brown1", (1.00000000, 0.25098039, 0.25098039)), - ("brown2", (0.93333333, 0.23137255, 0.23137255)), - ("brown3", (0.80392157, 0.20000000, 0.20000000)), - ("brown4", (0.54509804, 0.13725490, 0.13725490)), - ("salmon1", (1.00000000, 0.54901961, 0.41176471)), - ("salmon2", (0.93333333, 0.50980392, 0.38431373)), - ("salmon3", (0.80392157, 0.43921569, 0.32941176)), - ("salmon4", (0.54509804, 0.29803922, 0.22352941)), - ("LightSalmon1", (1.00000000, 0.62745098, 0.47843137)), - ("LightSalmon2", (0.93333333, 0.58431373, 0.44705882)), - ("LightSalmon3", (0.80392157, 0.50588235, 0.38431373)), - ("LightSalmon4", (0.54509804, 0.34117647, 0.25882353)), - ("orange1", (1.00000000, 0.64705882, 0.00000000)), - ("orange2", (0.93333333, 0.60392157, 0.00000000)), - ("orange3", (0.80392157, 0.52156863, 0.00000000)), - ("orange4", (0.54509804, 0.35294118, 0.00000000)), - ("DarkOrange1", (1.00000000, 0.49803922, 0.00000000)), - ("DarkOrange2", (0.93333333, 0.46274510, 0.00000000)), - ("DarkOrange3", (0.80392157, 0.40000000, 0.00000000)), - ("DarkOrange4", (0.54509804, 0.27058824, 0.00000000)), - ("coral1", (1.00000000, 0.44705882, 0.33725490)), - ("coral2", (0.93333333, 0.41568627, 0.31372549)), - ("coral3", (0.80392157, 0.35686275, 0.27058824)), - ("coral4", (0.54509804, 0.24313725, 0.18431373)), - ("tomato1", (1.00000000, 0.38823529, 0.27843137)), - ("tomato2", (0.93333333, 0.36078431, 0.25882353)), - ("tomato3", (0.80392157, 0.30980392, 0.22352941)), - ("tomato4", (0.54509804, 0.21176471, 0.14901961)), - ("OrangeRed1", (1.00000000, 0.27058824, 0.00000000)), - ("OrangeRed2", (0.93333333, 0.25098039, 0.00000000)), - ("OrangeRed3", (0.80392157, 0.21568627, 0.00000000)), - ("OrangeRed4", (0.54509804, 0.14509804, 0.00000000)), - ("red1", (1.00000000, 0.00000000, 0.00000000)), - ("red2", (0.93333333, 0.00000000, 0.00000000)), - ("red3", (0.80392157, 0.00000000, 0.00000000)), - ("red4", (0.54509804, 0.00000000, 0.00000000)), - ("DeepPink1", (1.00000000, 0.07843137, 0.57647059)), - ("DeepPink2", (0.93333333, 0.07058824, 0.53725490)), - ("DeepPink3", (0.80392157, 0.06274510, 0.46274510)), - ("DeepPink4", (0.54509804, 0.03921569, 0.31372549)), - ("HotPink1", (1.00000000, 0.43137255, 0.70588235)), - ("HotPink2", (0.93333333, 0.41568627, 0.65490196)), - ("HotPink3", (0.80392157, 0.37647059, 0.56470588)), - ("HotPink4", (0.54509804, 0.22745098, 0.38431373)), - ("pink1", (1.00000000, 0.70980392, 0.77254902)), - ("pink2", (0.93333333, 0.66274510, 0.72156863)), - ("pink3", (0.80392157, 0.56862745, 0.61960784)), - ("pink4", (0.54509804, 0.38823529, 0.42352941)), - ("LightPink1", (1.00000000, 0.68235294, 0.72549020)), - ("LightPink2", (0.93333333, 0.63529412, 0.67843137)), - ("LightPink3", (0.80392157, 0.54901961, 0.58431373)), - ("LightPink4", (0.54509804, 0.37254902, 0.39607843)), - ("PaleVioletRed1", (1.00000000, 0.50980392, 0.67058824)), - ("PaleVioletRed2", (0.93333333, 0.47450980, 0.62352941)), - ("PaleVioletRed3", (0.80392157, 0.40784314, 0.53725490)), - ("PaleVioletRed4", (0.54509804, 0.27843137, 0.36470588)), - ("maroon1", (1.00000000, 0.20392157, 0.70196078)), - ("maroon2", (0.93333333, 0.18823529, 0.65490196)), - ("maroon3", (0.80392157, 0.16078431, 0.56470588)), - ("maroon4", (0.54509804, 0.10980392, 0.38431373)), - ("VioletRed1", (1.00000000, 0.24313725, 0.58823529)), - ("VioletRed2", (0.93333333, 0.22745098, 0.54901961)), - ("VioletRed3", (0.80392157, 0.19607843, 0.47058824)), - ("VioletRed4", (0.54509804, 0.13333333, 0.32156863)), - ("magenta1", (1.00000000, 0.00000000, 1.00000000)), - ("magenta2", (0.93333333, 0.00000000, 0.93333333)), - ("magenta3", (0.80392157, 0.00000000, 0.80392157)), - ("magenta4", (0.54509804, 0.00000000, 0.54509804)), - ("orchid1", (1.00000000, 0.51372549, 0.98039216)), - ("orchid2", (0.93333333, 0.47843137, 0.91372549)), - ("orchid3", (0.80392157, 0.41176471, 0.78823529)), - ("orchid4", (0.54509804, 0.27843137, 0.53725490)), - ("plum1", (1.00000000, 0.73333333, 1.00000000)), - ("plum2", (0.93333333, 0.68235294, 0.93333333)), - ("plum3", (0.80392157, 0.58823529, 0.80392157)), - ("plum4", (0.54509804, 0.40000000, 0.54509804)), - ("MediumOrchid1", (0.87843137, 0.40000000, 1.00000000)), - ("MediumOrchid2", (0.81960784, 0.37254902, 0.93333333)), - ("MediumOrchid3", (0.70588235, 0.32156863, 0.80392157)), - ("MediumOrchid4", (0.47843137, 0.21568627, 0.54509804)), - ("DarkOrchid1", (0.74901961, 0.24313725, 1.00000000)), - ("DarkOrchid2", (0.69803922, 0.22745098, 0.93333333)), - ("DarkOrchid3", (0.60392157, 0.19607843, 0.80392157)), - ("DarkOrchid4", (0.40784314, 0.13333333, 0.54509804)), - ("purple1", (0.60784314, 0.18823529, 1.00000000)), - ("purple2", (0.56862745, 0.17254902, 0.93333333)), - ("purple3", (0.49019608, 0.14901961, 0.80392157)), - ("purple4", (0.33333333, 0.10196078, 0.54509804)), - ("MediumPurple1", (0.67058824, 0.50980392, 1.00000000)), - ("MediumPurple2", (0.62352941, 0.47450980, 0.93333333)), - ("MediumPurple3", (0.53725490, 0.40784314, 0.80392157)), - ("MediumPurple4", (0.36470588, 0.27843137, 0.54509804)), - ("thistle1", (1.00000000, 0.88235294, 1.00000000)), - ("thistle2", (0.93333333, 0.82352941, 0.93333333)), - ("thistle3", (0.80392157, 0.70980392, 0.80392157)), - ("thistle4", (0.54509804, 0.48235294, 0.54509804)), - ("gray0", (0.00000000, 0.00000000, 0.00000000)), - ("grey0", (0.00000000, 0.00000000, 0.00000000)), - ("gray1", (0.01176471, 0.01176471, 0.01176471)), - ("grey1", (0.01176471, 0.01176471, 0.01176471)), - ("gray2", (0.01960784, 0.01960784, 0.01960784)), - ("grey2", (0.01960784, 0.01960784, 0.01960784)), - ("gray3", (0.03137255, 0.03137255, 0.03137255)), - ("grey3", (0.03137255, 0.03137255, 0.03137255)), - ("gray4", (0.03921569, 0.03921569, 0.03921569)), - ("grey4", (0.03921569, 0.03921569, 0.03921569)), - ("gray5", (0.05098039, 0.05098039, 0.05098039)), - ("grey5", (0.05098039, 0.05098039, 0.05098039)), - ("gray6", (0.05882353, 0.05882353, 0.05882353)), - ("grey6", (0.05882353, 0.05882353, 0.05882353)), - ("gray7", (0.07058824, 0.07058824, 0.07058824)), - ("grey7", (0.07058824, 0.07058824, 0.07058824)), - ("gray8", (0.07843137, 0.07843137, 0.07843137)), - ("grey8", (0.07843137, 0.07843137, 0.07843137)), - ("gray9", (0.09019608, 0.09019608, 0.09019608)), - ("grey9", (0.09019608, 0.09019608, 0.09019608)), - ("gray10", (0.10196078, 0.10196078, 0.10196078)), - ("grey10", (0.10196078, 0.10196078, 0.10196078)), - ("gray11", (0.10980392, 0.10980392, 0.10980392)), - ("grey11", (0.10980392, 0.10980392, 0.10980392)), - ("gray12", (0.12156863, 0.12156863, 0.12156863)), - ("grey12", (0.12156863, 0.12156863, 0.12156863)), - ("gray13", (0.12941176, 0.12941176, 0.12941176)), - ("grey13", (0.12941176, 0.12941176, 0.12941176)), - ("gray14", (0.14117647, 0.14117647, 0.14117647)), - ("grey14", (0.14117647, 0.14117647, 0.14117647)), - ("gray15", (0.14901961, 0.14901961, 0.14901961)), - ("grey15", (0.14901961, 0.14901961, 0.14901961)), - ("gray16", (0.16078431, 0.16078431, 0.16078431)), - ("grey16", (0.16078431, 0.16078431, 0.16078431)), - ("gray17", (0.16862745, 0.16862745, 0.16862745)), - ("grey17", (0.16862745, 0.16862745, 0.16862745)), - ("gray18", (0.18039216, 0.18039216, 0.18039216)), - ("grey18", (0.18039216, 0.18039216, 0.18039216)), - ("gray19", (0.18823529, 0.18823529, 0.18823529)), - ("grey19", (0.18823529, 0.18823529, 0.18823529)), - ("gray20", (0.20000000, 0.20000000, 0.20000000)), - ("grey20", (0.20000000, 0.20000000, 0.20000000)), - ("gray21", (0.21176471, 0.21176471, 0.21176471)), - ("grey21", (0.21176471, 0.21176471, 0.21176471)), - ("gray22", (0.21960784, 0.21960784, 0.21960784)), - ("grey22", (0.21960784, 0.21960784, 0.21960784)), - ("gray23", (0.23137255, 0.23137255, 0.23137255)), - ("grey23", (0.23137255, 0.23137255, 0.23137255)), - ("gray24", (0.23921569, 0.23921569, 0.23921569)), - ("grey24", (0.23921569, 0.23921569, 0.23921569)), - ("gray25", (0.25098039, 0.25098039, 0.25098039)), - ("grey25", (0.25098039, 0.25098039, 0.25098039)), - ("gray26", (0.25882353, 0.25882353, 0.25882353)), - ("grey26", (0.25882353, 0.25882353, 0.25882353)), - ("gray27", (0.27058824, 0.27058824, 0.27058824)), - ("grey27", (0.27058824, 0.27058824, 0.27058824)), - ("gray28", (0.27843137, 0.27843137, 0.27843137)), - ("grey28", (0.27843137, 0.27843137, 0.27843137)), - ("gray29", (0.29019608, 0.29019608, 0.29019608)), - ("grey29", (0.29019608, 0.29019608, 0.29019608)), - ("gray30", (0.30196078, 0.30196078, 0.30196078)), - ("grey30", (0.30196078, 0.30196078, 0.30196078)), - ("gray31", (0.30980392, 0.30980392, 0.30980392)), - ("grey31", (0.30980392, 0.30980392, 0.30980392)), - ("gray32", (0.32156863, 0.32156863, 0.32156863)), - ("grey32", (0.32156863, 0.32156863, 0.32156863)), - ("gray33", (0.32941176, 0.32941176, 0.32941176)), - ("grey33", (0.32941176, 0.32941176, 0.32941176)), - ("gray34", (0.34117647, 0.34117647, 0.34117647)), - ("grey34", (0.34117647, 0.34117647, 0.34117647)), - ("gray35", (0.34901961, 0.34901961, 0.34901961)), - ("grey35", (0.34901961, 0.34901961, 0.34901961)), - ("gray36", (0.36078431, 0.36078431, 0.36078431)), - ("grey36", (0.36078431, 0.36078431, 0.36078431)), - ("gray37", (0.36862745, 0.36862745, 0.36862745)), - ("grey37", (0.36862745, 0.36862745, 0.36862745)), - ("gray38", (0.38039216, 0.38039216, 0.38039216)), - ("grey38", (0.38039216, 0.38039216, 0.38039216)), - ("gray39", (0.38823529, 0.38823529, 0.38823529)), - ("grey39", (0.38823529, 0.38823529, 0.38823529)), - ("gray40", (0.40000000, 0.40000000, 0.40000000)), - ("grey40", (0.40000000, 0.40000000, 0.40000000)), - ("gray41", (0.41176471, 0.41176471, 0.41176471)), - ("grey41", (0.41176471, 0.41176471, 0.41176471)), - ("gray42", (0.41960784, 0.41960784, 0.41960784)), - ("grey42", (0.41960784, 0.41960784, 0.41960784)), - ("gray43", (0.43137255, 0.43137255, 0.43137255)), - ("grey43", (0.43137255, 0.43137255, 0.43137255)), - ("gray44", (0.43921569, 0.43921569, 0.43921569)), - ("grey44", (0.43921569, 0.43921569, 0.43921569)), - ("gray45", (0.45098039, 0.45098039, 0.45098039)), - ("grey45", (0.45098039, 0.45098039, 0.45098039)), - ("gray46", (0.45882353, 0.45882353, 0.45882353)), - ("grey46", (0.45882353, 0.45882353, 0.45882353)), - ("gray47", (0.47058824, 0.47058824, 0.47058824)), - ("grey47", (0.47058824, 0.47058824, 0.47058824)), - ("gray48", (0.47843137, 0.47843137, 0.47843137)), - ("grey48", (0.47843137, 0.47843137, 0.47843137)), - ("gray49", (0.49019608, 0.49019608, 0.49019608)), - ("grey49", (0.49019608, 0.49019608, 0.49019608)), - ("gray50", (0.49803922, 0.49803922, 0.49803922)), - ("grey50", (0.49803922, 0.49803922, 0.49803922)), - ("gray51", (0.50980392, 0.50980392, 0.50980392)), - ("grey51", (0.50980392, 0.50980392, 0.50980392)), - ("gray52", (0.52156863, 0.52156863, 0.52156863)), - ("grey52", (0.52156863, 0.52156863, 0.52156863)), - ("gray53", (0.52941176, 0.52941176, 0.52941176)), - ("grey53", (0.52941176, 0.52941176, 0.52941176)), - ("gray54", (0.54117647, 0.54117647, 0.54117647)), - ("grey54", (0.54117647, 0.54117647, 0.54117647)), - ("gray55", (0.54901961, 0.54901961, 0.54901961)), - ("grey55", (0.54901961, 0.54901961, 0.54901961)), - ("gray56", (0.56078431, 0.56078431, 0.56078431)), - ("grey56", (0.56078431, 0.56078431, 0.56078431)), - ("gray57", (0.56862745, 0.56862745, 0.56862745)), - ("grey57", (0.56862745, 0.56862745, 0.56862745)), - ("gray58", (0.58039216, 0.58039216, 0.58039216)), - ("grey58", (0.58039216, 0.58039216, 0.58039216)), - ("gray59", (0.58823529, 0.58823529, 0.58823529)), - ("grey59", (0.58823529, 0.58823529, 0.58823529)), - ("gray60", (0.60000000, 0.60000000, 0.60000000)), - ("grey60", (0.60000000, 0.60000000, 0.60000000)), - ("gray61", (0.61176471, 0.61176471, 0.61176471)), - ("grey61", (0.61176471, 0.61176471, 0.61176471)), - ("gray62", (0.61960784, 0.61960784, 0.61960784)), - ("grey62", (0.61960784, 0.61960784, 0.61960784)), - ("gray63", (0.63137255, 0.63137255, 0.63137255)), - ("grey63", (0.63137255, 0.63137255, 0.63137255)), - ("gray64", (0.63921569, 0.63921569, 0.63921569)), - ("grey64", (0.63921569, 0.63921569, 0.63921569)), - ("gray65", (0.65098039, 0.65098039, 0.65098039)), - ("grey65", (0.65098039, 0.65098039, 0.65098039)), - ("gray66", (0.65882353, 0.65882353, 0.65882353)), - ("grey66", (0.65882353, 0.65882353, 0.65882353)), - ("gray67", (0.67058824, 0.67058824, 0.67058824)), - ("grey67", (0.67058824, 0.67058824, 0.67058824)), - ("gray68", (0.67843137, 0.67843137, 0.67843137)), - ("grey68", (0.67843137, 0.67843137, 0.67843137)), - ("gray69", (0.69019608, 0.69019608, 0.69019608)), - ("grey69", (0.69019608, 0.69019608, 0.69019608)), - ("gray70", (0.70196078, 0.70196078, 0.70196078)), - ("grey70", (0.70196078, 0.70196078, 0.70196078)), - ("gray71", (0.70980392, 0.70980392, 0.70980392)), - ("grey71", (0.70980392, 0.70980392, 0.70980392)), - ("gray72", (0.72156863, 0.72156863, 0.72156863)), - ("grey72", (0.72156863, 0.72156863, 0.72156863)), - ("gray73", (0.72941176, 0.72941176, 0.72941176)), - ("grey73", (0.72941176, 0.72941176, 0.72941176)), - ("gray74", (0.74117647, 0.74117647, 0.74117647)), - ("grey74", (0.74117647, 0.74117647, 0.74117647)), - ("gray75", (0.74901961, 0.74901961, 0.74901961)), - ("grey75", (0.74901961, 0.74901961, 0.74901961)), - ("gray76", (0.76078431, 0.76078431, 0.76078431)), - ("grey76", (0.76078431, 0.76078431, 0.76078431)), - ("gray77", (0.76862745, 0.76862745, 0.76862745)), - ("grey77", (0.76862745, 0.76862745, 0.76862745)), - ("gray78", (0.78039216, 0.78039216, 0.78039216)), - ("grey78", (0.78039216, 0.78039216, 0.78039216)), - ("gray79", (0.78823529, 0.78823529, 0.78823529)), - ("grey79", (0.78823529, 0.78823529, 0.78823529)), - ("gray80", (0.80000000, 0.80000000, 0.80000000)), - ("grey80", (0.80000000, 0.80000000, 0.80000000)), - ("gray81", (0.81176471, 0.81176471, 0.81176471)), - ("grey81", (0.81176471, 0.81176471, 0.81176471)), - ("gray82", (0.81960784, 0.81960784, 0.81960784)), - ("grey82", (0.81960784, 0.81960784, 0.81960784)), - ("gray83", (0.83137255, 0.83137255, 0.83137255)), - ("grey83", (0.83137255, 0.83137255, 0.83137255)), - ("gray84", (0.83921569, 0.83921569, 0.83921569)), - ("grey84", (0.83921569, 0.83921569, 0.83921569)), - ("gray85", (0.85098039, 0.85098039, 0.85098039)), - ("grey85", (0.85098039, 0.85098039, 0.85098039)), - ("gray86", (0.85882353, 0.85882353, 0.85882353)), - ("grey86", (0.85882353, 0.85882353, 0.85882353)), - ("gray87", (0.87058824, 0.87058824, 0.87058824)), - ("grey87", (0.87058824, 0.87058824, 0.87058824)), - ("gray88", (0.87843137, 0.87843137, 0.87843137)), - ("grey88", (0.87843137, 0.87843137, 0.87843137)), - ("gray89", (0.89019608, 0.89019608, 0.89019608)), - ("grey89", (0.89019608, 0.89019608, 0.89019608)), - ("gray90", (0.89803922, 0.89803922, 0.89803922)), - ("grey90", (0.89803922, 0.89803922, 0.89803922)), - ("gray91", (0.90980392, 0.90980392, 0.90980392)), - ("grey91", (0.90980392, 0.90980392, 0.90980392)), - ("gray92", (0.92156863, 0.92156863, 0.92156863)), - ("grey92", (0.92156863, 0.92156863, 0.92156863)), - ("gray93", (0.92941176, 0.92941176, 0.92941176)), - ("grey93", (0.92941176, 0.92941176, 0.92941176)), - ("gray94", (0.94117647, 0.94117647, 0.94117647)), - ("grey94", (0.94117647, 0.94117647, 0.94117647)), - ("gray95", (0.94901961, 0.94901961, 0.94901961)), - ("grey95", (0.94901961, 0.94901961, 0.94901961)), - ("gray96", (0.96078431, 0.96078431, 0.96078431)), - ("grey96", (0.96078431, 0.96078431, 0.96078431)), - ("gray97", (0.96862745, 0.96862745, 0.96862745)), - ("grey97", (0.96862745, 0.96862745, 0.96862745)), - ("gray98", (0.98039216, 0.98039216, 0.98039216)), - ("grey98", (0.98039216, 0.98039216, 0.98039216)), - ("gray99", (0.98823529, 0.98823529, 0.98823529)), - ("grey99", (0.98823529, 0.98823529, 0.98823529)), - ("gray100", (1.00000000, 1.00000000, 1.00000000)), - ("grey100", (1.00000000, 1.00000000, 1.00000000)), - ("DarkGrey", (0.66274510, 0.66274510, 0.66274510)), - ("DarkGray", (0.66274510, 0.66274510, 0.66274510)), - ("DarkBlue", (0.00000000, 0.00000000, 0.54509804)), - ("DarkCyan", (0.00000000, 0.54509804, 0.54509804)), - ("DarkMagenta", (0.54509804, 0.00000000, 0.54509804)), - ("DarkRed", (0.54509804, 0.00000000, 0.00000000)), - ("LightGreen", (0.56470588, 0.93333333, 0.56470588)), - ) diff -Nru frescobaldi-1.2.0/python/ly/dom.py frescobaldi-2.0.0/python/ly/dom.py --- frescobaldi-1.2.0/python/ly/dom.py 2010-01-30 22:03:27.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/dom.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1171 +0,0 @@ -# This file is part of LilyDOM, http://lilykde.googlecode.com/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -r""" -LilyPond DOM - -(c) 2008 Wilbert Berendsen -License: GPL. - -A simple Document Object Model for LilyPond documents. - -The purpose is to easily build a LilyPond document with good syntax, -not to fully understand all features LilyPond supports. (This DOM does -not enforce a legal LilyPond file.) - -All elements of a LilyPond document inherit Node. - -Note: elements keep a weak reference to their parent. -""" - -import re, weakref -from fractions import Fraction - -import ly.pitch, ly.duration - -class Node(object): - - def __init__(self, parent=None): - self._parent = None - self._children = [] - if parent: - parent.append(self) - - def parent(self): - """ - The parent, or None if the node has no parent. - """ - if self._parent is not None: - return self._parent() - - def children(self): - """ - Our children, may be an empty list. - """ - return self._children - - def setParent(self, parent): - """ - Takes away node from current parent and appends to other. - """ - if parent is not self.parent(): - parent.append(self) - - def removeFromParent(self): - """ - Removes self from parent. - """ - parent = self.parent() - if parent: - parent.remove(self) - - def append(self, node): - """ - Appends an object to the current node. It will be reparented, that - means it will be removed from it's former parent (if it had one). - """ - assert isinstance(node, Node) - node.removeFromParent() - self._children.append(node) - node._parent = weakref.ref(self) - - def index(self, node): - """ - Return the index of the given object in our list of children. - """ - return self._children.index(node) - - def insert(self, where, node): - """ - Insert at index, or just before another node. - """ - assert isinstance(node, Node) - if isinstance(where, Node): - where = self.index(where) - node.removeFromParent() - self._children.insert(where, node) - node._parent = weakref.ref(self) - - def remove(self, node): - """ - Removes the given child object. - See also: removeFromParent() - """ - self._children.remove(node) - node._parent = None - - def replace(self, where, node): - """ - Replace child at index or specified node with a replacement node. - """ - assert isinstance(node, Node) - if isinstance(where, Node): - old = where - where = self.index(where) - else: - old = self._children[where] - node.removeFromParent() - node._parent = weakref.ref(self) - self._children[where] = node - old._parent = None - - def __nonzero__(self): - """ We are always true """ - return True - - def __len__(self): - """ Return the number of children """ - return len(self._children) - - def __getitem__(self, k): - """ also supports slices """ - return self._children[k] - - def __setitem__(self, k, obj): - """ also supports slices """ - if isinstance(k, slice): - if k.step: - # extended slice, number of items must be same - if len(obj) == len(self[k]): - for new, old in zip(obj, self[k]): - self.replace(old, new) - else: - raise ValueError, \ - "extended slice and replacement must have same length" - else: - del self[k] - start = k.start or 0 - # save the obj iterator results because obj could change ... - for d, new in enumerate(tuple(obj)): - self.insert(start + d, new) - else: - self.replace(k, obj) - - def __delitem__(self, k): - """ also supports slices """ - if isinstance(k, slice): - for i in self[k]: - self.remove(i) - else: - self.remove(self[k]) - - def __contains__(self, node): - return node in self._children - - def clear(self): - """ Remove all children """ - del self[:] - - def copy(self): - """ Return a deep copy of the node and its children """ - obj = self.__class__.__new__(self.__class__) - for name, value in vars(self).items(): - name.startswith("_") or setattr(obj, name, value) - obj._parent = None - obj._children = [] - for n in self: - obj.append(n.copy()) - return obj - - def ancestors(self): - """ climb the tree up over the parents """ - node = self.parent() - while node: - yield node - node = node.parent() - - def previousSibling(self): - """ - Return the object just before this one in the parent's list of children. - None if this is the first child, or if we have no parent. - """ - parent = self.parent() - if parent: - i = parent.index(self) - if i > 0: - return parent[i-1] - - def nextSibling(self): - """ - Return the object just after this one in the parent's list of children. - None if this is the last child, or if we have no parent. - """ - parent = self.parent() - if parent: - i = parent.index(self) - if i < len(parent) - 1: - return parent[i+1] - - def previousSiblings(self): - """ - Iterate (backwards) over the preceding items in our parent's - list of children. - """ - node = self.previousSibling() - while node: - yield node - node = self.previousSibling() - - def nextSiblings(self): - """ - Iterate over the following items in our parent's list of children. - """ - node = self.nextSibling() - while node: - yield node - node = self.nextSibling() - - def isChildOf(self, otherNode): - """ find parent in ancestors? """ - for node in self.ancestors(): - if node is otherNode: - return True - return False - - def toplevel(self): - """ returns the toplevel parent Node of this node """ - node = self - parent = self.parent() - while parent: - node = parent - parent = node.parent() - return node - - def iterDepthFirst(self, depth = -1): - """ - Iterate over all the children, and their children, etc. - Set depth to restrict the search to a certain depth, -1 is unrestricted. - """ - if depth != 0: - for i in self: - yield i - for j in i.iterDepthFirst(depth - 1): - yield j - - def iterDepthLast(self, depth = -1): - """ - Iterate over the children in rings, depth last. - Set depth to restrict the search to a certain depth, -1 is unrestricted. - """ - children = self.children() - while children and depth: - depth -= 1 - newchildren = [] - for i in children: - yield i - newchildren.extend(i.children()) - children = newchildren - - def findChildren(self, cls, depth = -1): - """ - iterate over all descendants of the current node if they are of - the class cls or a subclass. - """ - for node in self.iterDepthLast(depth): - if isinstance(node, cls): - yield node - - def findChild(self, cls, depth = -1): - """ - return the first descendant of the current node of - the class cls or a subclass, if there is any. - """ - for node in self.iterDepthLast(depth): - if isinstance(node, cls): - return node - - def findParent(self, cls): - """ - find an ancestor of the given class - """ - for node in self.ancestors(): - if isinstance(node, cls): - return node - - -## -# Helper classes -# -class Printer(object): - """ - Performs certain operations on behalf of a LyNode tree, - like quoting strings or translating pitch names, etc. - """ - def __init__(self): - self.typographicalQuotes = True - self.language = "nederlands" - self.indentString = ' ' - self.lilypondVersion = (2, 10, 0) - - def quoteString(self, text): - if self.typographicalQuotes: - text = re.sub(r'"(.*?)"', '\u201C\\1\u201D', text) - text = re.sub(r"'(.*?)'", '\u2018\\1\u2019', text) - text = text.replace("'", '\u2018') - # escape regular double quotes - text = text.replace('"', '\\"') - # quote the string - return '"{0}"'.format(text) - - def indentGen(self, node, startIndent = 0): - """ - A generator that walks on the output of the given node, - and returns properly indented LilyPond code. - """ - d = startIndent - for t in node.ly(self).splitlines() + [''] * node.after: - if d and re.match(r'}|>|%}', t): - d -= 1 - yield self.indentString * d + t - if re.search(r'(\{|<|%{)$', t): - d += 1 - - def indent(self, node): - """ - Return a formatted printout of node (and its children) - """ - return '\n'.join(self.indentGen(node)) - - -class Reference(object): - """ - A simple object that keeps a name, to use as a (context) - identifier. Set the name attribute to the name you want - to display, and on all places in the document the name - will show up. - """ - def __init__(self, name=""): - self.name = name - - def __unicode__(self): - return self.name - - -class Named(object): - """ - Mixin to print a \\name before the contents of the container. - unicode() is called on the self.name attribute, so it may also - be a Reference. - """ - name = "" - - def ly(self, printer): - return "\\{0} {1}".format(unicode(self.name), super(Named, self).ly(printer)) - - -class HandleVars(object): - """ - A powerful mixin class that makes handling unique variable assignments - inside a Container more easy. - E.g.: - >>> h = Header() - >>> h['composer'] = "Johann Sebastian Bach" - creates a subnode (by default Assignment) with the name 'composer', and - that node again gets an autogenerated subnode of type QuotedString (If the - argument wasn't already a Node). - """ - childClass = None # To be filled in later - - def ifbasestring(func): - """ - Ensure that the method is only called for basestring objects. - Otherwise the same method from the super class is called. - """ - def newfunc(obj, name, *args): - if isinstance(name, basestring): - return func(obj, name, *args) - else: - f = getattr(super(HandleVars, obj), func.func_name) - return f(name, *args) - return newfunc - - @ifbasestring - def __getitem__(self, name): - for node in self.findChildren(self.childClass, 1): - if node.name == name: - return node - - @ifbasestring - def __setitem__(self, name, valueObj): - if not isinstance(valueObj, LyNode): - valueObj = self.importNode(valueObj) - assignment = self[name] - if assignment: - assignment.setValue(valueObj) - else: - self.childClass(name, self, valueObj) - - @ifbasestring - def __contains__(self, name): - return bool(self[name]) - - @ifbasestring - def __delitem__(self, name): - h = self[name] - if h: - self.remove(h) - - def importNode(self, obj): - """ - Try to interpret the object and transform it into a Node object - of the right species. - """ - return QuotedString(obj) - - -class AddDuration(object): - """ Mixin to add a duration (as child). """ - def ly(self, printer): - s = super(AddDuration, self).ly(printer) - dur = self.findChild(Duration, 1) - if dur: - s += dur.ly(printer) - return s - - -class LyNode(Node): - """ - Base class for LilyPond objects, based on Node, - which takes care of the tree structure. - """ - - ## - # True if this element is single LilyPond atom, word, note, etc. - # When it is the only element inside { }, the brackets can be removed. - isAtom = False - - ## - # The number of newlines this object wants before it. - before = 0 - - ## - # The number of newlines this object wants after it. - after = 0 - - def ly(self, printer): - """ - Returns printable output for this object. - Can ask printer for certain settings, e.g. pitch language etc. - """ - return '' - - def concat(self, other): - """ - Returns a string with newlines to concat this node to another one. - If zero newlines are requested, an empty string is returned. - """ - return '\n' * max(self.after, other.before) - - -## -# Leaf and Container are the two base classes the rest of the LilyPond -# element classes is based on. -# -class Leaf(LyNode): - """ A leaf node without children """ - pass - - -class Container(LyNode): - """ A node that concatenates its children on output """ - - ## - # default character to concatenate children with - defaultSpace = " " - - @property - def before(self): - if self.children(): - return self[0].before - else: - return 0 - - @property - def after(self): - if self.children(): - return self[-1].after - else: - return 0 - - def ly(self, printer): - if len(self) == 0: - return '' - else: - n = self[0] - res = [n.ly(printer)] - for m in self[1:]: - res.append(n.concat(m) or self.defaultSpace) - res.append(m.ly(printer)) - n = m - return "".join(res) - - -class Block(Container): - """ - A vertical container type that puts everything on a new line. - """ - defaultSpace = "\n" - before, after = 1, 1 - - -class Document(Container): - """ - A container type that puts everything on a new line. - To be used as a full LilyPond document. - """ - defaultSpace = "\n" - after = 1 - - -## -# These classes correspond to real LilyPond data. -# -class Text(Leaf): - """ A leaf node with arbitrary text """ - def __init__(self, text="", parent=None): - super(Text, self).__init__(parent) - if not isinstance(text, basestring): - text = unicode(text) - self.text = text - - def ly(self, printer): - return self.text - - -class TextDur(AddDuration, Text): - """ A text note with an optional duration as child. """ - pass - - -class Line(Text): - """ A text node that claims its own line. """ - before, after = 1, 1 - - -class Comment(Text): - """ A LilyPond comment at the end of a line """ - after = 1 - - def ly(self, printer): - return re.compile('^', re.M).sub('% ', self.text) - - -class LineComment(Comment): - """ A LilyPond comment that takes a full line """ - before = 1 - - -class BlockComment(Comment): - """ A block comment between %{ and %} """ - @property - def before(self): - return '\n' in self.text and 1 or 0 - - @property - def after(self): - return '\n' in self.text and 1 or 0 - - def ly(self, printer): - text = self.text.replace('%}', '') - f = "%{{\n{0}\n%}}" if '\n' in text else "%{{ {0} %}}" - return f.format(text) - - -class QuotedString(Text): - """ A string that is output inside double quotes. """ - isAtom = True - def ly(self, printer): - return printer.quoteString(self.text) - - -class Newline(LyNode): - """ A newline. """ - after = 1 - - -class BlankLine(Newline): - """ A blank line. """ - before = 1 - - -class Scheme(Text): - """ A Scheme expression, without the extra # prepended """ - isAtom = True - - def ly(self, printer): - return '#' + self.text - - -class Version(Line): - """ a LilyPond version instruction """ - def ly(self, printer): - return r'\version "{0}"'.format(self.text) - - -class Include(Line): - """ a LilyPond \\include statement """ - def ly(self, printer): - return r'\include "{0}"'.format(self.text) - - -class Assignment(Container): - """ - A varname = value construct with it's value as its first child - The name can be a string or a Reference object: so that everywhere - where this varname is referenced, the name is the same. - """ - before, after = 1, 1 - - def __init__(self, name=None, parent=None, valueObj=None): - super(Assignment, self).__init__(parent) - self.name = name - if valueObj: - self.append(valueObj) - - # Convenience methods: - def setValue(self, obj): - if len(self): - self[0] = obj - else: - self.append(obj) - - def value(self): - if len(self): - return self[0] - - def ly(self, printer): - return "{0} = {1}".format( - unicode(self.name), super(Assignment, self).ly(printer)) - - -HandleVars.childClass = Assignment - - -class Identifier(Leaf): - """ - An identifier, prints as \\name. - Name may be a string or a Reference object. - """ - isAtom = True - - def __init__(self, name=None, parent=None): - super(Identifier, self).__init__(parent) - self.name = name - - def ly(self, printer): - return "\\" + unicode(self.name) - - -class Statement(Named, Container): - """ - Base class for statements with arguments. The statement is read in the - name attribute, the arguments are the children. - """ - before = 0 # do not read property from container - isAtom = True - - -class Command(Statement): - """ - Use this to create a LilyPond command supplying the name (or a Reference) - when instantiating. - """ - def __init__(self, name, parent=None): - super(Command, self).__init__(parent) - self.name = name - - -class Enclosed(Container): - """ - Encloses all children between brackets: { ... } - If may_remove_brackets is True in subclasses, the brackets are - removed if there is only one child and that child is an atom (i.e. - a single LilyPond expression. - """ - may_remove_brackets = False - pre, post = "{", "}" - before, after = 0, 0 - isAtom = True - - def ly(self, printer): - if len(self) == 0: - return " ".join((self.pre, self.post)) - sup = super(Enclosed, self) - text = sup.ly(printer) - if self.may_remove_brackets and len(self) == 1 and self[0].isAtom: - return text - elif sup.before or sup.after or '\n' in text: - return "".join((self.pre, "\n" * max(sup.before, 1), text, - "\n" * max(sup.after, 1), self.post)) - else: - return " ".join((self.pre, text, self.post)) - - -class Seq(Enclosed): - """ An SequentialMusic expression between { } """ - pre, post = "{", "}" - - -class Sim(Enclosed): - """ An SimultaneousMusic expression between << >> """ - pre, post = "<<", ">>" - - -class Seqr(Seq): may_remove_brackets = True -class Simr(Sim): may_remove_brackets = True - - -class SchemeLily(Enclosed): - """ A LilyPond expression between #{ #} (inside scheme) """ - pre, post = "#{", "#}" - - -class SchemeList(Enclosed): - """ A list of items enclosed in parentheses """ - pre, post = "(", ")" - - def ly(self, printer): - return self.pre + super(Enclosed, self).ly(printer) + self.post - - -class StatementEnclosed(Named, Enclosed): - """ - Base class for LilyPond commands that have a single bracket-enclosed - list of arguments. - """ - may_remove_brackets = True - - -class CommandEnclosed(StatementEnclosed): - """ - Use this to print LilyPond commands that have a single - bracket-enclosed list of arguments. The command name is supplied to - the constructor. - """ - def __init__(self, name, parent=None): - super(CommandEnclosed, self).__init__(parent) - self.name = name - - -class Section(StatementEnclosed): - """ - Very much like a Statement. Use as base class for \\book { }, \\score { } - etc. By default never removes the brackets and always starts on a new line. - """ - may_remove_brackets = False - before, after = 1, 1 - - -class Book(Section): name = 'book' -class Score(Section): name = 'score' -class Paper(HandleVars, Section): name = 'paper' -class Layout(HandleVars, Section): name = 'layout' -class Midi(HandleVars, Section): name = 'midi' -class Header(HandleVars, Section): name = 'header' - - -class With(HandleVars, Section): - """ If this item has no children, it prints nothing. """ - name = 'with' - before, after = 0, 0 - - def ly(self, printer): - if len(self): - return super(With, self).ly(printer) - else: - return '' - - -class ContextName(Text): - """ - Used to print a context name, like \\Score. - """ - def ly(self, printer): - return "\\" + self.text - - -class Context(HandleVars, Section): - """ - A \\context section for use inside Layout or Midi sections. - """ - name = 'context' - - def __init__(self, contextName="", parent=None): - super(Context, self).__init__(parent) - if contextName: - ContextName(contextName, self) - - -class ContextType(Container): - """ - \\new or \\context Staff = 'bla' \\with { } << music >> - - A \\with (With) element is added automatically as the first child as soon - as you use our convenience methods that manipulate the variables - in \\with. If the \\with element is empty, it does not print anything. - You should add one other music object to this. - """ - before, after = 1, 1 - isAtom = True - ctype = None - - def __init__(self, cid=None, new=True, parent=None): - super(ContextType, self).__init__(parent) - self.new = new - self.cid = cid - - def ly(self, printer): - res = [] - res.append(self.new and "\\new" or "\\context") - res.append(self.ctype or self.__class__.__name__) - if self.cid: - res.append("=") - res.append(printer.quoteString(unicode(self.cid))) - res.append(super(ContextType, self).ly(printer)) - return " ".join(res) - - def getWith(self): - """ - Gets the attached with clause. Creates it if not there. - """ - for node in self: - if isinstance(node, With): - return node - self.insert(0, With()) - return self[0] - - -class ChoirStaff(ContextType): pass -class ChordNames(ContextType): pass -class CueVoice(ContextType): pass -class Devnull(ContextType): pass -class DrumStaff(ContextType): pass -class DrumVoice(ContextType): pass -class Dynamics(ContextType): pass -class FiguredBass(ContextType): pass -class FretBoards(ContextType): pass -class Global(ContextType): pass -class GrandStaff(ContextType): pass -class GregorianTranscriptionStaff(ContextType): pass -class GregorianTranscriptionVoice(ContextType): pass -class InnerChoirStaff(ContextType): pass -class InnerStaffGroup(ContextType): pass -class Lyrics(ContextType): pass -class MensuralStaff(ContextType): pass -class MensuralVoice(ContextType): pass -class NoteNames(ContextType): pass -class PianoStaff(ContextType): pass -class RhythmicStaff(ContextType): pass -class ScoreContext(ContextType): - """ - Represents the Score context in LilyPond, but the name would - collide with the Score class that represents \\score { } constructs. - - Because the latter is used more often, use ScoreContext to get - \\new Score etc. - """ - ctype = 'Score' - -class Staff(ContextType): pass -class StaffGroup(ContextType): pass -class TabStaff(ContextType): pass -class TabVoice(ContextType): pass -class VaticanaStaff(ContextType): pass -class VaticanaVoice(ContextType): pass -class Voice(ContextType): pass - - -class UserContext(ContextType): - """ - Represents a context the user creates. - e.g. \\new MyStaff = cid << music >> - """ - def __init__(self, ctype, cid=None, new=True, parent=None): - super(UserContext, self).__init__(cid, new, parent) - self.ctype = ctype - - -class ContextProperty(Leaf): - """ - A Context.property or Context.layoutObject construct. - Call e.g. ContextProperty('aDueText', 'Staff') to get 'Staff.aDueText'. - """ - def __init__(self, prop, context=None, parent=None): - self.prop = prop - self.context = context - - def ly(self, printer): - if self.context: - # In \lyrics or \lyricmode: put spaces around dot. - p = self.findParent(InputMode) - if p and isinstance(p, LyricMode): - f = '{0} . {1}' - else: - f = '{0}.{1}' - return f.format(self.context, self.prop) - else: - return self.prop - - -class InputMode(StatementEnclosed): - """ - The abstract base class for input modes such as lyricmode/lyrics, - chordmode/chords etc. - """ - pass - - -class ChordMode(InputMode): name = 'chordmode' -class InputChords(ChordMode): name = 'chords' -class LyricMode(InputMode): name = 'lyricmode' -class InputLyrics(LyricMode): name = 'lyrics' -class NoteMode(InputMode): name = 'notemode' -class InputNotes(NoteMode): name = 'notes' -class FigureMode(InputMode): name = 'figuremode' -class InputFigures(FigureMode): name = 'figures' -class DrumMode(InputMode): name = 'drummode' -class InputDrums(DrumMode): name = 'drums' - - -class AddLyrics(InputLyrics): - name = 'addlyrics' - may_remove_brackets = False - before, after = 1, 1 - - -class LyricsTo(LyricMode): - name = 'lyricsto' - - def __init__(self, cid, parent=None): - super(LyricsTo, self).__init__(parent) - self.cid = cid - - def ly(self, printer): - res = ["\\" + self.name] - res.append(printer.quoteString(unicode(self.cid))) - res.append(super(Named, self).ly(printer)) - return " ".join(res) - - -class Pitch(Leaf): - """ - A pitch with octave, note, alter. - octave is specified by an integer, zero for the octave containing middle C. - note is a number from 0 to 6, with 0 corresponding to pitch C and 6 - corresponding to pitch B. - alter is the number of whole tones for alteration (can be int or Fraction) - """ - - def __init__(self, octave=0, note=0, alter=0, parent=None): - super(Pitch, self).__init__(parent) - self.octave = octave - self.note = note - self.alter = Fraction(alter) - - def ly(self, printer): - """ - Print the pitch in the preferred language. - """ - p = ly.pitch.pitchWriter[printer.language](self.note, self.alter) - if self.octave < -1: - return p + ',' * (-self.octave - 1) - elif self.octave > -1: - return p + "'" * (self.octave + 1) - return p - - -class Duration(Leaf): - """ - A duration with duration (in logarithmical form): (-2 ... 8), - where -2 = \\longa, -1 = \\breve, 0 = 1, 1 = 2, 2 = 4, 3 = 8, 4 = 16, etc, - dots (number of dots), - factor (Fraction giving the scaling of the duration). - """ - def __init__(self, dur, dots=0, factor=1, parent=None): - super(Duration, self).__init__(parent) - self.dur = dur # log - self.dots = dots - self.factor = Fraction(factor) - - def ly(self, printer): - s = ly.duration.durations[self.dur + 3] + '.' * self.dots - if self.factor != 1: - s += '*' + str(self.factor) - return s - - -class Chord(Container): - """ - A chord containing one of more Pitches and optionally one Duration. - This is a bit of a hack, awaiting real music object support. - """ - def ly(self, printer): - pitches = list(self.findChildren(Pitch, 1)) - if len(pitches) == 1: - s = pitches[0].ly(printer) - else: - s = "<{0}>".format(' '.join(p.ly(printer) for p in pitches)) - duration = self.findChild(Duration, 1) - if duration: - s += duration.ly(printer) - return s - - -class Relative(Statement): - """ - \\relative music - - You should add a Pitch (optionally) and another music object, - e.g. Sim or Seq, etc. - """ - name = 'relative' - - -class Transposition(Statement): - """ - \\transposition - You should add a Pitch. - """ - name = 'transposition' - - -class KeySignature(Leaf): - """ - A key signature expression, like: - - \\key c \\major - The pitch should be given in the arguments note and alter and is written - out in the document's language. - """ - def __init__(self, note=0, alter=0, mode="major", parent=None): - super(KeySignature, self).__init__(parent) - self.note = note - self.alter = Fraction(alter) - self.mode = mode - - def ly(self, printer): - pitch = ly.pitch.pitchWriter[printer.language](self.note, self.alter) - return "\\key {0} \\{1}".format(pitch, self.mode) - - -class TimeSignature(Leaf): - """ - A time signature, like: \\time 4/4 - """ - def __init__(self, num, beat, parent=None): - super(TimeSignature, self).__init__(parent) - self.num = num - self.beat = beat - - def ly(self, printer): - return "\\time {0}/{1}".format(self.num, self.beat) - - -class Partial(Named, Duration): - """ - \\partial - You should add a Duration element - """ - name = "partial" - before, after = 1, 1 - - -class Tempo(Leaf): - """ - A tempo setting, like: \\tempo 4 = 100 - """ - def __init__(self, duration, value, parent=None): - super(Tempo, self).__init__(parent) - self.duration = duration - self.value = value - - def ly(self, printer): - return "\\tempo {0}={1}".format(self.duration, self.value) - - -class Clef(Leaf): - """ - A clef. - """ - def __init__(self, clef, parent=None): - super(Clef, self).__init__(parent) - self.clef = clef - - def ly(self, printer): - clef = self.clef if self.clef.isalpha() else '"{0}"'.format(self.clef) - return "\\clef " + clef - - -class VoiceSeparator(Leaf): - """ - A Voice Separator: \\\\ - """ - def ly(self, printer): - return r'\\' - - -class Mark(Statement): - """ - The \\mark command. - """ - name = 'mark' - - -class Markup(StatementEnclosed): - """ - The \\markup command. - You can add many children, in that case Markup automatically prints - { and } around them. - """ - name = 'markup' - - -class MarkupEnclosed(CommandEnclosed): - """ - A markup that auto-encloses all its arguments, like 'italic', 'bold' - etc. You must supply the name. - """ - pass - - -class MarkupCommand(Command): - """ - A markup command with more or no arguments, that does not auto-enclose - its arguments. Useful for commands like note-by-number or hspace. - - You must supply the name. Its arguments are its children. - If one argument can be a markup list, use a Enclosed() construct for that. - """ - pass - - -# Utility functions -def addInstrumentNameEngraverIfNecessary(node): - """ - Adds the Instrument_name_engraver to the node if it would need it - to print instrument names. - """ - if (isinstance(node, ContextType) and not isinstance(node, - (Staff, RhythmicStaff, PianoStaff, Lyrics, FretBoards))): - Line('\\consists "Instrument_name_engraver"', node.getWith()) - - - \ No newline at end of file diff -Nru frescobaldi-1.2.0/python/ly/duration.py frescobaldi-2.0.0/python/ly/duration.py --- frescobaldi-1.2.0/python/ly/duration.py 2010-10-04 07:50:24.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/duration.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" LilyPond information and logic concerning durations """ - -import ly.rx - - -durations = ['\\maxima', '\\longa', '\\breve', - '1', '2', '4', '8', '16', '32', '64', '128', '256', '512', '1024', '2048'] - -def editRhythm(func): - """ - Decorator to handle functions that are the callback for the regexp. - """ - def decorator(text): - def repl(m): - return m.group('duration') and func(m) or m.group() - return ly.rx.chord_rest.sub(repl, text) - return decorator - -@editRhythm -def doubleDurations(m): - chord, dur, dots, scale = m.group('chord', 'dur', 'dots', 'scale') - if dur in durations: - i = durations.index(dur) - if i > 0: - dur = durations[i - 1] - return ''.join(i or '' for i in (chord, dur, dots, scale)) - -@editRhythm -def halveDurations(m): - chord, dur, dots, scale = m.group('chord', 'dur', 'dots', 'scale') - if dur in durations: - i = durations.index(dur) - if i < len(durations) - 1: - dur = durations[i + 1] - return ''.join(i or '' for i in (chord, dur, dots, scale)) - -@editRhythm -def dotDurations(m): - chord, dur, dots, scale = m.group('chord', 'dur', 'dots', 'scale') - dots = (dots or '') + '.' - return ''.join(i or '' for i in (chord, dur, dots, scale)) - -@editRhythm -def undotDurations(m): - chord, dur, dots, scale = m.group('chord', 'dur', 'dots', 'scale') - if dots: - dots = dots[1:] - return ''.join(i or '' for i in (chord, dur, dots, scale)) - -@editRhythm -def removeScaling(m): - return ''.join(i or '' for i in m.group('chord', 'dur', 'dots')) - -@editRhythm -def removeDurations(m): - return m.group('chord') - -def makeImplicit(text): - old = [''] - def repl(m): - chord, duration = m.group('chord', 'duration') - if chord: - if not duration or duration == old[0]: - return chord - else: - old[0] = duration - return chord + duration - return m.group() - return ly.rx.chord_rest.sub(repl, text) - -def makeImplicitPerLine(text): - return '\n'.join(makeImplicit(t) for t in makeExplicit(text).split('\n')) - -def makeExplicit(text): - old = [''] - def repl(m): - chord, duration = m.group('chord', 'duration') - if chord: - if not duration: - return chord + old[0] - else: - old[0] = duration - return chord + duration - return m.group() - return ly.rx.chord_rest.sub(repl, text) - -def applyRhythm(text, rhythm): - """ Adds the entered rhythm to the selected music.""" - durs = [m.group() for m in ly.rx.finddurs.finditer(rhythm)] - if not durs: - return text - def durgen(): - old = '' - while True: - for i in durs: - yield i != old and i or '' - old = i - durations = durgen() - def repl(m): - if m.group('chord'): - return m.group('chord') + next(durations) - return m.group() - return ly.rx.chord_rest.sub(repl, text) - -def extractRhythm(text): - """ Iterate over a rhythm from text, returning only the durations """ - duration = '' - for m in ly.rx.chord_rest.finditer(text): - if m.group('chord'): - if m.group('duration'): - duration = m.group('duration') - yield duration - diff -Nru frescobaldi-1.2.0/python/ly/dynamic.py frescobaldi-2.0.0/python/ly/dynamic.py --- frescobaldi-1.2.0/python/ly/dynamic.py 2010-08-29 14:25:15.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/dynamic.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -marks = ( - 'f', 'ff', 'fff', 'ffff', 'fffff', - 'p', 'pp', 'ppp', 'pppp', 'ppppp', - 'mf', 'mp', 'fp', 'sfz', 'rfz', - 'sf', 'sff', 'sp', 'spp', -) - diff -Nru frescobaldi-1.2.0/python/ly/font.py frescobaldi-2.0.0/python/ly/font.py --- frescobaldi-1.2.0/python/ly/font.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/font.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" Routines dealing with LilyPond fonts """ - -import os, ly, xml.dom.minidom - -class SvgFontInfo(object): - """ - Can load a SVG font and provide information about the glyphs and - their unicode values. - """ - def __init__(self, filename): - self.name2unicode = {} - doc = xml.dom.minidom.parse(filename) - glyphs = doc.getElementsByTagName('glyph') - for g in glyphs: - name = g.attributes["glyph-name"].value - code = g.attributes["unicode"].value - self.name2unicode[name] = code - doc.unlink() - - def glyph(self, glyphName): - return self.name2unicode.get(glyphName, '') - - def glyphs(self): - return self.name2unicode.keys() - diff -Nru frescobaldi-1.2.0/python/ly/indent.py frescobaldi-2.0.0/python/ly/indent.py --- frescobaldi-1.2.0/python/ly/indent.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/indent.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,261 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Indent LilyPond input. - -Recognizes common LilyPond mode and Scheme mode. - -This module is not dependent on any other module, -besides the Python standard re module. -""" - -import re - -# tokens to look for in LilyPond mode -lily_re = ( - r"(?P\{|<<)" - r"|(?P>>|\})" - r'|(?P"(\\[\\"]|[^"])*")' - r"|(?P\n[^\S\n]*)" - r"|(?P[^\S\n]+)" - r"|(?P#)" - r"|(?P%\{.*?%\})" - r"|(?P%%%[^\n]*)" - r"|(?P%[^\n]*)" - ) - -# tokens to look for in Scheme mode -scheme_re = ( - r"(?P\()" - r"|(?P\))" - r'|(?P"(\\[\\"]|[^"])*")' - r"|(?P\n[^\S\n]*)" - r"|(?P[^\S\n]+)" - r"|(?P#\{)" - r"|(?P;;;[^\n]*)" - r"|(?P#!.*?!#)" - r"|(?P;[^\n]*)" - ) - -# tokens to look for in LilyPond-inside-Scheme mode -schemelily_re = r"(?P#\})|" + lily_re - - -# Parse LilyPond text -lily = re.compile(lily_re, re.DOTALL) - -# Parse LilyPond-in-Scheme text -schemelily = re.compile(schemelily_re, re.DOTALL) - -# Parse Scheme text, instantiate to keep state (depth) -class scheme: - search = re.compile(scheme_re, re.DOTALL).search - depth = 0 - - -# searches for indent inside a string -indent_rx = re.compile(r'\n([^\S\n]*)') - - -def indent(text, - start = None, - indentwidth = 2, - tabwidth = 8, - usetabs = None, - startscheme = False - ): - """ - Properly indents the LilyPond input in text. - - If start is an integer value, use that value as the indentwidth to start - with, disregarding the current indent of the first line. - If it is None, use the indent of the first line. - - indentwidth: how many positions to indent (default 2) - tabwidth: width of a tab character - usetabs: whether to use tab characters in the indent: - - None = determine from document - - True = use tabs for the parts of the indent that exceed the tab width - - False = don't use tabs. - startscheme: start in scheme mode (not very robust) - """ - - # record length of indent of first line - space = re.match(r'[^\S\n]*', text).group() - if start is None: - start = len(space.expandtabs(tabwidth)) - if usetabs is None: - usetabs = '\t' in space or '\n\t' in text - - mode = [lily] # the mode to parse in - indent = [start] # stack with indent history - pos = len(space) # start position in text - output = [] # list of output lines - - if startscheme: - mode.append(scheme()) - if usetabs: - makeindent = lambda i: '\t' * int(i / tabwidth) + ' ' * (i % tabwidth) - else: - makeindent = lambda i: ' ' * i - - line = [] # list to build the output, per line - curindent = -1 # current indent in count of spaces, -1 : not yet set - - # Search the text from the previous position - # (very fast: does not alter the string in text) - m = mode[-1].search(text, pos) - while m: - # also append text before the found token - more = pos < m.start() - if more: - line.append(text[pos:m.start()]) - - # type, text, and new position for next search - item, token, pos = m.lastgroup, m.group(), m.end() - - # If indent not yet determined, set it to 0 if we found a long comment - # (with three or more %%% or ;;; characters). Was any other text found, - # keep the current indent level for the current line. - # (Our current indent can change if our line starts with dedent tokens.) - if curindent == -1: - if item == 'longcomment': - curindent = 0 - elif (more or item not in ('dedent', 'space', 'backtoscheme')): - curindent = indent[-1] - - # Check if we found a multiline block comment. - # Thoses are handled specially. Indents inside the block comment are - # preserved but positioned as close as possible to the current indent. - # So the algorithm cuts the shortest indent off from all lines and then - # adds the current indent. - if item == 'blockcomment' and '\n' in token: - # Find the shortest indent inside the block comment - shortest = min(len(n.group(1).expandtabs(tabwidth)) - for n in indent_rx.finditer(token)) - # Remove that indent from all lines - fixindent = lambda n: '\n' + makeindent( - curindent - shortest + len(n.group(1).expandtabs(tabwidth))) - token = indent_rx.sub(fixindent, token) - - elif mode[-1] in (lily, schemelily): - # we are parsing in LilyPond mode. - if item == 'indent': - indent.append(indent[-1] + indentwidth) - elif item == 'dedent' and len(indent) > 1: - indent.pop() - elif item == 'scheme': - mode.append(scheme()) # enter scheme mode - elif item == 'backtoscheme': - indent.pop() - mode.pop() # leave lilypond mode, back to scheme - else: - # we are parsing in Scheme mode. - if item == 'indent': - mode[-1].depth += 1 # count parentheses - # look max 10 characters ahead to vertically align opening - # parentheses, but stop at closing parenthesis, quote or newline. - n = re.search(r'[()"\n]', text[pos:pos+10]) - if n and n.group() == '(': - indent.append(indent[-1] + n.start() + 1) - else: - indent.append(indent[-1] + indentwidth) - - elif item == 'dedent': - if mode[-1].depth: - indent.pop() - if mode[-1].depth <= 1: - mode.pop() # leave scheme mode - else: - mode[-1].depth -= 1 # count parentheses backwards - elif item == 'lilypond': - mode.append(schemelily) # enter lilypond-in-scheme mode - indent.append(indent[-1] + indentwidth) - elif mode[-1].depth == 0: - # jump out if we got one atom or are at a space or end of line - # and still no opening parenthesis. But stay if we only just - # had a hash(#). - if (item in ('string', 'comment', 'longcomment') - or (more and item in ('newline', 'space'))): - mode.pop() - - if item == 'newline': - # Write out the line - output.append(makeindent(curindent) + ''.join(line)) - line = [] - curindent = -1 - else: - line.append(token) - - # On to the next token - m = mode[-1].search(text, pos) - - # Still some text left? - if pos < len(text): - line.append(text[pos:]) - if line: - if curindent == -1: - curindent = indent[-1] - output.append(makeindent(curindent) + ''.join(line)) - else: - output.append(makeindent(start)) - # Return formatted output - return '\n'.join(output) - - -if __name__ == '__main__': - - import sys, optparse - - op = optparse.OptionParser(usage='usage: %prog [options] [filename]') - op.add_option('-o', '--output', - help='write to this file instead of standard output') - op.add_option('-i', '--indent-width', type='int', default=2, - help='indent width in characters to use [default: %default]') - op.add_option('-t', '--tab-width', type='int', default=8, - help='tab width to assume [default: %default]') - op.add_option('-s', '--start-indent', type='int', default=0, - help='start indent [default: %default]') - op.add_option('--scheme', action='store_true', - help='start indenting in Scheme mode') - op.add_option('-u', '--use-tabs', action='store_true', - help='use tabs instead of spaces for indent') - options, args = op.parse_args() - # TODO: encoding - # TODO: error handling - infile = args and open(args[0]) or sys.stdin - text = infile.read() - text = indent(text, - start=options.start_indent, - indentwidth=options.indent_width, - tabwidth=options.tab_width, - usetabs=options.use_tabs, - startscheme=options.scheme - ) - outfile = options.output and (options.output) or sys.stdout - outfile.write(text) - - if infile is not sys.stdin: - infile.close() - if outfile is not sys.stdout: - outfile.close() - sys.exit(0) diff -Nru frescobaldi-1.2.0/python/ly/__init__.py frescobaldi-2.0.0/python/ly/__init__.py --- frescobaldi-1.2.0/python/ly/__init__.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,193 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" Basic LilyPond information and utility functions """ - - -# Exceptions used by modules in this package -class NoMusicExpressionFound(Exception): - """ - Raised if no music expression could be found in abs->rel. - """ - pass - - -class QuarterToneAlterationNotAvailable(Exception): - """ - Raised when there is no pitch name in the target languate - when translating pitch names. - """ - pass - - -_nums = ( - 'Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', - 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', - 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen') - -_tens = ( - 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', - 'Ninety', 'Hundred') - -def nums(num): - """ - Returns a textual representation of a number (e.g. 1 -> "One"), for use - in LilyPond identifiers (that do not support digits). - Supports numbers 0 to 109. - """ - if num < 20: - return _nums[num] - d, r = divmod(num, 10) - n = _tens[d-2] - if r: - n += _nums[r] - return n - - -# Thanks: http://billmill.org/python_roman.html -_roman_numerals = (("M", 1000), ("CM", 900), ("D", 500), ("CD", 400), -("C", 100),("XC", 90),("L", 50),("XL", 40), ("X", 10), ("IX", 9), ("V", 5), -("IV", 4), ("I", 1)) - -def romanize(n): - roman = [] - for ltr, num in _roman_numerals: - k, n = divmod(n, num) - roman.append(ltr * k) - return "".join(roman) - - -def headers(i18nFunc=None): - i18n = i18nFunc or (lambda s: s) - return ( - ('dedication', i18n("Dedication")), - ('title', i18n("Title")), - ('subtitle', i18n("Subtitle")), - ('subsubtitle', i18n("Subsubtitle")), - ('instrument', i18n("Instrument")), - ('composer', i18n("Composer")), - ('arranger', i18n("Arranger")), - ('poet', i18n("Poet")), - ('meter', i18n("Meter")), - ('piece', i18n("Piece")), - ('opus', i18n("Opus")), - ('copyright', i18n("Copyright")), - ('tagline', i18n("Tagline")), - ) - -headerNames = zip(*headers())[0] - -def modes(i18nFunc=None): - i18n = i18nFunc or (lambda s: s) - return ( - ('major', i18n("Major")), - ('minor', i18n("Minor")), - ('ionian', i18n("Ionian")), - ('dorian', i18n("Dorian")), - ('phrygian', i18n("Phrygian")), - ('lydian', i18n("Lydian")), - ('mixolydian', i18n("Mixolydian")), - ('aeolian', i18n("Aeolian")), - ('locrian', i18n("Locrian")), - ) - -keys = ( - (0, 0), (0, 1), - (1, -1), (1, 0), (1, 1), - (2, -1), (2, 0), - (3, 0), (3, 1), - (4, -1), (4, 0), (4, 1), - (5, -1), (5, 0), (5, 1), - (6, -1), (6, 0), -) - -keyNames = { - 'nederlands': ( - 'C', 'Cis', - 'Des', 'D', 'Dis', - 'Es', 'E', - 'F', 'Fis', - 'Ges', 'G', 'Gis', - 'As', 'A', 'Ais', - 'Bes', 'B', - ), - 'english': ( - 'C', 'C#', - 'Db', 'D', 'D#', - 'Eb', 'E', - 'F', 'F#', - 'Gb', 'G', 'G#', - 'Ab', 'A', 'A#', - 'Bb', 'B', - ), - 'deutsch': ( - 'C', 'Cis', - 'Des', 'D', 'Dis', - 'Es', 'E', - 'F', 'Fis', - 'Ges', 'G', 'Gis', - 'As', 'A', 'Ais', - 'B', 'H', - ), - 'norsk': ( - 'C', 'Ciss', - 'Dess', 'D', 'Diss', - 'Ess', 'E', - 'F', 'Fiss', - 'Gess', 'G', 'Giss', - 'Ass', 'A', 'Aiss', - 'B', 'H', - ), - 'italiano': ( - 'Do', 'Do diesis', - 'Re bemolle', 'Re', 'Re diesis', - 'Mi bemolle', 'Mi', - 'Fa', 'Fa diesis', - 'Sol bemolle', 'Sol', 'Sol diesis', - 'La bemolle', 'La', 'La diesis', - 'Si bemolle', 'Si', - ), - 'espanol': ( - 'Do', 'Do sostenido', - 'Re bemol', 'Re', 'Re sostenido', - 'Mi bemol', 'Mi', - 'Fa', 'Fa sostenido', - 'Sol bemol', 'Sol', 'Sol sostenido', - 'La bemol', 'La', 'La sostenido', - 'Si bemol', 'Si', - ), - 'vlaams': ( - 'Do', 'Do kruis', - 'Re mol', 'Re', 'Re kruis', - 'Mi mol', 'Mi', - 'Fa', 'Fa kruis', - 'Sol mol', 'Sol', 'Sol kruis', - 'La mol', 'La', 'La kruis', - 'Si mol', 'Si', - ), -} - -keyNames['svenska'] = keyNames['norsk'] -keyNames['suomi'] = keyNames['deutsch'] -keyNames['catalan'] = keyNames['italiano'] -keyNames['portugues'] = keyNames['espanol'] - -paperSizes = ['a3', 'a4', 'a5', 'a6', 'a7', 'legal', 'letter', '11x17'] diff -Nru frescobaldi-1.2.0/python/ly/key.py frescobaldi-2.0.0/python/ly/key.py --- frescobaldi-1.2.0/python/ly/key.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/key.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -Code dealing with Key signatures -""" - -## -# The dicts key2num and num2key translate a key signature name to -# the number of accidentals. (0 = C, 1 = G, -1 = F, etc.) - -key2num = { - 'ne': { - 'fes':-8, 'ces':-7, 'ges':-6, 'des':-5, 'as':-4, - 'aes':-4, 'es':-3, 'ees':-3, 'bes':-2, 'f':-1, - 'c':0, 'g':1, 'd':2, 'a':3, 'e':4, 'b':5, 'fis':6, 'cis':7, - 'gis':8, 'dis':9, 'ais':10, 'eis':11, 'bis':12 - }, - 'en-short': { - 'ff':-8, 'cf':-7, 'gf':-6, 'df':-5, - 'af':-4, 'ef':-3, 'bf':-2, 'f':-1, - 'c':0, 'g':1, 'd':2, 'a':3, 'e':4, 'b':5, 'fs':6, 'cs':7, - 'gs':8, 'ds':9, 'as':10, 'es':11, 'bs':12 - }, - 'en': { - 'fflat':-8, 'cflat':-7, 'gflat':-6, 'dflat':-5, - 'aflat':-4, 'eflat':-3, 'bflat':-2, 'f':-1, - 'c':0, 'g':1, 'd':2, 'a':3, 'e':4, 'b':5, 'fsharp':6, 'csharp':7, - 'gsharp':8, 'dsharp':9, 'asharp':10, 'esharp':11, 'bsharp':12 - }, - 'de': { - 'fes':-8, 'ces':-7, 'ges':-6, 'des':-5, 'as':-4, - 'aes':-4, 'es':-3, 'ees':-3, 'b':-2, 'f':-1, - 'c':0, 'g':1, 'd':2, 'a':3, 'e':4, 'h':5, 'fis':6, 'cis':7, - 'gis':8, 'dis':9, 'ais':10, 'eis':11, 'his':12 - }, - 'sv': { - 'fess':-8, 'cess':-7, 'gess':-6, 'dess':-5, 'ass':-4, - 'aess':-4, 'ess':-3, 'eess':-3, 'b':-2, 'f':-1, - 'c':0, 'g':1, 'd':2, 'a':3, 'e':4, 'h':5, 'fiss':6, 'ciss':7, - 'giss':8, 'diss':9, 'aiss':10, 'eiss':11, 'hiss':12 - }, - # no = (de|sv), su = de - 'it': { - 'fab':-8, 'dob':-7, 'solb':-6, 'reb':-5, 'lab':-4, - 'mib':-3, 'sib':-2, 'fa':-1, - 'do':0, 'sol':1, 're':2, 'la':3, 'mi':4, 'si':5, 'fad':6, 'dod':7, - 'sold':8, 'red':9, 'lad':10, 'mid':11, 'sid':12 - }, - 'es': { - 'fab':-8, 'dob':-7, 'solb':-6, 'reb':-5, 'lab':-4, - 'mib':-3, 'sib':-2, 'fa':-1, - 'do':0, 'sol':1, 're':2, 'la':3, 'mi':4, 'si':5, 'fas':6, 'dos':7, - 'sols':8, 'res':9, 'las':10, 'mis':11, 'sis':12 - }, - # ca = (it|es), po = es - 'vl': { - 'fab':-8, 'dob':-7, 'solb':-6, 'reb':-5, 'lab':-4, - 'mib':-3, 'sib':-2, 'fa':-1, - 'do':0, 'sol':1, 're':2, 'la':3, 'mi':4, 'si':5, 'fak':6, 'dok':7, - 'solk':8, 'rek':9, 'lak':10, 'mik':11, 'sik':12 - }, -} - -def rdict(d): - """ reverse a dict """ - return dict((v,k) for k,v in d.iteritems()) - -num2key = dict((lang, rdict(p)) for lang, p in key2num.iteritems()) - -## -# How many accidentals to add/substract for different modi. -modes = { - 'major': 0, - 'minor': -2, # should be -3, but we want a sharp below the fifth - 'ionian': 0, - 'dorian': -2, - 'phrygian': -3, # should be -4, but we want a sharp below the octave - 'lydian': 1, - 'mixolydian': -1, - 'aeolian': -2, # should be -3, but we want a sharp below the fifth - 'locrian': -5, -} diff -Nru frescobaldi-1.2.0/python/ly/parse.py frescobaldi-2.0.0/python/ly/parse.py --- frescobaldi-1.2.0/python/ly/parse.py 2010-11-06 20:09:14.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/parse.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -General functions that parse LilyPond document text. -""" - -import os -import ly.rx - - -def findIncludeFiles(lyfile, path=()): - """Finds files included by the document in lyfile. - - If path is given, it must be a list of directories that are also searched - for files to be included. - - """ - files = set() - basedir = os.path.dirname(lyfile) - - def find(lyfile): - if os.access(lyfile, os.R_OK): - files.add(lyfile) - directory = os.path.dirname(lyfile) - # read the file and delete the comments. - with open(lyfile) as f: - text = ly.rx.all_comments.sub('', f.read().decode('utf-8', 'ignore')) - for f in ly.rx.include_file.findall(text): - # old include (relative to master file) - find(os.path.join(basedir, f)) - # new, recursive, relative include - if directory != basedir: - find(os.path.join(directory, f)) - # if path is given, also search there: - for p in path: - find(os.path.join(p, f)) - find(lyfile) - return files - -def documentLanguage(text): - """Return the LilyPond pitch language name for the document, if set.""" - text = ly.rx.all_comments.sub('', text) - m = ly.rx.language.match(text) - if m: - return m.group(3) - diff -Nru frescobaldi-1.2.0/python/ly/pitch.py frescobaldi-2.0.0/python/ly/pitch.py --- frescobaldi-1.2.0/python/ly/pitch.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/pitch.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,248 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -import re -from fractions import Fraction - -import ly - -class Pitch(object): - """ - A pitch with note, alter, octave and cautionary and octaveCheck - (for relative pitches) - """ - def __init__(self): - self.note = 0 # base note (c, d, e, f, g, a, b) - self.alter = 0 # # = 2; b = -2; natural = 0 - self.octave = 0 # '' = 2; ,, = -2 - self.cautionary = '' # '!' or '?' or '' - self.octaveCheck = None - - @classmethod - def c1(cls): - """ Return a pitch c' """ - p = cls() - p.octave = 1 - return p - - @classmethod - def c0(cls): - """ Return a pitch c """ - return cls() - - def copy(self): - """ Return a new instance with our attributes. """ - p = self.__class__() - p.note = self.note - p.alter = self.alter - p.octave = self.octave - p.cautionary = self.cautionary - p.octaveCheck = self.octaveCheck - return p - - def absolute(self, lastPitch): - """ - Set our octave height from lastPitch (which is absolute), as if - we are a relative pitch. If the octaveCheck attribute is set to an - octave number, that is used instead. - """ - if self.octaveCheck is not None: - self.octave = self.octaveCheck - self.octaveCheck = None - else: - dist = self.note - lastPitch.note - if dist > 3: - dist -= 7 - elif dist < -3: - dist += 7 - self.octave += lastPitch.octave + (lastPitch.note + dist) // 7 - - def relative(self, lastPitch): - """ - Returns a new Pitch instance with the current pitch relative to - the absolute pitch in lastPitch. - """ - p = self.copy() - dist = self.note - lastPitch.note - p.octave = self.octave - lastPitch.octave + (dist + 3) // 7 - return p - - def output(self, language): - """ - Return the pitch as a string in the given pitch name language. - Raises ly.QuarterToneAlterationNotAvailable is an alteration is - requested that is not available in that language. - """ - output = [pitchWriter[language](self.note, self.alter), - octaveToString(self.octave), - self.cautionary] - if self.octaveCheck is not None: - output.append('=' + octaveToString(self.octaveCheck)) - return ''.join(output) - - -class Transposer(object): - """ - Transpose pitches. - - Instantiate with a from- and to-Pitch, and optionally a scale. - The scale is a list with the pitch height of the unaltered step (0 .. 6). - The default scale is the normal scale: C, D, E, F, G, A, B. - """ - scale = (0, 1, 2, Fraction(5, 2), Fraction(7, 2), Fraction(9, 2), Fraction(11, 2)) - - def __init__(self, fromPitch, toPitch, scale = None): - if scale is not None: - self.scale = scale - - # the number of octaves we need to transpose - self.octave = toPitch.octave - fromPitch.octave - - # the number of base note steps (c->d == 1, e->f == 1, etc.) - self.steps = toPitch.note - fromPitch.note - - # the number (fraction) of real whole steps - self.alter = (self.scale[toPitch.note] + toPitch.alter - - self.scale[fromPitch.note] - fromPitch.alter) - - def transpose(self, pitch): - doct, note = divmod(pitch.note + self.steps, 7) - pitch.alter += self.alter - doct * 6 - self.scale[note] + self.scale[pitch.note] - pitch.octave += self.octave + doct - pitch.note = note - - -class PitchWriter(object): - def __init__(self, names, accs, replacements=()): - self.names = names - self.accs = accs - self.replacements = replacements - - def __call__(self, note, alter = 0): - """ - Returns a string representing the pitch in our language. - Raises ly.QuarterToneAlterationNotAvailable if the requested pitch - has an alteration that is not available in the current language. - """ - pitch = self.names[note] - if alter: - acc = self.accs[int(alter * 4 + 4)] - if not acc: - raise ly.QuarterToneAlterationNotAvailable - pitch += acc - for s, r in self.replacements: - if pitch.startswith(s): - pitch = r + pitch[len(s):] - break - return pitch - - -class PitchReader(object): - def __init__(self, names, accs, replacements=()): - self.names = list(names) - self.accs = list(accs) - self.replacements = replacements - self.rx = re.compile("({0})({1})?$".format("|".join(names), - "|".join(acc for acc in accs if acc))) - - def __call__(self, text): - for s, r in self.replacements: - if text.startswith(r): - text = s + text[len(r):] - for dummy in 1, 2: - m = self.rx.match(text) - if m: - note = self.names.index(m.group(1)) - if m.group(2): - alter = Fraction(self.accs.index(m.group(2)) - 4, 4) - else: - alter = 0 - return note, alter - # HACK: were we using (rarely used) long english syntax? - text = text.replace('flat', 'f').replace('sharp', 's') - return False - - -def octaveToString(octave): - """ - Convert numeric octave to a string with apostrophes or commas. - 0 -> "" ; 1 -> "'" ; -1 -> "," ; etc. - """ - return octave < 0 and ',' * -octave or "'" * octave - -def octaveToNum(octave): - """ - Convert string octave to an integer: - "" -> 0 ; "," -> -1 ; "'''" -> 3 ; etc. - """ - return octave.count("'") - octave.count(",") - - -pitchInfo = { - 'nederlands': ( - ('c','d','e','f','g','a','b'), - ('eses', 'eseh', 'es', 'eh', '', 'ih','is','isih','isis'), - (('ees', 'es'), ('aes', 'as')) - ), - 'english': ( - ('c','d','e','f','g','a','b'), - ('ff', 'tqf', 'f', 'qf', '', 'qs', 's', 'tqs', 'ss'), - ), - 'deutsch': ( - ('c','d','e','f','g','a','h'), - ('eses', 'eseh', 'es', 'eh', '', 'ih','is','isih','isis'), - (('ees', 'es'), ('aes', 'as'), ('hes', 'b')) - ), - 'svenska': ( - ('c','d','e','f','g','a','h'), - ('essess', '', 'ess', '', '', '','iss','','ississ'), - (('ees', 'es'), ('aes', 'as'), ('hess', 'b')) - ), - 'italiano': ( - ('do', 're', 'mi', 'fa', 'sol', 'la', 'si'), - ('bb', 'bsb', 'b', 'sb', '', 'sd', 'd', 'dsd', 'dd') - ), - 'espanol': ( - ('do', 're', 'mi', 'fa', 'sol', 'la', 'si'), - ('bb', '', 'b', '', '', '', 's', '', 'ss') - ), - 'portugues': ( - ('do', 're', 'mi', 'fa', 'sol', 'la', 'si'), - ('bb', 'btqt', 'b', 'bqt', '', 'sqt', 's', 'stqt', 'ss') - ), - 'vlaams': ( - ('do', 're', 'mi', 'fa', 'sol', 'la', 'si'), - ('bb', '', 'b', '', '', '', 'k', '', 'kk') - ), -} - -pitchInfo['norsk'] = pitchInfo['deutsch'] -pitchInfo['suomi'] = pitchInfo['deutsch'] -pitchInfo['catalan'] = pitchInfo['italiano'] - - -pitchWriter = dict( - (lang, PitchWriter(*data)) for lang, data in pitchInfo.iteritems()) - -pitchReader = dict( - (lang, PitchReader(*data)) for lang, data in pitchInfo.iteritems()) - - diff -Nru frescobaldi-1.2.0/python/ly/rx.py frescobaldi-2.0.0/python/ly/rx.py --- frescobaldi-1.2.0/python/ly/rx.py 2010-11-06 20:09:14.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/rx.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,140 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" All kinds or regular expressions dealing with the LilyPond format """ - -import re - -step = ( - r"\b(" - r"[a-h](" - r"(iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}" - r"|(sharp){1,2}|(flat){1,2}|ss?|x|ff?" - r"|(is)?ih|(es)eh|t?q[sf]" # quarter tones - r")?" - r"|(do|re|mi|fa|sol|la|si)(" - r"dd?|bb?|ss?|kk?" - r"b?sb|d?sd|[bs]t?qt" # quarter tones - r")?" - r"|as|asess?|asas|es|esess?" # special cases - r"|eseh|as[ae]h" # special quarter tone cases - r")(?![A-Za-z])" -) -named_step = "(?P" + step + ")" - -rest = r"(\b[Rrs]|\\skip)(?![A-Za-z])" -named_rest = "(?P" + rest + ")" - -octave = r"('+|,+|(?![A-Za-z]))" -named_octave = "(?P" + octave + ")" - -cautionary = r"[?!]?" -named_cautionary = "(?P" + cautionary + ")" - -octcheck = "=[',]*" -named_octcheck = "(?P" + octcheck + ")" - -pitch = ( - step + octave + cautionary + r"(\s*" + octcheck + r")?") -named_pitch = ( - named_step + named_octave + named_cautionary + r"(\s*" + - named_octcheck + r")?") - -duration = ( - r"(?P" - r"(?P" - r"\\(maxima|longa|breve)\b|" - r"(1|2|4|8|16|32|64|128|256|512|1024|2048)(?!\d)" - r")" - r"(\s*(?P\.+))?" - r"(?P(\s*\*\s*\d+(/\d+)?)*)" - r")" -) - -quotedstring = r"\"(?:\\\\|\\\"|[^\"])*\"" - -skip_pitches = ( - # skip \relative or \transpose pitch, etc: - r"\\(relative|transposition)\s+" + pitch + - r"|\\transpose\s+" + pitch + r"\s*" + pitch + - # and skip commands - r"|\\[A-Za-z]+" -) - -# a sounding pitch/chord with duration -chord = re.compile( - # skip this: - r"<<|>>|" + quotedstring + - # but catch either a pitch plus an octave - r"|(?P(?P" + named_pitch + - # or a chord: - r"|<(\\[A-Za-z]+|" + quotedstring + r"|[^>])*>" - r")" - # finally a duration? - r"(\s*" + duration + r")?)" - r"|" + skip_pitches -) - -# a sounding pitch/chord OR rest/skip with duration -chord_rest = re.compile( - # skip this: - r"<<|>>|" + quotedstring + - # but catch either a pitch plus an octave - r"|(?P(?P" + named_pitch + - # or a chord: - r"|<(\\[A-Za-z]+|" + quotedstring + r"|[^>])*>" - # or a spacer or rest: - r"|" + named_rest + - r")" - # finally a duration? - r"(\s*" + duration + r")?)" - r"|" + skip_pitches -) - -finddurs = re.compile(duration) - -lyric_word = re.compile(r'[^\W0-9_]+', re.UNICODE) - -include_file = re.compile(r'\\include\s*"([^"]+)"') - -# does not take percent signs inside quoted strings into account -comment = r'%\{.*?%\}|%.*?\n' -all_comments = re.compile(comment, re.DOTALL) - -# document language -language = re.compile( - r'.*\\((include)|language)\s*"(' - "nederlands|english|deutsch|norsk|svenska|suomi|" - "italiano|catalan|espanol|portugues|vlaams" - r')(?(2)\.ly)"', re.DOTALL) - -# point and click, check for matchgroup 1 (on) and/or 2 (off) -point_and_click = re.compile( - quotedstring + "|" + comment + - r"|(\\pointAndClickOn\b|#\s*\(ly:set-option\s+'point-and-click\s+#t\s*\))" - r"|(\\pointAndClickOff\b|#\s*\(ly:set-option\s+'point-and-click\s+#f\s*\))", - re.DOTALL) - -# dynamics -dynamic_mark = re.compile(r"[^_-]?\\(f{1,5}|p{1,5}|mf|mp|fp|spp?|sff?|sfz|rfz)\b") -dynamic_spanner = re.compile(r"[^_-]?\\[<>]") - - \ No newline at end of file diff -Nru frescobaldi-1.2.0/python/ly/tokenize.py frescobaldi-2.0.0/python/ly/tokenize.py --- frescobaldi-1.2.0/python/ly/tokenize.py 2010-11-10 06:57:48.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/tokenize.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,887 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -This module defines a Tokenizer class to parse and tokenize LilyPond text. - -Usage: - ->>> from ly.tokenizer import Tokenizer ->>> tokenizer = Tokenizer() ->>> lilypond = r"\relative c' { c d-\markup { Hi There } }" ->>> for token in tokenizer.tokens(lilypond): -... print token.__class__.__name__, repr(token) -... -Command u'\\relative' -Space u' ' -PitchWord u'c' -Unparsed u"'" -Space u' ' -OpenDelimiter u'{' -Space u' ' -PitchWord u'c' -Space u' ' -PitchWord u'd' -Unparsed u'-' -Markup u'\\markup' -Space u' ' -OpenBracket u'{' -Space u' ' -MarkupWord u'Hi' -Space u' ' -MarkupWord u'There' -Space u' ' -CloseBracket u'}' -Space u' ' -CloseDelimiter u'}' ->>> - -Some LilyPond construct enter a different parsing mode, you can get the current -Tokenizer.Parser instance with parser(). - -The tokens returned by the iterator returned by tokens() are all instances -of subclasses of unicode. They are either instances of a subclass of -Tokenizer.Token (if they were parsed) or Tokenizer.Unparsed (if the piece of -text was not understood). - -The Unparsed class and all Token subclasses are attributes of the Tokenizer -class (so they are nested classes). You can subclass Tokenizer to add your own -token classes. Each token class defines the regular expression pattern it -matches in its rx class attribute. - -There are also Parser subclasses, defined as Tokenizer class attributes. -Those are instantiated to look for specific tokens in LilyPond input text. -The items() static method of the Parser subclasses should return a tuple of -token classes (found as attributes of the Tokenizer (sub)class). - -Upon class construction of the/a Tokenizer (sub)class, a regular expression is -automatically created for each Parser subclass to parse a piece of LilyPond input -text for the list of tokens returned by its items() method. You can also easily -subclass the Parser classes. -""" - -import re -import ly.rx -import ly.pitch -import ly.words - - -def _make_re(classes): - """Builds a regular expression to parse a text for the given token classes. - - Expects a list of classes representing LilyPond input atoms. Returns - compiled regular expression with named groups, to match input of the listed - types. Reads the rx class attribute of the given classes. - - """ - return re.compile("|".join( - "(?P<{0}>{1})".format(cls.__name__, cls.rx) for cls in classes)) - - -class _tokenizer_meta(type): - """ Metaclass for the Tokenizer class. - - This metaclass makes sure that the regex patterns of Parser subclasses - inside a subclassed Tokenizer are always correct. - - It checks the items() method of all Parser subclasses and creates a - pattern attribute. If that's different, a new copy (subclass) of the Parser - subclass is created with the correct pattern. - - """ - def __init__(cls, className, bases, attrd): - for name in dir(cls): - attr = getattr(cls, name) - if (isinstance(attr, type) and issubclass(attr, cls.Parser) - and attr is not cls.Parser): - # We have a Parser subclass. If it has already a pattern - # that's different from the one created from the items() - # method output, copy the class. (The pattern is a compiled - # regex pattern.) - pattern = _make_re(attr.items(cls)) - if 'pattern' not in attr.__dict__: - attr.pattern = pattern - elif attr.pattern.pattern != pattern.pattern: - setattr(cls, name, type(name, (attr,), {'pattern': pattern})) - - -class Tokenizer(object): - """An environment to parse LilyPond text input. - - There are two types of nested classes (accessible as class attributes, but - also via a Tokenizer instance): - - - Subclasses of Token (or Unparsed): tokens of LilyPond input. - - Subclasses of Parser: container with regex to parse LilyPond input. - - """ - __metaclass__ = _tokenizer_meta - - def __init__(self, parserClass = None): - self.reset(parserClass) - - def reset(self, parserClass = None): - """ - Reset the tokenizer instance (forget state), so that it can be used - again. - """ - if parserClass is None: - parserClass = self.ToplevelParser - self.state = [parserClass()] - self.language = "nederlands" - - def parser(self, depth = -1): - """ Return the current (or given) parser instance. """ - return self.state[depth] - - def enter(self, parserClass, token = None, argcount = None): - """ (Internal) Enter a new parser. """ - self.state.append(parserClass(token, argcount)) - - def leave(self): - """ (Internal) Leave the current parser and pop back to the previous. """ - if len(self.state) > 1: - self.state.pop() - - def endArgument(self): - """ - (Internal) End an argument. Decrease argcount and leave the parser - if it would reach 0. - """ - while len(self.state) > 1 and self.state[-1].level == 0: - if self.state[-1].argcount > 1: - self.state[-1].argcount -= 1 - return - elif self.state[-1].argcount == 0: - return - self.state.pop() - - def inc(self): - """ - (Internal) Up the level of the current parser. Indicates nesting - while staying in the same parser. - """ - self.state[-1].level += 1 - - def dec(self): - """ - (Internal) Down the level of the current parser. If it has reached zero, - leave the current parser. Otherwise decrease argcount and leave if that - would reach zero. - """ - while self.state[-1].level == 0 and len(self.state) > 1: - self.state.pop() - if self.state[-1].level > 0: - self.state[-1].level -= 1 - self.endArgument() - - def depth(self): - """ - Return a two-tuple representing the depth of the current state. - This is useful to quickly check when a part of LilyPond input ends. - """ - return len(self.state), self.state[-1].level - - def tokens(self, text, pos = 0): - """Iterate over the LilyPond tokens in the string. - - All returned tokens are a subclass of unicode. - When they are reassembled, the original string is restored (i.e. no - data is lost). - - The tokenizer does its best to parse LilyPond input and return - meaningful strings. It recognizes being in a Scheme context, and also - "LilyPond in Scheme" (the #{ and #} constructs). - - """ - m = self.parser().parse(text, pos) - while m: - if pos < m.start(): - yield self.Unparsed(text[pos:m.start()], pos) - tokenClass = getattr(self, m.lastgroup) - yield tokenClass(m, self) - pos = m.end() - m = self.parser().parse(text, pos) - if pos < len(text): - yield self.Unparsed(text[pos:], pos) - - def freeze(self): - """ - Returns the frozen state of this tokenizer as an immutable tuple - """ - state = tuple(( - parser.__class__, - parser.token, - parser.level, - parser.argcount, - ) for parser in self.state) - return state, self.language - - def thaw(self, frozenState): - """ - Accepts a tuple such as returned by freeze(), and restores - the state of this tokenizer from it. - """ - state, self.language = frozenState - self.state = [] - for cls, token, level, argcount in state: - parser = cls(token, argcount) - parser.level = level - self.state.append(parser) - - - # Classes that represent pieces of lilypond text: - # base classes: - class Token(unicode): - """Represents a parsed piece of LilyPond text. - - The subclass determines the type. - - The matchObj delivers the string and the position. - The tokenizer's state can be manipulated on instantiation. - - """ - def __new__(cls, matchObj, tokenizer): - obj = unicode.__new__(cls, matchObj.group()) - obj.pos, obj.end = matchObj.span() - return obj - - class Item(Token): - """A token that decreases the argument count of the current parser.""" - def __init__(self, matchObj, tokenizer): - tokenizer.endArgument() - - class Increaser(Token): - """A token that increases the level of the current parser.""" - def __init__(self, matchObj, tokenizer): - tokenizer.inc() - - class Decreaser(Token): - """A token that decreases the level of the current parser.""" - def __init__(self, matchObj, tokenizer): - tokenizer.dec() - - class Leaver(Token): - """A token that leaves the current parser.""" - def __init__(self, matchObj, tokenizer): - tokenizer.leave() - - - # Types of lilypond input - class Unparsed(Token): - """Represents an unparsed piece of LilyPond text. - - Needs to be given a value and a position (where the string was found). - - """ - def __new__(cls, value, pos): - obj = unicode.__new__(cls, value) - obj.pos = pos - obj.end = pos + len(obj) - return obj - - ## - ## Whitespace - ## - class NewLine(Token): - rx = r"\n" - - class Space(Token): - rx = r"\s+" - - ## - ## Quoted Strings - ## - class String(Token): - """ Base class for quoted string fragments. """ - - class StringQuoted(String, Item): - """ A complete quoted string without a newline. """ - rx = r'"(\\[\\"]|[^"\n])*"' - - class StringQuoteStart(String): - rx = '"' - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.StringParser, self) - - class StringQuoteEnd(String): - rx = '"' - def __init__(self, matchObj, tokenizer): - tokenizer.leave() - tokenizer.endArgument() - - class StringFragment(String): - rx = r'(\\[\\"]|[^"\n])+' - - ## - ## Comments - ## - class Comment(Token): - """ Base class for LineComment and BlockComment (also Scheme) """ - - class LineComment(Comment): - rx = r"%[^\n]*" - - class BlockCommentStart(Comment): - rx = r"%\{" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.BlockCommentParser, self) - - class BlockCommentEnd(Comment, Leaver): - rx = r"%\}" - - class BlockCommentFragment(Comment): - rx = r"(%(?!\})|[^%\n])+" - - ## - ## Scheme - ## - class SchemeToken(Token): - """ Base class for Scheme tokens. """ - pass - - class Scheme(SchemeToken): - rx = '#' - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.SchemeParser, self) - - class SchemeOpenParenthesis(Increaser, SchemeToken): - rx = r"\(" - - class SchemeCloseParenthesis(Decreaser, SchemeToken): - rx = r"\)" - - class SchemeQuote(SchemeToken): - rx = r"[',`]" - - class SchemeChar(Item, SchemeToken): - rx = r"#\\([a-z]+|.)" - - class SchemeWord(Item, SchemeToken): - rx = r'[^()"{}\s]+' - - class SchemeLily(Token): - rx = r"#\{" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.ToplevelParser, self) - - class EndSchemeLily(Leaver): - rx = r"#\}" - - ## - ## Scheme comments - ## - class SchemeLineComment(Comment, SchemeToken): - rx = r";[^\n]*" - - class SchemeBlockCommentStart(Comment, SchemeToken): - rx = '#!' - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.SchemeBlockCommentParser, self) - - class SchemeBlockCommentEnd(Comment, Leaver): - rx = '!#' - - class SchemeBlockCommentFragment(Comment): - rx = r"(!(?!#)|[^!\n])+" - - ## - ## LilyPond commands - ## - class Command(Item): - rx = r"\\[A-Za-z]+(-[A-Za-z]+)*" - - class Section(Command): - """Introduce a section with no music, like \\layout, etc.""" - rx = r"\\(with|layout|midi|paper|header)\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.SectionParser, self) - - class Context(Command): - """ Introduce a \context section within layout, midi. """ - rx = r"\\context\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.ContextParser, self) - - class Markup(Command): - rx = r"\\markup\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.MarkupParser, self) - - class MarkupLines(Command): - rx = r"\\markuplines\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.MarkupParser, self) - - class Language(Command): - rx = r"\\language\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.LanguageParser, self) - - class LanguageName(StringQuoted): - rx = r'"({0})"'.format('|'.join(ly.pitch.pitchInfo.keys())) - def __init__(self, matchObj, tokenizer): - tokenizer.language = self[1:-1] - tokenizer.endArgument() - - class Include(Command): - rx = r"\\include\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.IncludeParser, self) - - class IncludeFile(StringQuoted): - rx = r'"(\\[\\"]|[^"])*"' - - class IncludeLanguageFile(IncludeFile): - rx = r'"({0})\.ly"'.format('|'.join(ly.pitch.pitchInfo.keys())) - def __init__(self, matchObj, tokenizer): - tokenizer.language = self[1:-4] - tokenizer.endArgument() - - class OpenDelimiter(Increaser): - rx = r"<<|\{" - - class CloseDelimiter(Decreaser): - rx = r">>|\}" - - class Dynamic(Token): - rx = r"\\[<>!]" - - class VoiceSeparator(Token): - rx = r"\\\\" - - class Articulation(Token): - rx = r"[-_^][_.>|+^-]" - - class OpenBracket(Increaser): - rx = r"\{" - - class CloseBracket(Decreaser): - rx = r"\}" - - class PitchWord(Item): - """ A word with just alphanumeric letters """ - rx = r"[A-Za-z]+" - - class MarkupScore(Command): - rx = r"\\score\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.ToplevelParser, self, 1) - - class MarkupCommand(Command): - def __init__(self, matchObj, tokenizer): - command = self[1:] - if command in ly.words.markupcommands_nargs[0]: - tokenizer.endArgument() - else: - for argcount in 2, 3, 4: - if command in ly.words.markupcommands_nargs[argcount]: - break - else: - argcount = 1 - tokenizer.enter(tokenizer.MarkupParser, self, argcount) - - class MarkupWord(Item): - rx = r'[^{}"\\\s#]+' - - class LyricMode(Command): - rx = r"\\(lyricmode|((old)?add)?lyrics|lyricsto)\b" - def __init__(self, matchObj, tokenizer): - if self == "\\lyricsto": - argcount = 2 - else: - argcount = 1 - tokenizer.enter(tokenizer.LyricModeParser, self, argcount) - - class ChordMode(Command): - rx = r"\\(chords|chordmode)\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.ChordModeParser, self) - - class FigureMode(Command): - rx = r"\\(figures|figuremode)\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.FigureModeParser, self) - - class NoteMode(Command): - rx = r"\\(notes|notemode)\b" - def __init__(self, matchObj, tokenizer): - tokenizer.enter(tokenizer.NoteModeParser, self) - - class LyricWord(Item): - rx = r"[^\W\d]+" - - - ### Parsers - class Parser(object): - """ - This is the base class for parsers. The Tokenizer's meta class - looks for descendants of this class and creates parsing patterns. - """ - pattern = None # This is filled in by the Tokenizer's meta class. - items = staticmethod(lambda cls: ()) - argcount = 0 - - def __init__(self, token = None, argcount = None): - self.level = 0 - self.token = token - if argcount is not None: - self.argcount = argcount - - def parse(self, text, pos): - return self.pattern.search(text, pos) - - class StringParser(Parser): - items = staticmethod(lambda cls: ( - cls.StringQuoteEnd, - cls.StringFragment, - cls.NewLine, - )) - - class CommentParser(Parser): - """ Base class for comment parsers. """ - - class BlockCommentParser(CommentParser): - items = staticmethod(lambda cls: ( - cls.BlockCommentEnd, - cls.BlockCommentFragment, - cls.NewLine, - )) - - class SchemeBlockCommentParser(CommentParser): - items = staticmethod(lambda cls: ( - cls.SchemeBlockCommentEnd, - cls.SchemeBlockCommentFragment, - cls.NewLine, - )) - - # base stuff to parse in LilyPond input - lilybaseItems = classmethod(lambda cls: ( - cls.BlockCommentStart, - cls.LineComment, - cls.StringQuoted, - cls.StringQuoteStart, - cls.EndSchemeLily, - cls.Scheme, - cls.Section, - cls.LyricMode, - cls.ChordMode, - cls.FigureMode, - cls.NoteMode, - cls.Markup, - cls.MarkupLines, - cls.Include, - cls.Language, - cls.Command, - cls.Space, - )) - - class ToplevelParser(Parser): - items = staticmethod(lambda cls: ( - cls.OpenDelimiter, - cls.CloseDelimiter, - cls.PitchWord, - cls.Dynamic, - cls.VoiceSeparator, - cls.Articulation, - ) + cls.lilybaseItems()) - - class SchemeParser(Parser): - argcount = 1 - items = staticmethod(lambda cls: ( - cls.StringQuoteStart, - cls.SchemeChar, - cls.SchemeQuote, - cls.SchemeLineComment, - cls.SchemeBlockCommentStart, - cls.SchemeOpenParenthesis, - cls.SchemeCloseParenthesis, - cls.SchemeLily, - cls.SchemeWord, - cls.Space, - )) - - class MarkupParser(Parser): - argcount = 1 - items = staticmethod(lambda cls: ( - cls.MarkupScore, - cls.MarkupCommand, - cls.OpenBracket, - cls.CloseBracket, - cls.MarkupWord, - ) + cls.lilybaseItems()) - - class InputModeParser(Parser): - """ - Abstract base class for input modes such as \lyricmode, \figuremode, - \chordmode etc. - """ - argcount = 1 - - class LyricModeParser(InputModeParser): - items = staticmethod(lambda cls: ( - cls.OpenBracket, - cls.CloseBracket, - cls.LyricWord, - ) + cls.lilybaseItems()) - - class ChordModeParser(ToplevelParser, InputModeParser): - argcount = 1 - - class FigureModeParser(ToplevelParser, InputModeParser): - argcount = 1 - - class NoteModeParser(ToplevelParser, InputModeParser): - argcount = 1 - - class SectionParser(Parser): - argcount = 1 - items = staticmethod(lambda cls: ( - cls.OpenBracket, - cls.CloseBracket, - cls.Context, - ) + cls.lilybaseItems()) - - class ContextParser(Parser): - argcount = 1 - items = staticmethod(lambda cls: ( - cls.OpenBracket, - cls.CloseBracket, - ) + cls.lilybaseItems()) - - class IncludeParser(Parser): - argcount = 1 - items = staticmethod(lambda cls: ( - cls.IncludeLanguageFile, - cls.IncludeFile, - ) + cls.lilybaseItems()) - - class LanguageParser(Parser): - argcount = 1 - items = staticmethod(lambda cls: ( - cls.LanguageName, - ) + cls.lilybaseItems()) - - -class MusicTokenizer(Tokenizer): - """ - A Tokenizer more directed to parsing music. - It detects full pitches, chords, etc. - """ - class OpenChord(Tokenizer.Token): - rx = "<" - - class CloseChord(Tokenizer.Token): - rx = ">" - - class Pitch(Tokenizer.Item): - rx = ly.rx.named_pitch - def __init__(self, matchObj, tokenizer): - self.step = matchObj.group('step') - self.octave = matchObj.group('octave') or '' - self.cautionary = matchObj.group('cautionary') or '' - self.octcheck = matchObj.group('octcheck') or '' - - class ToplevelParser(Tokenizer.ToplevelParser): - items = staticmethod(lambda cls: ( - cls.OpenDelimiter, - cls.CloseDelimiter, - cls.OpenChord, - cls.CloseChord, - cls.Pitch, - cls.Dynamic, - cls.VoiceSeparator, - cls.Articulation, - ) + cls.lilybaseItems()) - - class ChordModeParser(ToplevelParser, Tokenizer.ChordModeParser): pass - class NoteModeParser(ToplevelParser, Tokenizer.NoteModeParser): pass - - def readStep(self, pitchToken): - return ly.pitch.pitchReader[self.language](pitchToken.step) - - -class LineColumnMixin(object): - """ - Mixin to iterate over tokens, adding line and column attributes - to every token. - """ - def tokens(self, text, pos = 0): - cursor = Cursor() - if pos: - cursor.walk(text[:pos]) - for token in super(LineColumnMixin, self).tokens(text, pos): - token.line = cursor.line - token.column = cursor.column - yield token - cursor.walk(token) - - -class LineColumnTokenizer(LineColumnMixin, Tokenizer): - """ - Basic Tokenizer which records line and column, adding those - as attributes to every token. - """ - pass - - -class Cursor(object): - """ - A Cursor instance can walk() over any piece of plain text, - maintaining line and column positions by looking at newlines in the text. - - Subclass this to let a ChangeList perform changes on the instance. - The actions are called in sorted order, but the cursor positions - reflect the updated state of the document. - """ - def __init__(self, other = None, column = 0): - if isinstance(other, Cursor): - self.line = other.line - self.column = other.column - self.anchorLine = other.anchorLine - self.anchorColumn = other.anchorColumn - else: - self.line = other or 0 - self.column = column - self.anchorLine = 0 - self.anchorColumn = 0 - - def walk(self, text): - lines = text.count('\n') - if lines: - self.line += lines - self.column = len(text) - text.rfind('\n') - 1 - else: - self.column += len(text) - - def anchor(self, text): - """ - Sets the anchor to the end of text. - """ - lines = text.count('\n') - if lines: - self.anchorLine = self.line + lines - self.anchorColumn = len(text) - text.rfind('\n') - 1 - else: - self.anchorLine = self.line - self.anchorColumn = self.column + len(text) - - def __enter__(self): - """ Called before edits are made. """ - pass - - def __exit__(self, *args): - """ Called after edits have been done. """ - pass - - def insertText(self, text): - """ Insert text at current cursor position. """ - pass - - def removeText(self): - """ Delete text from current position to anchor. """ - pass - - def replaceText(self, text): - """ Replace text from current position to anchor with text. """ - pass - - -class ChangeList(object): - """ - Manages a list of changes to a string. - Each entry is a tuple(pos, end, text). - - pos and end define the slice of the original string to remove, text - is the text to insert at that position. - """ - - # whether our items must be sorted. - # If False, the user must add the changes in the correct order! - sortItems = True - - def __init__(self, text): - self._changes = [] - self._text = text - - def replace(self, pos, end, text): - if text != self._text[pos:end]: - self._changes.append((pos, end, text)) - - def replaceToken(self, token, text): - if token != text: - self._changes.append((token.pos, token.end, text)) - - def remove(self, pos, end): - self._changes.append((pos, end, None)) - - def removeToken(self, token): - self._changes.append((token.pos, token.end, None)) - - def insert(self, pos, text): - self._changes.append((pos, pos, text)) - - def changes(self): - """ - Return an iterator over the changes. - """ - if self.sortItems: - return sorted(self._changes) - else: - return self._changes - - def apply(self): - """ - Return a new string constructed from the original string - with all the changes applied. - """ - def parts(): - index = 0 - for pos, end, text in self.changes(): - if pos > index: - yield self._text[index:pos] - if text: - yield text - index = end - if index < len(self._text): - yield self._text[index:] - - return ''.join(parts()) - - def applyToCursor(self, cursor): - index = 0 - with cursor: - for pos, end, text in self.changes(): - if pos > index: - cursor.walk(self._text[index:pos]) - if end > pos: - cursor.anchor(self._text[pos:end]) - if text: - cursor.replaceText(text) - cursor.walk(text) - else: - cursor.removeText() - else: - cursor.insertText(text) - cursor.walk(text) - index = end - - diff -Nru frescobaldi-1.2.0/python/ly/tools.py frescobaldi-2.0.0/python/ly/tools.py --- frescobaldi-1.2.0/python/ly/tools.py 2010-11-06 20:09:14.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/tools.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,569 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -All kinds of tools needed to manipulate strings with LilyPond input. -""" - -import ly.pitch -import ly.tokenize - - -class Pitch(ly.pitch.Pitch): - @classmethod - def fromToken(cls, token, tokenizer): - result = tokenizer.readStep(token) - if result: - p = cls() - p.note, p.alter = result - p.octave = ly.pitch.octaveToNum(token.octave) - p.cautionary = token.cautionary - if token.octcheck: - p.octaveCheck = ly.pitch.octaveToNum(token.octcheck) - return p - - -def relativeToAbsolute(text, start = 0, changes = None): - """ - Convert \relative { } music to absolute pitches. - Returns a ChangeList instance that contains the changes. - """ - tokenizer = ly.tokenize.MusicTokenizer() - tokens = tokenizer.tokens(text) - - # Walk through not-selected text, to track the state and the - # current pitch language. - if start: - for token in tokens: - if token.end >= start: - break - - if changes is None: - changes = ly.tokenize.ChangeList(text) - - def newPitch(token, pitch, lastPitch): - """ - Writes a new pitch with all parts except the octave taken from the - token. The octave is set using lastPitch. - """ - pitch.absolute(lastPitch) - changes.replaceToken(token, - token.step + ly.pitch.octaveToString(pitch.octave) + token.cautionary) - - class gen(object): - """ - Advanced generator of tokens, discarding whitespace and comments, - and automatically detecting \relative blocks and places where a new - LilyPond parsing context is started, like \score inside \markup. - """ - def __iter__(self): - return self - - def next(self): - token = next(tokens) - while isinstance(token, (tokenizer.Space, tokenizer.Comment)): - token = next(tokens) - if token == "\\relative": - relative(token.pos) - token = next(tokens) - elif isinstance(token, tokenizer.MarkupScore): - absolute() - token = next(tokens) - return token - - source = gen() - - def consume(): - """ Consume tokens till the level drops (we exit a construct). """ - depth = tokenizer.depth() - for token in source: - yield token - if tokenizer.depth() < depth: - return - - def absolute(): - """ Consume tokens while not doing anything. """ - for token in consume(): - pass - - def relative(start): - """ - Called when a \\relative command is encountered. - start is the position of the \\relative token, to remove it later. - """ - # find the pitch after the \relative command - lastPitch = None - token = next(source) - if isinstance(token, tokenizer.Pitch): - lastPitch = Pitch.fromToken(token, tokenizer) - token = next(source) - if not lastPitch: - lastPitch = Pitch.c1() - - # remove the \relative tokens - changes.remove(start, token.pos) - - # eat stuff like \new Staff == "bla" \new Voice \notes etc. - while True: - if token in ('\\new', '\\context'): - next(source) # skip context type - token = next(source) - if token == '=': - next(source) # skip context name - token = next(source) - elif isinstance(token, (tokenizer.ChordMode, tokenizer.NoteMode)): - token = next(source) - else: - break - - # now convert the relative expression to absolute - if isinstance(token, tokenizer.OpenDelimiter): - # Handle full music expression { ... } or << ... >> - for token in consume(): - # skip commands with pitches that do not count - if token in ('\\key', '\\transposition'): - next(source) - elif token == '\\transpose': - next(source) - next(source) - elif token == '\\octaveCheck': - start = token.pos - token = next(source) - if isinstance(token, tokenizer.Pitch): - p = Pitch.fromToken(token, tokenizer) - if p: - lastPitch = p - changes.remove(start, token.end) - elif isinstance(token, tokenizer.OpenChord): - # handle chord - chord = [lastPitch] - for token in source: - if isinstance(token, tokenizer.CloseChord): - lastPitch = chord[:2][-1] # same or first - break - elif isinstance(token, tokenizer.Pitch): - p = Pitch.fromToken(token, tokenizer) - if p: - newPitch(token, p, chord[-1]) - chord.append(p) - elif isinstance(token, tokenizer.Pitch): - p = Pitch.fromToken(token, tokenizer) - if p: - newPitch(token, p, lastPitch) - lastPitch = p - elif isinstance(token, tokenizer.OpenChord): - # Handle just one chord - for token in source: - if isinstance(token, tokenizer.CloseChord): - break - elif isinstance(token, tokenizer.Pitch): - p = Pitch.fromToken(token, tokenizer) - if p: - newPitch(token, p, lastPitch) - lastPitch = p - elif isinstance(token, tokenizer.Pitch): - # Handle just one pitch - p = Pitch.fromToken(token, tokenizer) - if p: - newPitch(token, p, lastPitch) - - # Do it! - for token in source: - pass - return changes - -def absoluteToRelative(text, start = 0, changes = None): - """ - Converts the selected music expression or all toplevel expressions to \relative ones. - """ - tokenizer = ly.tokenize.MusicTokenizer() - tokens = tokenizer.tokens(text) - - # Walk through not-selected text, to track the state and the - # current pitch language. - if start: - for token in tokens: - if token.end >= start: - break - - if changes is None: - changes = ly.tokenize.ChangeList(text) - - def newPitch(token, pitch): - """ - Writes a new pitch with all parts except the octave taken from the - token. - """ - changes.replaceToken(token, - token.step + ly.pitch.octaveToString(pitch.octave) + token.cautionary) - - class gen(object): - """ - Advanced generator of tokens, discarding whitespace and comments, - and automatically detecting \relative blocks and places where a new - LilyPond parsing context is started, like \score inside \markup. - """ - def __iter__(self): - return self - - def next(self): - token = next(tokens) - while isinstance(token, (tokenizer.Space, tokenizer.Comment)): - token = next(tokens) - if token == "\\relative": - relative() - token = next(tokens) - elif isinstance(token, tokenizer.ChordMode): - absolute() # do not change chords - elif isinstance(token, tokenizer.MarkupScore): - absolute() - token = next(tokens) - return token - - source = gen() - - def consume(): - """ Consume tokens till the level drops (we exit a construct). """ - depth = tokenizer.depth() - for token in source: - yield token - if tokenizer.depth() < depth: - return - - def absolute(): - """ Consume tokens while not doing anything. """ - for token in consume(): - pass - - def relative(): - """ Consume the whole \relative expression without doing anything. """ - # skip pitch argument - token = next(source) - if isinstance(token, tokenizer.Pitch): - token = next(source) - if isinstance(token, tokenizer.OpenDelimiter): - for token in consume(): - pass - elif isinstance(token, tokenizer.OpenChord): - while not isinstance(token, tokenizer.CloseChord): - token = next(source) - - # Do it! - startToken = None - for token in source: - if isinstance(token, tokenizer.OpenDelimiter): - # Ok, parse current expression. - startToken = token # before which to insert the \relative command - lastPitch = None - chord = None - try: - for token in consume(): - # skip commands with pitches that do not count - if token in ('\\key', '\\transposition'): - next(source) - elif token == '\\transpose': - next(source) - next(source) - elif isinstance(token, tokenizer.OpenChord): - # Handle chord - chord = [] - elif isinstance(token, tokenizer.CloseChord): - if chord: - lastPitch = chord[0] - chord = None - elif isinstance(token, tokenizer.Pitch): - # Handle pitch - p = Pitch.fromToken(token, tokenizer) - if p: - if lastPitch is None: - lastPitch = Pitch.c1() - lastPitch.octave = p.octave - if p.note > 3: - lastPitch.octave += 1 - changes.insert(startToken.pos, - "\\relative {0} ".format( - lastPitch.output(tokenizer.language))) - newPitch(token, p.relative(lastPitch)) - lastPitch = p - # remember the first pitch of a chord - chord == [] and chord.append(p) - except StopIteration: - pass # because of the next(source) statements - if startToken is None: # no single expression converted? - raise ly.NoMusicExpressionFound - return changes - -def languageAndKey(text): - """ - Return language and key signature pitch (as Pitch) of text. - """ - tokenizer = ly.tokenize.MusicTokenizer() - tokens = iter(tokenizer.tokens(text)) - keyPitch = Pitch.c0() - - for token in tokens: - if token == "\\key": - for token in tokens: - if not isinstance(token, (tokenizer.Space, tokenizer.Comment)): - break - if isinstance(token, tokenizer.Pitch): - p = Pitch.fromToken(token, tokenizer) - if p: - keyPitch = p - keyPitch.octave = 0 - return tokenizer.language, keyPitch - -def transpose(text, transposer, start = 0, changes = None): - """ - Transpose all or selected pitches. - Raises ly.QuarterToneAlterationNotAvailable if quarter tones are - requested but not available in the current language. - """ - tokenizer = ly.tokenize.MusicTokenizer() - tokens = tokenizer.tokens(text) - - if changes is None: - changes = ly.tokenize.ChangeList(text) - - class gen(object): - """ - Advanced generator of tokens, discarding whitespace and comments, - and automatically detecting \relative blocks and places where a new - LilyPond parsing context is started, like \score inside \markup. - - It also handles transposition tasks that are the same in relative - and absolute environments. - """ - def __init__(self): - self.inSelection = not start - - def __iter__(self): - return self - - def next(self): - while True: - token = next(tokens) - if isinstance(token, (tokenizer.Space, tokenizer.Comment)): - continue - elif not self.inSelection and token.pos >= start: - self.inSelection = True - # Handle stuff that's the same in relative and absolute here - if token == "\\relative": - relative() - elif isinstance(token, tokenizer.MarkupScore): - absolute(consume()) - elif isinstance(token, tokenizer.ChordMode): - chordmode() - elif token == "\\transposition": - next(source) # skip pitch - elif token == "\\transpose": - if self.inSelection: - for token in next(source), next(source): - if isinstance(token, tokenizer.Pitch): - transpose(token) - else: - next(source), next(source) - elif token == "\\key": - token = next(source) - if self.inSelection and isinstance(token, tokenizer.Pitch): - transpose(token, 0) - else: - return token - - source = gen() - - def consume(): - """ Consume tokens till the level drops (we exit a construct). """ - depth = tokenizer.depth() - for token in source: - yield token - if tokenizer.depth() < depth: - return - - def transpose(token, resetOctave = None): - """ Transpose absolute pitch in token, must be tokenizer.Pitch """ - p = Pitch.fromToken(token, tokenizer) - if p: - transposer.transpose(p) - if resetOctave is not None: - p.octave = resetOctave - changes.replaceToken(token, p.output(tokenizer.language)) - - def relative(): - """ Called when \\relative is encountered. """ - def transposeRelative(token, lastPitch): - """ - Make a new relative pitch from token, if possible. - Return the last pitch used (absolute, untransposed). - """ - p = Pitch.fromToken(token, tokenizer) - if not p: - return lastPitch - # absolute pitch determined from untransposed pitch of lastPitch - octaveCheck = p.octaveCheck is not None - p.absolute(lastPitch) - if source.inSelection: - # we may change this pitch. Make it relative against the - # transposed lastPitch. - try: - last = lastPitch.transposed - except AttributeError: - last = lastPitch - # transpose a copy and store that in the transposed - # attribute of lastPitch. Next time that is used for - # making the next pitch relative correctly. - copy = p.copy() - transposer.transpose(copy) - p.transposed = copy # store transposed copy in new lastPitch - new = copy.relative(last) - if octaveCheck: - new.octaveCheck = copy.octave - if relPitchToken: - # we are allowed to change the pitch after the - # \relative command. lastPitch contains this pitch. - lastPitch.octave += new.octave - new.octave = 0 - changes.replaceToken(relPitchToken[0], lastPitch.output(tokenizer.language)) - del relPitchToken[:] - changes.replaceToken(token, new.output(tokenizer.language)) - return p - - lastPitch = None - relPitchToken = [] # we use a list so it can be changed from inside functions - - # find the pitch after the \relative command - token = next(source) - if isinstance(token, tokenizer.Pitch): - lastPitch = Pitch.fromToken(token, tokenizer) - if lastPitch and source.inSelection: - relPitchToken.append(token) - token = next(source) - if not lastPitch: - lastPitch = Pitch.c1() - - # eat stuff like \new Staff == "bla" \new Voice \notes etc. - while True: - if token in ('\\new', '\\context'): - next(source) # skip context type - token = next(source) - if token == '=': - next(source) # skip context name - token = next(source) - elif isinstance(token, tokenizer.NoteMode): - token = next(source) - else: - break - - # now transpose the relative expression - if isinstance(token, tokenizer.OpenDelimiter): - # Handle full music expression { ... } or << ... >> - for token in consume(): - if token == '\\octaveCheck': - token = next(source) - if isinstance(token, tokenizer.Pitch): - p = Pitch.fromToken(token, tokenizer) - if p: - if source.inSelection: - copy = p.copy() - transposer.transpose(copy) - p.transposed = copy - changes.replaceToken(token, copy.output(tokenizer.language)) - lastPitch = p - del relPitchToken[:] - elif isinstance(token, tokenizer.OpenChord): - chord = [lastPitch] - for token in source: - if isinstance(token, tokenizer.CloseChord): - lastPitch = chord[:2][-1] # same or first - break - elif isinstance(token, tokenizer.Pitch): - chord.append(transposeRelative(token, chord[-1])) - elif isinstance(token, tokenizer.Pitch): - lastPitch = transposeRelative(token, lastPitch) - elif isinstance(token, tokenizer.OpenChord): - # Handle just one chord - for token in source: - if isinstance(token, tokenizer.CloseChord): - break - elif isinstance(token, tokenizer.Pitch): - lastPitch = transposeRelative(token, lastPitch) - elif isinstance(token, tokenizer.Pitch): - # Handle just one pitch - transposeRelative(token, lastPitch) - - def chordmode(): - """ Called inside \\chordmode or \\chords. """ - for token in consume(): - if source.inSelection and isinstance(token, tokenizer.Pitch): - transpose(token, 0) - - def absolute(tokens): - """ Called when outside a possible \\relative environment. """ - for token in tokens: - if source.inSelection and isinstance(token, tokenizer.Pitch): - transpose(token) - - # Do it! - absolute(source) - return changes - -def translate(text, lang, start = 0, changes = None): - """ - Change the LilyPond pitch name language in our document to lang. - Raises ly.QuarterToneAlterationNotAvailable if quarter tones are - requested but not available in the target language. - """ - tokenizer = ly.tokenize.Tokenizer() - tokens = tokenizer.tokens(text) - - # Walk through not-selected text, to track the state and the - # current pitch language. - if start: - for token in tokens: - if token.end >= start: - break - - if changes is None: - changes = ly.tokenize.ChangeList(text) - - writer = ly.pitch.pitchWriter[lang] - reader = ly.pitch.pitchReader[tokenizer.language] - - # Now walk through the part that needs to be translated. - includeCommandChanged = False - for token in tokens: - if isinstance(token, tokenizer.IncludeLanguageFile): - reader = ly.pitch.pitchReader[tokenizer.language] - changes.replaceToken(token, '"{0}.ly"'.format(lang)) - includeCommandChanged = True - elif isinstance(token, tokenizer.LanguageName): - reader = ly.pitch.pitchReader[tokenizer.language] - changes.replaceToken(token, '"{0}"'.format(lang)) - includeCommandChanged = True - elif isinstance(token, tokenizer.PitchWord): - result = reader(token) - if result: - note, alter = result - # Write out the translated pitch. - changes.replaceToken(token, writer(note, alter)) - return changes, includeCommandChanged - - diff -Nru frescobaldi-1.2.0/python/ly/version.py frescobaldi-2.0.0/python/ly/version.py --- frescobaldi-1.2.0/python/ly/version.py 2010-01-04 21:17:26.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/version.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,232 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -LilyPond version information -""" - -import os, re, weakref -from functools import wraps -from subprocess import Popen, PIPE, STDOUT - -import ly.rx - -def getVersion(text): - """ - Determine the version of a LilyPond document. - Returns a Version instance or None. - """ - text = ly.rx.all_comments.sub('', text) - match = re.search(r'\\version\s*"(.*?)"', text) - if match: - return Version.fromString(match.group(1)) - - -# Utility functions..... -def cacheresult(func): - """ - A decorator that performs the decorated method call only the first time, - caches the return value, and returns that next time. - The argments tuple should be hashable. - """ - cache = weakref.WeakKeyDictionary() - @wraps(func) - def wrapper(obj, *args): - h = hash(args) - try: - return cache[obj][h] - except KeyError: - result = cache.setdefault(obj, {})[h] = func(obj, *args) - return result - return wrapper - - -class Version(tuple): - """ - Contains a version as a two- or three-tuple (major, minor [, patchlevel]). - - Can format itself as "major.minor" or "major.minor.patch" - Additionally, three attributes are defined: - - major : contains the major version number as an int - - minor : contains the minor version number as an int - - patch : contains the patch level as an int or None - """ - def __new__(cls, major, minor, patch=None): - if patch is None: - obj = tuple.__new__(cls, (major, minor)) - else: - obj = tuple.__new__(cls, (major, minor, patch)) - obj.major = major - obj.minor = minor - obj.patch = patch - return obj - - def __format__(self, formatString): - return str(self) - - def __str__(self): - return ".".join(map(str, self)) - - @classmethod - def fromString(cls, text): - match = re.search(r"(\d+)\.(\d+)(?:\.(\d+))?", text) - if match: - return cls(*map(lambda g: int(g) if g else None, match.groups())) - - -class LilyPondInstance(object): - """ - Contains information about a LilyPond instance, referred to by a command - string defaulting to 'lilypond'. - """ - - # name of the convert-ly command - convert_ly_name = 'convert-ly' - - def __new__(cls, command='lilypond', cache=True): - """ - Return a cached instance if available and cache == True. - """ - if '_cache' not in cls.__dict__: - cls._cache = {} - elif cache and command in cls._cache: - return cls._cache[command] - obj = cls._cache[command] = object.__new__(cls) - obj._command = command - return obj - - @cacheresult - def command(self): - """ - Returns the command with full path prepended. - """ - cmd = self._command - if os.path.isabs(cmd): - return cmd - elif os.path.isabs(os.path.expanduser(cmd)): - return os.path.expanduser(cmd) - elif os.sep in cmd and os.access(cmd, os.X_OK): - return os.path.abspath(cmd) - else: - for p in os.environ.get("PATH", os.defpath).split(os.pathsep): - if os.access(os.path.join(p, cmd), os.X_OK): - return os.path.join(p, cmd) - - def bindir(self): - """ - Returns the directory the LilyPond command is in. - """ - cmd = self.command() - if cmd: - return os.path.dirname(cmd) - - def path_to(self, command): - """ - Returns the full path to the given command, by joining our bindir() with - the command. - """ - bindir = self.bindir() - if bindir: - return os.path.join(bindir, command) - - def convert_ly(self): - """ - DEPRECATED: Use path_to('convert-ly') instead. - Returns the full path of the convert-ly command that is in the - same directory as the corresponding lilypond command. - """ - return self.path_to(self.convert_ly_name) - - def prefix(self): - """ - Returns the prefix of a command. E.g. if command is "lilypond" - and resolves to "/usr/bin/lilypond", this method returns "/usr". - """ - cmd = self.command() - if cmd: - return os.path.dirname(os.path.dirname(cmd)) - - @cacheresult - def version(self): - """ - Returns the version returned by command -v as an instance of Version. - """ - try: - output = Popen((self._command, '-v'), stdout=PIPE, stderr=STDOUT).communicate()[0] - return Version.fromString(output) - except OSError: - pass - - @cacheresult - def datadir(self): - """ - Returns the datadir of this LilyPond instance. Most times something - like "/usr/share/lilypond/2.13.3/" - """ - # First ask LilyPond itself. - try: - d = Popen((self._command, '-e', - "(display (ly:get-option 'datadir)) (newline) (exit)"), - stdout=PIPE).communicate()[0].strip() - if os.path.isabs(d) and os.path.isdir(d): - return d - except OSError: - pass - # Then find out via the prefix. - version, prefix = self.version(), self.prefix() - if prefix: - dirs = ['current'] - if version: - dirs.append(str(version)) - for suffix in dirs: - d = os.path.join(prefix, 'share', 'lilypond', suffix) - if os.path.isdir(d): - return d - - @cacheresult - def lastConvertLyRuleVersion(self): - """ - Returns the version of the last convert-ly rule of this lilypond - instance. - """ - try: - output = Popen((self.convert_ly(), '--show-rules'), stdout=PIPE).communicate()[0] - for line in reversed(output.splitlines()): - match = re.match(r"(\d+)\.(\d+)\.(\d+):", line) - if match: - return Version(*map(int, match.groups())) - except OSError: - pass - - @cacheresult - def fontInfo(self, fontname): - """ - Returns a SvgFontInfo object containing information about - the named font (e.g. "emmentaler-20"). - """ - datadir = self.datadir() - if datadir: - font = os.path.join(datadir, "fonts", "svg", fontname + ".svg") - if os.path.exists(font): - import ly.font - return ly.font.SvgFontInfo(font) - - diff -Nru frescobaldi-1.2.0/python/ly/words.py frescobaldi-2.0.0/python/ly/words.py --- frescobaldi-1.2.0/python/ly/words.py 2010-11-09 08:53:30.000000000 +0000 +++ frescobaldi-2.0.0/python/ly/words.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1767 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -from __future__ import unicode_literals - -""" -LilyPond reserved words for auto completion, and some regexps -""" - -import re - -keywords = ( - 'accepts', - 'alias', - 'consists', - 'defaultchild', - 'denies', - #'description', - #'grobdescriptions', - 'include', - #'invalid', - 'language', - 'name', - #'objectid', - 'once', - 'remove', - #'sequential', - #'simultaneous', - #'type', - 'version', - 'score', - 'book', - 'bookpart', - 'header', - 'paper', - 'midi', - 'layout', - 'with', - 'context', -) - -keywords_completion = ( - 'score {}', - 'header {}', - 'paper {}', - 'midi {}', - 'layout {}', - 'with {}', - 'context {}', -) - -musiccommands = ( - 'accent', - 'accentus', - 'acciaccatura', - 'addInstrumentDefinition', - 'addlyrics', - 'addQuote', - 'afterGrace', - 'afterGraceFraction', - 'aikenHeads', - 'aikenHeadsMinor', - 'allowPageTurn', - 'alternative', - 'AncientRemoveEmptyStaffContext', - 'applyContext', - 'applyMusic', - 'applyOutput', - 'appoggiatura', - 'arpeggio', - 'arpeggioArrowDown', - 'arpeggioArrowUp', - 'arpeggioBracket', - 'arpeggioNormal', - 'arpeggioParenthesis', - 'ascendens', - 'auctum', - 'augmentum', - 'autoAccidentals', - 'autoBeamOff', - 'autoBeamOn', - 'autochange', - 'balloonGrobText', - 'balloonLengthOff', - 'balloonLengthOn', - 'balloonText', - 'bar', - 'barNumberCheck', - 'bassFigureExtendersOff', - 'bassFigureExtendersOn', - 'bassFigureStaffAlignmentDown', - 'bassFigureStaffAlignmentNeutral', - 'bassFigureStaffAlignmentUp', - 'bendAfter', - 'blackTriangleMarkup', - 'bracketCloseSymbol', - 'bracketOpenSymbol', - 'break', - 'breathe', - 'breve', - 'cadenzaOff', - 'cadenzaOn', - 'caesura', - 'cavum', - 'change', - 'chordmode', - 'chordNameSeparator', - 'chordPrefixSpacer', - 'chordRootNamer', - 'chords', - 'circulus', - 'clef', - 'cm', - 'coda', - 'compressFullBarRests', - 'context', - 'cr', - 'cresc', - 'crescHairpin', - 'crescTextCresc', - 'cueDuring', - 'dashBar', - 'dashDash', - 'dashDot', - 'dashHat', - 'dashLarger', - 'dashPlus', - 'dashUnderscore', - 'decr', - 'default', - 'defaultTimeSignature', - 'deminutum', - 'denies', - 'descendens', - 'dim', - 'dimHairpin', - 'dimTextDecr', - 'dimTextDecresc', - 'dimTextDim', - 'displayLilyMusic', - 'displayMusic', - 'divisioMaior', - 'divisioMaxima', - 'divisioMinima', - 'dotsDown', - 'dotsNeutral', - 'dotsUp', - 'downbow', - 'downmordent', - 'downprall', - 'drummode', - 'drumPitchTable', - 'drums', - 'dynamicDown', - 'dynamicNeutral', - 'dynamicUp', - 'easyHeadsOff', - 'easyHeadsOn', - 'endcr', - 'endcresc', - 'enddecr', - 'enddim', - 'endincipit', - 'endSpanners', - 'episemFinis', - 'episemInitium', - 'escapedBiggerSymbol', - 'escapedExclamationSymbol', - 'escapedParenthesisCloseSymbol', - 'escapedParenthesisOpenSymbol', - 'escapedSmallerSymbol', - 'espressivo', - 'expandFullBarRests', - 'f', - 'featherDurations', - 'fermata', - 'fermataMarkup', - 'ff', - 'fff', - 'ffff', - 'fffff', - 'figuremode', - 'figures', - 'finalis', - 'fingeringOrientations', - 'flageolet', - 'flexa', - 'fp', - 'frenchChords', - 'fullJazzExceptions', - 'funkHeads', - 'funkHeadsMinor', - 'fz', - 'germanChords', - 'glissando', - 'grace', - 'graceSettings', - 'halfopen', - 'harmonic', - 'hideNotes', - 'hideStaffSwitch', - 'huge', - 'ictus', - 'ignatzekExceptionMusic', - 'ignatzekExceptions', - 'iij', - 'IIJ', - 'ij', - 'IJ', - 'improvisationOff', - 'improvisationOn', - 'in', - 'inclinatum', - 'includePageLayoutFile', - 'indent', - 'instrumentSwitch', - 'instrumentTransposition', - 'interscoreline', - 'italianChords', - 'keepWithTag', - 'key', - 'killCues', - 'label', - 'laissezVibrer', - 'large', - 'lheel', - 'ligature', - 'linea', - 'lineprall', - 'longa', - 'longfermata', - 'ltoe', - 'lyricmode', - 'lyrics', - 'lyricsto', - 'maininput', - 'majorSevenSymbol', - 'makeClusters', - 'marcato', - 'mark', - 'markup', - 'markuplines', - 'maxima', - 'melisma', - 'melismaEnd', - 'mergeDifferentlyDottedOff', - 'mergeDifferentlyDottedOn', - 'mergeDifferentlyHeadedOff', - 'mergeDifferentlyHeadedOn', - 'mf', - 'mm', - 'mordent', - 'mp', - 'musicMap', - 'neumeDemoLayout', - 'new', - 'newSpacingSection', - 'noBeam', - 'noBreak', - 'noPageBreak', - 'noPageTurn', - 'normalsize', - 'notemode', - 'numericTimeSignature', - 'octaveCheck', - 'oldaddlyrics', - 'oneVoice', - 'open', - 'oriscus', - 'ottava', - 'override', - 'overrideProperty', - 'p', - 'pageBreak', - 'pageTurn', - 'parallelMusic', - 'parenthesisCloseSymbol', - 'parenthesisOpenSymbol', - 'parenthesize', - 'partcombine', - 'partCombineListener', - 'partial', - 'partialJazzExceptions', - 'partialJazzMusic', - 'pes', - 'phrasingSlurDashed', - 'phrasingSlurDotted', - 'phrasingSlurDown', - 'phrasingSlurNeutral', - 'phrasingSlurSolid', - 'phrasingSlurUp', - 'pipeSymbol', - 'pitchedTrill', - 'pointAndClickOff', - 'pointAndClickOn', - 'portato', - 'pp', - 'ppp', - 'pppp', - 'ppppp', - 'prall', - 'pralldown', - 'prallmordent', - 'prallprall', - 'prallup', - 'predefinedFretboardsOff', - 'predefinedFretboardsOn', - 'pt', - 'quilisma', - 'quoteDuring', - 'relative', - 'RemoveEmptyRhythmicStaffContext', - 'RemoveEmptyStaffContext', - 'removeWithTag', - 'repeat', - 'repeatTie', - 'resetRelativeOctave', - 'responsum', - 'rest', - 'reverseturn', - 'revert', - 'rfz', - 'rheel', - 'rightHandFinger', - 'rtoe', - 'sacredHarpHeads', - 'sacredHarpHeadsMinor', - 'scaleDurations', - 'scoreTweak', - 'segno', - 'semicirculus', - 'semiGermanChords', - 'set', - 'sf', - 'sff', - 'sfp', - 'sfz', - 'shiftDurations', - 'shiftOff', - 'shiftOn', - 'shiftOnn', - 'shiftOnnn', - 'shortfermata', - 'showStaffSwitch', - 'signumcongruentiae', - 'skip', - 'skipTypesetting', - 'slurDashed', - 'slurDotted', - 'slurDown', - 'slurNeutral', - 'slurSolid', - 'slurUp', - 'small', - 'snappizzicato', - 'sostenutoOff', - 'sostenutoOn', - 'southernHarmonyHeads', - 'southernHarmonyHeadsMinor', - 'sp', - 'spacingTweaks', - 'spp', - 'staccatissimo', - 'staccato', - 'startAcciaccaturaMusic', - 'startAppoggiaturaMusic', - 'startGraceMusic', - 'startGroup', - 'startStaff', - 'startTextSpan', - 'startTrillSpan', - 'stemDown', - 'stemNeutral', - 'stemUp', - 'stopAcciaccaturaMusic', - 'stopAppoggiaturaMusic', - 'stopGraceMusic', - 'stopGroup', - 'stopped', - 'stopStaff', - 'stopTextSpan', - 'stopTrillSpan', - 'strokeFingerOrientations', - 'stropha', - 'sustainOff', - 'sustainOn', - 'tabFullNotation', - 'tag', - 'teeny', - 'tempo', - 'tempoWholesPerMinute', - 'tenuto', - 'textLengthOff', - 'textLengthOn', - 'textSpannerDown', - 'textSpannerNeutral', - 'textSpannerUp', - 'thumb', - 'tieDashed', - 'tieDotted', - 'tieDown', - 'tieNeutral', - 'tieSolid', - 'tieUp', - 'tildeSymbol', - 'time', - 'times', - 'timing', - 'tiny', - 'transpose', - 'transposedCueDuring', - 'transposition', - 'treCorde', - 'trill', - 'tupletDown', - 'tupletNeutral', - 'tupletUp', - 'turn', - 'tweak', - 'unaCorda', - 'unfoldRepeats', - 'unHideNotes', - 'unit', - 'unset', - 'upbow', - 'upmordent', - 'upprall', - 'varcoda', - 'versus', - 'verylongfermata', - 'virga', - 'virgula', - 'voiceFour', - 'voiceFourStyle', - 'voiceNeutralStyle', - 'voiceOne', - 'voiceOneStyle', - 'voiceThree', - 'voiceThreeStyle', - 'voiceTwo', - 'voiceTwoStyle', - 'walkerHeads', - 'walkerHeadsMinor', - 'whiteTriangleMarkup', - 'withMusicProperty', -) - - -musiccommands_completion = ( - 'addlyrics {}', - 'alternative {}', - 'chordmode {}', - 'drummode {}', - 'figuremode {}', - 'keepWithTag #\'', - 'lyricmode {}', - 'notemode {}', - 'relative c\' {}', - 'removeWithTag #\'', - 'tag #\'', - 'tweak #\'', -) - - -modes = ( - 'major', - 'minor', - 'ionian', - 'dorian', - 'phrygian', - 'lydian', - 'mixolydian', - 'aeolian', - 'locrian', -) - - -markupcommands_nargs = ( -# no arguments -( - 'doubleflat', - 'doublesharp', - 'eyeglasses', - 'flat', - 'natural', - 'null', - 'semiflat', - 'semisharp', - 'sesquiflat', - 'sesquisharp', - 'sharp', - 'strut', -), -# one argument -( - 'backslashed-digit', - 'bold', - 'box', - 'bracket', - 'caps', - 'center-align', - 'center-column', - 'char', - 'circle', - 'column', - 'concat', - 'dir-column', - 'draw-line', - 'dynamic', - 'fill-line', - 'finger', - 'fontCaps', - 'fret-diagram', - 'fret-diagram-terse', - 'fret-diagram-verbose', - 'fromproperty', - 'harp-pedal', - 'hbracket', - 'hspace', - 'huge', - 'italic', - 'justify', - 'justify-field', - 'justify-string', - 'large', - 'larger', - 'left-align', - 'left-brace', - 'left-column', - 'line', - 'lookup', - 'markalphabet', - 'markletter', - 'medium', - 'musicglyph', - 'normalsize', - 'normal-size-sub', - 'normal-size-super', - 'normal-text', - 'number', - 'postscript', - 'right-align', - 'right-brace', - 'right-column', - 'roman', - 'rounded-box', - 'sans', - 'score', - 'simple', - 'slashed-digit', - 'small', - 'smallCaps', - 'smaller', - 'stencil', - 'sub', - 'super', - 'teeny', - 'text', - 'tied-lyric', - 'tiny', - 'transparent', - 'triangle', - 'typewriter', - 'underline', - 'upright', - 'vcenter', - 'vspace', - 'verbatim-file', - 'whiteout', - 'wordwrap', - 'wordwrap-field', - 'wordwrap-string', -), -# two arguments -( - 'abs-fontsize', - 'combine', - 'fontsize', - 'fraction', - 'halign', - 'hcenter-in', - 'lower', - 'magnify', - 'note', - 'on-the-fly', - 'override', - 'pad-around', - 'pad-markup', - 'pad-x', - 'path', # added in LP 2.13.31 - 'raise', - 'rotate', - 'translate', - 'translate-scaled', - 'with-color', - 'with-url', -), -# three arguments -( - 'arrow-head', - 'beam', - 'draw-circle', - 'eps-file', - 'filled-box', - 'general-align', - 'note-by-number', - 'pad-to-box', - 'page-ref', - 'with-dimensions', -), -# four arguments -( - 'put-adjacent', -)) - - -markupcommands = sum(markupcommands_nargs, ()) - - -markuplistcommands = ( - 'column-lines', - 'justified-lines', - 'override-lines', - 'wordwrap-internal', - 'wordwrap-lines', - 'wordwrap-string-internal', -) - - -contexts = ( - 'ChoirStaff', - 'ChordNames', - 'CueVoice', - 'Devnull', - 'DrumStaff', - 'DrumVoice', - 'Dynamics', - 'FiguredBass', - 'FretBoards', - 'Global', - 'GrandStaff', - 'GregorianTranscriptionStaff', - 'GregorianTranscriptionVoice', - 'Lyrics', - 'MensuralStaff', - 'MensuralVoice', - 'NoteNames', - 'PianoStaff', - 'RhythmicStaff', - 'Score', - 'Staff', - 'StaffGroup', - 'TabStaff', - 'TabVoice', - 'Timing', - 'VaticanaStaff', - 'VaticanaVoice', - 'Voice', -) - - -engravers = ( - 'Accidental_engraver', - 'Ambitus_engraver', - 'Arpeggio_engraver', - 'Auto_beam_engraver', - 'Axis_group_engraver', - 'Balloon_engraver', - 'Bar_engraver', - 'Bar_number_engraver', - 'Beam_engraver', - 'Beam_performer', - 'Bend_engraver', - 'Break_align_engraver', - 'Breathing_sign_engraver', - 'Chord_name_engraver', - 'Chord_tremolo_engraver', - 'Clef_engraver', - 'Cluster_spanner_engraver', - 'Collision_engraver', - 'Completion_heads_engraver', - 'Control_track_performer', - 'Custos_engraver', - 'Default_bar_line_engraver', - 'Dot_column_engraver', - 'Dots_engraver', - 'Drum_note_performer', - 'Drum_notes_engraver', - 'Dynamic_align_engraver', - 'Dynamic_engraver', - 'Dynamic_performer', - 'Episema_engraver', - 'Extender_engraver', - 'Figured_bass_engraver', - 'Figured_bass_position_engraver', - 'Fingering_engraver', - 'Font_size_engraver', - 'Forbid_line_break_engraver', - 'Fretboard_engraver', - 'Glissando_engraver', - 'Grace_beam_engraver', - 'Grace_engraver', - 'Grace_spacing_engraver', - 'Grid_line_span_engraver', - 'Grid_point_engraver', - 'Grob_pq_engraver', - 'Hara_kiri_engraver', - 'Horizontal_bracket_engraver', - 'Hyphen_engraver', - 'Instrument_name_engraver', - 'Instrument_switch_engraver', - 'Key_engraver', - 'Key_performer', - 'Laissez_vibrer_engraver', - 'Ledger_line_engraver', - 'Ligature_bracket_engraver', - 'Lyric_engraver', - 'Lyric_performer', - 'Mark_engraver', - 'Measure_grouping_engraver', - 'Melody_engraver', - 'Mensural_ligature_engraver', - 'Metronome_mark_engraver', - 'Multi_measure_rest_engraver', - 'New_dynamic_engraver', - 'New_fingering_engraver', - 'Note_head_line_engraver', - 'Note_heads_engraver', - 'Note_name_engraver', - 'Note_performer', - 'Note_spacing_engraver', - 'Ottava_spanner_engraver', - 'Output_property_engraver', - 'Page_turn_engraver', - 'Paper_column_engraver', - 'Parenthesis_engraver', - 'Part_combine_engraver', - 'Percent_repeat_engraver', - 'Phrasing_slur_engraver', - 'Piano_pedal_align_engraver', - 'Piano_pedal_engraver', - 'Piano_pedal_performer', - 'Pitched_trill_engraver', - 'Pitch_squash_engraver', - 'Repeat_acknowledge_engraver', - 'Repeat_tie_engraver', - 'Rest_collision_engraver', - 'Rest_engraver', - 'Rhythmic_column_engraver', - 'Scheme_engraver', - 'Script_column_engraver', - 'Script_engraver', - 'Script_row_engraver', - 'Separating_line_group_engraver', - 'Slash_repeat_engraver', - 'Slur_engraver', - 'Slur_performer', - 'Spacing_engraver', - 'Span_arpeggio_engraver', - 'Span_bar_engraver', - 'Spanner_break_forbid_engraver', - 'Staff_collecting_engraver', - 'Staff_performer', - 'Staff_symbol_engraver', - 'Stanza_number_align_engraver', - 'Stanza_number_engraver', - 'Stem_engraver', - 'String_number_engraver', - 'Swallow_engraver', - 'Swallow_performer', - 'System_start_delimiter_engraver', - 'Tab_harmonic_engraver', - 'Tab_note_heads_engraver', - 'Tab_staff_symbol_engraver', - 'Tempo_performer', - 'Text_engraver', - 'Text_spanner_engraver', - 'Tie_engraver', - 'Tie_performer', - 'Time_signature_engraver', - 'Time_signature_performer', - 'Timing_translator', - 'Trill_spanner_engraver', - 'Tuplet_engraver', - 'Tweak_engraver', - 'Vaticana_ligature_engraver', - 'Vertical_align_engraver', - 'Vertically_spaced_contexts_engraver', - 'Volta_engraver', -) - - -midi_instruments = ( - # (1-8 piano) - 'acoustic grand', - 'bright acoustic', - 'electric grand', - 'honky-tonk', - 'electric piano 1', - 'electric piano 2', - 'harpsichord', - 'clav', - # (9-16 chrom percussion) - 'celesta', - 'glockenspiel', - 'music box', - 'vibraphone', - 'marimba', - 'xylophone', - 'tubular bells', - 'dulcimer', - # (17-24 organ) - 'drawbar organ', - 'percussive organ', - 'rock organ', - 'church organ', - 'reed organ', - 'accordion', - 'harmonica', - 'concertina', - # (25-32 guitar) - 'acoustic guitar (nylon)', - 'acoustic guitar (steel)', - 'electric guitar (jazz)', - 'electric guitar (clean)', - 'electric guitar (muted)', - 'overdriven guitar', - 'distorted guitar', - 'guitar harmonics', - # (33-40 bass) - 'acoustic bass', - 'electric bass (finger)', - 'electric bass (pick)', - 'fretless bass', - 'slap bass 1', - 'slap bass 2', - 'synth bass 1', - 'synth bass 2', - # (41-48 strings) - 'violin', - 'viola', - 'cello', - 'contrabass', - 'tremolo strings', - 'pizzicato strings', - 'orchestral harp', # till LilyPond 2.12 was this erroneously called: 'orchestral strings' - 'timpani', - # (49-56 ensemble) - 'string ensemble 1', - 'string ensemble 2', - 'synthstrings 1', - 'synthstrings 2', - 'choir aahs', - 'voice oohs', - 'synth voice', - 'orchestra hit', - # (57-64 brass) - 'trumpet', - 'trombone', - 'tuba', - 'muted trumpet', - 'french horn', - 'brass section', - 'synthbrass 1', - 'synthbrass 2', - # (65-72 reed) - 'soprano sax', - 'alto sax', - 'tenor sax', - 'baritone sax', - 'oboe', - 'english horn', - 'bassoon', - 'clarinet', - # (73-80 pipe) - 'piccolo', - 'flute', - 'recorder', - 'pan flute', - 'blown bottle', - 'shakuhachi', - 'whistle', - 'ocarina', - # (81-88 synth lead) - 'lead 1 (square)', - 'lead 2 (sawtooth)', - 'lead 3 (calliope)', - 'lead 4 (chiff)', - 'lead 5 (charang)', - 'lead 6 (voice)', - 'lead 7 (fifths)', - 'lead 8 (bass+lead)', - # (89-96 synth pad) - 'pad 1 (new age)', - 'pad 2 (warm)', - 'pad 3 (polysynth)', - 'pad 4 (choir)', - 'pad 5 (bowed)', - 'pad 6 (metallic)', - 'pad 7 (halo)', - 'pad 8 (sweep)', - # (97-104 synth effects) - 'fx 1 (rain)', - 'fx 2 (soundtrack)', - 'fx 3 (crystal)', - 'fx 4 (atmosphere)', - 'fx 5 (brightness)', - 'fx 6 (goblins)', - 'fx 7 (echoes)', - 'fx 8 (sci-fi)', - # (105-112 ethnic) - 'sitar', - 'banjo', - 'shamisen', - 'koto', - 'kalimba', - 'bagpipe', - 'fiddle', - 'shanai', - # (113-120 percussive) - 'tinkle bell', - 'agogo', - 'steel drums', - 'woodblock', - 'taiko drum', - 'melodic tom', - 'synth drum', - 'reverse cymbal', - # (121-128 sound effects) - 'guitar fret noise', - 'breath noise', - 'seashore', - 'bird tweet', - 'telephone ring', - 'helicopter', - 'applause', - 'gunshot', - # (channel 10 drum-kits - subtract 32768 to get program no.) - 'standard kit', - 'standard drums', - 'drums', - 'room kit', - 'room drums', - 'power kit', - 'power drums', - 'rock drums', - 'electronic kit', - 'electronic drums', - 'tr-808 kit', - 'tr-808 drums', - 'jazz kit', - 'jazz drums', - 'brush kit', - 'brush drums', - 'orchestra kit', - 'orchestra drums', - 'classical drums', - 'sfx kit', - 'sfx drums', - 'mt-32 kit', - 'mt-32 drums', - 'cm-64 kit', - 'cm-64 drums', -) - - -grobs = ( - 'Accidental', - 'AccidentalCautionary', - 'AccidentalPlacement', - 'AccidentalSuggestion', - 'Ambitus', - 'AmbitusAccidental', - 'AmbitusLine', - 'AmbitusNoteHead', - 'Arpeggio', - 'BalloonTextItem', - 'BarLine', - 'BarNumber', - 'BassFigure', - 'BassFigureAlignment', - 'BassFigureAlignmentPositioning', - 'BassFigureBracket', - 'BassFigureContinuation', - 'BassFigureLine', - 'Beam', - 'BendAfter', - 'BreakAlignGroup', - 'BreakAlignment', - 'BreathingSign', - 'ChordName', - 'Clef', - 'ClusterSpanner', - 'ClusterSpannerBeacon', - 'CombineTextScript', - 'Custos', - 'DotColumn', - 'Dots', - 'DoublePercentRepeat', - 'DoublePercentRepeatCounter', - 'DynamicLineSpanner', - 'DynamicText', - 'DynamicTextSpanner', - 'Episema', - 'Fingering', - 'FretBoard', - 'Glissando', - 'GraceSpacing', - 'GridLine', - 'GridPoint', - 'Hairpin', - 'HarmonicParenthesesItem', - 'HorizontalBracket', - 'InstrumentName', - 'InstrumentSwitch', - 'KeyCancellation', - 'KeySignature', - 'LaissezVibrerTie', - 'LaissezVibrerTieColumn', - 'LedgerLineSpanner', - 'LeftEdge', - 'LigatureBracket', - 'LyricExtender', - 'LyricHyphen', - 'LyricSpace', - 'LyricText', - 'MeasureGrouping', - 'MelodyItem', - 'MensuralLigature', - 'MetronomeMark', - 'MultiMeasureRest', - 'MultiMeasureRestNumber', - 'MultiMeasureRestText', - 'NonMusicalPaperColumn', - 'NoteCollision', - 'NoteColumn', - 'NoteHead', - 'NoteName', - 'NoteSpacing', - 'OctavateEight', - 'OttavaBracket', - 'PaperColumn', - 'ParenthesesItem', - 'PercentRepeat', - 'PercentRepeatCounter', - 'PhrasingSlur', - 'PianoPedalBracket', - 'RehearsalMark', - 'RepeatSlash', - 'RepeatTie', - 'RepeatTieColumn', - 'Rest', - 'RestCollision', - 'Script', - 'ScriptColumn', - 'ScriptRow', - 'SeparationItem', - 'Slur', - 'SostenutoPedal', - 'SostenutoPedalLineSpanner', - 'SpacingSpanner', - 'SpanBar', - 'StaffGrouper', - 'StaffSpacing', - 'StaffSymbol', - 'StanzaNumber', - 'Stem', - 'StemTremolo', - 'StringNumber', - 'StrokeFinger', - 'SustainPedal', - 'SustainPedalLineSpanner', - 'System', - 'SystemStartBar', - 'SystemStartBrace', - 'SystemStartBracket', - 'SystemStartSquare', - 'TabNoteHead', - 'TextScript', - 'TextSpanner', - 'Tie', - 'TieColumn', - 'TimeSignature', - 'TrillPitchAccidental', - 'TrillPitchGroup', - 'TrillPitchHead', - 'TrillSpanner', - 'TupletBracket', - 'TupletNumber', - 'UnaCordaPedal', - 'UnaCordaPedalLineSpanner', - 'VaticanaLigature', - 'VerticalAlignment', - 'VerticalAxisGroup', - 'VoiceFollower', - 'VoltaBracket', - 'VoltaBracketSpanner', -) - - -def schemeprops(grob = None): - """ - Returns the list of scheme properties the named grob type - supports. - """ - # FIXME: - # - get those from LilyPond - # - return only properties relevant to the grob - # - do something with the embedded documentation - return all_user_grob_properties - - -all_user_grob_properties = ( - 'add-stem-support', - 'after-last-staff-spacing', - 'after-line-breaking', - 'align-dir', - 'allow-loose-spacing', - 'allow-span-bar', - 'alteration', - 'alteration-alist', - 'annotation', - 'arpeggio-direction', - 'arrow-length', - 'arrow-width', - 'auto-knee-gap', - 'average-spacing-wishes', - 'avoid-note-head', - 'avoid-slur', - 'axes', - 'bar-size', - 'base-shortest-duration', - 'baseline-skip', - 'beam-thickness', - 'beam-width', - 'beamed-stem-shorten', - 'beaming', - 'beamlet-default-length', - 'beamlet-max-length-proportion', - 'before-line-breaking', - 'between-cols', - 'between-staff-spacing', - 'bound-details', - 'bound-padding', - 'bracket-flare', - 'bracket-visibility', - 'break-align-anchor', - 'break-align-anchor-alignment', - 'break-align-orders', - 'break-align-symbol', - 'break-align-symbols', - 'break-overshoot', - 'break-visibility', - 'breakable', - 'c0-position', - 'circled-tip', - 'clip-edges', - 'collapse-height', - 'color', - 'common-shortest-duration', - 'concaveness', - 'connect-to-neighbor', - 'control-points', - 'damping', - 'dash-definition', - 'dash-fraction', - 'dash-period', - 'default-direction', - 'default-next-staff-spacing', - 'details', - 'digit-names', - 'direction', - 'dot-count', - 'dot-negative-kern', - 'dot-placement-list', - 'duration-log', - 'eccentricity', - 'edge-height', - 'edge-text', - 'expand-limit', - 'extra-dy', - 'extra-offset', - 'extra-spacing-height', - 'extra-spacing-width', - 'extra-X-extent', - 'extra-Y-extent', - 'flag', - 'flag-count', - 'flag-style', - 'font-encoding', - 'font-family', - 'font-name', - 'font-series', - 'font-shape', - 'font-size', - 'force-hshift', - 'fraction', - 'french-beaming', - 'fret-diagram-details', - 'full-length-padding', - 'full-length-to-extent', - 'full-measure-extra-space', - 'full-size-change', - 'gap', - 'gap-count', - 'glyph', - 'glyph-name', - 'glyph-name-alist', - 'grow-direction', - 'hair-thickness', - 'harp-pedal-details', - 'head-direction', - 'height', - 'height-limit', - 'hide-tied-accidental-after-break', - 'horizontal-shift', - 'horizontal-skylines', - 'ignore-collision', - 'implicit', - 'inspect-index', - 'inspect-quants', - 'inter-loose-line-spacing', - 'inter-staff-spacing', - 'keep-fixed-while-stretching', - 'keep-inside-line', - 'kern', - 'knee', - 'knee-spacing-correction', - 'labels', - 'layer', - 'ledger-line-thickness', - 'left-bound-info', - 'left-padding', - 'length', - 'length-fraction', - 'line-break-penalty', - 'line-break-permission', - 'line-break-system-details', - 'line-count', - 'line-positions', - 'line-thickness', - 'long-text', - 'max-beam-connect', - 'max-stretch', - 'measure-count', - 'measure-length', - 'merge-differently-dotted', - 'merge-differently-headed', - 'minimum-distance', - 'minimum-length', - 'minimum-length-fraction', - 'minimum-space', - 'minimum-X-extent', - 'minimum-Y-extent', - 'neutral-direction', - 'neutral-position', - 'next', - 'next-staff-spacing', - 'no-alignment', - 'no-ledgers', - 'no-stem-extend', - 'non-affinity-spacing', - 'non-default', - 'non-musical', - 'note-names', - 'outside-staff-horizontal-padding', - 'outside-staff-padding', - 'outside-staff-priority', - 'packed-spacing', - 'padding', - 'padding-pairs', - 'page-break-penalty', - 'page-break-permission', - 'page-turn-penalty', - 'page-turn-permission', - 'parenthesized', - 'positions', - 'prefer-dotted-right', - 'ratio', - 'remove-empty', - 'remove-first', - 'restore-first', - 'rhythmic-location', - 'right-bound-info', - 'right-padding', - 'rotation', - 'same-direction-correction', - 'script-priority', - 'self-alignment-X', - 'self-alignment-Y', - 'shorten-pair', - 'shortest-duration-space', - 'shortest-playing-duration', - 'shortest-starter-duration', - 'side-axis', - 'side-relative-direction', - 'size', - 'skyline-horizontal-padding', - 'slash-negative-kern', - 'slope', - 'slur-padding', - 'space-alist', - 'space-to-barline', - 'spacing-increment', - 'springs-and-rods', - 'stacking-dir', - 'staff-affinity', - 'staff-padding', - 'staff-position', - 'staff-space', - 'stem-attachment', - 'stem-end-position', - 'stem-spacing-correction', - 'stemlet-length', - 'stencil', - 'stencils', - 'strict-grace-spacing', - 'strict-note-spacing', - 'stroke-style', - 'style', - 'text', - 'text-direction', - 'thick-thickness', - 'thickness', - 'thin-kern', - 'threshold', #removed in 2.14 - 'tie-configuration', - 'to-barline', - 'toward-stem-shift', - 'transparent', - 'uniform-stretching', - 'used', - 'vertical-skylines', - 'when', - 'whiteout', - 'width', - 'word-space', - 'X-extent', - 'X-offset', - 'Y-extent', - 'Y-offset', - 'zigzag-length', - 'zigzag-width', -) - - -schemefuncs = ( - 'set-accidental-style \'', - 'set-global-staff-size', - 'set-octavation', - 'define-public', - 'define-music-function', - 'define-markup-command', - 'markup', - 'parser', - 'location', - 'number?', - 'string?', - 'pair?', - 'ly:duration?', - 'ly:grob?', - 'ly:make-moment', - 'ly:make-pitch', - 'ly:music?', - 'ly:moment?', - 'ly:format', - 'markup?', - 'interpret-markup', - 'make-line-markup', - 'make-center-markup', - 'make-column-markup', - 'make-musicglyph-markup', - 'color?', - 'rgb-color', - 'x11-color \'', -) - - -headervars = ( - 'dedication', - 'title', - 'subtitle', - 'subsubtitle', - 'poet', - 'composer', - 'meter', - 'opus', - 'arranger', - 'instrument', - 'piece', - 'breakbefore', - 'copyright', - 'tagline', - 'mutopiatitle', - 'mutopiacomposer', - 'mutopiapoet', - 'mutopiaopus', - 'mutopiainstrument', - 'date', - 'enteredby', - 'source', - 'style', - 'maintainer', - 'maintainerEmail', - 'maintainerWeb', - 'moreInfo', - 'lastupdated', - 'texidoc', - 'footer', -) - - -papervars = ( - # page - 'paper-height', - 'paper-width', - 'top-margin', - 'bottom-margin', - 'left-margin', - 'right-margin', - 'line-width', - - # vertical - 'after-title-space', # 2.12 - 'after-title-spacing', # 2.14 - 'before-title-space', # 2.12 - 'before-title-spacing', # 2.14 - 'between-system-padding', # 2.12 - 'between-system-space', # 2.12 - 'between-scores-system-spacing', # 2.14 - 'between-system-spacing', # 2.14 - 'between-title-space', # 2.12 - 'between-title-spacing', # 2.14 - 'bottom-system-spacing', # 2.14 - 'top-title-spacing', # 2.14 - 'top-system-spacing', # 2.14 - 'page-top-space', # 2.12 only - - # horizontal - 'binding-offset', # 2.14 - 'horizontal-shift', - 'indent', - 'short-indent', - 'two-sided', # 2.14 - 'inner-margin', # 2.14 - 'outer-margin', # 2.14 - - # debugging - 'annotate-spacing', - - # other - 'auto-first-page-number', - 'blank-last-page-force', - 'blank-page-force', - 'check-consistency', # 2.14 - 'first-page-number', - 'foot-separation', # not in 2.14? - 'head-separation', # not in 2.14? - 'max-systems-per-page', # 2.14 - 'min-systems-per-page', # 2.14 - 'page-breaking-between-system-padding', - 'page-count', - 'page-limit-inter-system-space', - 'page-limit-inter-system-space-factor', - 'page-spacing-weight', # 2.14 - 'print-all-headers', - 'print-first-page-number', - 'print-page-number', - 'ragged-bottom', - 'ragged-last', - 'ragged-last-bottom', - 'ragged-right', - 'system-separator-markup', - 'system-count', - 'systems-per-page', # 2.14 - - # different markups - 'bookTitleMarkup', - 'evenFooterMarkup', - 'evenHeaderMarkup', - 'oddFooterMarkup', - 'oddHeaderMarkup', - 'scoreTitleMarkup', - 'tocItemMarkup', - 'tocTitleMarkup', - - # undocumented? - #'blank-after-score-page-force', - #'force-assignment', - #'input-encoding', - #'output-scale', -) - - -layoutvars = ( - 'indent', - 'short-indent', - 'system-count', -) - - -contextproperties = ( - 'aDueText', - 'alignAboveContext', - 'alignBassFigureAccidentals', - 'alignBelowContext', - #'allowBeamBreak', #not in 2.12 and 2.14 - 'associatedVoice', - 'autoAccidentals', - 'autoBeamCheck', - 'autoBeaming', - #'autoBeamSettings', # moved to beamSettings in 2.14 - 'autoCautionaries', - 'automaticBars', - 'barAlways', - 'barCheckSynchronize', - 'barNumberVisibility', - 'bassFigureFormatFunction', - 'bassStaffProperties', - 'baseMoment', - 'beamExceptions', - 'beamSettings', - 'beatGrouping', - 'beatLength', - 'beatStructure', - 'chordChanges', - 'chordNameExceptions', - 'chordNameExceptionsFull', - 'chordNameExceptionsPartial', - 'chordNameFunction', - 'chordNameSeparator', - 'chordNoteNamer', - 'chordPrefixSpacer', - 'chordRootNamer', - 'clefGlyph', - 'clefOctavation', - 'clefPosition', - 'completionBusy', - 'connectArpeggios', - 'countPercentRepeats', - 'createKeyOnClefChange', - 'createSpacing', - 'crescendoSpanner', - 'crescendoText', - 'currentBarNumber', - 'decrescendoSpanner', - 'decrescendoText', - 'defaultBarType', - 'doubleRepeatType', - 'doubleSlurs', - 'drumPitchTable', - 'drumStyleTable', - #'dynamicAbsoluteVolumeFunction', # not in 2.12 and 2.14 - 'explicitClefVisibility', - 'explicitKeySignatureVisibility', - 'extendersOverRests', - 'extraNatural', - 'figuredBassAlterationDirection', - 'figuredBassCenterContinuations', - 'figuredBassFormatter', - 'figuredBassPlusDirection', - 'fingeringOrientations', - 'firstClef', - 'followVoice', - 'fontSize', - 'forbidBreak', - 'forceClef', - 'fretLabels', - 'gridInterval', - #'hairpinToBarline', # not in 2.12 and 2.14 - 'harmonicAccidentals', - 'harmonicDots', - 'highStringOne', - 'ignoreBarChecks', - 'ignoreFiguredBassRest', - 'ignoreMelismata', - 'implicitBassFigures', - 'implicitTimeSignatureVisibility', - 'instrumentCueName', - 'instrumentEqualizer', - 'instrumentName', - 'instrumentTransposition', - 'internalBarNumber', - 'keepAliveInterfaces', - 'keyAlterationOrder', - 'keySignature', - 'lyricMelismaAlignment', - 'majorSevenSymbol', - 'markFormatter', - 'maximumFretStretch', - 'measureLength', - 'measurePosition', - 'melismaBusyProperties', - 'metronomeMarkFormatter', - 'middleCClefPosition', - 'middleCOffset', - 'middleCPosition', - 'midiInstrument', - 'midiMaximumVolume', - 'midiMinimumVolume', - 'minimumFret', - 'minimumPageTurnLength', - 'minimumRepeatLengthForPageTurn', - 'noChordSymbol', # since 2.14 - 'noteToFretFunction', - 'ottavation', - 'output', - 'pedalSostenutoStrings', - 'pedalSostenutoStyle', - 'pedalSustainStrings', - 'pedalSustainStyle', - 'pedalUnaCordaStrings', - 'pedalUnaCordaStyle', - 'predefinedDiagramTable', - 'printKeyCancellation', - 'printOctaveNames', - 'printPartCombineTexts', - 'proportionalNotationDuration', - 'recordEventSequence', - 'rehearsalMark', - 'repeatCommands', - 'repeatCountVisibility', - 'restNumberThreshold', - 'shapeNoteStyles', - 'shortInstrumentName', - 'shortVocalName', - 'skipBars', - 'skipTypesetting', - 'soloIIText', - 'soloText', - 'squashedPosition', - 'staffLineLayoutFunction', - 'stanza', - 'stemLeftBeamCount', - 'stemRightBeamCount', - 'stringNumberOrientations', - 'stringOneTopmost', - 'stringTunings', - 'strokeFingerOrientations', - 'subdivideBeams', - 'suggestAccidentals', - 'systemStartDelimiter', - 'systemStartDelimiterHierarchy', - 'tablatureFormat', - 'tempoHideNote', - 'tempoText', - 'tempoUnitCount', - 'tempoUnitDuration', - 'tempoWholesPerMinute', - 'tieWaitForNote', - 'timeSignatureFraction', - 'timing', - 'tonic', - 'topLevelAlignment', # since 2.14 - 'trebleStaffProperties', - 'tremoloFlags', - 'tupletFullLength', - 'tupletFullLengthNote', - 'tupletSpannerDuration', - 'useBassFigureExtenders', - 'verticallySpacedContexts', - 'vocalName', - 'voltaSpannerDuration', - 'whichBar', -) - - -repeat_types = ( - 'unfold', - 'percent', - 'volta', - 'tremolo', -) - - -accidentalstyles = ( - 'default', - 'voice', - 'modern', - 'modern-cautionary', - 'modern-voice', - 'modern-voice-cautionary', - 'piano', - 'piano-cautionary', - 'neo-modern', - 'neo-modern-cautionary', - 'neo-modern-voice', - 'neo-modern-voice-cautionary', - 'dodecaphonic', - 'teaching', - 'no-reset', - 'forget', -) - - -clefs_plain = ( - 'treble', - 'violin', - 'G', - 'alto', - 'C', - 'tenor', - 'bass', - 'subbass', - 'F', - 'french', - 'mezzosoprano', - 'soprano', - 'varbaritone', - 'baritone', - 'percussion', - 'tab', -) - - -clefs = clefs_plain + ( - 'treble_8', - 'bass_8', -) - - -break_visibility = ( - 'all-invisible', - 'begin-of-line-visible', - 'end-of-line-visible', - 'all-visible', - 'begin-of-line-invisible', - 'end-of-line-invisible', - 'center-invisible', -) - -mark_formatters = ( - 'format-mark-alphabet', - 'format-mark-barnumbers', - 'format-mark-letters', - 'format-mark-numbers', - 'format-mark-box-alphabet', - 'format-mark-box-barnumbers', - 'format-mark-box-letters', - 'format-mark-box-numbers', - 'format-mark-circle-alphabet', - 'format-mark-circle-barnumbers', - 'format-mark-circle-letters', - 'format-mark-circle-numbers', -) - - -set_context_re = re.compile(r'\\(un)?set\s+(' + '|'.join(contexts) + r')\s*.\s*$') -context_re = re.compile(r'\b(' + '|'.join(contexts) + r')\s*\.\s*$') -grob_re = re.compile(r'\b(' + '|'.join(grobs) + r')\s*$') - diff -Nru frescobaldi-1.2.0/python/runpty.py frescobaldi-2.0.0/python/runpty.py --- frescobaldi-1.2.0/python/runpty.py 2009-12-30 20:32:29.000000000 +0000 +++ frescobaldi-2.0.0/python/runpty.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -""" -Runs a program within a PTY. -Some ideas were taken from the pty module, but I don't want -to connect stderr and I implement some signal handling. -""" - -import sys, os, tty, pty, signal, select, subprocess - -STDIN, STDOUT = 0, 1 - -master, slave = pty.openpty() -p = subprocess.Popen(sys.argv[1:], - stdin = slave, stdout = STDOUT, close_fds = True) - -def terminate(signalnum, frame): - os.kill(p.pid, signalnum) -signal.signal(signal.SIGINT, terminate) -signal.signal(signal.SIGTERM, terminate) - -try: - mode = tty.tcgetattr(STDIN) - tty.setraw(STDIN) - restore = 1 -except tty.error: - restore = 0 - -while p.poll() is None: - try: - fds = select.select([STDIN], [], [], 0.5)[0] - except select.error: - pass - else: - if STDIN in fds: - data = os.read(STDIN, 1024) - while data: - n = os.write(master, data) - data = data[n:] - -if restore: - tty.tcsetattr(STDIN, tty.TCSAFLUSH, mode) -os.close(master) -sys.exit(p.poll()) diff -Nru frescobaldi-1.2.0/python/signals.py frescobaldi-2.0.0/python/signals.py --- frescobaldi-1.2.0/python/signals.py 2010-07-04 20:08:22.000000000 +0000 +++ frescobaldi-2.0.0/python/signals.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,178 +0,0 @@ -# This file is part of the Frescobaldi project, http://www.frescobaldi.org/ -# -# Copyright (c) 2008, 2009, 2010 by Wilbert Berendsen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# See http://www.gnu.org/licenses/ for more information. - -""" -A simple signal/slot implementation. -""" - -import inspect, weakref - - -class SignalInstance(object): - """ - A simple implementation of the Signal/Slot pattern. - - To use, simply create a Signal instance. The instance may be a member - of a class, a global, or a local; it makes no difference what scope - it resides within. Connect slots to the signal using the "connect()" - method. The slot may be a member of a class or a simple function. - - If the slot is a member of a class, Signal will automatically detect - when the method's class instance has been deleted and remove it - from its list of connected slots. - - Emit the signal (to call all connected slots) by simply invoking it. - The order in which the slots are called is undetermined. - """ - def __init__(self): - self.functions = set() - self.objects = weakref.WeakKeyDictionary() - - def __call__(self, *args, **kwargs): - """ call all connected slots """ - # make copies because the sets might change... - for func in set(self.functions): - # if possible determine the number of arguments the function - # expects, and discard the superfluous arguments. - try: - func.func_code.co_argcount - except AttributeError: - func(*args, **kwargs) - else: - func(*args[:func.func_code.co_argcount], **kwargs) - for obj, methods in self.objects.items(): - for func in set(methods): - try: - func.func_code.co_argcount - except AttributeError: - func(obj, *args, **kwargs) - else: - func(obj, *args[:func.func_code.co_argcount-1], **kwargs) - - def connect(self, func): - if inspect.ismethod(func): - self.objects.setdefault(func.im_self, set()).add(func.im_func) - else: - self.functions.add(func) - - def disconnect(self, func): - if inspect.ismethod(func): - s = self.objects.get(func.im_self) - if s is not None: - s.discard(func.im_func) - else: - self.functions.discard(func) - - def clear(self): - self.functions.clear() - self.objects.clear() - - def disconnectObject(self, obj): - """ Remove all connections that are methods of given object obj """ - try: - del self.objects[obj] - except KeyError: - pass - - -class SignalInstanceFireOnce(SignalInstance): - """ - Clears all connections after being invoked. - """ - def __call__(self, *args, **kwargs): - SignalInstance.__call__(self, *args, **kwargs) - self.clear() - - -class SignalProxyInstance(object): - """ - A Signal that dispatches method calls to connected objects. - - Call methods on this proxy object and the same method will be called - on all connected objects with the same arguments. - - Attributes other than methods are not supported. - Methods can't be named 'connect' or 'disconnect'. - Return values are discarded. - A SignalProxy keeps weak references to connected objects. - """ - def __init__(self): - self._objects = weakref.WeakKeyDictionary() - - def connect(self, obj): - self._objects[obj] = True - - def disconnect(self, obj): - try: - del self._objects[obj] - except KeyError: - pass - - def __getattr__(self, attr): - def func(*args, **kwargs): - for obj in self._objects: - getattr(obj, attr)(*args, **kwargs) - func.func_name = attr - setattr(self, attr, func) - return func - - -class SignalBase(object): - """Abstract base class for class level Signal and SignalProxy classes.""" - def __init__(self, doc=None): - self.__doc__ = doc - self.instances = weakref.WeakKeyDictionary() - - def __get__(self, instance, owner): - if instance is None: - return self - try: - return self.instances[instance] - except KeyError: - ret = self.instances[instance] = self.signalType() - return ret - - -class Signal(SignalBase): - """A class level Signal/Slot mechanism. - - Use an instance of Signal() as a class attribute, and it will automatically - work on instances as soon as the attribute is accessed via the instance. - - If you create the Signal with fireOnce=True, all connections to the - signal of the object instance will be cleared after being invoked. - - See SignalInstance and SignalInstanceFireOnce. - """ - def __init__(self, doc=None, fireOnce=False): - super(Signal, self).__init__(doc) - self.signalType = SignalInstanceFireOnce if fireOnce else SignalInstance - - -class SignalProxy(SignalBase): - """A class level Signal proxy. - - Add as a class attribute to a class and access it via an instance. - A SignalProxyInstance instance will then be returned. - - See SignalProxyInstance. - """ - signalType = SignalProxyInstance - - diff -Nru frescobaldi-1.2.0/README frescobaldi-2.0.0/README --- frescobaldi-1.2.0/README 2010-12-26 06:28:53.000000000 +0000 +++ frescobaldi-2.0.0/README 2011-12-26 07:09:49.000000000 +0000 @@ -1,43 +1,55 @@ -README for Frescobaldi -====================== +README for Frescobaldi 2 +======================== -Homepage: http://www.frescobaldi.org/ +Homepage: http://www.frescobaldi.org/ Main author: Wilbert Berendsen -Frescobaldi is a LilyPond music score editor for KDE4, with following -features: +Frescobaldi is a LilyPond sheet music text editor. It aims to be powerful, yet +lightweight and easy to use. Frescobaldi is Free Software, freely available +under the General Public License. + +Features: + +- Powerful text editor with syntax highlighting and automatic completion +- Music view with advanced Point & Click +- Midi player to proof-listen LilyPond-generated MIDI files +- Powerful Score Wizard to quickly setup a music score +- Snippet Manager to store and apply text snippets, templates or scripts +- Use multiple versions of LilyPond, automatically selects the correct version +- Built-in LilyPond documentation browser and built-in help +- Modern user iterface with configurable colors, fonts and keyboard shortcuts +- Translated into the following languages: Dutch, English, French, German, + Italian, Czech, Russian, Spanish, Galician, Turkish and Polish + +Music functions: + +- Transpose music +- Change music from relative to absolute and vice versa +- Change the language used for note names +- Change the rhythm (double, halve, add/remove dots, copy, paste) etc +- Hyphenate lyrics using word-processor hyphenation dictionaries +- Add spanners, dynamics, articulation easily using the Quick Insert panel +- Update LilyPond syntax using convert-ly, with display of differences + +Frescobaldi is designed to run on all major operating systems (Linux, Mac OS X +and MS Windows). It is named after Girolamo Frescobaldi (1583-1643), an Italian +composer of keyboard music in the late Renaissance and early Baroque period. + +Here is an idea of the basic Frescobaldi workflow: + +- Start Frescobaldi +- Open a .ly file or create one using File->New from template or Tools->Setup + new Score... and fill in some music +- Press Ctrl+M to run LilyPond +- If the LilyPond output shows errors, press Ctrl+E to jump to the first error +- If you see other mistakes in the music, click the notes to move the text + cursor there +- Fix the errors or mistakes in the text +- Press Ctrl+M again to update the music view +- When a piece is finished, press Ctrl+Shift+P once to run LilyPond with point + and click turned off (this results in a much smaller PDF file). + +Frescobaldi is written in Python and uses PyQt4 for its user interface. +See the INSTALL file for other requirements and installation instructions. -* Enter LilyPond scores, build and preview them with a mouseclick -* A powerful Score Wizard to quickly setup a musical score -* Advanced point-and-click support: clicking on notes or other objects will put - the text cursor at the correct position, even if you change the document - without re-running LilyPond -* Built-in MIDI player (uses the embeddable KMid part) -* Editing tools: - - advanced syntax coloring that also signals some often made errors - - auto-indent nested structures, those can be folded for quick overview - - context sensitive autocompletion, to quickly enter commands and parameters - - manipulate pitch (transpose, translate, relative/absolute conversion) - - manipulate rhythm (scale, copy/paste durations over other music, etc.) - - hyphenate lyrics - - quickly enter or add articulations and other symbols to existing music - - run the document through convert-ly to update it to a newer LilyPond version - - expansion dialog to enter larger snippets of LilyPond input using short - mnemonics -* A powerful Rumor panel, using the Rumor program to enter music by playing it - on a MIDI keyboard or even your computer keyboard -* Quick buttons to open, send, play or print LilyPond-generated files -* Sessions to easily work on groups of related files -* Convenient tool to install and use multiple LilyPond versions -* Built-in LilyPond documentation browser with editor context menu support - (right-click a command in the editor to lookup its documentation) -* Comprehensive User Guide with help buttons on all dialogs -* Other tools like built-in terminal, blank staff paper generator, etc. -* Translated into Dutch, English, French, German, Italian, Czech, Russian, - Spanish, Galician, Turkish and Polish. - -Frescobaldi is Free Software, freely available under the GNU General Public -License (GPL). You are welcome to help find bugs and add features or -translations. Frescobaldi is developed at http://lilykde.googlecode.com/. -See INSTALL for installation instructions. diff -Nru frescobaldi-1.2.0/README-development frescobaldi-2.0.0/README-development --- frescobaldi-1.2.0/README-development 2010-12-26 06:28:53.000000000 +0000 +++ frescobaldi-2.0.0/README-development 2011-12-26 07:09:49.000000000 +0000 @@ -1,86 +1,97 @@ -Development of Frescobaldi -========================== +README for developers +===================== -If you want to contribute to Frescobaldi, you can find here some information -about how the Frescobaldi code is organized. +The Frescobaldi LilyPond sheet music editor is written in Python and uses +Qt4 for its user interface, via the PyQt4 bindings. -frescobaldi.py +All code and application data is in the frescobaldi_app/ directory. The +frescobaldi script just imports frescobaldi_app.main. You can simply run +./frescobaldi from the commandline after unpacking Frescobaldi. + +You can also install the 'frescobaldi_app' package in the system- or user-wide +python directories and the frescobaldi script in your PATH. The distutils-based +installation procedure can do this. + +'frescobaldi_app' is not a real package: on startup, the absolute +'frescobaldi_app' directory is added to sys.path and its own __path__ is cleared +so all modules and packages inside frescobaldi_app are available as toplevel +modules and packages. + + +Running Frescobaldi in an interactive shell +=========================================== + +To test features or to experiment, you can run Frescobaldi in an interactive +Python shell. It is recommended to open a shell (e.g. by simply running python +without arguments, or by using Dreampie or IPython) and then enter: + +import frescobaldi_app.main + +This ensures the application starts up and uses the correct SIP api (2) for +QString and QVariant. + +Currently Python 2.6 and 2.7 are supported, but the code should be designed such +that Frescobaldi works as well with Python 3. + + +How Frescobaldi is organized +============================ + +There can be one or more mainwindow.MainWindow instances and one or more +document.Document instances (when the last Document is closed, another one is +always constructed). The app module keeps references to those and contains the +Signals emitted when something changes. + +Many parts inside Frescobaldi need to store or cache additional information or +add features to Documents, MainWindows etc. Instead of clobbering those basic +classes with an ever-growing number of unrelated groups of methods, a different +approach is chosen: the plugin module. + +This keeps all classes small and only have methods that direcly apply to +themselves and not to other parts of Frescobaldi. + +So e.g. the resultfiles, highlighter or documentinfo modules contain classes +for objects that coexist with a Document, and providing their own relevant +methods, while keeping a weak reference to the Document. + +Exchange of messages is done as much as possible using signals (PyQt4 signals +or from the signals module), so adding new features changes as less existing +code as possible. + + +Some important modules: + +main: Entry point +info: Information about the application, such as the version +toplevel: Adds the path of frescobaldi_app to sys.path, clears __path__ + so all modules inside frescobaldi_app can be imported as + toplevel modules and packages +app: Central hub with global signals, also keeping references to + mainwindow and document instances +mainwindow: MainWindow (QMainWindow) +document: Document (QTextDocument) +view: View (QPlainTextEdit) +menu: Here the menubar is constructed (by importing all the relevant + modules and adding the actions they define) +plugin: A simple way to extend objects without them knowing it +ly: LilyPond and the LY file format, tokenizer for LY and related +metainfo: Stores (optionally) meta information about the document, such + as last cursor position, whether to enable auto indent, etc +panels: Both the base class for dock widgets and the manager of them +symbols: Provides icons of LilyPond-generated SVG files that draw + themselves in the default text color. + + +Some completely generic modules (don't have anything to do with Frescobaldi or +LilyPond): + +qpopplerview: PDF viewer widget using the popplerqt4 binding to Poppler-Qt4 +signals: An alternative to Qt signals that allows for connections to have + priorities, and objects don't have to be Qt objects +slexer: A Stateful Lexer, used to build regular expression-based parsers +hyphenator: Hyphenate text using hyphenation dictionaries +cursortools: Some useful functions manipulating QTextCursor instances +portmidi: Access the PortMidi library in different ways +midifile: Load and play MIDI files - the entry point. This small script is installed as BIN/frescobaldi and imports - the rest of the python modules as soon as they are needed. - -data/ - - data files such as ui and desktop files - -css/ - - style files to style Frescobaldi or the LilyPond documentation browser, - installed in SHARE/apps/frescobaldi/css - -icons/ - - this directory is verbatim installed into SHARE/apps/frescobaldi/icons - -pics/ - - PNG icons that are generated from lilypond source files - -po/ - - translations. Read README-translations for info about how to add a new - translations to Frescobaldi. - -doc/ - - the docbook sources for the Frescobaldi User Guide - -rumor/ - - some support files for the Rumor plugin. (Rumor is an external program that - translates MIDI input to LilyPond output, and it can be used by Frescobaldi.) - -python/ - - python modules and packages that are installed to SHARE/apps/frescobaldi/lib. - -makedist.sh - - a small shell script that exports the source tree from a SVN working copy - and creates a release tarball with LilyPond-generated icons and MO files - prebuilt. The version is read from the toplevel CMakeLists.txt file. - - -Python directory structure -========================== - -The python/ directory contains all python modules that comprise Frescobaldi. -There are three main packages: - -ly/ - - a collection of modules that interact with LilyPond and the .LY file format. - No KDE-related modules. - -kateshell/ - - an editor shell around KatePart. No LilyPond-related code. - -frescobaldi_app/ - - all Frescobaldi-specific modules. The mainapp.py file contains the application - core functionality, and subclasses most of the generic classes in kateshell/. - - -Python Coding guidelines -======================== - -Use ASCII or UTF-8 encoding for the Python source files and 4 spaces for indent. - -Be lazy: try to load as few Python modules as possible from startup to display -of the mainwindow. - -Remain compatible with Python 2.6 - -Port to Python3 will start as soon as PyKDE4 is ported to Python3. diff -Nru frescobaldi-1.2.0/README-translations frescobaldi-2.0.0/README-translations --- frescobaldi-1.2.0/README-translations 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/README-translations 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,76 @@ +README for developers and translators +===================================== + +Frescobaldi is translated using GNU Gettext. The 'update-pot.py' script creates +a POT file from all the Python source files. The POT file is written in the top +directory of the Frescobaldi package as 'frescobaldi.pot'. + +The PO files live in frescobaldi_app/po/. + + +For developers: +=============== + +All translatable strings should be wrapped in a _( ... ) construct. +You can use this function with one up to four arguments: + +_("String") + + Simply returns a translation for the given string. + +_("Context", "String") + + Returns a translation for the string in the given context. + +_("Singular text", "Plural text", count) + + Returns a suitable translation (singular/plural) depending on the count. + +_("Context", "Singular text", "Plural text", count) + + Returns singular or plural translation within the given context. + + +The context makes it possible to have different translations for the same source +message. + +E.g. _("The music view, noun", "View") can return something like "Weergave", +while _("Command to view the music, verb", "View") should return "Weergeven". + +Additionally, when you write a comment starting with L10N (short for localisation), +just before the line containing the string to be translated, it will be included +as a comment in the POT file. + +If translatable strings need arguments, you should use named variables, e.g: + +_("About {appname}").format(appname = ...) + + +For translators: +================ + +You should create or update a PO file for your language. + +If you want to translate Frescobaldi to your current locale, simply enter: + +$ cd frescobaldi_app/po/ +$ msginit -i ../../frescobaldi.pot + +otherwise specify the desired language with: + +$ msginit -i ../../frescobaldi.pot -l xx_CC + +where 'xx_CC' is e.g. 'nl_NL' (or simply 'nl'). + +Now you can edit the xx.po file with a tool like Lokalize. If done, you can send +the translated po file to the Frescobaldi author if you like, to contribute it +to the Frescobaldi project. + +Variables between brackets in the messages like "Viewing page {number} of {total}" +should not be translated but exactly copied to the translation. + +If you finished editing the PO file, you can simply run 'make' in the po directory. +This will run the 'msgfmt' program to create a MO file that Frescobaldi can read. +Additionally the MO file will be checked for wrong variable names in translated +messages. + diff -Nru frescobaldi-1.2.0/rumor/azerty-kbd.scm frescobaldi-2.0.0/rumor/azerty-kbd.scm --- frescobaldi-1.2.0/rumor/azerty-kbd.scm 2008-12-22 22:26:38.000000000 +0000 +++ frescobaldi-2.0.0/rumor/azerty-kbd.scm 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -; AZERTY keyboard layout -(rumor-kbd #t 0 '(#\space . 0)) -(rumor-kbd #f 60 - '(#\s . 1) '(#\d . 3) - '(#\w . 0) '(#\x . 2) '(#\c . 4) - '(#\g . 6) '(#\h . 8) '(#\j . 10) - '(#\v . 5) '(#\b . 7) '(#\n . 9) '(#\? . 11) - '(#\l . 13) '(#\m . 15) - '(#\. . 12) '(#\/ . 14) '(#\+ . 16) -) -(rumor-kbd #f 72 - '(#\2 . 1) '(#\3 . 3) - '(#\a . 0) '(#\z . 2) '(#\e . 4) - '(#\5 . 6) '(#\6 . 8) '(#\7 . 10) - '(#\r . 5) '(#\t . 7) '(#\y . 9) '(#\u . 11) - '(#\9 . 13) '(#\0 . 15) - '(#\i . 12) '(#\o . 14) '(#\p . 16) -) diff -Nru frescobaldi-1.2.0/rumor/metronome-piano.scm frescobaldi-2.0.0/rumor/metronome-piano.scm --- frescobaldi-1.2.0/rumor/metronome-piano.scm 2008-12-22 22:26:38.000000000 +0000 +++ frescobaldi-2.0.0/rumor/metronome-piano.scm 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -; Use a metronome with piano sound -(rumor-beats - 1 - '(1 96 127 0 05) ; 1st beat - '(1 84 95 0.05) ; all other beats -) diff -Nru frescobaldi-1.2.0/rumor/rhythm68.scm frescobaldi-2.0.0/rumor/rhythm68.scm --- frescobaldi-1.2.0/rumor/rhythm68.scm 2008-12-22 22:26:38.000000000 +0000 +++ frescobaldi-2.0.0/rumor/rhythm68.scm 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -; The 6/8 example from the Rumor documentation -(rumor-rhythms 32 6 8 - '( #(8) 18 6) - '( #((4 . 1)) 0 12) - '( #(8 8) 8) - '( #(2) 0 8) -) diff -Nru frescobaldi-1.2.0/run frescobaldi-2.0.0/run --- frescobaldi-1.2.0/run 2010-08-30 12:42:34.000000000 +0000 +++ frescobaldi-2.0.0/run 1970-01-01 00:00:00.000000000 +0000 @@ -1,439 +0,0 @@ -#!/usr/bin/env python - -""" -Try to run Frescobaldi immediately without installing. -Does not require CMake and make for release tar balls. -Checks the python version and modules. -If not Python 2.6 try to rerun ourselves with python 2.6. -Creates a local installdir (inside the frescobaldi-x.x.x directory). -Creates a menu in the local xdgdata-apps dir. -Records the current Okular textedit binding. -Adjusts some settings and directly runs Frescobaldi. -After having run this, users can run './frescobaldi' directly. -Calling python run or ./run again will display a dialog with options -to remove the Applications menu entry and restore the Okular binding. -""" - -import glob, itertools, os, re, subprocess, sys - -def findAllExe(command): - """Returns an iterable over all occurences of the command in the PATH.""" - for p in os.environ.get("PATH", os.defpath).split(os.pathsep): - path = os.path.join(p, command) - if os.access(path, os.X_OK): - yield path - -def findExe(command): - """Returns the first found command in the PATH or None if not found.""" - for path in findAllExe(command): - return path - -def die(msg): - """Show a message and exit with exitcode 1.""" - try: - KMessageBox.error(None, msg) - except Exception: - if os.environ.get('DISPLAY') and findExe('kdialog'): - subprocess.call(['kdialog', '--error', msg]) - else: - sys.stderr.write(msg+'\n') - sys.exit(1) - -def configure_file(infile, outfile, dictionary): - """Replace variables in infile and write the result to outfile. - - Variables consist of uppercase letters and may contain underscores. - They start and end with the ampersand character. E.g. @MODULE_DIR@. - This is analogous to the CMake configure_file function. - - Raises KeyError if a variable does not exist in the dictionary. - - """ - with open(outfile, 'w') as f: - f.write(re.sub(r'@([A-Z]+(_[A-Z]+)*)@', - lambda m: dictionary[m.group(1)], open(infile).read())) - -def makedirs(path, mode=0o777): - """Like os.makedirs(), but doesn't error out if the full path exists.""" - if not os.path.exists(path): - os.makedirs(path) - -# html -p = lambda s: '

%s

\n' % s -li = lambda s: '
  • %s
  • \n' % s -ul = lambda *args: '
      \n%s
    \n' % ''.join(args) - -# this should return true if the Python version (supplied in tuple) can be used. -usableVersion = lambda version: (2, 6) <= version < (3, 0) - -# Check version of current running Python -if not usableVersion(sys.version_info[:2]): - # find another one that can be used - for path in itertools.chain( - findAllExe('python'), - findAllExe('python2.6'), - findAllExe('python2.7'), - findAllExe('python2'), - findAllExe('python26'), - findAllExe('python27'), - ): - # Get the output of 'python --version' - ver = subprocess.Popen( - [path, "--version"], stderr=subprocess.PIPE).communicate()[1] - # Convert to a tuple of ints like (2, 6, 5) - ver = tuple(map(int, re.findall(r'\d+', ver))) - if usableVersion(ver): - os.execl(path, path, sys.argv[0]) - die("Could not find Python 2 version 2.6 or above.\n\n" - "Please install the 2.6 or 2.7 version of Python.") - -# find out our directory -curdir = os.path.dirname(os.path.abspath(sys.argv[0])) -os.chdir(curdir) -sys.path.insert(0, curdir) - -try: - import sip - sip.setapi("QString", 2) - sip.setapi("QVariant", 2) -except Exception: - die("Please install the Python-SIP module.\nCan't set the sip API.") - -# check modules -import checkmodules -missing = checkmodules.checkModules() -if missing: - die("The following Python modules are missing: %s.\n\n" - "Please install them and try again." % ", ".join(missing)) - -# check versions -versions = checkmodules.checkVersions() -if versions: - die("Some packages have outdated versions:\n\n" + "\n".join(versions)) - -# Everything look OK! - -# brutally use some modules from Frescobaldi -sys.path[0] = os.path.join(curdir, 'python') - -# Construct KApplication - -import shutil - -from PyKDE4.kdecore import ( - KAboutData, KCmdLineArgs, KConfig, KGlobal, ki18n, KPluginLoader) -from PyKDE4.kdeui import ( - KApplication, KDialog, KGuiItem, KMessageBox, KStandardGuiItem) -from PyKDE4.kio import KUrlRequesterDialog - -aboutData = KAboutData( - 'frescobaldi_runner', # appName - 'frescobaldi_runner', # catalogName - ki18n('Frescobaldi Runner'),# programName - '1.0' # version - ) - -KCmdLineArgs.init(sys.argv, aboutData) -app = KApplication() - -# set some directories/values -data = {} - -m = re.search(r'set\(VERSION\s+"(.*?)"', open('CMakeLists.txt').read()) -if not m: - die("Internal error: could not determine version from CMakeLists.txt") - -data['VERSION'] = m.group(1) -data['MODULE_DIR'] = os.path.join(curdir, "python") -data['PYTHON_EXECUTABLE'] = sys.executable -data['CMAKE_INSTALL_PREFIX'] = os.path.join(curdir, 'image') -data['APP_DIR'] = os.path.join( - data['CMAKE_INSTALL_PREFIX'], 'share', 'apps', 'frescobaldi') - - -icon_install_dir = KGlobal.dirs().saveLocation('icon', 'hicolor/scalable/apps/') -html_install_dir = KGlobal.dirs().saveLocation('html', 'en/') -xdgdata_apps_install_dir = KGlobal.dirs().saveLocation('xdgdata-apps') -locale_install_dir = os.path.join( - data['CMAKE_INSTALL_PREFIX'], 'share', 'locale') - -# some shortcuts -app_dir = data['APP_DIR'] -desktop_file = os.path.join(xdgdata_apps_install_dir, 'frescobaldi.desktop') - - -class TarBall: - """Used when running from a Frescobaldi release tar ball. - - Does not need CMake and make. - - """ - - builddir = 'prebuilt' - - def makeImage(self): - # puts some files under image/share/ ... - makedirs(app_dir) - - # default config file - config_dir = os.path.join(data['CMAKE_INSTALL_PREFIX'], 'share', 'config') - makedirs(config_dir) - shutil.copy(os.path.join(curdir, 'data', 'frescobaldirc'), config_dir) - - # data files - for name in ( - 'frescobaldiui.rc', - 'expansions', - 'frescobaldi.notifyrc', - ): - dest = os.path.join(app_dir, name) - if os.path.exists(dest): - os.remove(dest) - os.symlink(os.path.join(curdir, 'data', name), dest) - - # data directories - for name in ('rumor', 'icons', 'css'): - dest = os.path.join(app_dir, name) - if os.path.exists(dest): - os.remove(dest) - os.symlink(os.path.join(curdir, name), dest) - - # pics - dest = os.path.join(app_dir, 'pics') - if os.path.exists(dest): - os.remove(dest) - os.symlink(os.path.join(curdir, self.builddir, 'pics'), dest) - - # install mo files - for mo in glob.glob(os.path.join(self.builddir, 'po', '*.mo')): - lang = os.path.splitext(os.path.basename(mo))[0] - langdir = os.path.join(locale_install_dir, lang, 'LC_MESSAGES') - makedirs(langdir) - shutil.copy(mo, os.path.join(langdir, 'frescobaldi.mo')) - - def installBinary(self): - # create the frescobaldi 'binary' - configure_file('frescobaldi.py', 'frescobaldi', data) - os.chmod('frescobaldi', 0o744) - - def installFrescobaldi(self): - # create the frescobaldi 'binary' - self.installBinary() - - # put appIcon in icondir - shutil.copy( - os.path.join('data', 'frescobaldi-lily.svg'), - os.path.join(icon_install_dir, 'frescobaldi.svg')) - - # install desktop file - desktop = open(os.path.join('data', 'frescobaldi.desktop')).read() - newdesktop = re.sub(r'\bExec=frescobaldi\b', - 'Exec=%s/frescobaldi' % curdir, desktop) - with open(desktop_file, 'w') as f: - f.write(newdesktop) - - # install link to documentation - os.symlink(os.path.join(curdir, 'doc'), - os.path.join(html_install_dir, 'frescobaldi')) - - -class SVN(TarBall): - """Used when running from a Frescobaldi SVN checkout. - - Needs CMake and make, lilypond and msgfmt. - - """ - - builddir = 'build' - - def makeImage(self): - # run CMake - # check some programs. - missing = [] - if not findExe('cmake'): - missing.append( - "CMake is needed to run Frescobaldi from a SVN checkout.\n" - "Please install CMake.") - if not findExe('make'): - missing.append( - "Make is needed to run Frescobaldi from a SVN checkout.\n" - "Please install a 'make' program.") - if not findExe('convert'): - missing.append( - "'convert' (from ImageMagick) is needed to run Frescobaldi " - "from a SVN checkout.\nPlease install ImageMagick.") - if not findExe('msgfmt'): - missing.append( - "'msgfmt' (from Gettext) is needed to run Frescobaldi " - "from a SVN checkout.\nPlease install Gettext.") - if missing: - die('\n\n'.join(missing)) - - import ly.version - for lily in findAllExe('lilypond'): - if ly.version.LilyPondInstance(lily).version() >= (2, 13, 21): - break - else: - config = KGlobal.config().group(None) - lily = config.readEntry("lilypond", "lilypond") - dlg = KUrlRequesterDialog(lily, - "LilyPond >= 2.13.21 is needed to run Frescobaldi from a SVN " - "checkout.\n\nPlease install a recent LilyPond (e.g. from a " - "binary download) and select the binary here.", None) - if dlg.exec_(): - lily = dlg.selectedUrl().path() - config.writeEntry("lilypond", lily) - config.sync() - else: - sys.exit(1) - - makedirs(self.builddir) - if subprocess.call([ - 'cmake', '..', - '-DCMAKE_INSTALL_PREFIX=' + data['CMAKE_INSTALL_PREFIX'], - '-DPYTHON_EXECUTABLE=' + sys.executable, - '-DLILYPOND_EXECUTABLE=' + lily, - '-DBYTECOMPILE=NO', - ], cwd=self.builddir): - die("CMake exited with an error.") - if subprocess.call(['make'], cwd=self.builddir): - die("Make exited with an error.") - if subprocess.call(['make', 'install'], cwd=self.builddir): - die("'make install' exited with an error.") - - def installBinary(self): - shutil.copy2(os.path.join(self.builddir, 'frescobaldi'), 'frescobaldi') - os.chmod('frescobaldi', 0o744) - - -def removeFrescobaldi(): - # remove the frescobaldi 'binary' - os.remove('frescobaldi') - - # remove appIcon - os.remove(os.path.join(icon_install_dir, 'frescobaldi.svg')) - - # remove desktop file - os.remove(desktop_file) - - # remove link to documentation - os.remove(os.path.join(html_install_dir, 'frescobaldi')) - -def runFrescobaldi(): - subprocess.Popen([os.path.join(curdir, 'frescobaldi')], - cwd=os.environ.get('HOME')) - -def saveOkularPart(): - """Save the current OkularPart editor settings.""" - okularpartrc = KConfig("okularpartrc", KConfig.NoGlobals) - group = okularpartrc.group("General") - - ourconfig = KGlobal.config() - ourgroup = ourconfig.group('okular editor') - - ourgroup.writeEntry("ExternalEditor", - group.readEntry("ExternalEditor", "")) - ourgroup.writeEntry("ExternalEditorCommand", - group.readEntry("ExternalEditorCommand", "")) - ourconfig.sync() - -def configureOkularPart(): - """Lets Frescobaldi configure itself as custom editor in Okular.""" - config = KConfig("frescobaldirc", KConfig.NoGlobals) - group = config.group("") - group.writeEntry("configure okularpart", True) - group.sync() - -def restoreOkularPart(): - """Restore the saved OkularPart editor settings.""" - okularpartrc = KConfig("okularpartrc", KConfig.NoGlobals) - group = okularpartrc.group("General") - - ourconfig = KGlobal.config() - ourgroup = ourconfig.group('okular editor') - - group.writeEntry("ExternalEditor", - ourgroup.readEntry("ExternalEditor", "")) - group.writeEntry("ExternalEditorCommand", - ourgroup.readEntry("ExternalEditorCommand", "")) - group.sync() - -def main(): - # if the desktop file and the 'binary' do exist, - # assume Frescobaldi is installed and can be run. - if os.path.exists(desktop_file) and os.path.exists('frescobaldi'): - # Frescobaldi can be run. Offer options to remove or run Frescobaldi - result = KMessageBox.questionYesNoCancel(None, '' + - p("Frescobaldi is available in your Applications menu.") + - p("Here you can choose if you want to remove Frescobaldi from " - "the menu or to run Frescobaldi.") + - p("It is recommended that you remove Frescobaldi from the menu " - "when you really install Frescobaldi, as that will install a " - "system-wide Applications menu entry."), - None, - KGuiItem("Run Frescobaldi", 'system-run'), - KGuiItem("Remove Frescobaldi from menu", 'edit-delete'), - KStandardGuiItem.cancel()) - if result == KMessageBox.Yes: - configureOkularPart() - runFrescobaldi() - elif result == KMessageBox.No: - removeFrescobaldi() - restoreOkularPart() - configureOkularPart() - - else: - # Frescobaldi seems not to be installed. - if os.path.exists('prebuilt'): - installer = TarBall() - else: - installer = SVN() - installer.makeImage() - installer.installFrescobaldi() - saveOkularPart() - configureOkularPart() - msg = [ - p("Frescobaldi has been added to your Applications menu."), - p("If you want to remove Frescobaldi from the menu, just run this " - "'run' script again."), - p("(It is recommended that you remove Frescobaldi from the menu " - "when you really install Frescobaldi, as that will install a " - "system-wide menu Applications menu entry.)"), - p("Frescobaldi will now be started. Enjoy!")] - notes = [] - if not findExe('lilypond'): - notes.append( - "LilyPond could not be found in your PATH. You really should " - "install LilyPond to be able to do anything useful with " - "Frescobaldi! Visit " - "www.lilypond.org " - "for more information.") - if not KPluginLoader('okularpart').factory(): - notes.append( - "The Okular PDF viewer KPart module could not be found on your " - "system. This module provides the PDF preview, so " - "if the preview doesn't work, you should install Okular.") - if not KPluginLoader('kmid_part').factory(): - notes.append( - "The KMid MIDI player KPart module could not be found on your " - "system. This module is used by the built-in MIDI player. " - "If the player doesn't work, you should install KMid >= 2.4.0.") - if not KPluginLoader('libkonsolepart').factory(): - notes.append( - "The Konsole KPart module could not be found on your system. " - "This module provides the built-in terminal. If you want to " - "use the built-in terminal, you should install Konsole.") - if not findExe('rumor'): - notes.append( - "For music input via MIDI, the 'rumor' program is recommended. " - "See the Frescobaldi User Guide (accessible from Frescobaldi " - "with the F1 key) for more information.") - if notes: - msg[1:1] = p("Note:"), ul(*map(li, notes)) - KMessageBox.information(None, '' + ''.join(msg), None, None, - KMessageBox.Options(KMessageBox.Notify | KMessageBox.AllowLink)) - runFrescobaldi() - return 0 - -if __name__ == "__main__": - sys.exit(main()) diff -Nru frescobaldi-1.2.0/setup.cfg frescobaldi-2.0.0/setup.cfg --- frescobaldi-1.2.0/setup.cfg 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/setup.cfg 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,6 @@ +[bdist_wininst] +bitmap=frescobaldi-wininst.bmp +install-script=frescobaldi-wininst.py + +[sdist] +force-manifest=1 diff -Nru frescobaldi-1.2.0/setup.py frescobaldi-2.0.0/setup.py --- frescobaldi-1.2.0/setup.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/setup.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,80 @@ +import os +import sys +from distutils.core import setup +from frescobaldi_app import info + +def packagelist(directory): + """Returns a sorted list with package names for all packages under the given directory.""" + return list(sorted(root.replace(os.sep, '.') + for root, dirs, files in os.walk(directory) + if '__init__.py' in files)) + +scripts = ['frescobaldi'] +packages = packagelist('frescobaldi_app') +package_data = { + 'frescobaldi_app.css': ['*.png'], + 'frescobaldi_app.help': ['*.png'], + 'frescobaldi_app.hyphdicts': ['*.dic'], + 'frescobaldi_app.icons': [ + '*.ico', + '*.svg', '*x*/.png', + 'tango/*.svg', 'tango/*x*/*.png', + ], + 'frescobaldi_app.po': ['*.mo'], + 'frescobaldi_app.scorewiz': ['*.png'], + 'frescobaldi_app.symbols': ['*.svg'], +} + +if sys.platform.startswith('win'): + scripts.append('frescobaldi-wininst.py') + data_files = [] +else: + data_files = [ + ('share/icons/hicolor/scalable/apps', ['frescobaldi_app/icons/frescobaldi.svg']), + ('share/applications', ['frescobaldi.desktop']), + ] + +classifiers = [ + 'Development Status :: 5 - Production/Stable', + 'Environment :: MacOS X', + 'Environment :: Win32 (MS Windows)', + 'Environment :: X11 Applications :: Qt', + 'Intended Audience :: End Users/Desktop', + 'License :: OSI Approved :: GNU General Public License (GPL)', + 'Natural Language :: Czech', + 'Natural Language :: Dutch', + 'Natural Language :: English', + 'Natural Language :: French', + 'Natural Language :: Galician', + 'Natural Language :: German', + 'Natural Language :: Italian', + 'Natural Language :: Polish', + 'Natural Language :: Russian', + 'Natural Language :: Spanish', + 'Natural Language :: Turkish', + 'Operating System :: MacOS :: MacOS X', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: POSIX', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Topic :: Multimedia :: Sound/Audio', + 'Topic :: Multimedia :: Graphics', +] + +setup( + name = info.name, + version = info.version, + description = info.description, + long_description = info.long_description, + maintainer = info.maintainer, + maintainer_email = info.maintainer_email, + url = info.url, + license = info.license, + + scripts = scripts, + packages = packages, + package_data = package_data, + data_files = data_files, + classifiers = classifiers, +) + diff -Nru frescobaldi-1.2.0/THANKS frescobaldi-2.0.0/THANKS --- frescobaldi-1.2.0/THANKS 2010-01-05 12:41:50.000000000 +0000 +++ frescobaldi-2.0.0/THANKS 2011-12-26 07:09:49.000000000 +0000 @@ -1,10 +1,20 @@ -The following people have contributed to Frescobaldi: +Without the help of other people, Frescobaldi would not have been possible. +Besides the credits listed here, there is also information in about.py and +info.py from the frescobaldi_app/ directory. -Core development: +Thanks go to the Python and Qt4 developers for providing excellent tools to +develop Frescobaldi with. + +And thanks to the LilyPond developers for creating an amazing music engraver! + + +Main author and core developer: * Wilbert Berendsen (www.wilbertberendsen.nl) French translation: +* Raphaël Doursenaud +* Philippe Massart * Valentin Villenave (valentin.villenave.info) * Yann Collette * David Bouriaud @@ -39,5 +49,3 @@ Finding lots of bugs: * Mario Moles - -kate: encoding utf-8; diff -Nru frescobaldi-1.2.0/TODO frescobaldi-2.0.0/TODO --- frescobaldi-1.2.0/TODO 2010-12-25 06:46:05.000000000 +0000 +++ frescobaldi-2.0.0/TODO 2011-12-26 07:09:49.000000000 +0000 @@ -1,180 +1,39 @@ -TODO for Frescobaldi (also some random ideas) -============================================= +TODO for Frescobaldi 2.x +======================== -Music length related (needs infrastructure to compute duration of music -expressions): +- Text editor context menu -- bar check feedback: display a status message or balloonhint showing the length - of the entered music between the entered barcheck (pipe symbol) and the - previous one. Just to have a quick check that the bar length is OK. +- LilyPond context help -- auto-insert bar checks +- Edit->Select Block -- auto-insert comments with the bar number (every 5 measures or so) +- interface for running lilypond-book +- Midi input and import. Probably using a basic sequencer, allowing changes, + corrections and quantizing touchups before putting the LilyPond representation + in the editor. -Pitch related: +- define and extend api for script snippets -- command to re-interpret pitches (change alterations, e.g. based on key - signature), useable to fix wrong accidentals after import of a MIDI file +- tool to separate out things from music and attach them to invisible rests (s) + in a separate expression +- check or even auto-insert bar checks -Filtering music expressions: +- document structure panel -- split out e.g. articulations or dynamics and put them in a separate expression - attached to skips, so they can be overlaid to other voices dynamically. +- editing via Music View: + * relevant context menu on right-clicking object + * drag an object to e.g. create an \override #'extra-offset command -- (re)combine music expressions +Other ideas/wishes +================== -Score Wizard: -- support nested groups in part list (e.g. StaffGroup or GrandStaff) -- separate \score { } for the MIDI output -- idea: support multiple movements (i.e. number of scores) (idea of M. Moles) -- idea: some font settings, e.g. default fonts, title font, etc. -- idea: load/save score setups +- support for Git/Hg/Svn diff/revert/commit +- play from cursor: plays music to MIDI output -General: - -- Support other programs besides LilyPond like mup, abc, pmw, cmn, etc. - - -Editing: - -- Document properties dialog that parses the current paper, layout, score and - (possibly) header sections and makes all kinds of quick adjustments possible, - such as paper size, raggedness, margins, bar and pagenumbering, headers, - distances, staff size, default fonts, etc. - -- Command to fully normalize the source document layout (indent properly, line - breaks at sensible places, add { } to ambiguous markup constructs, etc. - -- Mixed indent (indent with tabs and/or spaces without converting them to each - other) - -- Convert plain input text to markup commands: - - easy entry of lyric text strophes - - (justified) paragraphs, lists or tables - - some wiki-like syntax possible - -- Rich-text editor to enter/edit markup: - - font selection - - bold, ital, underline - - alignment - - urls - - musical symbols from LilyPond font - -- Document structure browser - - -Running LilyPond: - -- separate "server" process that runs LilyPond and communicates with clients - like Frescobaldi. This way a user can exit Frescobaldi while a job is - running, and have job feedback from the systray and can e.g. start LilyPond - jobs from a file manager service menu. The server process exits when there is - nothing to do, and is automatically started when there is something to do. - Communication should be done via D-Bus. - -- Make it easy to download and install LilyPond documentation together with the - binary download option in the settings. - - -PDF Preview: - -- tighter (two-way) coupling with editor part, possibly by using a custom PDF - (or PS or even SVG) widget instead of embedding Okular: - - highlight object text cursor is at - - right-click object and show relevant options in context menu (by looking - at the linked position in the document the type of object can be determined) - - generate \override #'extra-offset command (or other offset types) by - simply dragging an object - - select rectangular section in PDF also selects relevant portion in input - document - - This could be done by extending the Okular Part with link stuff, but I prefer - to make a new widget that can display PDFs using poppler-qt4. TODO: - - get a Python binding for poppler-qt4 that supports all the link stuff - - create a widget that shows pages from a PDF with clickable areas that can - also be highlighted (show a box or recolor the object region). Best bet may - be using a QGraphicsScene (per page or with multiple pages). Every link can - be a QGraphicsItem object that can alter its appearance on mouseover. - - Other advantages: - - no need to mess with Okulars settings - - no dependency on Okular - - point and click can be handled fully inside Frescobaldi - - -Output: - -- quick PNG of current document (e.g. copied to clipboard or some snippet board) - - -Documentation browser: - -- full text search in all manuals - - -MIDI: - -- replace Rumor plugin with native MIDI in- and output support -- couple beat positions in embedded MIDI player with (approx.) cursor position - in editor - - -User interface: - -- list view for opened documents (like Kate) - - -Import/Export: - -- import wizard for MIDI files and other files -- export to OpenDocument Text using the LilyPond EPS backed (generate vector - or raster images for every system and then put them together as paragraphs). - If possible put on clipboard for direct pasting in apps like OpenOffice.org. - - -Stability: - -- don't error out if the ui.rc file is newer and containers for generated menus - can't be found (e.g. after downgrading Frescobaldi) - - - -DONE: -===== - -Editing: -- Cut and assign: check mode of cut-out fragment and reuse (e.g. \lyricmode) -- Context sensitive context menu to do all sorts of things on the current - cursor position or text selection -- Add slurs etc. to selected music fragment - -Pitch related: -- transpose music -- relative -> absolute and vice versa - -Score Wizard: -- more than one voice for Tablature instruments (Guitar, Jazz Guitar) - -New LilyPond features (as soon as 2.14 is out): -- snappizicato articulation -- halfopen articulation - -General: -- Print dialog for printing generated PDFs, instead of just calling 'lpr' -- Session save and restore (combined with named sessions like Kate) - -Running LilyPond: -- A wizard to download LilyPond binaries from lilypond.org and install them into - a local directory to explore different versions of LilyPond without needing - to install them via a distribution's package manager. - -MIDI: -- embedded MIDI player for playback of files (with stop/start) diff -Nru frescobaldi-1.2.0/update-pot.py frescobaldi-2.0.0/update-pot.py --- frescobaldi-1.2.0/update-pot.py 1970-01-01 00:00:00.000000000 +0000 +++ frescobaldi-2.0.0/update-pot.py 2011-12-26 07:09:49.000000000 +0000 @@ -0,0 +1,36 @@ +#! python + +# This small script creates a POT file for the translations by extracting all messages +# from Python source files. + +# Usage: +# python update-pot.py + + +import os +import subprocess +import sys + +from frescobaldi_app import info + +command = [ + 'xgettext', + '--language=python', + '--output={0}.pot'.format(info.name), + '--package-name={0}'.format(info.name), + '--package-version={0}'.format(info.version), + '--msgid-bugs-address={0}'.format(info.maintainer_email), + '--keyword', # empty the default keyword list + '--keyword=_:1c,2,3,4t', # context, message, plural, count + '--keyword=_:1,2,3t', # message, plural, count + '--keyword=_:1c,2,2t', # context, message + '--keyword=_:1,1t', # message + '--add-comments=L10N', +] + +for root, dirs, files in sorted(os.walk('frescobaldi_app')): + for f in sorted(files): + if f.endswith('.py') and f[0] != '.': + command.append(os.path.join(root, f)) + +sys.exit(subprocess.call(command))