diff --git a/AideDeJeu/AideDeJeu/Models/Item.cs b/AideDeJeu/AideDeJeu/Models/Item.cs index 7becba0e..d4d1fcd5 100644 --- a/AideDeJeu/AideDeJeu/Models/Item.cs +++ b/AideDeJeu/AideDeJeu/Models/Item.cs @@ -13,12 +13,13 @@ namespace AideDeJeuLib } - public class Item + public abstract class Item { public string Name { get; set; } public string NameVO { get; set; } public Properties Properties { get; set; } + public abstract string Markdown { get; } } } diff --git a/AideDeJeu/AideDeJeu/Models/Monsters/Monster.cs b/AideDeJeu/AideDeJeu/Models/Monsters/Monster.cs index fa743720..6fccd42e 100644 --- a/AideDeJeu/AideDeJeu/Models/Monsters/Monster.cs +++ b/AideDeJeu/AideDeJeu/Models/Monsters/Monster.cs @@ -37,5 +37,13 @@ namespace AideDeJeuLib.Monsters public IEnumerable Actions { get; set; } public IEnumerable Reactions { get; set; } public IEnumerable LegendaryActions { get; set; } + + public override string Markdown + { + get + { + return ""; + } + } } } diff --git a/AideDeJeu/AideDeJeu/Models/Spells/Spell.cs b/AideDeJeu/AideDeJeu/Models/Spells/Spell.cs index 62866d3b..53422a57 100644 --- a/AideDeJeu/AideDeJeu/Models/Spells/Spell.cs +++ b/AideDeJeu/AideDeJeu/Models/Spells/Spell.cs @@ -13,7 +13,21 @@ namespace AideDeJeuLib.Spells { get { - return string.Format("{0} - {1}", this.Level, this.Type); + if (int.Parse(Level) > 0) + { + if (string.IsNullOrEmpty(Rituel)) + { + return $"{Type} de niveau {Level}"; + } + else + { + return $"{Type} de niveau {Level} {Rituel}"; + } + } + else + { + return $"{Type}, tour de magie"; + } } set { @@ -57,5 +71,22 @@ namespace AideDeJeuLib.Spells public string Source { get; set; } + public override string Markdown + { + get + { + return + $"# {Name}\n" + + $"{NameVO}\n" + + $"_{LevelType}_\n" + + $"**Temps d'incantation :** {CastingTime}\n" + + $"**Portée :** {Range}\n" + + $"**Composantes :** {Components}\n" + + $"**Durée :** {Duration}\n\n" + + $"{DescriptionHtml}\n\n" + + $"**Source :** {Source}"; + + } + } } } diff --git a/AideDeJeu/AideDeJeu/Models/Spells/SpellHD.cs b/AideDeJeu/AideDeJeu/Models/Spells/SpellHD.cs new file mode 100644 index 00000000..ad7eab44 --- /dev/null +++ b/AideDeJeu/AideDeJeu/Models/Spells/SpellHD.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace AideDeJeuLib.Spells +{ + public class SpellHD : Spell + { + public new string LevelType + { + get + { + if (int.Parse(Level) > 0) + { + if (string.IsNullOrEmpty(Rituel)) + { + return $"{Type} de niveau {Level}"; + } + else + { + return $"{Type} de niveau {Level} {Rituel}"; + } + } + else + { + return $"{Type}, tour de magie"; + } + } + set + { + var re = new Regex("(?.*) de niveau (?\\d).?(?\\(rituel\\))?"); + var match = re.Match(value); + this.Type = match.Groups["type"].Value; + this.Level = match.Groups["level"].Value; + this.Rituel = match.Groups["rituel"].Value; + if (string.IsNullOrEmpty(this.Type)) + { + re = new Regex("(?.*), (?tour de magie)"); + match = re.Match(value); + if (match.Groups["level"].Value == "tour de magie") + { + this.Type = match.Groups["type"].Value; + this.Level = "0"; // match.Groups["level"].Value; + this.Rituel = match.Groups["rituel"].Value; + } + } + } + } + public override string Markdown + { + get + { + return + $"# {Name}\n" + + $"{NameVO}\n" + + $"_{LevelType}_\n" + + $"**Temps d'incantation :** {CastingTime}\n" + + $"**Portée :** {Range}\n" + + $"**Composantes :** {Components}\n" + + $"**Durée :** {Duration}\n\n" + + $"{DescriptionHtml}\n\n" + + $"**Source :** {Source}"; + + } + } + + } +} diff --git a/AideDeJeu/AideDeJeu/Models/Spells/SpellVO.cs b/AideDeJeu/AideDeJeu/Models/Spells/SpellVO.cs new file mode 100644 index 00000000..3550ee15 --- /dev/null +++ b/AideDeJeu/AideDeJeu/Models/Spells/SpellVO.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace AideDeJeuLib.Spells +{ + public class SpellVO : Spell + { + public new string LevelType + { + get + { + if (string.IsNullOrEmpty(Rituel)) + { + return $"Level {Level} - {Type}"; + } + else + { + return $"Level {Level} - {Type} {Rituel}"; + } + } + set + { + var re = new Regex("^(?\\d) - (?.*?)\\s?(?\\(ritual\\))?$"); + var match = re.Match(value); + this.Type = match.Groups["type"].Value; + this.Level = match.Groups["level"].Value; + this.Rituel = match.Groups["rituel"].Value; + } + } + + public override string Markdown + { + get + { + return + $"# {Name}\n" + + $"{NameVO}\n" + + $"_{LevelType}_\n" + + $"**Casting Time :** {CastingTime}\n" + + $"**Range :** {Range}\n" + + $"**Components :** {Components}\n" + + $"**Duration :** {Duration}\n\n" + + $"{DescriptionHtml}\n\n" + + $"**Source :** {Source}"; + + } + } + } +} diff --git a/AideDeJeu/AideDeJeu/Tools/MarkdownExtensions.cs b/AideDeJeu/AideDeJeu/Tools/MarkdownExtensions.cs index 83d18e0e..8ce452a7 100644 --- a/AideDeJeu/AideDeJeu/Tools/MarkdownExtensions.cs +++ b/AideDeJeu/AideDeJeu/Tools/MarkdownExtensions.cs @@ -14,11 +14,11 @@ namespace AideDeJeu.Tools { public static class MarkdownExtensions { - public static IEnumerable MarkdownToSpells(string md) + public static IEnumerable MarkdownToSpells(string md) where TSpell : Spell, new() { var pipeline = new MarkdownPipelineBuilder().UsePipeTables().Build(); var document = Markdig.Parsers.MarkdownParser.Parse(md, pipeline); - return document.ToSpells(); + return document.ToSpells(); } public static IEnumerable MarkdownToMonsters(string md) @@ -35,10 +35,10 @@ namespace AideDeJeu.Tools return md; } - public static IEnumerable ToSpells(this Markdig.Syntax.MarkdownDocument document) + public static IEnumerable ToSpells(this Markdig.Syntax.MarkdownDocument document) where TSpell : Spell, new() { - var spells = new List(); - Spell spell = null; + var spells = new List(); + TSpell spell = null; foreach (var block in document) { //DumpBlock(block); @@ -53,7 +53,7 @@ namespace AideDeJeu.Tools spells.Add(spell); //yield return spell; } - spell = new Spell(); + spell = new TSpell(); spell.Name = headingBlock.Inline.ToMarkdownString(); //Console.WriteLine(spell.Name); } @@ -93,17 +93,17 @@ namespace AideDeJeu.Tools //DumpParagraphBlock(paragraphBlock); var str = paragraphBlock.Inline.ToMarkdownString(); - var properties = new List>>() + var properties = new List>>() { - new Tuple>("NameVO: ", (m, s) => m.NameVO = s), - new Tuple>("CastingTime: ", (m, s) => m.CastingTime = s), - new Tuple>("Components: ", (m, s) => m.Components = s), - new Tuple>("Duration: ", (m, s) => m.Duration = s), - new Tuple>("LevelType: ", (m, s) => m.LevelType = s), - new Tuple>("Range: ", (m, s) => m.Range = s), - new Tuple>("Source: ", (m, s) => m.Source = s), - new Tuple>("Classes: ", (m, s) => m.Source += s), - new Tuple>("", (m,s) => + new Tuple>("NameVO: ", (m, s) => m.NameVO = s), + new Tuple>("CastingTime: ", (m, s) => m.CastingTime = s), + new Tuple>("Components: ", (m, s) => m.Components = s), + new Tuple>("Duration: ", (m, s) => m.Duration = s), + new Tuple>("LevelType: ", (m, s) => m.LevelType = s), + new Tuple>("Range: ", (m, s) => m.Range = s), + new Tuple>("Source: ", (m, s) => m.Source = s), + new Tuple>("Classes: ", (m, s) => m.Source += s), + new Tuple>("", (m,s) => { //if (m.Alignment != null) //{ diff --git a/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs index 23baf13c..8c864ffc 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs @@ -54,7 +54,7 @@ namespace AideDeJeu.ViewModels { resourceName = "AideDeJeu.Data.spells_vo.md"; var md = await Tools.Helpers.GetResourceStringAsync(resourceName); - _AllItems = Tools.MarkdownExtensions.MarkdownToSpells(md); + _AllItems = Tools.MarkdownExtensions.MarkdownToSpells(md); } break; case ItemSourceType.SpellHD: @@ -62,7 +62,7 @@ namespace AideDeJeu.ViewModels resourceName = "AideDeJeu.Data.spells_hd.md"; //var md = await Tools.Helpers.GetStringFromUrl("https://raw.githubusercontent.com/Nioux/AideDeJeu/master/Data/spells_hd.md"); var md = await Tools.Helpers.GetResourceStringAsync(resourceName); - _AllItems = Tools.MarkdownExtensions.MarkdownToSpells(md); + _AllItems = Tools.MarkdownExtensions.MarkdownToSpells(md); } break; } diff --git a/AideDeJeu/AideDeJeu/Views/SpellDetailPage.xaml b/AideDeJeu/AideDeJeu/Views/SpellDetailPage.xaml index 9b5c2dfb..2b10bdb6 100644 --- a/AideDeJeu/AideDeJeu/Views/SpellDetailPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/SpellDetailPage.xaml @@ -14,7 +14,7 @@ - \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/Views/SpellDetailPage.xaml.cs b/AideDeJeu/AideDeJeu/Views/SpellDetailPage.xaml.cs index ab2b37c2..15872f21 100644 --- a/AideDeJeu/AideDeJeu/Views/SpellDetailPage.xaml.cs +++ b/AideDeJeu/AideDeJeu/Views/SpellDetailPage.xaml.cs @@ -17,7 +17,7 @@ namespace AideDeJeu.Views BindingContext = this.viewModel = viewModel; - mdNameVO.NavigateToLink = async (s) => await viewModel.Main.NavigateToLink(s); + //mdNameVO.NavigateToLink = async (s) => await viewModel.Main.NavigateToLink(s); mdDescription.NavigateToLink = async (s) => await viewModel.Main.NavigateToLink(s); } diff --git a/AideDeJeu/AideDeJeuCmd/Program.cs b/AideDeJeu/AideDeJeuCmd/Program.cs index 5449b4b2..64009895 100644 --- a/AideDeJeu/AideDeJeuCmd/Program.cs +++ b/AideDeJeu/AideDeJeuCmd/Program.cs @@ -26,7 +26,7 @@ namespace AideDeJeuCmd var document = Markdig.Parsers.MarkdownParser.Parse(md); //DumpMarkdownDocument(document); - var spellss = document.ToSpells(); + var spellss = document.ToSpells(); Console.WriteLine("ok"); var md2 = spellss.ToMarkdownString(); if (md.CompareTo(md2) != 0) @@ -66,7 +66,7 @@ namespace AideDeJeuCmd var result = string.Empty; var md = await LoadStringAsync(dataDir + "spells_hd.md"); - var items = AideDeJeu.Tools.MarkdownExtensions.MarkdownToSpells(md); + var items = AideDeJeu.Tools.MarkdownExtensions.MarkdownToSpells(md); var classes = new string[] {