コード例 #1
0
ファイル: ParoleManager.cs プロジェクト: Epitanime/MadShoKen
        internal void saveManualModifs(RichTextBox frameBox)
        {
            StringSplitOptions option = StringSplitOptions.RemoveEmptyEntries;

            String[] lineList = frameBox.Text.Split(new String[] { "\n", Environment.NewLine }, option);

            //List<LyricSyl> sylList = this.getSylList();
            Int32 cpt = 0;
            int linePos = 0;
            int lineNum = 0;
            //int lineDec = 0;
            int sylNum = -1;
            int beginAt = 0;
            //int sylDec = 0;
            String line;
            LyricLine lyricLine = null;
            LyricSyl lyricSyl = null;
            int backCurrentLine = this.currentLine;
            int backCurrentSyl = (backCurrentLine < this.lyricList.Count ? lyricList[backCurrentLine].getCurrentSyl() : 0);
            clearLyrics();
            while (linePos < lineList.Length)
            {
                beginAt = 0;
                line = lineList[linePos];

                if (line.Length == 0)
                {
                    //todo : cas vide
                }
                else if (line.ToCharArray()[0].Equals('%'))
                {
                    //TODO: cas information
                }
                else
                {
                    int num;
                    String[] parts = line.Split(new Char[] { ' ' }, 5);
                    //recuperation de la ligne
                    if (parts.Length == 0 || !int.TryParse(parts[0], out num))
                    {
                        //creer une nouvele ligne
                        //lineDec ++;
                        lyricLine = new LyricLine();
                        lineNum = 0;
                        lyricList.Add(lyricLine);
                        //sylDec = 0;
                        sylNum = 0;
                        lyricSyl = new LyricSyl("");
                        lyricLine.Add(lyricSyl);

                    }
                    else
                    {
                        beginAt = 1;
                        if (num != lineNum)
                        {
                            //si on a changé de ligne
                            lyricLine = new LyricLine();
                            lineNum = num;
                            lyricList.Add(lyricLine);
                            sylNum = 0;
                        }
                        if (lyricLine == null)
                        {
                            throw (new Exception("Erreur de parsing"));
                        }
                        //recuperation de la syllabe
                        if (parts.Length < 2 || !int.TryParse(parts[1], out num))
                        {
                            //creer une nouvele ligne
                            //sylDec ++;
                            lyricSyl = new LyricSyl("");
                            sylNum = 0;
                            lyricLine.Add(lyricSyl);
                        }
                        else
                        {
                            beginAt = 2;
                            if (num != sylNum)
                            {
                                //si on a changé de sylabe
                                lyricSyl = new LyricSyl("");
                                sylNum = num;
                                lyricLine.Add(lyricSyl);
                            }
                            if (lyricSyl == null)
                            {
                                throw (new Exception("Erreur de parsing"));
                            }

                            //recuperation des frames
                            if (parts.Length < 3 || !int.TryParse(parts[2], out num))
                            {
                                lyricSyl.setBeginFrame(0);
                            }
                            else
                            {
                                beginAt = 3;
                                //si on est sur la même syl on ne garde que la fin
                                if (lyricSyl.getBeginFrame() <= 0)
                                    lyricSyl.setBeginFrame(num);

                                if (parts.Length < 4 || !int.TryParse(parts[3], out num))
                                {
                                    lyricSyl.setEndFrame(0);
                                }
                                else
                                {
                                    beginAt = 4;
                                    lyricSyl.setEndFrame(num);
                                }
                            }
                        }
                    }
                    for (int i = beginAt; i < parts.Length; ++i)
                    {
                        //espace de fin de ligne
                        if (parts[i].Length == 0)
                            parts[i] = " ";
                        lyricSyl.setText(lyricSyl.getText() + parts[i]);
                    }
                }
                linePos++;
            }

            onFrameChangedEvent.Invoke(this, new EventArgs());//displayAllFrames();
            this.currentLine = backCurrentLine;
            if (currentLine < this.lyricList.Count)
            {
                lyricList[currentLine].setCurrentSyl(backCurrentSyl);
            }
            onCurrentLineChangedEvent.Invoke(this, new EventArgs());
            //displayCurrentLine(false);
        }
コード例 #2
0
ファイル: ParoleManager.cs プロジェクト: Epitanime/MadShoKen
 public Boolean loadLyricsFile()
 {
     //try
     //{
         String path = lyricsFilepath;
         clearLyricsFile();
         if (path != "" && File.Exists(path))
         {
             this.setLyricsFilepath(path);
             // Création d'une instance de StreamReader pour permettre la lecture de notre fichier
             StreamReader streamReader = new StreamReader(lyricsFilepath);
             String ligne = streamReader.ReadLine();
             // Lecture de toutes les lignes et affichage de chacune sur la page
             while (ligne != null)
             {
                 ligne = ligne.Trim();
                 if (ligne.Length > 0)
                 {
                     if (!ligne.ToCharArray()[0].Equals('%'))
                     {
                         String[] splitted = ligne.Split(new Char[] { '&' });
                         LyricLine lyricLine = new LyricLine();
                         foreach (String syltext in splitted)
                         {
                             if (syltext.Length > 0)
                             {
                                 lyricLine.Add(new LyricSyl(syltext));
                             }
                         }
                         lyricList.Add(lyricLine);
                     }
                     else
                     {
                         if (ligne.Length >= 21 && ligne.Substring(0, 6).CompareTo("%color") == 0)
                         {
                             String[] splitter = ligne.Substring(6, ligne.Length - 6).Trim().Split(new Char[] { ' ' });
                             if (splitter.Length >= 3
                                 && splitter[0].Length >= 6
                                 && splitter[1].Length >= 6
                                 && splitter[2].Length >= 6)
                             {
                                 colorArray[0] = Color.FromArgb(
                                     int.Parse(splitter[0].Substring(4, 2), NumberStyles.HexNumber)
                                     , int.Parse(splitter[0].Substring(3, 2), NumberStyles.HexNumber)
                                     , int.Parse(splitter[0].Substring(0, 2), NumberStyles.HexNumber));
                                 colorArray[1] = Color.FromArgb(
                                     int.Parse(splitter[1].Substring(4, 2), NumberStyles.HexNumber)
                                     , int.Parse(splitter[1].Substring(3, 2), NumberStyles.HexNumber)
                                     , int.Parse(splitter[1].Substring(0, 2), NumberStyles.HexNumber));
                                 colorArray[2] = Color.FromArgb(
                                     int.Parse(splitter[2].Substring(4, 2), NumberStyles.HexNumber)
                                     , int.Parse(splitter[2].Substring(3, 2), NumberStyles.HexNumber)
                                     , int.Parse(splitter[2].Substring(0, 2), NumberStyles.HexNumber));
                                 onColorChangedEvent.Invoke(this, new EventArgs());
                             }
                         }
                     }
                 }
                 ligne = streamReader.ReadLine();
             }
             // Fermeture du StreamReader (attention très important)
             streamReader.Close();
             return true;
         }
         else
             return false;
     /*            }
     catch (Exception ex)
     {
         MessageBox.Show("Erreur de lecture du fichier : " + ex.Message);
         return false;
     }
         */
 }