Start lilypond generation code

This commit is contained in:
Matthias Neeracher 2006-10-22 07:16:29 +00:00
parent ec3c4462c5
commit 6465ffa57d
10 changed files with 354 additions and 6 deletions

View File

@ -28,6 +28,20 @@
<key>NSPersistentStoreTypeKey</key>
<string>XML</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>ly</string>
</array>
<key>CFBundleTypeName</key>
<string>Lilypond</string>
<key>CFBundleTypeRole</key>
<string>None</string>
<key>LSTypeIsPackage</key>
<false/>
<key>NSPersistentStoreTypeKey</key>
<string>XML</string>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>Vocalese</string>

View File

@ -0,0 +1,33 @@
\version "1.8.0"
\header {
title = "<{TITLE}>"
poet = "<{POET}>"
composer= "<{COMPOSER}>"
arranger = "<{ARRANGER}>"
tagline = #(string-append "Vocalese <{VLVERSION}> / Lilypond" (lilypond-version))
}
\paper {
#(set-paper-size "<{PAPERSIZE}>")
indent = 0.0\cm
pagenumber = no
page-top-space = #.1
<{FORMATTING}>
}
#(set-global-staff-size <{STAFFSIZE}>)
\score {
<<
\context ChordNames \chords { \override ChordName #'font-size = #6
<{CHORDS}>
}
\context Voice = "mel" {
\time <{TIME}>
\key <{KEY}>
<{NOTES}>
}
\lyricsto "mel" \new Lyrics { <{LYRICS}> }
>>
}

View File

@ -26,6 +26,7 @@
{
VLSong * song;
VLEditable *editTarget;
NSString * lilypondTemplate;
}
- (VLSong *) song;

View File

@ -7,6 +7,8 @@
//
#import "VLDocument.h"
#import "VLXMLDocument.h"
#import "VLLilypondDocument.h"
@implementation VLEditable
@ -48,8 +50,9 @@
// Add your subclass-specific initialization here.
// If an error occurs here, send a [self release] message and return nil.
song = new VLSong;
editTarget = nil;
song = new VLSong;
editTarget = nil;
lilypondTemplate = @"default";
}
return self;
}
@ -128,4 +131,22 @@
[controller setShouldCloseDocument:YES];
}
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
if ([typeName isEqual:@"Song"])
return [self XMLDataWithError:outError];
else if ([typeName isEqual:@"Lilypond"])
return [self lilypondDataWithError:outError];
else
return nil;
}
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
if ([typeName isEqual:@"Song"])
return [self readFromXMLData:data error:outError];
else
return NO;
}
@end

View File

@ -0,0 +1,16 @@
//
// VLLilypondDocument.h
// Vocalese
//
// Created by Matthias Neeracher on 10/20/06.
// Copyright 2006 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "VLDocument.h"
@interface VLDocument (Lilypond)
- (NSData *)lilypondDataWithError:(NSError **)outError;
@end

View File

@ -0,0 +1,102 @@
//
// VLLilypondDocument.mm
// Vocalese
//
// Created by Matthias Neeracher on 10/20/06.
// Copyright 2006 __MyCompanyName__. All rights reserved.
//
#import "VLLilypondDocument.h"
@interface NSMutableString (VLLilypond)
- (void) substituteMacro:(NSString *)macro withValue:(NSString *)value;
- (void) purgeMacros;
@end
@implementation NSMutableString (VLLilypond)
- (void) substituteMacro:(NSString *)m withValue:(NSString *)value
{
NSString * macro = [NSString stringWithFormat:@"<{%@}>", m];
NSRange range =
[value rangeOfCharacterFromSet:
[NSCharacterSet characterSetWithCharactersInString:@"\n"]];
BOOL hasEOL= range.location != NSNotFound;
for (range = [self rangeOfString:macro];
range.location != NSNotFound;
range = [self rangeOfString:macro]
) {
if (hasEOL) {
//
// Multi line substitution, figure out a prefix
//
NSRange prefix, suffix;
NSRange line = [self lineRangeForRange:range];
suffix.location = range.location+range.length;
suffix.length = line.location+line.length-suffix.location;
prefix.location = line.location;
prefix.length = range.location-prefix.location;
NSString * pfxStr = [self substringWithRange:prefix];
NSString * nonBlank =
[pfxStr stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
NSString * sfxStr =
[[self substringWithRange:suffix]
stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
if ([nonBlank length]) {
NSRange nb = [pfxStr rangeOfString:nonBlank];
prefix.length = nb.location - prefix.location;
pfxStr =
[[self substringWithRange:prefix]
stringByAppendingString:@" "];
sfxStr = [NSString stringWithFormat:@"\n%@", pfxStr];
} else {
range = line;
}
NSArray * lines = [value componentsSeparatedByString:@"\n"];
value =
[NSString stringWithFormat:@"%@%@%@", pfxStr,
[lines componentsJoinedByString:
[@"\n" stringByAppendingString:pfxStr]],
sfxStr];
}
[self replaceCharactersInRange:range withString:value];
}
}
- (void) purgeMacros
{
for (NSRange range = [self rangeOfString:@"<{"];
range.location != NSNotFound;
range = [self rangeOfString:@"<{"]
)
[self replaceCharactersInRange:[self lineRangeForRange:range]
withString: @""];
}
@end
@implementation VLDocument (Lilypond)
- (NSData *)lilypondDataWithError:(NSError **)outError
{
NSBundle * bndl = [NSBundle mainBundle];
NSString * tmpl =
[bndl pathForResource:lilypondTemplate
ofType:@"lyt" inDirectory:@"Templates"];
NSStringEncoding enc = NSUTF8StringEncoding;
NSError * err;
NSMutableString * ly =
[[NSString stringWithContentsOfFile:tmpl encoding:enc error:&err]
mutableCopy];
[ly substituteMacro:@"VLVERSION" withValue:
[bndl objectForInfoDictionaryKey:@"CFBundleVersion"]];
[ly purgeMacros];
return [ly dataUsingEncoding:enc];
}
@end

View File

@ -11,7 +11,7 @@
@interface VLDocument (XML)
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError;
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError;
- (NSData *)XMLDataWithError:(NSError **)outError;
- (BOOL)readFromXMLData:(NSData *)data error:(NSError **)outError;
@end

View File

@ -194,7 +194,7 @@ const char * sSteps = "C DbD EbE F GbG AbA BbB ";
}
}
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
- (NSData *)XMLDataWithError:(NSError **)outError
{
NSXMLElement * partList = [NSXMLNode elementWithName:@"part-list"];
[partList addChild: [self scorePartWithID:@"HARM" name:@"Chords"]];
@ -359,7 +359,7 @@ int8_t sStepToPitch[] = {
}
}
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
- (BOOL)readFromXMLData:(NSData *)data error:(NSError **)outError
{
NSXMLDocument * doc = [[NSXMLDocument alloc] initWithData:data
options:0

27
Tests/TVLLilypond.mm Normal file
View File

@ -0,0 +1,27 @@
/*
* TVLLilypond.mm
* Vocalese
*
* Created by Matthias Neeracher on 12/19/05.
* Copyright 2006 __MyCompanyName__. All rights reserved.
*
*/
#include "VLModel.h"
#include "VLDocument.h"
int main(int, char *const argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
VLDocument * doc = [[VLDocument alloc] init];
NSString * file = [NSString stringWithUTF8String:argv[1]];
NSError * err;
[doc readFromURL:[NSURL fileURLWithPath:file] ofType:@"Song" error:&err];
[doc writeToURL:[NSURL fileURLWithPath:
[[file stringByDeletingPathExtension]
stringByAppendingPathExtension:@"ly"]]
ofType:@"Lilypond" error:&err];
[pool release];
exit(0);
}

View File

@ -21,6 +21,7 @@
952CBBB5095FD34F00434E43 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952CBBB3095FD34F00434E43 /* AudioUnit.framework */; };
952CBBB6095FD37300434E43 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; };
952DCD78096BBB11001C2316 /* VLSheetViewChords.mm in Sources */ = {isa = PBXBuildFile; fileRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; };
953722670AE9F0E100B6E483 /* VLLilypondDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 953722660AE9F0E100B6E483 /* VLLilypondDocument.mm */; };
95498DBD0AE3812F006B5F81 /* VLSoundSched.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95498DBC0AE3812F006B5F81 /* VLSoundSched.mm */; };
955E58E5095658AB0045FDA5 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; };
955E59610957C1400045FDA5 /* TVLChord.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E59600957C1400045FDA5 /* TVLChord.cpp */; };
@ -34,6 +35,13 @@
95B3E1A70960E58B000E9C0D /* Music in Resources */ = {isa = PBXBuildFile; fileRef = 95B3E1980960E58B000E9C0D /* Music */; };
95B66658096BCA1F00FE18C9 /* VLSheetViewNotes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95B66657096BCA1F00FE18C9 /* VLSheetViewNotes.mm */; };
95BDA15909540BF1009F9D65 /* VLSheetView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; };
95E04DA70AEB486E006F30A0 /* TVLLilypond.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95E04DA60AEB486E006F30A0 /* TVLLilypond.mm */; };
95E04DA80AEB4878006F30A0 /* VLDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; };
95E04DA90AEB487A006F30A0 /* VLLilypondDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 953722660AE9F0E100B6E483 /* VLLilypondDocument.mm */; };
95E04DAA0AEB487E006F30A0 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; };
95E04DAB0AEB4886006F30A0 /* VLXMLDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95F5F50E0ADCC433003980B2 /* VLXMLDocument.mm */; };
95E04DC70AEB4B57006F30A0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; };
95E04DCE0AEB4D9B006F30A0 /* Templates in Resources */ = {isa = PBXBuildFile; fileRef = 95E04DCA0AEB4D9B006F30A0 /* Templates */; };
95F5F50F0ADCC433003980B2 /* VLXMLDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95F5F50E0ADCC433003980B2 /* VLXMLDocument.mm */; };
95F5F5340ADCCFBB003980B2 /* DTD in Resources */ = {isa = PBXBuildFile; fileRef = 95F5F51E0ADCCFBB003980B2 /* DTD */; };
/* End PBXBuildFile section */
@ -61,6 +69,8 @@
952CBBB3095FD34F00434E43 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
952DCD76096BBB11001C2316 /* VLSheetViewChords.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLSheetViewChords.h; path = Sources/VLSheetViewChords.h; sourceTree = "<group>"; };
952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetViewChords.mm; path = Sources/VLSheetViewChords.mm; sourceTree = "<group>"; };
953722650AE9F0E100B6E483 /* VLLilypondDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLLilypondDocument.h; path = Sources/VLLilypondDocument.h; sourceTree = "<group>"; };
953722660AE9F0E100B6E483 /* VLLilypondDocument.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLLilypondDocument.mm; path = Sources/VLLilypondDocument.mm; sourceTree = "<group>"; };
95498DBB0AE3812F006B5F81 /* VLSoundSched.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLSoundSched.h; path = Sources/VLSoundSched.h; sourceTree = "<group>"; };
95498DBC0AE3812F006B5F81 /* VLSoundSched.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSoundSched.mm; path = Sources/VLSoundSched.mm; sourceTree = "<group>"; };
955E58E3095658AB0045FDA5 /* VLModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLModel.h; path = Sources/VLModel.h; sourceTree = "<group>"; };
@ -77,6 +87,9 @@
95B66657096BCA1F00FE18C9 /* VLSheetViewNotes.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetViewNotes.mm; path = Sources/VLSheetViewNotes.mm; sourceTree = "<group>"; };
95BDA15709540BF1009F9D65 /* VLSheetView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLSheetView.h; path = Sources/VLSheetView.h; sourceTree = "<group>"; };
95BDA15809540BF1009F9D65 /* VLSheetView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetView.mm; path = Sources/VLSheetView.mm; sourceTree = "<group>"; };
95E04DA00AEB4837006F30A0 /* TVLLilypond */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = TVLLilypond; sourceTree = BUILT_PRODUCTS_DIR; };
95E04DA60AEB486E006F30A0 /* TVLLilypond.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = TVLLilypond.mm; path = Tests/TVLLilypond.mm; sourceTree = "<group>"; };
95E04DCA0AEB4D9B006F30A0 /* Templates */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Templates; path = Resources/Templates; sourceTree = "<group>"; };
95F5F50D0ADCC433003980B2 /* VLXMLDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLXMLDocument.h; path = Sources/VLXMLDocument.h; sourceTree = "<group>"; };
95F5F50E0ADCC433003980B2 /* VLXMLDocument.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLXMLDocument.mm; path = Sources/VLXMLDocument.mm; sourceTree = "<group>"; };
95F5F51E0ADCCFBB003980B2 /* DTD */ = {isa = PBXFileReference; lastKnownFileType = folder; name = DTD; path = Resources/DTD; sourceTree = "<group>"; };
@ -116,6 +129,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
95E04D9E0AEB4837006F30A0 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
95E04DC70AEB4B57006F30A0 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@ -146,6 +167,7 @@
955E595C0957C0FC0045FDA5 /* TVLChord */,
952CBB98095FD19D00434E43 /* TVLSoundOut */,
959408A0096922CA007CCCF8 /* TVLEdit */,
95E04DA00AEB4837006F30A0 /* TVLLilypond */,
);
name = Products;
sourceTree = "<group>";
@ -183,6 +205,8 @@
95B66657096BCA1F00FE18C9 /* VLSheetViewNotes.mm */,
95F5F50D0ADCC433003980B2 /* VLXMLDocument.h */,
95F5F50E0ADCC433003980B2 /* VLXMLDocument.mm */,
953722650AE9F0E100B6E483 /* VLLilypondDocument.h */,
953722660AE9F0E100B6E483 /* VLLilypondDocument.mm */,
);
name = Classes;
sourceTree = "<group>";
@ -199,6 +223,7 @@
2A37F4B8FDCFA73011CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
95E04DCA0AEB4D9B006F30A0 /* Templates */,
9593E4E60AE0ED1F00035816 /* vlsong.icns */,
9593E4E70AE0ED1F00035816 /* vocalese.icns */,
95F5F51E0ADCCFBB003980B2 /* DTD */,
@ -224,6 +249,7 @@
955E59560957C0C50045FDA5 /* Tests */ = {
isa = PBXGroup;
children = (
95E04DA60AEB486E006F30A0 /* TVLLilypond.mm */,
959408AC096922EA007CCCF8 /* TVLEdit.cpp */,
952CBB9E095FD1D900434E43 /* TVLSoundOut.cpp */,
955E59600957C1400045FDA5 /* TVLChord.cpp */,
@ -300,6 +326,22 @@
productReference = 959408A0096922CA007CCCF8 /* TVLEdit */;
productType = "com.apple.product-type.tool";
};
95E04D9F0AEB4837006F30A0 /* TVLLilypond */ = {
isa = PBXNativeTarget;
buildConfigurationList = 95E04DA20AEB485A006F30A0 /* Build configuration list for PBXNativeTarget "TVLLilypond" */;
buildPhases = (
95E04D9D0AEB4837006F30A0 /* Sources */,
95E04D9E0AEB4837006F30A0 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = TVLLilypond;
productName = TVLLilypond;
productReference = 95E04DA00AEB4837006F30A0 /* TVLLilypond */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
@ -317,6 +359,7 @@
955E595B0957C0FC0045FDA5 /* TVLChord */,
952CBB97095FD19D00434E43 /* TVLSoundOut */,
9594089F096922CA007CCCF8 /* TVLEdit */,
95E04D9F0AEB4837006F30A0 /* TVLLilypond */,
);
};
/* End PBXProject section */
@ -334,6 +377,7 @@
95F5F5340ADCCFBB003980B2 /* DTD in Resources */,
9593E4E80AE0ED1F00035816 /* vlsong.icns in Resources */,
9593E4E90AE0ED1F00035816 /* vocalese.icns in Resources */,
95E04DCE0AEB4D9B006F30A0 /* Templates in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -353,6 +397,7 @@
95B66658096BCA1F00FE18C9 /* VLSheetViewNotes.mm in Sources */,
95F5F50F0ADCC433003980B2 /* VLXMLDocument.mm in Sources */,
95498DBD0AE3812F006B5F81 /* VLSoundSched.mm in Sources */,
953722670AE9F0E100B6E483 /* VLLilypondDocument.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -384,6 +429,18 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
95E04D9D0AEB4837006F30A0 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
95E04DA70AEB486E006F30A0 /* TVLLilypond.mm in Sources */,
95E04DA80AEB4878006F30A0 /* VLDocument.mm in Sources */,
95E04DA90AEB487A006F30A0 /* VLLilypondDocument.mm in Sources */,
95E04DAA0AEB487E006F30A0 /* VLModel.cpp in Sources */,
95E04DAB0AEB4886006F30A0 /* VLXMLDocument.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
@ -699,6 +756,73 @@
};
name = Default;
};
95E04DA30AEB485A006F30A0 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
INSTALL_PATH = "$(HOME)/bin";
OTHER_LDFLAGS = (
"-framework",
Foundation,
"-framework",
AppKit,
);
PREBINDING = NO;
PRODUCT_NAME = TVLLilypond;
ZERO_LINK = YES;
};
name = Development;
};
95E04DA40AEB485A006F30A0 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = Sources/Vocalese_Prefix.pch;
INSTALL_PATH = "$(HOME)/bin";
OTHER_LDFLAGS = (
"-framework",
Foundation,
"-framework",
AppKit,
);
PREBINDING = NO;
PRODUCT_NAME = TVLLilypond;
ZERO_LINK = NO;
};
name = Deployment;
};
95E04DA50AEB485A006F30A0 /* Default */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = Sources/Vocalese_Prefix.pch;
INSTALL_PATH = "$(HOME)/bin";
OTHER_LDFLAGS = (
"-framework",
Foundation,
"-framework",
AppKit,
);
PREBINDING = NO;
PRODUCT_NAME = TVLLilypond;
ZERO_LINK = YES;
};
name = Default;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@ -752,6 +876,16 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default;
};
95E04DA20AEB485A006F30A0 /* Build configuration list for PBXNativeTarget "TVLLilypond" */ = {
isa = XCConfigurationList;
buildConfigurations = (
95E04DA30AEB485A006F30A0 /* Development */,
95E04DA40AEB485A006F30A0 /* Deployment */,
95E04DA50AEB485A006F30A0 /* Default */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default;
};
/* End XCConfigurationList section */
};
rootObject = 2A37F4A9FDCFA73011CA2CEA /* Project object */;