def parse(self): song = Song() #song.name = self.name token = self._tokens.dequeue() #TODO Parse the file and build a complete Song object to be returned for x in range(0, self._tokens.size() + 1): if (token.type == 0 and token.value == "song"): token = self._tokens.dequeue() while(token): if (token.type == 1 and token.value == "song"): #print("done") #print(song.verses) return song break elif (token.type == 0 and token.value == "name"): token = self._tokens.dequeue() while(token): if (token.type == 4 or token.type == 2 or token.type == 3): song.name = str(token.value) print(token.value) token = self._tokens.dequeue() if (token.type == 1 and token.value == "name"): token = self._tokens.dequeue() print("hello") break else: print("Parse Error") break else: print("Invalid type for name tag") break elif (token.type == 0 and token.value == "backgroundColor"): token = self._tokens.dequeue() while(token): if (self.colors == 3): self.colors = 0 #print("gettin somewhere") song.backgroundColor = (self.red, self.green, self.blue) token = self._tokens.dequeue() break elif (token.type == 0 and token.value == "red"): token = self._tokens.dequeue() if (token.type == 2 or token.type == 3): self.red = token.value self.color = self.color + self.red self.colors += 1 token = self._tokens.dequeue() if (token.type == 1 and token.value == "red"): token = self._tokens.dequeue() else: print("Parse Error") break else: print("Parse Error") break elif (token.type == 0 and token.value == "blue"): token = self._tokens.dequeue() if (token.type == 2 or token.type == 3): self.blue = token.value self.color = self.color + (self.blue * 256) self.colors += 1 token = self._tokens.dequeue() if (token.type == 1 and token.value == "blue"): token = self._tokens.dequeue() else: print("Parse Error") break else: print("Parse Error") break elif (token.type == 0 and token.value == "green"): token = self._tokens.dequeue() if (token.type == 2 or token.type == 3): self.green = token.value self.color = self.color + (self.green * 256) self.colors += 1 token = self._tokens.dequeue() if (token.type == 1 and token.value == "green"): token = self._tokens.dequeue() else: print("Parse Error") break else: print("Parse Error") break else: print("Invalid type for backgroundcolor tag") break elif (token.type == 0 and token.value == "soundFile"): token = self._tokens.dequeue() while(token): if (token.type == 4): song.songFile = token.value token = self._tokens.dequeue() if (token.type == 1 and token.value == "soundFile"): token = self._tokens.dequeue() break else: print("Parse Error") break else: print("Invalid type for name tag") break elif (token.type == 0 and token.value == "verse"): self._verse = Verse() self._line = Line() self._word = Word() token = self._tokens.dequeue() while(token): if (token.type == 0 and token.value == "line"): token = self._tokens.dequeue() #print("im a line") while(token): #print(token.value) if (token.type == 0 and token.value == "line"): break if (token.type == 1 and token.value == "line"): break if (token.type == 0 and token.value == "word"): #print("not me") token = self._tokens.dequeue() while(token): #self.tracker += 1 #print(token.value) if (token.type == 1 and token.value == "word"): self._line.addWord(self._word) self._word = Word() token = self._tokens.dequeue() break elif (token.type == 0 and token.value == "value"): token = self._tokens.dequeue() if (token.type == 4): self._word.value = token.value print(self._word.value) token = self._tokens.dequeue() if (token.type == 1 and token.value == "value"): token = self._tokens.dequeue() else: print("Error") break else: print("error") break elif (token.type == 0 and token.value == "timing"): token = self._tokens.dequeue() if (token.type == 2 or token.type == 3): #print(token.value) self._word.timing = token.value #self._verse.duration += self._word.timing token = self._tokens.dequeue() if (token.type == 1 and token.value == "timing"): token = self._tokens.dequeue() else: print("Error") break elif (token.type == 0 and token.value == "color"): token = self._tokens.dequeue() while(token): if (self.colors == 3): self.colors = 0 self._word.color = (int(self.red), int(self.green), int(self.blue)) token = self._tokens.dequeue() break elif (token.type == 0 and token.value == "red"): token = self._tokens.dequeue() if (token.type == 2 or token.type == 3): self.red = token.value self.color = self.color + int(self.red) self.colors += 1 token = self._tokens.dequeue() print("i am red") if (token.type == 1 and token.value == "red"): token = self._tokens.dequeue() else: print("Parse Error") break else: print("Parse Error") break elif (token.type == 0 and token.value == "green"): token = self._tokens.dequeue() if (token.type == 2 or token.type == 3): self.green = token.value self.color = self.color + (int(self.green) * 256) self.colors += 1 token = self._tokens.dequeue() if (token.type == 1 and token.value == "green"): token = self._tokens.dequeue() else: print("Parse Error") break else: print("Parse Error") break elif (token.type == 0 and token.value == "blue"): token = self._tokens.dequeue() if (token.type == 2 or token.type == 3): self.blue = token.value self.color = self.color + (int(self.blue) * 256) self.colors += 1 token = self._tokens.dequeue() if (token.type == 1 and token.value == "blue"): token = self._tokens.dequeue() else: print("Parse Error") break else: print("Parse Error") break elif (token.type == 1 and token.value == "line"): self._verse.addLine(self._line) self._line = Line() token = self._tokens.dequeue() elif (token.type == 1 and token.value == "verse"): print("the duration is " + str(self._verse.duration)) print("the height is " + str(self._verse.height)) print("the width is " + str(self._verse.width)) print("the number of lines is " + str(self._verse.lines)) song.addVerse(self._verse) self._verse = Verse() token = self._tokens.dequeue() break elif (token.type == 0 and token.value == "backgroundImg"): token = self._tokens.dequeue() while(token): if (token.type == 4): self._verse.backgroundImg = token.value token = self._tokens.dequeue() if (token.type == 1 and token.value == "backgroundImg"): token = self._tokens.dequeue() break else: print("BackgroundImg missing closing tag") break else: print("BackgroundImg tags must be ints") break elif (token.type == 1 and token.value == "song"): return song break else: print("unknown song value") break else: print("Error") break return song