public TimeReplacer(Th09Converter parent)
 {
     this.evaluator = new MatchEvaluator(match =>
     {
         return(parent.allScoreData.PlayStatus.TotalRunningTime.ToLongString());
     });
 }
            public ClearReplacer(Th09Converter parent)
            {
                this.evaluator = new MatchEvaluator(match =>
                {
                    var level = LevelParser.Parse(match.Groups[1].Value);
                    var chara = CharaParser.Parse(match.Groups[2].Value);
                    var type  = int.Parse(match.Groups[3].Value, CultureInfo.InvariantCulture);

                    var count = parent.allScoreData.PlayStatus.ClearCounts[chara].Counts[level];

                    if (type == 1)
                    {
                        return(Utils.ToNumberString(count));
                    }
                    else
                    {
                        if (count > 0)
                        {
                            return("Cleared");
                        }
                        else
                        {
                            var score = parent.allScoreData.Rankings[new CharaLevelPair(chara, level)][0];
                            var date  = Encoding.Default.GetString(score.Date).TrimEnd('\0');
                            return((date != "--/--") ? "Not Cleared" : "-------");
                        }
                    }
                });
            }
            public ScoreReplacer(Th09Converter parent)
            {
                this.evaluator = new MatchEvaluator(match =>
                {
                    var level = LevelParser.Parse(match.Groups[1].Value);
                    var chara = CharaParser.Parse(match.Groups[2].Value);
                    var rank  = Utils.ToZeroBased(
                        int.Parse(match.Groups[3].Value, CultureInfo.InvariantCulture));
                    var type = int.Parse(match.Groups[4].Value, CultureInfo.InvariantCulture);

                    var score = parent.allScoreData.Rankings[new CharaLevelPair(chara, level)][rank];
                    var date  = string.Empty;

                    switch (type)
                    {
                    case 1:         // name
                        return(Encoding.Default.GetString(score.Name).Split('\0')[0]);

                    case 2:         // score
                        return(Utils.ToNumberString((score.Score * 10) + score.ContinueCount));

                    case 3:         // date
                        date = Encoding.Default.GetString(score.Date).Split('\0')[0];
                        return((date != "--/--") ? date : "--/--/--");

                    default:        // unreachable
                        return(match.ToString());
                    }
                });
            }