Commit 31f8e650 authored by SVN-Git Migration's avatar SVN-Git Migration

Imported Upstream version 2.0.16+ds1

parent 03e2d79d
*.pyc
*~
build/
dist/
......@@ -2,6 +2,116 @@ ChangeLog of Frescobaldi, http://www.frescobaldi.org/
=====================================================
Changes in 2.0.16 -- June 9th, 2014
* Translations:
- updated: nl, fr, it
* New features
- preference to automatically strip trailing whitespace on save (issue #274)
- in Tools -> Rhythm: new command to remove duration scalings that contain
a fraction value (the action was already available for some time, but it
wasn't in the menu)
- new option to copy only the styled HTML contents to the clipboard
wrapped in a pre tag, not a full HTML document
* Improvements:
- jumps in the Document Outline also allow navigating back
- autocompile does only happen when a document has toplevel markup or music
- LilyPond instance can be selected in convert-ly dialog (wish #311)
- Score Wizard: In the midi section the \tempo x=y syntax is now used when
LilyPond version >= 2.16 is used (issue #337)
- Score Wizard: new brass instruments contributed by Ryan Michael McClure
- in the builtin manual, if there is no "Next:" page, add a link to the next
page of the first parent page that has a next page. The link is called
"Next Chapter:" and allows for continuous reading of the manual.
- some missing commands and functions were added to highlighting and
autocompletion
- the Document Fonts snippet doesn't require setting the staffize anymore
- View -> Folding -> Fold all now folds all subregions as well, making
gradual unfolding easier (wish #394)
* Bugfixes:
- fix sticky document setting lost on reload (issue #409)
- fix html export and copy not using the correct color scheme
- fix AttributeError in handle_lyricmode while typing \lyricmode
- fix LilyPond version chooser not defaulting to the default LilyPond version
- fix indenter aligning on comment
- fix AttributeError: QStackedWidget object has no attribute cursorForPosition
on doubleclick in the text, reported by an Apple user
- fix AttributeError: 'ScoreWizard' object has no attribute 'showInsertDialog'
reported by an Apple user
- fix UnicodeDecodeError in lilypondinfo datadir method
Changes in 2.0.15 -- March 11th, 2014
* Translations:
- updated: nl, fr
* New features:
- in context menu: Jump to definition (wish #123)
- in View menu: view file or definition at cursor, combines the old
File->Open File at Cursor action with the new Jump to definition action
- new toolbar buttons to browse back after a jump to definition
* Improvements:
- better highlighting of figuremode
* Bugfixes:
- fix ValueError message when typing << >> or \partcombine
- fix IndexError when typing 'variable ='
Changes in 2.0.14 -- March 7th, 2014
* Translations:
- updated: nl, fr
* New features:
- the status bar now shows the position in the music or the length of the
selected music
- highlighting and auto-completion for commands that are new or have changed
syntax in LilyPond 2.18, such as \hide, \omit, \undo, \override, \tweak,
\accidentalStyle, etc.
- New editor option to wrap lines in the editor view to avoid horizontal
scrolling (wish #45)
- Custom engrave: the anti-alias-factor can be set in the dialog (wish #361)
- on Mac OS X the applications remains active when all main windows are
closed. This is expected behaviour on Mac OS X.
- New builtin snippet, linked to Ctrl+D by default, to double the current
line or selection (issue #340)
- A new preference for new documents: whether a new document is created empty,
with the preferred LilyPond version in it, or using a template from the
snippets list
- New menu command: LilyPond->Show available fonts (wish #341)
- Music View: rendering in small sizes has been improved
* Improvements:
- In the score wizard it is possible to enter a custom string tuning for the
plucked string instruments, and the Ukulele is added (issue #342)
- In the score wizard you can enable Smart neutral stem direction, which adds
the Melody_engraver to the Voice context, resulting in a logical direction
for notes on the middle staff line (issue #371)
- Print source, Copy colored HTML and Export source as colored HTML: add line
numbers if enabled in the preferences.
- In the Editor preferences, it is adjustable whether HTML export or copy use
a stylesheet or inline style attributes.
- It is now possible to copy syntax-highlighted HTML as plain text to the
clipboard, by enabling the preference setting.
- MIDI input: add key signature alterations mapping, by Olivier Samyn
- New barline types in the Quick Insert panel, the barlines are written
in the correct style, depending on the LilyPond version set in the document
(issue #365).
- In the output-suffix (the scheme output-suffix variable or
\bookOutputSuffix), non-alphanumeric characters (except '-' and '_') are
replaced with '_', just like LilyPond itself does it (issue #373).
* Bug fixes:
- Fixed issue 336: TypeError on MusicXml export
- Fixed error message when exporting keyboard shortcuts on platforms that do
not have the HOME environment variable set
- Fixed IndexError when transposed notes would get unexisting alterations,
e.g. when a cis is transposed from c to cisis. The note is then altered,
just like LilyPond handles this.
* Temporarily removed feature:
- MusicXML export has been temporarily removed from the File->Export menu.
It is still visible in the git checkout. It is also available in the ly
command (in the python-ly package, and also in Frescobaldi's git checkout)
but it needs more testing and robustness before it is usable in Frescobaldi.
Changes in 2.0.13 -- December 31st, 2013
* Translations:
......
......@@ -54,7 +54,7 @@ Required:
Poppler:
http://poppler.freedesktop.org/
python-poppler-qt4:
http://python-poppler-qt4.googlecode.com/
https://github.com/wbsoft/python-poppler-qt4
Optional:
PortMidi:
......@@ -71,6 +71,19 @@ of Python, PyQt4, popplerqt4 and pypm (from pygame) when used on MS Windows.
To use the script you need cx_Freeze and Inno Setup.
Mac OS X application bundle:
============================
The macosx/mac-app.py script can build an application bundle on Mac OS X.
To see the usage notes, run:
python macosx/mac-app.py -h
The application bundle will be created inside a 'dist' folder in the current
working directory. The application bundle is NOT self-contained.
To use the script you need argparse (included in Python >= 2.7) and py2app.
For Linux distribution packagers:
=================================
......@@ -90,3 +103,13 @@ Frescobaldi depend on a package that installs hyphenation dictionaries in
/usr/share/hyphen/ (or another dictionary listed by default in frescobaldi_app/
hyphendialog.py).
The ly module:
==============
Frescobaldi provides a Python module (ly) that can be installed separately,
without requiring the rest of Frescobaldi. This can be done using the setup.py
script in the python-ly directory. This folder also contains the command line
tool "ly" that makes the functionality of the ly module accessible via the
command line.
......@@ -11,5 +11,5 @@ recursive-include frescobaldi_app *.pot *.po *.mo
recursive-include frescobaldi_app *.dic
recursive-include frescobaldi_app *.js
recursive-include frescobaldi_app *.md
recursive-include macosx *.svg *.icns
recursive-include macosx *.svg *.icns *.py *.strings
global-exclude *~
......@@ -13,12 +13,14 @@ Features:
- Powerful text editor with syntax highlighting and automatic completion
- Music view with advanced two-way Point & Click
- Midi player to proof-listen LilyPond-generated MIDI files
- Midi capturing to enter music
- 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
- Configurable document outline view to navigate large LilyPond scores easily
- Smart layout-control functions like coloring specific objects in the PDF
- MusicXML import
- Modern user iterface with configurable colors, fonts and keyboard shortcuts
- Translated into: Dutch, English, French, German, Italian, Czech, Russian,
Spanish, Galician, Turkish, Polish, Brazillian and Ukrainian.
......
frescobaldi-wininst.bmp

116 KB | W: | H:

frescobaldi-wininst.bmp

116 KB | W: | H:

frescobaldi-wininst.bmp
frescobaldi-wininst.bmp
frescobaldi-wininst.bmp
frescobaldi-wininst.bmp
  • 2-up
  • Swipe
  • Onion skin
......@@ -21,3 +21,4 @@ Type=Application
Terminal=false
InitialPreference=8
Categories=Qt;AudioVideo;Music;Utility;TextEditor;
Keywords=lilypond;editor;sheet music;
frescobaldi.png

117 KB | W: | H:

frescobaldi.png

77.6 KB | W: | H:

frescobaldi.png
frescobaldi.png
frescobaldi.png
frescobaldi.png
  • 2-up
  • Swipe
  • Onion skin
# This file is part of the Frescobaldi project, http://www.frescobaldi.org/
#
# Copyright (c) 2008 - 2012 by Wilbert Berendsen
# Copyright (c) 2008 - 2014 by Wilbert Berendsen
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
......
# -*- coding: utf-8 -*-
# This file is part of the Frescobaldi project, http://www.frescobaldi.org/
#
# Copyright (c) 2008 - 2012 by Wilbert Berendsen
# Copyright (c) 2008 - 2014 by Wilbert Berendsen
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
......@@ -121,7 +121,7 @@ def html():
version = _("Version {version}").format(version = info.version)
description = _("A LilyPond Music Editor")
copyright = _("Copyright (c) {year} by {author}").format(
year = "2008-2012",
year = "2008-2014",
author = """<a href="mailto:{0}" title="{1}">{2}</a>""".format(
info.maintainer_email,
_("Send an e-mail message to the maintainers."),
......
# This file is part of the Frescobaldi project, http://www.frescobaldi.org/
#
# Copyright (c) 2008 - 2012 by Wilbert Berendsen
# Copyright (c) 2008 - 2014 by Wilbert Berendsen
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
......
# This file is part of the Frescobaldi project, http://www.frescobaldi.org/
#
# Copyright (c) 2008 - 2012 by Wilbert Berendsen
# Copyright (c) 2008 - 2014 by Wilbert Berendsen
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
......
# This file is part of the Frescobaldi project, http://www.frescobaldi.org/
#
# Copyright (c) 2008 - 2012 by Wilbert Berendsen
# Copyright (c) 2008 - 2014 by Wilbert Berendsen
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
......@@ -186,5 +186,5 @@ def excepthook(exctype, excvalue, exctb):
def displayhook(obj):
"""Prevent normal displayhook from overwriting __builtin__._"""
if obj is not None:
print repr(obj)
print(repr(obj))
# This file is part of the Frescobaldi project, http://www.frescobaldi.org/
#
# Copyright (c) 2011 - 2012 by Wilbert Berendsen
# Copyright (c) 2011 - 2014 by Wilbert Berendsen
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
......
# This file is part of the Frescobaldi project, http://www.frescobaldi.org/
#
# Copyright (c) 2011 - 2012 by Wilbert Berendsen
# Copyright (c) 2011 - 2014 by Wilbert Berendsen
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
......@@ -143,18 +143,28 @@ class Analyzer(object):
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
try:
i = self.tokens.index('\\tweak')
except ValueError:
return
tokens = self.tokens[i+1:]
tokenclasses = self.tokenclasses()[i+1:]
if tokenclasses == [lx.Space, lp.SchemeStart]:
self.column -= 1
return completiondata.lilypond_all_grob_properties
elif tokenclasses == [lx.Space, lp.SchemeStart, scm.Quote]:
self.column -= 2
return completiondata.lilypond_all_grob_properties
elif tokenclasses[:-1] == [lx.Space, lp.SchemeStart, scm.Quote]:
self.column = self.lastpos - 2
return completiondata.lilypond_all_grob_properties
# 2.18-style [GrobName.]propertyname tweak
if lp.GrobName in tokenclasses:
self.backuntil(lx.Space, lp.DotPath)
return completiondata.lilypond_grob_properties(tokens[1], False)
if tokens:
self.backuntil(lx.Space)
return completiondata.lilypond_all_grob_properties_and_grob_names
def key(self):
"""complete mode argument of '\\key'"""
......@@ -342,14 +352,14 @@ class Analyzer(object):
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, scm.ParseSchemeSymbol)):
if isinstance(self.state.parser(), scm.ParseScheme):
return
self.backuntil(lp.DotSetOverride, lx.Space)
self.backuntil(lp.DotPath, lx.Space)
if (isinstance(self.state.parsers()[1], (
lp.ParseWith,
lp.ParseContext,
))
or lp.DotSetOverride in tokenclasses):
or lp.DotPath in tokenclasses):
return completiondata.lilypond_grobs
return completiondata.lilypond_contexts_and_grobs
# yes, there is a GrobName at i
......@@ -363,14 +373,26 @@ class Analyzer(object):
test = [lx.Space, lp.SchemeStart, scm.Quote, scm.Word]
if tokenclasses[i+1:] == test[:count]:
return completiondata.lilypond_grob_properties(self.tokens[i])
self.backuntil(lp.DotPath, lx.Space)
return completiondata.lilypond_grob_properties(self.tokens[i], False)
def revert(self):
"""test for \\revert in general music expressions
(because the revert parser drops out of invalid constructs, which happen
during typing).
"""
if '\\revert' in self.tokens:
return self.override()
def set_unset(self):
"""\\set and \\unset"""
tokenclasses = self.tokenclasses()
self.backuntil(lx.Space, lp.DotSetOverride)
self.backuntil(lx.Space, lp.DotPath)
if lp.ContextProperty in tokenclasses and isinstance(self.last, lx.Space):
return # fall back to music?
elif lp.DotSetOverride in tokenclasses:
elif lp.DotPath in tokenclasses:
return completiondata.lilypond_context_properties
return completiondata.lilypond_contexts_and_properties
......@@ -400,6 +422,46 @@ class Analyzer(object):
cursor = self.document_cursor()
return documentdata.doc(cursor.document()).schemewords()
def accidental_style(self):
"""test for \accidentalStyle"""
try:
i = self.tokens.index("\\accidentalStyle")
except ValueError:
return
self.backuntil(lx.Space, lp.DotPath)
tokens = self.tokens[i+1:]
tokenclasses = self.tokenclasses()[i+1:]
try:
i = tokenclasses.index(lp.AccidentalStyleSpecifier)
except ValueError:
pass
else:
if lx.Space in tokenclasses[i+1:]:
return
if lp.ContextName in tokenclasses:
return completiondata.lilypond_accidental_styles
return completiondata.lilypond_accidental_styles_contexts
def hide_omit(self):
"""test for \omit and \hide"""
indices = []
for t in "\\omit", "\\hide":
try:
indices.append(self.tokens.index(t, -6))
except ValueError:
pass
if not indices:
return
self.backuntil(lx.Space, lp.DotPath)
i = max(indices)
tokens = self.tokens[i+1:]
tokenclasses = self.tokenclasses()[i+1:]
if lp.GrobName not in tokenclasses[:-1]:
if lp.ContextName in tokenclasses:
return completiondata.lilypond_grobs
return completiondata.lilypond_contexts_and_grobs
# Mapping from Parsers to the lists of functions to run.
tests = {
lp.ParseGlobal: (
......@@ -421,6 +483,9 @@ class Analyzer(object):
key,
clef,
repeat,
accidental_style,
hide_omit,
revert,
general_music,
),
lp.ParseNoteMode: (
......@@ -429,6 +494,9 @@ class Analyzer(object):
key,
clef,
repeat,
accidental_style,
hide_omit,
revert,
general_music,