# -*- coding: ISO-8859-1 -*- """ capellaScript -- Copyright (c) 2003-2011 Peter Becker >>> Rohformatierer Dieses Script übernimmt die Rohformatierung nach einem einstimmigen Stimmenauszug.|| - Partiturvorlage aufräumen| - Klammern entfernen| - Ganztaktpausen zusammenfassen| - Pausen normalisieren ( richtige Höhe )| - horizontale Versetzung entfernen| - unsichtbare Pausen sichtbar machen| - Instrumentenbezeichnung entfernen| - Instrumentenbezeichnung übernehmen| - Abstände setzen| - Halsrichtung korrigieren| - Taktnummern| - Seitentexte positionieren|| Bei Problemen bitte eine Mail an peter_becker@freenet.de <<< """ # 13.12.2003 Erste Version # 15.12.2003 Pausenquetscher korrigiert # 15.12.2003 Halsrichtung korrigieren # 16.12.2003 Instrumentenbezeichnung übernehmen wenn Partitur oder Direktion # wird in allen Einfach-Text Elementen vorgenommen. # Pausen auf Normalhöhe bringen # Default Abstände setzen # Absturz wenn keine Stimmenbezeichnung korrigiert # 17.12.2003 Formatierungsproblem wenn Stimmenauszug aus der obersten Stimme # gemacht wird umgangen durch zurücksetzten von extraDistance # Vertikale Seitenjustage wählbar gemacht # 18.12.2003 Linker Rand auf 0 ausser 1. Zeile, wählbar gemacht # unsichtbare Pausen sichtbar machen # Halslängen korrigieren # 19.12.2003 Dialog überarbeitet # Brackets vollständig entfernt # 05.01.2004 Vorzeichen wurden bei den einzelnen Tönen entfernt. # 06.01.2004 Halslängen auf Default korrigiert # 08.01.2004 Formatierungsprobleme wenn 'between' definiert ist behoben, # barCount positioniert # 16.01.2004 Dialog überarbeitet, Notenlinienabstand, Erweiterung beim Einrücken und vertikalen Seitenausgleich # Abbrechen des Dialogs jetzt möglich # 17.01.2004 weitere Formatierungsoptionen # 18.01.2004 Querformat hinzugefügt ( wird z.Zt. erst nach speichern und neu öffnen wirksam ) # 01.03.2004 Ignoriert und entfernt leere Textfelder bei Prüfung auf Direktion etc # 19.03.2004 Pausenquetscher abschaltbar gemacht # 19.04.2004 Dialog Auswahl wird jetzt gespeichert # 19.01.2007 Script Pausen_zusammenfassen als Pausenquetscher mit festen Optionen implementiert # 21.01.2007 versehentliches Löschen von "fixed barlines" bei leeren Zeilen eliminiert # 22.01.2007 Pausenquetscher - Unterbrechung bei Voltenklammern # 18.04.2007 Absturz bei einfachen festen zusammenTypen korrigiert # 10.06.2008 Taktnummern Unterstützung # 08.09.2008 Pausenquetscher auf Stand des Einzelscripts angehoben, Menu überarbeitet # 03.11.2008 Seitentexte positionieren # 25.11.2008 Seitentexte auf Metafiles und Textfelder erweitert # 14.01.2009 Hals Richtung anpassen um "ignorieren" erweitert. Verhindert das Setzen auf Hauptrichtung # 19.01.2009 Form der Doppelganzen wählbar, Pausenposition wahlweise anpassen, Taknummernsetting beibehalten # 21.01.2009 Taktkorrekturen in der Zeile wahlweise entfernen. extraDistance wahlweise entfernen # 22.01.2009 Absturz wenn barCount nicht an score hängt verhindert # 23.01.2009 Noch ein Absturz wenn überhaupt kein barCount in der Partitur # 03.07.2009 Anpassung an neue CapXML Bibliothek.Danke an H. Jungmann # 11.07.2009 Dank der neuen CapXML und Herrn Jungmann jetzt trennschärfer bei "removeEmptyStaves()" # 19.06.2010 Fehler bei einfachem festen Taktstrich beseitigt # 20.06.2010 barCount anpassen Capella V7 # 21.06.2010 Systemabstand anpassbar # 10.05.2011 Horizontale Versetzung der Noten entfernen V 4.0.1 import xml.dom, tempfile import tkFont import Tkinter import shelve from caplib.capDOM import ScoreChange, firstChildElement from xml.dom.minidom import * doc = [] # parentNode von score version = '4.0.1' class Rohformatierer(ScoreChange): def changeScore(self, score): global pausenTyp, FontList, zifferPos, zusammenTyp, useMulti, zusammenTyp, doppelganze, seitentext if pqDialog(score): if seitentext == 0: savePageObjects(score) elif seitentext == 2: changePageObjects(score) resetTaktAdjust(score) removeEmptyStaves(score) removeInstrNotation(score) if pausenTyp == 0 or pausenTyp == 1: pausenQuetscher(score) halsWeg(score) removeEmptyLines(score) restNorm(score) defDistance(score) removeHide(score) formBeam(score) #adjustBarCount(score) insertBarCount(score) setDoppelganze(score) removeHzOffset(score) def resetTaktAdjust(score): # Taktnummernjustage am Zeilenanfang entfernen global tnrst, tnuv if tnrst == 1 and tnuv == 0: for sys in score.getElementsByTagName('systems'): for sy in sys.getElementsByTagName('system'): for barCount in sy.getElementsByTagName('barCount'): barCt = firstChildElement(sy,"barCount") if barCt != None: sy.removeChild(barCt) def setDoppelganze(score): # Doppelganze formatieren global formDGZ st = score.getElementsByTagName('style') if formDGZ == 1: if st: if st[0].hasAttribute('modernBreve'): st[0].removeAttribute('modernBreve') else: if st: st[0].setAttribute('modernBreve','false') else: newNode = score.parentNode.createElement('style') ly = score.getElementsByTagName('layout') staves = firstChildElement(ly[0],'staves') ly[0].insertBefore(newNode, staves) st = score.getElementsByTagName('style') st[0].setAttribute('modernBreve','false') def removebarCount(el): if el.tagName == "score": barCount = firstChildElement(el, "barCount") if barCount != None: el.removeChild(barCount) info = firstChildElement(el, "info") if info != None: el.removeChild(info) def insertBarCount(score): # Taktnummern einfügen/formatieren etc global tnr1, tnr2, tnr3, tasl, tasr, tfnt, tfnt1, tsgr, tssn, tsfb, tram, trst, trfa, tfht, tffa, tnuv if tnuv == 1: return FarbenListeX=[('FF0000'),# rot ('FF8000'),# orange ('FFC000'),# orangegelb ('FFFF00'),# gelb ('80FF00'),# gelbgrün ('00E000'),# grün ('007080'),# blaugrün ('003090'),# grünblau ('0000FF'),# blau ('6000A0'),# violett ('E00050'),# rotviolett ('000000'),# schwarz ('808080'),# dunkelgrau ('C0C0C0'),# hellgrau ('FFFFFF')]# weiss #messageBox('XXX','ABC' + str(tnr1)) ver, sub, sr = capVersion() # capella Version feststellen #messageBox('Version',str(ver)) bC = score.getElementsByTagName('barCount') # existiert bereits ein barCount für die Partitur ? if bC: xx = str(bC[0].parentNode).find('score') if xx < 0: bC = [] if not bC and (tnr1 == 1 or tnr2 == 1): # erzeugen falls erforderlich und nicht da # bC = addNewElementNode(score,'barCount',score) # das geht nicht. barCount wird so an systems gehängt. Warum auch immer newNode = score.parentNode.createElement('barCount') systems = firstChildElement(score,'systems') score.insertBefore(newNode, systems) font = addNewElementNode(newNode,'font',score) font.setAttribute('charSet','1') bC = score.getElementsByTagName('barCount') #barCount allgemein if tnr1 == 1 and bC: # falls Zeilenanfang bC[0].setAttribute('atSystems','true') if tnr1 == 0 and bC and ver != 6: # falls barCount eingetragen, nicht getagged, Version 5 removebarCount(score) elif tnr1 == 0 and tnr2 == 0 and bC and ver != 5: # barCount, nicht getagged, keine durch x teilbare, ab Version 6 removebarCount(score) elif tnr1 == 1 and tnr2 == 0 and bC and ver != 5: # barCount, getagged, keine durch x teilbare, ab Version 6 if bC[0].hasAttribute('barInterval'): bC[0].removeAttribute('barInterval') elif tnr1 == 0 and tnr2 == 1 and bC and ver != 5: # barCount, nicht getagged, durch x teilbare, ab Version 6 bC[0].setAttribute('atSystems','false') if tnr2 == 1 and bC and ver >= 6: # falls Version 5 und teilbar Teiler setzen bC[0].setAttribute('barInterval',str(tnr3)) #Position # bC = score.getElementsByTagName('barCount') # existiert bereits ein barCount Eintrag ? if bC: bC[0].setAttribute('x',str(int(tasl)*0.5)) bC[0].setAttribute('y',str(int(tasr)*0.5)) #Rahmen um barCount # bC = score.getElementsByTagName('barCount') # existiert bereits ein barCount Eintrag ? if bC: bC[0].setAttribute('frame',str(tram)) # Rahmen anpassen if ver != 5 and bC: bC[0].setAttribute('lineWidth',str(trst*0.1)) # Rahmenstärke anpassen, ab Version 6 bC[0].setAttribute('lineColor',FarbenListeX[trfa]) # Rahmenfarbe anpassen, ab Version 6 #Füllung # bC = score.getElementsByTagName('barCount') # existiert bereits ein barCount Eintrag ? if ver != 5 and bC: if tffa == 0 and bC[0].hasAttribute('filled'): # ungefüllt bC[0].removeAttribute('filled') if tffa == 0 and bC[0].hasAttribute('fillColor'): bC[0].removeAttribute('fillColor') if tffa == 0 and bC[0].hasAttribute('fillOpacity'): bC[0].removeAttribute('fillOpacity') if tffa >= 1: bC[0].setAttribute('fillColor',FarbenListeX[tffa-1]) # Füllfarbe anpassen, ab Version 6 bC[0].setAttribute('filled','true') if tfht == 1: bC[0].setAttribute('fillOpacity','128') else: if bC[0].hasAttribute('fillOpacity'): bC[0].removeAttribute('fillOpacity') #Schrift # bC = score.getElementsByTagName('barCount') # existiert bereits ein barCount Eintrag ? if bC: font = bC[0].getElementsByTagName('font') if not font: return font = font[0] font.setAttribute('face',tfnt1) font.setAttribute('height',str(tsgr)) if tssn == 0: weight = '0' font.setAttribute('italic','false') elif tssn == 1: weight = '0' font.setAttribute('italic','true') elif tssn == 2: weight = '700' font.setAttribute('italic','false') elif tssn == 3: weight = '700' font.setAttribute('italic','true') font.setAttribute('weight',weight) font.setAttribute('color',FarbenListeX[tsfb]) def formBeam(score): # Halslängen und Achtelbalken for chord in score.getElementsByTagName('chord'): for beam in chord.getElementsByTagName('beam'): if beam.hasAttribute('shift'): beam.removeAttribute('shift') for stem in chord.getElementsByTagName('stem'): if stem.hasAttribute('lengthening'): stem.removeAttribute('lengthening') def removeHide(score): global inviRst # unsichtbare Pausen sichtbar machen for rest in score.getElementsByTagName('display'): if rest.hasAttribute('invisible'): if inviRst == 1: rest.removeAttribute('invisible') def removeHzOffset(score): global hzOffset # horizontale Versetzung von Noten und Pausen entfernen for no in score.getElementsByTagName('display'): if no.hasAttribute('xShift'): if hzOffset == 1: no.removeAttribute('xShift') def defDistance(score): global pageJus,leftInd,abstand,zw,abs1,abs2,abs3,abs4,pgo,pgu,pgl,pgr,pageLayout,zabo,zabu # Zeilenabstände setzen for staff in score.getElementsByTagName('layout'): for dist in staff.getElementsByTagName('distances'): dist.setAttribute('top',str(abs2)) dist.setAttribute('bottom',str(abs3)) # Notenlinienabstand setzen for dist in staff.getElementsByTagName('staffLines'): dist.setAttribute('normal',str(abstand)) # oberer Abstand und Seitenjustage for dist in staff.getElementsByTagName('systems'): dist.setAttribute('top',str(abs1)) dist.setAttribute('between',str(abs4)) if pageJus == 0: if dist.hasAttribute('pageJustified'): dist.removeAttribute('pageJustified') if pageJus == 1: dist.setAttribute('pageJustified','all') if pageJus == 2: dist.setAttribute('pageJustified','exceptLast') # Seitenränder for dist in staff.getElementsByTagName('pages'): if str(pgu) <> 'unverändert': dist.setAttribute('bottom',str(pgu)) if str(pgo) <> 'unverändert': dist.setAttribute('top',str(pgo)) if str(pgl) <> 'unverändert': dist.setAttribute('left',str(pgl)) if str(pgr) <> 'unverändert': dist.setAttribute('right',str(pgr)) if pageLayout == 1: if dist.hasAttribute('landscape'): dist.removeAttribute('landscape') if pageLayout == 0: dist.setAttribute('landscape','true') # zusätzlichen Zeilenabstand entfernen for staff in score.getElementsByTagName('staff'): for extra in staff.getElementsByTagName('extraDistance'): if extra.hasAttribute('top') and zabo == 1: extra.removeAttribute('top') if extra.hasAttribute('bottom') and zabu == 1: extra.removeAttribute('bottom') # linken Rand setzen zeile = 1 if leftInd <> 1: zeile = 2 for systems in score.getElementsByTagName('systems'): for system in systems.getElementsByTagName('system'): if zeile == 1: system.setAttribute('leftIndent',str(zw)) zeile = 2 else: system.setAttribute('leftIndent','0') def restNorm(score): # Pausen auf Normalhöhe setzen global pausenPos if pausenPos == 1: for rest in score.getElementsByTagName('rest'): for vP in rest.getElementsByTagName('verticalPos'): if vP.hasAttribute('shift'): vP.removeAttribute('shift') def halsWeg(score): global halsDir if halsDir <> 2: for stem in score.getElementsByTagName('voice'): if stem.hasAttribute('stemDir'): stem.removeAttribute('stemDir') if halsDir == 1: for stem in score.getElementsByTagName('stem'): if stem.hasAttribute('dir'): stem.removeAttribute('dir') def removeEmptyStaves(score): # Stimmenbezeichnung herausfinden zeile = score.getElementsByTagName('staff') # und nicht benötige Stimmen im Partiturlayout löschen staffLayouts = score.getElementsByTagName('staffLayout') for staffLayout in staffLayouts: name = staffLayout.getAttribute('description') found = False for staff in zeile: stimme = staff.getAttribute('layout') if stimme == name : found = True break if not found: staffLayout.parentNode.removeChild(staffLayout) # Stimmenbezeichnung anpassen # jetzt können evtl. weniger Elemente in staffLayouts sein staffLayouts = score.getElementsByTagName('staffLayout') for text in score.getElementsByTagName('content'): # leere Textfelder überspringen ( Capella Bug ) if text.firstChild: if len(staffLayouts) == 1 and text.firstChild.data == 'Direktion' or text.firstChild.data == 'Partitur': # content = score.parentNode.createElement('content') text.firstChild.data = zeile[0].getAttribute('layout') else: #leere Textfelder entfernen leerText = text.parentNode.parentNode anker = leerText.parentNode anker.removeChild(leerText) # Brackets entfernen for layout in score.getElementsByTagName('layout'): for brackets in layout.getElementsByTagName('brackets'): brackets.parentNode.removeChild(brackets) def removeInstrNotation(score): for system in score.getElementsByTagName('system'): if system.hasAttribute('instrNotation'): system.removeAttribute('instrNotation') def addElementNode(el,tagName,score): # Neue Node zu "el" hinzufügen wenn Node "tagName" nicht existiert # ansonsten existierende Node zurückmelden global doc childs = el.childNodes for n in range(childs.length): if childs[n].nodeType ==childs[n].ELEMENT_NODE and childs[n].tagName == tagName: return childs[n] newChild = score.parentNode.createElement(tagName) el.appendChild(newChild) return newChild def addNewElementNode(el,tagName,score): # add new Node with tagName "tagName" to el global doc newChild = score.parentNode.createElement(tagName) el.appendChild(newChild) return newChild def removeEmptyLines(score): firstVoice = 1 eV = 0 if score.getElementsByTagName('chord').length == 0 and score.getElementsByTagName('rest').length == 0: return # damit nicht die letzte Zeile gelöscht wird for voice in score.getElementsByTagName('voice'): if voice.getElementsByTagName('chord').length == 0 and voice.getElementsByTagName('rest').length == 0: if voice.getElementsByTagName('barline').length == 0: # testen ob noch ein fester zusammenTyp da ist voice.parentNode.removeChild(voice) # falls nicht, weg mit der Zeile else: if not firstVoice: # falls doch Zeile mir der oberen verbinden no = voice.getElementsByTagName('noteObjects') bl = no[0].getElementsByTagName('barline') bln = bl[0].cloneNode('deep') no2 = emptyVoice.getElementsByTagName('noteObjects') fc2 = no2[0].firstChild fc2.parentNode.appendChild(bln) voice.parentNode.removeChild(voice) # und dann erst löschen else: eV = 0 if eV == 0: emptyVoice = voice # falls mehrere PAusenzeilen hintereinander eV = 1 firstVoice = 0 for staff in score.getElementsByTagName('staff'): if staff.getElementsByTagName('voice').length == 0: staff.parentNode.removeChild(staff) for system in score.getElementsByTagName('system'): if system.getElementsByTagName('staff').length == 0: system.parentNode.removeChild(system) def addDrawObj(score,chord,drawObj): drawObjects = chord.getElementsByTagName('drawObjects') if drawObjects.length == 0: # noch kein drawObjects vorhanden drawObjects = score.parentNode.createElement('drawObjects') chord.appendChild(drawObjects) else: # drawObjects ist bereits vorhanden drawObjects=drawObjects[0] drawObjects.appendChild(drawObj) def pausenQuetscher(score): global pausenTyp, zifferPos, zusammenTyp, useMulti, taktstrich, doppelganze restCnt = 0 actKey = '0' dispNum = 0 barlineEx = 0 if doppelganze == 1: # Default Takt initialisieren time = '4/4' else: time = '4/2' for voice in score.getElementsByTagName('voice'): #messageBox('VOICE',str(voice) + '\n' + str(zusammenTyp)) if zusammenTyp == 1: # wenn mehrstimmig restCnt = 0 # systemweise zusammenfassen # Iteration über alle Einzelstimmen noteObjects = voice.getElementsByTagName('noteObjects') # Liste mit einem Element [0] zeilenAnfang = True skiprest = False for child in noteObjects[0].childNodes: # Iteration über alle childelemente if child.nodeType == child.ELEMENT_NODE: # Nur ELEMENT_NODES sollen untersucht werden if child.tagName == 'rest' and not skiprest: # ist ein Taktwiederholungszeichen an der Pause verankert? faulenzer = False skiprest = False for text in child.getElementsByTagName('text'): if 'capella' in text.getElementsByTagName('font')[0].getAttribute('face'): cnt=text.getElementsByTagName('content')[0] t = cnt.firstChild.nodeValue if t=='W': # Taktwiederholung faulenzer = True # diese Pause überspringen break if t=='X': # Doppeltaktwiederholung faulenzer = True # diese Pause überspringen skiprest = True # wenn unmittelbar noch eine Pause folgt, dann auch diese überspringen break if faulenzer: continue zeilenAnfang = False for volta in child.getElementsByTagName('volta'): # Unterbrechung bei Voltenklammern restCnt = 0 continue duration = child.getElementsByTagName('duration')[0] if duration.getAttribute('base') == '1/1' and time <> '4/2': # Pausenstil korrigieren duration.setAttribute('base','1') display = score.parentNode.createElement('display') child.appendChild(display) display.setAttribute('churchStyle','true') if duration.getAttribute('base') == '2/1': # Doppelganze vereinheitlichen duration.setAttribute('base','2') display = score.parentNode.createElement('display') child.appendChild(display) display.setAttribute('churchStyle','true') duration = child.getElementsByTagName('duration')[0] wert = duration.getAttribute('base') display = child.getElementsByTagName('display') dispNum = 0 if wert <> '1/2' and wert <> '1/4' and wert <> '1/8' and wert <> '1/16' and wert <> '1/32' and wert <> '1/64' and doppelganze == 0: if display: dispNum = child.getElementsByTagName('display')[0] elif wert >= '1' and doppelganze == 1: if display: dispNum = child.getElementsByTagName('display')[0] count = 0 mRest = 'no' if dispNum <> 0 and useMulti == 1: number = dispNum.getAttribute('number') if number == 'up' or number == 'down': # Mehrtaktpause gefunden count = duration.getAttribute('base') mRest = 'yes' if (duration.getAttribute('base') == '1' or duration.getAttribute('base') == '1/1' or mRest == 'yes') and (doppelganze == 0 and time <> '4/2'): if restCnt == 0: barlineEx = 1 firstRest = child # Die erste Pause zum Umwandeln merken if useMulti == 1 and mRest == 'yes': restCnt += int(count) else: restCnt += 1 else: # Grafikobjekte von Folgepausen an erste Pause hängen drawObjects=child.getElementsByTagName('drawObjects') if drawObjects.length: for drawObj in drawObjects[0].getElementsByTagName('drawObj'): addDrawObj(score,firstRest,drawObj.cloneNode(True)) child.parentNode.removeChild(child) if useMulti == 1 and mRest == 'yes': restCnt += int(count) else: restCnt += 1 firstDuration = firstRest.getElementsByTagName('duration')[0] firstDuration.setAttribute('base', str(restCnt)) #Pausenwert hochzählen disps = firstRest.getElementsByTagName('display') if disps.length == 0: disp = score.parentNode.createElement('display') # Bem: ein neues Element immer an "doc" erzeugen, und das ist # parentNode von score firstRest.appendChild(disp) disps[0] = disp if pausenTyp == 1: disps[0].setAttribute('churchStyle','false') else: disps[0].setAttribute('churchStyle','true') if zifferPos == 1: disps[0].setAttribute('number','up') else: disps[0].setAttribute('number','down') elif (duration.getAttribute('base') == '2' or duration.getAttribute('base') == '2/1' or mRest == 'yes') and (doppelganze == 1 and time == '4/2'): if restCnt == 0: barlineEx = 1 firstRest = child # Die erste Pause zum Umwandeln merken if useMulti == 1 and mRest == 'yes': restCnt += int(count) else: restCnt += 1 else: # Grafikobjekte von Folgepausen an erste Pause hängen drawObjects=child.getElementsByTagName('drawObjects') if drawObjects.length: for drawObj in drawObjects[0].getElementsByTagName('drawObj'): addDrawObj(score,firstRest,drawObj.cloneNode(True)) child.parentNode.removeChild(child) if useMulti == 1 and mRest == 'yes': restCnt += int(count) else: restCnt += 1 firstDuration = firstRest.getElementsByTagName('duration')[0] firstDuration.setAttribute('base', str(restCnt)) #Pausenwert hochzählen disps = firstRest.getElementsByTagName('display') if disps.length == 0: disp = score.parentNode.createElement('display') firstRest.appendChild(disp) disps[0] = disp if pausenTyp == 1: disps[0].setAttribute('churchStyle','false') else: disps[0].setAttribute('churchStyle','true') if zifferPos == 1: disps[0].setAttribute('number','up') else: disps[0].setAttribute('number','down') else: # alle übrigen Pausen barlineEx = 0 restCnt = 0 if child.tagName in ['barline','timeSign','chord']: if child.tagName == 'barline' and not child.hasAttribute('type') and taktstrich == 1 and barlineEx == 1: child.parentNode.removeChild(child) # überflüssige feste zusammenType löschen else: zeilenAnfang = False restCnt = 0 if child.tagName == 'timeSign': time = child.getAttribute('time') if child.tagName == 'clefSign': # Bei einem Schlüssel am Zeilenanfang wird der Zähler nicht zurückgesetzt if not zeilenAnfang: restCnt = 0 if child.tagName == 'keySign': # Bei einer Tonartänderung an Zeilenanfang wird der Zähler zurückgesetzt if child.getAttribute('fifth') <> actKey: restCnt = 0 actKey = child.getAttribute('fifth') if not zeilenAnfang: restCnt = 0 skiprest = False def latin1_e(u): return u.encode('Latin-1') def getFonts(): global FontList root = Tkinter.Tk() FontListT= tkFont.families() FontList = [] FontList2 = [] i=0 while i < len(FontListT): FontList += [latin1_e(FontListT[i])] i+=1 j=0 while j < len(FontList): FontName = FontList[j] FontList[j] = FontName[0].upper() + FontName[1:] j+=1 FontList.sort() root.destroy() return def changePageObjects(score): # Txx = dict(hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), path = activeScore().pathName() path=path.rstrip(activeScore().title()) ZuordnungSave = shelve.open(path + 'textzuweisung.shl') found = 0 for POs in score.getElementsByTagName('pageObjects'): for basic in POs.getElementsByTagName('basic'): if basic.hasAttribute('tag'): tag = basic.getAttribute('tag') #messageBox('TAG',str(tag)) if tag[0:5] == '2086-': if tag[5:6] >= 70 or int(tag[5:6]) <= 99: tagstatus = 'OK' else : tagstatus = 'NOTOK' else: tagstatus = 'NOTOK' #messageBox('TAGSTATUS',str(tagstatus)) if tagstatus == 'OK': tx = str('T' + tag[5:7]) #messageBox('SAVE',str(tx) + '\n\n' + str(ZuordnungSave)) if ZuordnungSave.has_key(tx): type = ZuordnungSave[tx]['type'] if type == 'text': x = ZuordnungSave[tx]['hp'] align = ZuordnungSave[tx]['hp1'] y = ZuordnungSave[tx]['vp'] face = ZuordnungSave[tx]['ftA'] height = ZuordnungSave[tx]['ftG'] italic = ZuordnungSave[tx]['ftS'] color = ZuordnungSave[tx]['ftF'] weight = ZuordnungSave[tx]['ftR'] #messageBox("Tag",str(tx) + '\nx=' + str(x) + '\nalign=' + str(align) + '\ny=' + str(y) +'\nface=' + str(face) +'\nhight=' + str(hight) +'\nitalic=' + str(italic) +'\ncolor=' + str(color) +'\nweight=' + str(weight)) text = basic.parentNode.getElementsByTagName('text') text[0].setAttribute('x',str(x)) text[0].setAttribute('y',str(y)) font = text[0].getElementsByTagName('font') font[0].setAttribute('face',str(face)) # Font font[0].setAttribute('height',str(height)) # Größe font[0].setAttribute('color',str(color)) # Farbe text[0].setAttribute('align',str(align)) # Alignment font[0].setAttribute('weight',str(weight)) # Stärke font[0].setAttribute('italic',str(italic)) # Schnitt found = 1 elif type == 'richText': x = ZuordnungSave[tx]['hp'] y = ZuordnungSave[tx]['vp'] w = ZuordnungSave[tx]['ftR'] richText = basic.parentNode.getElementsByTagName('richText') richText[0].setAttribute('x',str(x)) richText[0].setAttribute('y',str(y)) richText[0].setAttribute('width',str(w)) found = 1 elif type == 'metafile': x = ZuordnungSave[tx]['hp'] y = ZuordnungSave[tx]['vp'] w = ZuordnungSave[tx]['ftR'] h = ZuordnungSave[tx]['ftG'] metafile = basic.parentNode.getElementsByTagName('metafile') metafile[0].setAttribute('x',str(x)) metafile[0].setAttribute('y',str(y)) metafile[0].setAttribute('width',str(w)) metafile[0].setAttribute('height',str(h)) found = 1 ZuordnungSave.close() if found == 0: messageBox('Seitentexte anpassen','Sie haben "Seitentexte lt. Vorgabe anpassen" ausgewählt. \n\nDiese Stimme enthält keine zugeordneten Seitentexte') def savePageObjects(score): Zuordnung = dict( T70 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T71 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T72 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T73 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T74 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T75 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T76 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T77 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T78 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T79 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T80 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T81 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T82 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T83 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T84 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T85 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T86 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T87 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T88 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T89 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T90 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T91 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T92 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T93 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T94 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T95 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T96 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T97 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T98 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ), T99 = dict(type=0, hp=0, hp1=0, vp=0, ftA=0, ftG=0, ftS=0, ftF=0, ftR=0 ) ) tagstatus = 'NOTOK' for POs in score.getElementsByTagName('pageObjects'): for basic in POs.getElementsByTagName('basic'): if basic.hasAttribute('tag'): tag = basic.getAttribute('tag') #messageBox('TAG',str(tag)) if tag[0:5] == '2086-': if tag[5:6] >= 70 or int(tag[5:6]) <= 99: tagstatus = 'OK' else : tagstatus = 'NOTOK' else: tagstatus = 'NOTOK' if tagstatus == 'OK': text = basic.parentNode.getElementsByTagName('text') richText = basic.parentNode.getElementsByTagName('richText') metafile = basic.parentNode.getElementsByTagName('metafile') tx = 'T'+tag[5:7] #messageBox('TAGSTATUS',str(tx) + '\n' + str(text) + '\n' + str(richText) + '\n' + str(metafile)) if text: font = text[0].getElementsByTagName('font') face = font[0].getAttribute('face') height = font[0].getAttribute('height') weight = font[0].getAttribute('weight') italic = font[0].getAttribute('italic') if font[0].hasAttribute('color'): color = font[0].getAttribute('color') else: color = '000000' if text[0].hasAttribute('align'): align = text[0].getAttribute('align') else: align = 'left' x = text[0].getAttribute('x') y = text[0].getAttribute('y') #messageBox('tx',str(tag) + '\n' + str(tx)) Zuordnung[tx]['type'] = 'text' Zuordnung[tx]['hp'] = x Zuordnung[tx]['hp1'] = align Zuordnung[tx]['vp'] = y Zuordnung[tx]['ftA'] = face Zuordnung[tx]['ftG'] = height Zuordnung[tx]['ftS'] = italic Zuordnung[tx]['ftF'] = color Zuordnung[tx]['ftR'] = weight elif richText: x = richText[0].getAttribute('x') y = richText[0].getAttribute('y') w = richText[0].getAttribute('width') Zuordnung[tx]['type'] = 'richText' Zuordnung[tx]['hp'] = x Zuordnung[tx]['vp'] = y Zuordnung[tx]['ftR'] = w elif metafile: x = metafile[0].getAttribute('x') y = metafile[0].getAttribute('y') w = metafile[0].getAttribute('width') h = metafile[0].getAttribute('height') Zuordnung[tx]['type'] = 'metafile' Zuordnung[tx]['hp'] = x Zuordnung[tx]['vp'] = y Zuordnung[tx]['ftR'] = w Zuordnung[tx]['ftG'] = h else: break #messageBox('SAVE',str(Zuordnung)) path = activeScore().pathName() path=path.rstrip(activeScore().title()) ZuordnungSave = shelve.open(path + 'textzuweisung.shl') ZuordnungSave.update(Zuordnung) ZuordnungSave.close() def pqDialog(score): global pausenTyp, zifferPos, zusammenTyp, halsDir, pageJus, leftInd, inviRst, abstand, zw, useMulti, taktstrich global abs1, abs2, abs3, abs4, pgo, pgu, pgl, pgr, pageLayout, FontList, doppelganze, seitentext, Zuordnung, formDGZ global tnr1, tnr2, tnr3, tasl, tasr, tfnt, tfnt1, tsgr, tssn, tsfb, tram, trst, trfa, tfht, tffa, pausenPos global Textfeld, tnuv, tnrst, zabo, zabu, hzOffset, version options = ScriptOptions() opt = options.get() # Dialog Defaults pt = '1' # Pausen Typ pp = '0' # Pausen Position zp = '1' # Ziffernposition bei Mehrtaktpause ir = '1' # unsichtbare Pause sichtbar machen zt = '0' # einzeilig/mehrzeilig zusammenfassen um = '0' # Mehrtaktpausen zusammenfassen ts = '0' # unterbrechen an festem zusammenTyp dg = '0' # Doppelganze statt Ganze Pausen df = '0' # Form der Doppelganzen hd = '1' # Hals Richtung pj = '2' # Seitenausrichtung pl = '1' # Seitenformat ab = '1.6' # Zeilenabstand li = '1' # linker Einzug erste Zeile zw = '10' # um xx mm a1 = '15' # Zeilenabstand über erster Zeile a2 = '7' # Zeilenabstand nach oben a3 = '7' # Zeilenabstand nach unten a4 = '0' # Abstand zwischen den Systemen po = 'unverändert' # Seitenrand oben pu = 'unverändert' # Seitenrand unten pg = 'unverändert' # Seitenrand links pr = 'unverändert' # Seitenrand rechts ta = '0' # Taknummern am Anfang jedes Systems tb = '0' # Taktnummern : alle durch x teilbaren Takte tc = '5' # Taktnummern : x von tb td = '2' # Taktnummern : Abstand von links te = '7' # Taktnummern : ABstand von rechts tf = '1' # Taktnummern : Schriftart tg = '8' # Taktnummern : Schriftgröße th = '0' # Taktnummern : Schriftschnitt ti = '12' # Taktnummern : Schriftfarbe tj = '0' # Taktnummern : Rahmen tk = '0' # Taktnummern : Rahmenstärke tl = '11' # Taktnummern : Rahmenfarbe tm = '0' # Taktnummern : Füllung halbtransparent tn = '15' # Taktnummern : Füllfarbe tu = '0' # Taktnummern : unverändert tr = '0' # Taktnummern : Korrektur am Systemanfang entfernen st = '1' # Seitentext : nicht anpassen zo = '0' # zusätzlicher Zeilenabstand nach oben zu = '0' # zusätzlicher Zeilenabstand nach unten ho = '0' # horzontales Offset der Noten zurücksetzen if opt: pt = opt.get('dpausenTyp',pt) zp = opt.get('dzifferPos',zp) ir = opt.get('dinviRst',ir) hd = opt.get('dhalsDir',hd) zt = opt.get('dzusammenTyp',zt) # einzeilig/mehrzeilig zusammenfassen um = opt.get('duseMulti',um) # Mehrtaktpausen zusammenfassen ts = opt.get('dtaktstrich',ts) # unterbrechen an festem zusammenTyp dg = opt.get('ddoppelganze',dg) # Doppelganze statt Ganze Pausen df = opt.get('dformDGZ',df) # Form der Doppelganzen pj = opt.get('dpageJus',pj) pl = opt.get('dpageLayout',pl) ab = opt.get('dabstand',ab) li = opt.get('dleftInd',li) zw = opt.get('dzw',zw) a1 = opt.get('dabs1',a1) a2 = opt.get('dabs2',a2) a3 = opt.get('dabs3',a3) a4 = opt.get('dabs4',a4) # Abstand zwischen den Systemen po = opt.get('dpgo',po) pu = opt.get('dpgu',pu) pg = opt.get('dpgl',pg) pr = opt.get('dpgr',pr) pp = opt.get('dpausenPos',pp) # Pausenposition tu = opt.get('dtnuv',tu) # Taknummern unverändert ta = opt.get('dtnr1',ta) # Taknummern am Anfang jedes Systems tb = opt.get('dtnr2',tb) # Taktnummern : alle durch x teilbaren Takte tc = opt.get('dtnr3',tc) # Taktnummern : x von tb td = opt.get('dtasl',td) # Taktnummern : Abstand von links te = opt.get('dtasr',te) # Taktnummern : Abstand von rechts tf = opt.get('dtfnt',tf) # Taktnummern : Schriftart tg = opt.get('dtsgr',tg) # Taktnummern : Schriftgröße th = opt.get('dtssn',th) # Taktnummern : Schriftschnitt ti = opt.get('dtsfb',ti) # Taktnummern : Schriftfarbe tj = opt.get('dtram',tj) # Taktnummern : Rahmen tk = opt.get('dtrst',tk) # Taktnummern : Rahmenstärke tl = opt.get('dtrfa',tl) # Taktnummern : Rahmenfarbe tm = opt.get('dtfht',tm) # Taktnummern : Füllung halbtransparent tn = opt.get('dtffa',tn) # Taktnummern : Füllfarbe tr = opt.get('dtnrst',tr) # Taktnummern : Korrektur am Zeilenanfang zurücksetzen st = opt.get('dseitentext',st) # Seitentext zo = opt.get('dzabo',zo) # zusätzlicher Seitenabstand nach oben zu = opt.get('dzabu',zu) # zusätzlicher Seitenabstand nach unten ho = opt.get('dhzOffset',ho) # horizontale Verschiebung der Noten zurücksetzen placeholder1 = Label(' ',width=1) placeholder2 = Label(' ',width=1) placeholder3 = Label(' ',width=1) placeholder4 = Label(' ',width=1) radPausenTyp = Radio(['Kirchenpausen','Balkenpausen','nicht zusammenfassen'],text='zusammenfassen als',value=int(opt.get('pausenTyp',str(pt)))) radZifferPos = Radio(['unten','oben'],text='Ziffernposition',value=int(opt.get('zifferPos',str(zp)))) radInviRst = Radio(['nicht sichtbar machen','sichtbar machen'],text='unsichtbare Pausen',value=int(opt.get('inviRst',str(ir)))) radZusammenTyp = Radio(['einzeilig ( alle Zeilen )','mehrzeilig oder systemweise '],text='zusammenfassen',value=int(opt.get('zusammenTyp',str(zt)))) radUseMulti = Radio(['nicht zusammenfassen','zusammenfassen'],text='Mehrtaktpausen',value=int(opt.get('useMulti',str(um)))) radTaktstrich = Radio(['Zusammenfassen unterbrechen','zusammenfassen'],text='bei einfachen festen Taktstrichen',value=int(opt.get('taktstrich',str(ts)))) raddoppelGz = Radio(['Brevis ','Modern'],text='Doppelganze',value=int(opt.get('formDGZ',str(df)))) radPausenPos = Radio(['unverändert','normal'],text='Pausenposition',value=int(opt.get('pausenPos',str(pp)))) checkdoppelGz = CheckBox('Doppelganze statt',value=int(opt.get('doppelganze',str(dg)))) lablDG = Label(' Ganze Pausen ( nur 4/2 Takt )',width=6) checkHzOffset = CheckBox('horizontale Versetzung entfernen',value=int(opt.get('hzOffset',str(ho)))) subboxVPause1 = VBox([radZusammenTyp,radTaktstrich]) subboxVPause2 = VBox([radInviRst,radUseMulti,placeholder2]) subboxVPause3 = VBox([radPausenTyp,checkdoppelGz,lablDG,placeholder2]) subboxVPause4 = VBox([radZifferPos,radPausenPos]) subboxPausen = HBox([subboxVPause3,subboxVPause4,subboxVPause1,subboxVPause2],text='Pausen') radHalsDir = Radio(['nicht ausrichten','ausrichten','unverändert'],text='erzwungene Halsrichtung',value=int(opt.get('halsDir',str(hd)))) subboxHals = HBox([radHalsDir,placeholder2],padding=4) subboxVNoten1 = VBox([subboxHals,raddoppelGz,checkHzOffset]) subboxNoten = HBox([subboxVNoten1],text='Noten') mainboxPausen = HBox([subboxPausen,subboxNoten],padding=3) radPageJus = Radio(['nein','alle Seiten','alle ausser letzter Seite'],text='Seitenausrichtung',value=int(opt.get('pageJus',str(pj)))) subboxJus = HBox([radPageJus]) radPageLayout = Radio(['Querformat','Hochformat'],text='Seitenformat',value=int(opt.get('pageLayout',str(pl)))) subboxLayout = HBox([radPageLayout]) lablPageOben = Label('oben ',width=6) editPageOben = Edit (opt.get('pgo',str(po)),width=10) lablPageUnten = Label('unten ',width=6) editPageUnten = Edit (opt.get('pgu',str(pu)),width=10) lablPageLinks = Label('links ',width=6) editPageLinks = Edit (opt.get('pgl',str(pg)),width=10) lablPageRechts= Label('rechts ',width=6) editPageRechts= Edit (opt.get('pgr',str(pr)),width=10) radSeitentext = Radio(['Vorgaben speichern','nicht anpassen','lt. Vorgaben anpassen'],text='Seitentexte *',value=int(opt.get('seitentext',str(st)))) subboxPgOben = HBox([lablPageOben,editPageOben,placeholder4]) subboxPgUnten = HBox([lablPageUnten,editPageUnten,placeholder4]) subboxPgLinks = HBox([lablPageLinks,editPageLinks,placeholder4]) subboxPgRechts= HBox([lablPageRechts,editPageRechts,placeholder4]) subboxPgRand = VBox([subboxPgOben,subboxPgUnten,subboxPgLinks,subboxPgRechts],text='Seitenränder in mm') box1 = HBox([subboxLayout,subboxPgRand,subboxJus,radSeitentext,placeholder4]) mainboxSeiten = HBox([box1],text='Seiten') radLeftInd = Radio(['nicht einrücken','einrücken um '],text='Einzug',value=int(opt.get('leftInd',str(li)))) lablEinRueck = Label(' Zwischenräume',width=6) editEinRueck = Edit (opt.get('zw',str(zw)),width=4) box1 = HBox([placeholder4,editEinRueck,lablEinRueck,placeholder2]) box2 = VBox([placeholder1,placeholder1,placeholder1,box1]) subboxEinRueck= HBox([box2]) subboxInd = HBox([radLeftInd,subboxEinRueck],text='linker Einzug der ersten Zeile',padding=0) lablLinAbst = Label('normal',width=6) editLinAbst = Edit (opt.get('abstand',str(ab)),width=6) subboxAbst = HBox([lablLinAbst,editLinAbst],text='Notenlinienabstand') lablUeber1Z = Label('über 1. Zeile ',width=6) editUeber1Z = Edit (opt.get('abs1',str(a1)),width=6) lablNachOben = Label('nach oben ',width=6) editNachOben = Edit (opt.get('abs2',str(a2)),width=6) lablNachUnten = Label('nach unten ',width=6) editNachUnten = Edit (opt.get('abs3',str(a3)),width=6) chkZusOben = CheckBox('nach oben - zurücksetzen',value=int(opt.get('zabo',str(zo)))) #zusätzlicher Zeilenabstand nach oben chkZusUnten = CheckBox('nach unten - zurücksetzen',value=int(opt.get('zabu',str(zu)))) #zusätzlicher Zeilenabstand nach unten subboxZlAbst1 = HBox([lablUeber1Z,editUeber1Z,placeholder4]) subboxZlAbst2 = HBox([lablNachOben,editNachOben,placeholder4]) subboxZlAbst3 = HBox([lablNachUnten,editNachUnten,placeholder4]) subboxAbstZl = VBox([subboxZlAbst1,subboxZlAbst2,subboxZlAbst3],text='Zeilenabstände') subboxAbstZu = VBox([chkZusOben,chkZusUnten],text='zusätzlichen Zeilenabstand') lablSysAbst = Label('Abstand',width=6) editSysAbst = Edit (opt.get('abs4',str(a4)),width=6) subboxSysAbst = HBox([lablSysAbst,editSysAbst],text='Systemabstand') subboxZeilen = HBox([subboxInd,subboxAbstZl,subboxAbstZu,subboxAbst,subboxSysAbst,placeholder4],text='Notenzeilen und Systeme') mainboxZeilen = HBox([subboxZeilen]) chkIgnore = CheckBox('nichts verändern',value=int(opt.get('tnuv',str(tu)))) #Taktnummern unverändert chkReset = CheckBox('Korrekturen zurücksetzen',value=int(opt.get('tnrst',str(tr)))) #Korrekturen am Zeilenanfang zurücksetzen chkSysAnf = CheckBox('Systemanfang',value=int(opt.get('tnr1',str(ta)))) #Taktnummern Platzierung chkTeil = CheckBox('alle durch ',value=int(opt.get('tnr2',str(tb)))) editTeil = Edit(opt.get('tnr3',str(tc)),width=4) lablTeil = Label(' teilbaren Taktnummern * ') labllzr = Label('von links ',width=6) editlzr = Edit(opt.get('tasl',str(td)),width=4) lablrzr = Label('nach oben ',width=6) editrzr = Edit(opt.get('tasr',str(te)),width=4) lablzr = Label(' /2 Zwischenräume ',width=6) sbteilbar = HBox([chkTeil,editTeil,lablTeil]) sblzw = HBox([labllzr,editlzr,lablzr]) sbrzw = HBox([lablrzr,editrzr,lablzr]) radRahmen = Radio(['keiner','rechteckig','oval'],value=int(opt.get('tram',str(tj)))) #Rahmen zr = ['0','1','2','3','4','5'] lablStk = Label('Stärke * ') comRahmen = ComboBox(zr,value=int(opt.get('trst',str(tk)))) sbStk = HBox([lablStk,comRahmen]) lablFarbe = Label('Farbe * ') RFarbe = ['rot','orange','orange-gelb','gelb','gelb-grün','grün','blau-grün','grün-blau','blau','violett','rot-violett','schwarz','dunkelgrau','hellgrau','weiss'] comRFarbe = ComboBox(RFarbe,width=8,value=int(opt.get('trfa',str(tl)))) sbRFarbe = HBox([lablFarbe,comRFarbe,placeholder4],width=20) chkFl = CheckBox('halbtransparent * ',value=int(opt.get('tfht',str(tm)))) # Füllung FFarbe = ['ungefüllt','rot','orange','orange-gelb','gelb','gelb-grün','grün','blau-grün','grün-blau','blau','violett','rot-violett','schwarz','dunkelgrau','hellgrau','weiss'] comFFarbe = ComboBox(FFarbe,width=9,value=int(opt.get('tffa',str(tn)))) sbFFarbe = HBox([lablFarbe,comFFarbe,placeholder4],width=20) getFonts() # Schrift lablFont = Label('Schriftart ') comFont = ComboBox(FontList,width=18,value=int(opt.get('tfnt',str(tf)))) sbFont = HBox([lablFont,comFont,placeholder4],width=20) lablFGr = Label('Größe ') editFGr = Edit(opt.get('tsgr',str(tg)),width=4) sbFGr = HBox([lablFGr,editFGr,placeholder4],width=3) lablSchnitt = Label('Schnitt ') Schnitte = ['Standard','Kursiv','Fett','Fett Kursiv'] comSchnitt = ComboBox(Schnitte,width=12,value=int(opt.get('tssn',str(th)))) sbSchnitt = HBox([lablSchnitt,comSchnitt,placeholder4],width=20) lablFarb = Label('Farbe ') comSFarbe = ComboBox(RFarbe,width=8,value=int(opt.get('tsfb',str(ti)))) sbSFarbe = HBox([lablFarb,comSFarbe,placeholder4],width=20) lablRem = Label('* = Option ist erst ab Capella 2008 verfügbar') subboxAllg1 = VBox([chkIgnore,chkReset]) subboxAllg = VBox([subboxAllg1],text='Allgemeines') subboxPlatz1 = VBox([chkSysAnf,sblzw,sbrzw,placeholder2,sbteilbar]) subboxPlatz = VBox([subboxPlatz1],text='Platzierung') subboxRahmen = VBox([radRahmen,sbStk,sbRFarbe],text='Rahmen') subboxFuell = VBox([chkFl,sbFFarbe],text='Füllung * ') subboxSchrift = VBox([sbFont,sbFGr,sbSchnitt,sbSFarbe],text='Schrift') mainboxTaktnr = HBox([subboxAllg,subboxPlatz,subboxRahmen,subboxFuell,subboxSchrift],text='Taktnummern') box = VBox([mainboxPausen,mainboxZeilen,mainboxSeiten,mainboxTaktnr,lablRem,placeholder4]) dlg = Dialog('Rohformatierer Version: '+version, box) if dlg.run(): pausenTyp = radPausenTyp.value() pausenPos = radPausenPos.value() zifferPos = radZifferPos.value() zusammenTyp = radZusammenTyp.value() useMulti = radUseMulti.value() taktstrich = radTaktstrich.value() doppelganze = checkdoppelGz.value() formDGZ = raddoppelGz.value() pageLayout= radPageLayout.value() inviRst = radInviRst.value() halsDir = radHalsDir.value() pageJus = radPageJus.value() abstand = editLinAbst.value() leftInd = radLeftInd.value() zw = editEinRueck.value() abs1 = editUeber1Z.value() abs2 = editNachOben.value() abs3 = editNachUnten.value() abs4 = editSysAbst.value() pgo = editPageOben.value() pgu = editPageUnten.value() pgl = editPageLinks.value() pgr = editPageRechts.value() tnr1 = chkSysAnf.value() tnuv = chkIgnore.value() tnr2 = chkTeil.value() tnr3 = editTeil.value() tasl = editlzr.value() tasr = editrzr.value() tfnt = comFont.value() tfnt1 = FontList[comFont.value()] tsgr = editFGr.value() tssn = comSchnitt.value() tsfb = comSFarbe.value() tram = radRahmen.value() trst = comRahmen.value() trfa = comRFarbe.value() tfht = chkFl.value() tffa = comFFarbe.value() tnrst = chkReset.value() seitentext= radSeitentext.value() zabo = chkZusOben.value() zabu = chkZusUnten.value() hzOffset = checkHzOffset.value() opt = dict( dpausenTyp = str(pausenTyp), dpausenPos = str(pausenPos), dzifferPos = str(zifferPos), dzusammenTyp= str(zusammenTyp), duseMulti = str(useMulti), dtaktstrich = str(taktstrich), ddoppelganze= str(doppelganze), dformDGZ = str(formDGZ), dpageLayout = str(pageLayout), dinviRst = str(inviRst), dhalsDir = str(halsDir), dpageJus = str(pageJus), dabstand = str(abstand), dleftInd = str(leftInd), dzw = str(zw), dabs1 = str(abs1), dabs2 = str(abs2), dabs3 = str(abs3), dabs4 = str(abs4), dpgo = str(pgo), dpgu = str(pgu), dpgl = str(pgl), dpgr = str(pgr), dtnr1 = str(tnr1), dtnuv = str(tnuv), dtnr2 = str(tnr2), dtnr3 = str(tnr3), dtasl = str(tasl), dtasr = str(tasr), dtfnt = str(tfnt), dtsgr = str(tsgr), dtssn = str(tssn), dtsfb = str(tsfb), dtram = str(tram), dtrst = str(trst), dtrfa = str(trfa), dtfht = str(tfht), dtffa = str(tffa), dtnrst = str(tnrst), dseitentext = str(seitentext), dzabo = str(zabo), dzabu = str(zabu), dhzOffset = str(hzOffset) ) options.set(opt) return True else: return False # Hauptprogramm: if activeScore(): #if pqDialog(): activeScore().registerUndo("Rohformatierer") tempInput = tempfile.mktemp('.capx') tempOutput = tempfile.mktemp('.capx') activeScore().write(tempInput) Rohformatierer(tempInput, tempOutput) activeScore().read(tempOutput) os.remove(tempInput) os.remove(tempOutput)