# -*- coding: ISO-8859-1 -*-
""" capellaScript -- Liedtextformat kopieren
>>>
Diese Skript kopiert die Liedtextformatierung in alle gleichnahmigen Notenzeilen.
Kopiert wird das erste Format, das für eine Notenzeile gefunden wird.    
<<<

History:  08.06.2010 - Erste Ausgabe - Aus Layout_Kopieren abgeleitet
          
Rückmeldungen bitte an villpaul(a)bluewin.ch

"""

german = ("de", {
    'regUndo'               :   'Liedtextformat Kopieren'
    })


try:
    exec('from %s import translations' % ( translationModule() ))
    translations.append(german)
    setLanguages(translations)
except:
    def tr(s):
        return german[1].get(s, "???")
    
#-------------------------------------------------------------------

import new, os.path
from xml.dom.minidom import NodeList, Node, Element

def gotoChild(self, name, new=False):
    newEl = None
    if new:
        pass
    else:
        for child in self.childNodes:
            if child.nodeType == child.ELEMENT_NODE and child.tagName == name:
                newEl = child
                break
    if newEl == None:
        newEl = doc.createElement(name)
        self.appendChild(newEl)
    return newEl
Node.gotoChild = new.instancemethod(gotoChild,None,Node)

def getChildNodes(currentNode):
    childs = currentNode.childNodes
    newList = []
    for c in childs:
        if c.nodeType == c.ELEMENT_NODE:
            newList.append(c)
    return newList

class layoutCollector(Node):

    def __init__(self):

        self.copyLyricsSettings = 1
        self.ok = True

    def collectLyricsSettings(self, score):
        self.lyricsSettings = {}
        for staff in score.getElementsByTagName('staff'):
            layout = staff.getAttribute('layout')
            if layout in self.lyricsSettings:
                continue
            for lyricsSettings in staff.getElementsByTagName('lyricsSettings'):
                self.lyricsSettings[layout] = lyricsSettings.cloneNode(True)
                break
            
    def setLyricsSettings(self, score):
        if not self.copyLyricsSettings:
            return
        for staff in score.getElementsByTagName('staff'):
            layout = staff.getAttribute('layout')
            for lyricsSettings in staff.getElementsByTagName('lyricsSettings'):
                lyricsSettings.parentNode.replaceChild(self.lyricsSettings[layout].cloneNode(True), lyricsSettings)


lc = layoutCollector()

def changeDoc(score):
    lc.collectLyricsSettings(score)
    lc.setLyricsSettings(score)

# Hauptprogramm:
from caplib.capDOM import ScoreChange
import tempfile


class ScoreChange(ScoreChange):

    def changeScore(self, score):
        changeDoc(score)

        
if activeScore() and lc.ok:
    activeScore().registerUndo(tr('regUndo'))
    tempInput2 = tempfile.mktemp('.capx')
    tempOutput2 = tempfile.mktemp('.capx')
    activeScore().write(tempInput2)

    ScoreChange(tempInput2, tempOutput2)
    
    activeScore().read(tempOutput2)
    os.remove(tempInput2)
    os.remove(tempOutput2)
else:
    pass

