def _handle_collect(self): print('Collecting segments:') collected_names = [] for segment_path in self._list_segment_subpackages( self._score_package_path): source_path = segment_path.joinpath('illustration.ly') if not source_path.is_file(): continue collected_names.append(segment_path.name) target_path = self._build_path.joinpath( 'segments', stringtools.to_dash_case(segment_path.name) + '.ily' ) contents = self._process_illustration_contents(source_path) with open(str(target_path), 'w') as file_pointer: file_pointer.write(contents) message = ' {!s} --> {!s}'.format( source_path.relative_to(self._score_package_path), target_path.relative_to(self._score_package_path), ) print(message) staged_names = self._read_segments_list_json(self._score_package_path) segments_ily_path = self._build_path.joinpath('segments.ily') include_template = ' \\include "..{sep}segments{sep}{name}.ily"\n' with open(str(segments_ily_path), 'w') as file_pointer: file_pointer.write('{\n') for name in staged_names: if name not in collected_names: continue name = stringtools.to_dash_case(name) file_pointer.write(include_template.format( name=name, sep=os.path.sep)) file_pointer.write('}\n')
def _handle_collect(self): print('Collecting segments:') collected_names = [] for segment_path in self._list_segment_subpackages( self._score_package_path): source_path = segment_path.joinpath('illustration.ly') if not source_path.is_file(): continue collected_names.append(segment_path.name) target_path = self._build_path.joinpath( 'segments', stringtools.to_dash_case(segment_path.name) + '.ily') contents = self._process_illustration_contents(source_path) with open(str(target_path), 'w') as file_pointer: file_pointer.write(contents) message = ' {!s} --> {!s}'.format( source_path.relative_to(self._score_package_path), target_path.relative_to(self._score_package_path), ) print(message) staged_names = self._read_segments_list_json(self._score_package_path) segments_ily_path = self._build_path.joinpath('segments.ily') include_template = ' \\include "..{sep}segments{sep}{name}.ily"\n' with open(str(segments_ily_path), 'w') as file_pointer: file_pointer.write('{\n') for name in staged_names: if name not in collected_names: continue name = stringtools.to_dash_case(name) file_pointer.write( include_template.format(name=name, sep=os.path.sep)) file_pointer.write('}\n')
def make_single_wind_performer( abbreviation=None, clef=None, instrument=None, score_template=None, ): performer_group = ScoreTemplateManager.make_performer_group( instrument=instrument, label=stringtools.to_dash_case(instrument.instrument_name), ) name = instrument.instrument_name.title() context_name = ScoreTemplateManager.make_staff_name(name) voice = scoretools.Voice( name='{} Voice'.format(name), ) staff = scoretools.Staff( [voice], context_name=context_name, name='{} Staff'.format(name), ) performer_group.append(staff) attach(clef, voice) abbreviation = abbreviation or \ stringtools.to_snake_case(name) score_template._context_name_abbreviations[abbreviation] = voice.name return performer_group
def attach_tag(label, context): label = stringtools.to_dash_case(label) tag = indicatortools.LilyPondCommand( name="tag #'{}".format(label), format_slot='before', ) attach(tag, context)
def _handle_create( self, target_name, force, paper_size=None, orientation=None, ): from abjad import abjad_configuration if target_name is True: name = paper_size.lower().replace(' ', '-') name = '{}-{}'.format(name, orientation) else: name = stringtools.to_dash_case(target_name) dimensions = self.paper_sizes[paper_size] message = 'Creating build target {!r} ({}{} x {}{})'.format( name, dimensions[0][0], dimensions[0][1], dimensions[1][0], dimensions[1][1], ) print(message) target_path = self._name_to_score_subdirectory_path( name, 'build', self._score_package_path) if target_path.exists() and not force: print(' Path exists: {!s}'.format( target_path.relative_to(self._score_package_path.parent))) sys.exit(1) metadata = self._read_score_metadata_json(self._score_package_path) metadata['score_package_name'] = self._score_package_path.name if orientation == 'portrait': rotation = 0 width, height = self.paper_sizes[paper_size] else: rotation = -90 height, width = self.paper_sizes[paper_size] metadata['rotation'] = rotation metadata['orientation'] = orientation metadata['paper_size'] = paper_size metadata['height'] = height[0] metadata['width'] = width[0] metadata['unit'] = height[1] metadata['global_staff_size'] = 12 metadata['uppercase_composer_name'] = metadata['composer_name'].upper() metadata['uppercase_title'] = metadata['title'].upper() metadata['lilypond_version'] = \ abjad_configuration.get_lilypond_version_string() source_name = 'example_build_target' source_path = self._get_boilerplate_path().joinpath(source_name) suffixes = ('.py', '.tex', '.ly', '.ily') for path in self._copy_tree(source_path, target_path): if path.is_file() and path.suffix in suffixes: self._template_file(path, **metadata) print(' Created {!s}'.format( target_path.relative_to(self._score_repository_path)))
def _handle_create( self, target_name, force, paper_size=None, orientation=None, ): from abjad import abjad_configuration if target_name is True: name = paper_size.lower().replace(' ', '-') name = '{}-{}'.format(name, orientation) else: name = stringtools.to_dash_case(target_name) dimensions = self.paper_sizes[paper_size] message = 'Creating build target {!r} ({}{} x {}{})'.format( name, dimensions[0][0], dimensions[0][1], dimensions[1][0], dimensions[1][1], ) print(message) target_path = self._name_to_score_subdirectory_path( name, 'build', self._score_package_path) if target_path.exists() and not force: print(' Path exists: {!s}'.format( target_path.relative_to(self._score_package_path.parent))) sys.exit(1) metadata = self._read_score_metadata_json(self._score_package_path) metadata['score_package_name'] = self._score_package_path.name if orientation == 'portrait': rotation = 0 width, height = self.paper_sizes[paper_size] else: rotation = -90 height, width = self.paper_sizes[paper_size] metadata['rotation'] = rotation metadata['orientation'] = orientation metadata['paper_size'] = paper_size metadata['height'] = height[0] metadata['width'] = width[0] metadata['unit'] = height[1] metadata['global_staff_size'] = 12 metadata['uppercase_composer_name'] = metadata['composer_name'].upper() metadata['uppercase_title'] = metadata['title'].upper() metadata['lilypond_version'] = \ abjad_configuration.get_lilypond_version_string() source_name = 'example_build_target' source_path = self._get_boilerplate_path().joinpath(source_name) suffixes = ('.py', '.tex', '.ly', '.ily') for path in self._copy_tree(source_path, target_path): if path.is_file() and path.suffix in suffixes: self._template_file(path, **metadata) print(' Created {!s}'.format(target_path.relative_to( self._score_repository_path)))
def make_single_piano_performer( instrument=None, score_template=None, ): performer_group = ScoreTemplateManager.make_performer_group( context_name='PianoStaff', instrument=instrument, label=stringtools.to_dash_case(instrument.instrument_name), ) name = instrument.instrument_name.title() upper_voice = scoretools.Voice( name='{} Upper Voice'.format(name), ) upper_staff = scoretools.Staff( [upper_voice], context_name='PianoUpperStaff', name='{} Upper Staff'.format(name), ) dynamics = scoretools.Voice( context_name='Dynamics', name='{} Dynamics'.format(name), ) lower_voice = scoretools.Voice( name='{} Lower Voice'.format(name), ) lower_staff = scoretools.Staff( [lower_voice], context_name='PianoLowerStaff', name='{} Lower Staff'.format(name), ) pedals = scoretools.Voice( context_name='Dynamics', name='{} Pedals'.format(name), ) performer_group.extend(( upper_staff, dynamics, lower_staff, pedals, )) attach(indicatortools.Clef('treble'), upper_voice) attach(indicatortools.Clef('bass'), lower_voice) score_template._context_name_abbreviations.update( piano_dynamics=dynamics.name, piano_lh=lower_voice.name, piano_pedals=pedals.name, piano_rh=upper_voice.name, ) return performer_group
def dash_case_name(self): return stringtools.to_dash_case(self.name)
def make_single_string_performer( abbreviation=None, clef=None, instrument=None, score_template=None, split=True, ): performer_group = ScoreTemplateManager.make_performer_group( context_name='StringPerformerGroup', instrument=instrument, label=stringtools.to_dash_case(instrument.instrument_name), ) name = instrument.instrument_name.title() abbreviation = abbreviation or \ stringtools.to_snake_case(name) if split: right_hand_voice = scoretools.Voice( name='{} Bowing Voice'.format(name), ) right_hand_staff = scoretools.Staff( [right_hand_voice], context_name='BowingStaff', name='{} Bowing Staff'.format(name), ) left_hand_voice = scoretools.Voice( name='{} Fingering Voice'.format(name), ) left_hand_staff = scoretools.Staff( [left_hand_voice], context_name='FingeringStaff', name='{} Fingering Staff'.format(name), ) performer_group.append(right_hand_staff) performer_group.append(left_hand_staff) attach(clef, left_hand_staff) attach(indicatortools.Clef('percussion'), right_hand_staff) right_hand_abbreviation = '{}_rh'.format(abbreviation) left_hand_abbreviation = '{}_lh'.format(abbreviation) score_template._context_name_abbreviations.update({ abbreviation: performer_group.name, right_hand_abbreviation: right_hand_voice.name, left_hand_abbreviation: left_hand_voice.name, }) score_template._composite_context_pairs[abbreviation] = ( right_hand_abbreviation, left_hand_abbreviation, ) else: voice = scoretools.Voice( name='{} Voice'.format(name), ) staff = scoretools.Staff( [voice], context_name='StringStaff', name='{} Staff'.format(name), ) performer_group.append(staff) attach(clef, voice) score_template._context_name_abbreviations[abbreviation] = \ voice.name return performer_group
def dash_case_feature(self): return stringtools.to_dash_case(self.feature)