# -*- coding: ISO-8859-1 -*-
""" capellaScript -- Paul Villiger
>>> Erste Gehversuche mit externen Scripts
    Alle Haltebögen werden entfernt und durch Bindebögen ersetzt.   
    Bindebögen müssen manuell angepasst werden   
<<<
"""

from caplib.capDOM import ScoreChange
import tempfile

class TestChange (ScoreChange):
    def __init__(self, inputFile, outputFile=''):
        ScoreChange.__init__(self, inputFile, outputFile)

    def changeElement(self, el):

        #
        # Wandelt alle Haltebögen in normale Bindebögen umum
        # Bindebögen müssen u.U. nachträglich noch angepasst werden.en
        #
        if el.tagName == 'chord':
            # Der Beginn jedes Haltebogens wird durch ein Bindebogen ersetzt
            ties = el.getElementsByTagName('tie')
            if ties.length > 0:
                if ties[0].getAttribute('begin'):
                    drawObj = self.doc.createElement('drawObj')
                    slur = self.doc.createElement('slur')
                    # x1="0.75" y1="2" x2="1.75" y2="3.5" x3="-0.75" y3="3.5" x4="0.25" y4="2"
                    slur.setAttribute('x1', '0.75')
                    slur.setAttribute('y1', '2')
                    slur.setAttribute('x2', '1.75')
                    slur.setAttribute('y2', '3.5')
                    slur.setAttribute('x3', '-0.75')
                    slur.setAttribute('y3', '3.5')
                    slur.setAttribute('x4', '0.25')
                    slur.setAttribute('y4', '2')
                
                    basic = self.doc.createElement('basic')
                    basic.setAttribute('noteRange', '1')
                    drawObj.appendChild(slur)
                    drawObj.appendChild(basic)
                    drawObjects = el.getElementsByTagName('drawObjects')
                    if drawObjects.length == 0:
                        # noch kein drawObjects vorhanden
                        drawObjects = self.doc.createElement('drawObjects')
                        drawObjects.appendChild(drawObj)
                        el.appendChild(drawObjects)
                    else:
                        # drawObjects ist bereits vorhanden
                        drawObjects[0].appendChild(drawObj)
                
            # Alle Haltebogenattribute aus der Partitur entfernen
            heads = el.getElementsByTagName('head')            
            for head in heads:
                ties = head.getElementsByTagName('tie')
                for tie in ties:
                    oldTie = head.removeChild(tie)
                    oldTie.unlink()
                    
                
if 'capella' in dir():
    #--- Skript wurde von capella aufgerufen
    if activeScore():
        activeScore().registerUndo("Bindebögen stricheln")
        tempFile1 = tempfile.mktemp('.capx')
        tempFile2 = tempfile.mktemp('.capx')
        activeScore().write(tempFile1)

        TestChange(tempFile1, tempFile2)

        activeScore().read(tempFile2)
        os.remove(tempFile1)
        os.remove(tempFile2)

