# -*- coding: ISO-8859-1 -*- """ capellaScript -- Copyright (c) 2007 Peter Becker >>> Pausen expandieren Dieses Script expandiert Mehrtakt Pausen nach Ganztaktpausen.|| Bei Problemen bitte eine Mail an peter_becker@freenet.de <<< """ # 11.04.2007 Erste Version # 30.10.2007 Absturz wenn Kirchenpause ohne Taktzahl behoben import xml.dom, tempfile from caplib.capDOM import ScoreChange class PausenExpander(ScoreChange): def changeScore(self, score): changeDoc(score) def changeDoc(score): global pausenTyp, zifferPos, zusammenTyp, useMulti, taktstrich restCnt = 0 actKey = '0' dispNum = 0 grafischeMehrtaktPausen = '21793-1' #Pauls grafische Mehrtaktpausen for rest in score.getElementsByTagName('rest'): #falls vorhanden, grafische Mehrtaktpausen löschen for basic in rest.getElementsByTagName('basic'): if basic.hasAttributes and basic.getAttribute('tag') == grafischeMehrtaktPausen: displays = rest.getElementsByTagName('display') display = displays[0] display.removeAttribute('invisible') x = basic.parentNode.parentNode.removeChild(basic.parentNode) for voice in score.getElementsByTagName('voice'): noteObjects = voice.getElementsByTagName('noteObjects') zeilenAnfang = True for child in noteObjects[0].childNodes: if child.nodeType == child.ELEMENT_NODE: if child.tagName == 'rest': duration = child.getElementsByTagName('duration')[0] wert = duration.getAttribute('base') ganztakt = wert.find('/') if ganztakt == -1: #1/4, 1/2 etc ausfiltern wert = int(duration.getAttribute('base')) if wert > 1: display = child.getElementsByTagName('display')[0] duration.setAttribute('base','1') display.setAttribute('churchStyle','true') if display.hasAttribute('number'): display.removeAttribute('number') wert = wert -1 while wert <> 0: rest = duration.parentNode.cloneNode(0) durat = score.parentNode.createElement('duration') durat.setAttribute('base','1') display = score.parentNode.createElement('display') display.setAttribute('churchStyle','true') rest.appendChild(durat) rest.appendChild(display) duration.parentNode.parentNode.insertBefore(rest,duration.parentNode.nextSibling) wert = wert -1 # Hauptprogramm: if activeScore(): activeScore().registerUndo("Pausen expandieren") tempInput = tempfile.mktemp('.capx') tempOutput = tempfile.mktemp('.capx') activeScore().write(tempInput) PausenExpander(tempInput, tempOutput) activeScore().read(tempOutput) os.remove(tempInput) os.remove(tempOutput)