| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  | using AideDeJeu.Services; | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  | using AideDeJeu.Tools; | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  | using AideDeJeuLib.Monsters; | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  | using AideDeJeuLib.Spells; | 
					
						
							| 
									
										
										
										
											2018-06-12 18:52:30 +02:00
										 |  |  |  | using Markdig; | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  | using System; | 
					
						
							|  |  |  |  | using System.Collections.Generic; | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  | using System.Diagnostics; | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  | using System.Globalization; | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  | using System.IO; | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  | using System.Linq; | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  | using System.Net.Http; | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  | using System.Runtime.Serialization.Json; | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  | using System.Text; | 
					
						
							|  |  |  |  | using System.Text.RegularExpressions; | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  | using System.Threading.Tasks; | 
					
						
							| 
									
										
										
										
											2018-05-28 14:25:31 +02:00
										 |  |  |  | using Xamarin.Forms.Internals; | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace AideDeJeuCmd | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     class Program | 
					
						
							|  |  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |         static async Task<IEnumerable<Spell>> TestMarkdown(string filename) | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |             using (var sr = new StreamReader(filename)) | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |                 var md = await sr.ReadToEndAsync(); | 
					
						
							| 
									
										
										
										
											2018-06-07 23:14:27 +02:00
										 |  |  |  |                 var document = Markdig.Parsers.MarkdownParser.Parse(md); | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |                 //DumpMarkdownDocument(document); | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |                 var spellss = document.ToSpells(); | 
					
						
							|  |  |  |  |                 Console.WriteLine("ok"); | 
					
						
							|  |  |  |  |                 var md2 = spellss.ToMarkdownString(); | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |                 if (md.CompareTo(md2) != 0) | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |                     Debug.WriteLine("failed"); | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |                 return spellss; | 
					
						
							| 
									
										
										
										
											2018-06-05 20:51:43 +02:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |         static async Task<IEnumerable<Monster>> TestMarkdownMonsters(string filename) | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2018-06-07 14:16:31 +02:00
										 |  |  |  |             using (var sr = new StreamReader(filename)) | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2018-06-07 14:16:31 +02:00
										 |  |  |  |                 var md = await sr.ReadToEndAsync(); | 
					
						
							| 
									
										
										
										
											2018-06-12 18:52:30 +02:00
										 |  |  |  |                 var pipeline = new MarkdownPipelineBuilder() | 
					
						
							|  |  |  |  |                     .UsePipeTables() | 
					
						
							|  |  |  |  |                     .Build(); | 
					
						
							|  |  |  |  |                 var document = Markdig.Parsers.MarkdownParser.Parse(md, pipeline); | 
					
						
							| 
									
										
										
										
											2018-06-07 14:16:31 +02:00
										 |  |  |  |                 //DumpMarkdownDocument(document); | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |                 var monsters = document.ToMonsters(); | 
					
						
							|  |  |  |  |                 document.Dump(); | 
					
						
							| 
									
										
										
										
											2018-06-07 14:16:31 +02:00
										 |  |  |  |                 Console.WriteLine("ok"); | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |                 //var md2 = monsters.ToMarkdownString(); | 
					
						
							|  |  |  |  |                 //if (md.CompareTo(md2) != 0) | 
					
						
							|  |  |  |  |                 //{ | 
					
						
							|  |  |  |  |                 //    Debug.WriteLine("failed"); | 
					
						
							|  |  |  |  |                 //} | 
					
						
							|  |  |  |  |                 return monsters; | 
					
						
							| 
									
										
										
										
											2018-06-07 14:16:31 +02:00
										 |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-24 12:06:27 +02:00
										 |  |  |  |         static async Task CreateIndexes() | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2018-06-18 22:42:02 +02:00
										 |  |  |  |             string dataDir = @"..\..\..\..\..\Data\"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |             var result = string.Empty; | 
					
						
							|  |  |  |  |             var md = await LoadStringAsync(dataDir + "spells_hd.md"); | 
					
						
							|  |  |  |  |             var items = AideDeJeu.Tools.MarkdownExtensions.MarkdownToSpells(md); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             var classes = new string[] | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 "Barde", | 
					
						
							|  |  |  |  |                 "Clerc", | 
					
						
							|  |  |  |  |                 "Druide", | 
					
						
							|  |  |  |  |                 "Ensorceleur", | 
					
						
							|  |  |  |  |                 "Magicien", | 
					
						
							|  |  |  |  |                 "Paladin", | 
					
						
							|  |  |  |  |                 "Rôdeur", | 
					
						
							|  |  |  |  |                 "Sorcier" | 
					
						
							|  |  |  |  |             }; | 
					
						
							| 
									
										
										
										
											2018-06-24 12:06:27 +02:00
										 |  |  |  |             var levels = new string[] | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |             { | 
					
						
							|  |  |  |  |                 "0", | 
					
						
							|  |  |  |  |                 "1", | 
					
						
							|  |  |  |  |                 "2", | 
					
						
							|  |  |  |  |                 "3", | 
					
						
							|  |  |  |  |                 "4", | 
					
						
							|  |  |  |  |                 "5", | 
					
						
							|  |  |  |  |                 "6", | 
					
						
							|  |  |  |  |                 "7", | 
					
						
							|  |  |  |  |                 "8", | 
					
						
							|  |  |  |  |                 "9", | 
					
						
							|  |  |  |  |                 //"tour de magie", | 
					
						
							|  |  |  |  |                 //"niveau 1", | 
					
						
							|  |  |  |  |                 //"niveau 2", | 
					
						
							|  |  |  |  |                 //"niveau 3", | 
					
						
							|  |  |  |  |                 //"niveau 4", | 
					
						
							|  |  |  |  |                 //"niveau 5", | 
					
						
							|  |  |  |  |                 //"niveau 6", | 
					
						
							|  |  |  |  |                 //"niveau 7", | 
					
						
							|  |  |  |  |                 //"niveau 8", | 
					
						
							|  |  |  |  |                 //"niveau 9" | 
					
						
							|  |  |  |  |             }; | 
					
						
							|  |  |  |  |             foreach (var classe in classes) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2018-06-24 15:59:41 +02:00
										 |  |  |  |                 //Console.WriteLine(classe); | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |                 result += string.Format("## {0}\r\n\r\n", classe); | 
					
						
							|  |  |  |  |                 foreach (var level in levels) | 
					
						
							|  |  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2018-06-24 15:59:41 +02:00
										 |  |  |  |                     //Console.WriteLine(level); | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |                     var spells = items.Where(s => s.Level == level && s.Source.Contains(classe)).OrderBy(s => s.Name).Select(s => string.Format("* [{0}](spells_hd.md#{1})", s.Name, Helpers.IdFromName(s.Name))).ToList(); | 
					
						
							|  |  |  |  |                     if (spells.Count > 0) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         result += string.Format("### {0}\r\n\r\n", level == "0" ? "Tours de magie" : "Niveau " + level); | 
					
						
							|  |  |  |  |                         result += spells.Aggregate((s1, s2) => s1 + "\r\n" + s2); | 
					
						
							|  |  |  |  |                         result += "\r\n\r\n"; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2018-06-24 15:59:41 +02:00
										 |  |  |  |             Console.WriteLine(result); | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |             await SaveStringAsync(dataDir + "spells_hd_by_class_level.md", result); | 
					
						
							| 
									
										
										
										
											2018-06-24 12:06:27 +02:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         static async Task Main(string[] args) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             string dataDir = @"..\..\..\..\..\Data\"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-24 15:59:41 +02:00
										 |  |  |  |             await CreateIndexes(); | 
					
						
							| 
									
										
										
										
											2018-06-24 13:42:09 +02:00
										 |  |  |  |             //var spellsVF = LoadJSon<IEnumerable<Spell>>(dataDir + "spells_vf_full.json"); | 
					
						
							| 
									
										
										
										
											2018-06-24 12:06:27 +02:00
										 |  |  |  |             //var spellsVO = LoadJSon<IEnumerable<Spell>>(dataDir + "spells_vo_full.json"); | 
					
						
							|  |  |  |  |             //var spellsHD = LoadJSon<IEnumerable<Spell>>(dataDir + "spells_hd_full.json"); | 
					
						
							|  |  |  |  |             //var monstersVF = LoadJSon<IEnumerable<Monster>>(dataDir + "monsters_vf_full.json"); | 
					
						
							|  |  |  |  |             //var monstersVO = LoadJSon<IEnumerable<Monster>>(dataDir + "monsters_vo_full.json"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-24 12:53:11 +02:00
										 |  |  |  |             //var result = string.Empty; | 
					
						
							| 
									
										
										
										
											2018-06-24 15:59:41 +02:00
										 |  |  |  |             //var md = await LoadStringAsync(dataDir + "spells_vo.md"); | 
					
						
							| 
									
										
										
										
											2018-06-24 12:06:27 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-24 15:59:41 +02:00
										 |  |  |  |             //var regex = new Regex("\\[(?<name>.*?)\\]\\: spells_hd\\.md\\#(?<id>.*?)\n"); | 
					
						
							|  |  |  |  |             //var matches = regex.Matches(md); | 
					
						
							|  |  |  |  |             //foreach(Match match in matches) | 
					
						
							|  |  |  |  |             //{ | 
					
						
							|  |  |  |  |             //    Debug.WriteLine(match.Value); | 
					
						
							|  |  |  |  |             //    var oldMatch = match.Value; | 
					
						
							|  |  |  |  |             //    var name = match.Groups["name"].Value; | 
					
						
							|  |  |  |  |             //    var newMatch = string.Format("[{0}]: spells_hd.md#{1}\n", name, Helpers.IdFromName(name)); | 
					
						
							| 
									
										
										
										
											2018-06-24 13:42:09 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-24 15:59:41 +02:00
										 |  |  |  |             //    md = md.Replace(oldMatch, newMatch); | 
					
						
							|  |  |  |  |             //} | 
					
						
							|  |  |  |  |             //await SaveStringAsync(dataDir + "spells_vo_tmp.md", md); | 
					
						
							| 
									
										
										
										
											2018-06-24 13:42:09 +02:00
										 |  |  |  |             //foreach(var spell in spellsVF) | 
					
						
							|  |  |  |  |             //{ | 
					
						
							|  |  |  |  |             //    var nameAideDD = spell.Name; | 
					
						
							|  |  |  |  |             //    var nameHD = spell.NamePHB; | 
					
						
							|  |  |  |  |             //    if(!string.IsNullOrWhiteSpace(nameAideDD) && !string.IsNullOrWhiteSpace(nameHD)) | 
					
						
							|  |  |  |  |             //    { | 
					
						
							|  |  |  |  |             //        if (nameAideDD != nameHD) | 
					
						
							|  |  |  |  |             //        { | 
					
						
							|  |  |  |  |             //            Debug.WriteLine(string.Format("{0} => {1}", nameAideDD, nameHD)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             //            md = md.Replace( | 
					
						
							|  |  |  |  |             //                string.Format("- NameVO: [{0}]", nameAideDD), | 
					
						
							|  |  |  |  |             //                string.Format("- NameVO: [{0}]", nameHD)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             //            var tmpmd = md.Replace( | 
					
						
							|  |  |  |  |             //                string.Format("[{0}]: spells_hd.md#{1}", nameAideDD, Helpers.OldIdFromName(nameAideDD)), | 
					
						
							|  |  |  |  |             //                string.Format("[{0}]: spells_hd.md#{1}", nameHD, Helpers.IdFromName(nameHD)) | 
					
						
							|  |  |  |  |             //                ); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             //            if(tmpmd == md) | 
					
						
							|  |  |  |  |             //            { | 
					
						
							|  |  |  |  |             //                Debug.WriteLine("ko"); | 
					
						
							|  |  |  |  |             //            } | 
					
						
							|  |  |  |  |             //            md = tmpmd; | 
					
						
							|  |  |  |  |             //        } | 
					
						
							|  |  |  |  |             //    } | 
					
						
							|  |  |  |  |             //} | 
					
						
							| 
									
										
										
										
											2018-06-24 12:53:11 +02:00
										 |  |  |  |             /*var regex = new Regex("- NameVO: (?<name>.*?)\r\n"); | 
					
						
							| 
									
										
										
										
											2018-06-24 12:06:27 +02:00
										 |  |  |  |             var matches = regex.Matches(md); | 
					
						
							|  |  |  |  |             foreach(Match match in matches) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 var name = match.Groups["name"].Value; | 
					
						
							|  |  |  |  |                 if (!string.IsNullOrWhiteSpace(name)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     Debug.WriteLine(name); | 
					
						
							|  |  |  |  |                     var oldNameVO = string.Format("- NameVO: {0}", name); | 
					
						
							|  |  |  |  |                     var newNameVO = string.Format("- NameVO: [{0}](spells_vo.md#{1})", name, Helpers.IdFromName(name)); | 
					
						
							|  |  |  |  |                     md = md.Replace(oldNameVO, newNameVO); | 
					
						
							|  |  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2018-06-24 12:53:11 +02:00
										 |  |  |  |             }*/ | 
					
						
							| 
									
										
										
										
											2018-06-24 12:06:27 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |             //var items = AideDeJeu.Tools.MarkdownExtensions.MarkdownToSpells(md); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-24 12:53:11 +02:00
										 |  |  |  |             //await SaveStringAsync(dataDir + "spells_vo_tmp.md", md); | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |             //var regex = new Regex("(\\[[a-z].*?\\])"); | 
					
						
							|  |  |  |  |             //var matches = regex.Matches(monstersVOmd); | 
					
						
							|  |  |  |  |             //var links = matches.OrderBy(m => m.Value).Select(m => m.Value + string.Format(": spells_vo.md#{0}", m.Value.Replace("[", "").Replace("]","").Replace(" ","-"))).Distinct().ToList().Aggregate((a, b) => a + "\r\n" + b); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-23 22:47:10 +02:00
										 |  |  |  |             return; | 
					
						
							| 
									
										
										
										
											2018-06-22 09:38:59 +02:00
										 |  |  |  |             //var mdhd = spellsHD.ToMarkdownString(); | 
					
						
							|  |  |  |  |             //var spellsMDHD = spellsHD.ToMarkdownString(); | 
					
						
							| 
									
										
										
										
											2018-06-22 10:11:01 +02:00
										 |  |  |  |             //var spellsMDVO = spellsVO.ToMarkdownString(); | 
					
						
							| 
									
										
										
										
											2018-06-23 22:47:10 +02:00
										 |  |  |  |             //var monstersMDVO = monstersVO.ToMarkdownString(); | 
					
						
							| 
									
										
										
										
											2018-06-22 10:11:01 +02:00
										 |  |  |  |             //await SaveStringAsync(dataDir + "spells_vo.md", spellsMDVO); | 
					
						
							| 
									
										
										
										
											2018-06-23 22:47:10 +02:00
										 |  |  |  |             //await SaveStringAsync(dataDir + "monsters_vo.md", monstersMDVO); | 
					
						
							| 
									
										
										
										
											2018-06-22 09:38:59 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-18 22:42:02 +02:00
										 |  |  |  |             //using (var instream = new StreamReader(dataDir + "monsters_hd.md", Encoding.UTF8)) | 
					
						
							|  |  |  |  |             //{ | 
					
						
							|  |  |  |  |             //    using (var outstream = new StreamWriter(dataDir + "monsters_hd_modif.md", false, Encoding.UTF8)) | 
					
						
							|  |  |  |  |             //    { | 
					
						
							|  |  |  |  |             //        var line = await instream.ReadLineAsync(); | 
					
						
							|  |  |  |  |             //        while (line != null) | 
					
						
							|  |  |  |  |             //        { | 
					
						
							|  |  |  |  |             //            if (line.StartsWith("# ")) | 
					
						
							|  |  |  |  |             //            { | 
					
						
							|  |  |  |  |             //                await outstream.WriteLineAsync(line); | 
					
						
							|  |  |  |  |             //                line = await instream.ReadLineAsync(); | 
					
						
							|  |  |  |  |             //                await outstream.WriteLineAsync("- " + line); | 
					
						
							|  |  |  |  |             //            } | 
					
						
							|  |  |  |  |             //            else if(line.StartsWith("| ---   | ---   | ---   | ---   | ---   | ---   |")) | 
					
						
							|  |  |  |  |             //            { | 
					
						
							|  |  |  |  |             //                await outstream.WriteLineAsync(line); | 
					
						
							|  |  |  |  |             //                line = await instream.ReadLineAsync(); | 
					
						
							|  |  |  |  |             //                var caracs = line.Substring(1).Split(' '); | 
					
						
							|  |  |  |  |             //                //var rx = new Regex("|(?<for>.*?) (?<bfor>\\(.*?)\\) (?<dex>.*?) (?<bdex>\\(.*?)\\) (?<con>.*?) (?<bcon>\\(.*?)\\) (?<int>.*?) (?<bint>\\(.*?)\\) (?<sag>.*?) (?<bsag>\\(.*?)\\) (?<cha>.*?) (?<bcha>\\(.*?)\\)"); | 
					
						
							|  |  |  |  |             //                //var match = rx.Match(line); | 
					
						
							|  |  |  |  |             //                var outline = string.Format("|{0,2} {1,4}|{2,2} {3,4}|{4,2} {5,4}|{6,2} {7,4}|{8,2} {9,4}|{10,2} {11,4}|", | 
					
						
							|  |  |  |  |             //                    caracs | 
					
						
							|  |  |  |  |             //                    ); | 
					
						
							|  |  |  |  |             //                await outstream.WriteLineAsync(outline); | 
					
						
							|  |  |  |  |             //                await outstream.WriteLineAsync(string.Empty); | 
					
						
							|  |  |  |  |             //            } | 
					
						
							|  |  |  |  |             //            else | 
					
						
							|  |  |  |  |             //            { | 
					
						
							|  |  |  |  |             //                await outstream.WriteLineAsync(line); | 
					
						
							|  |  |  |  |             //            } | 
					
						
							|  |  |  |  |             //            line = await instream.ReadLineAsync(); | 
					
						
							|  |  |  |  |             //        } | 
					
						
							|  |  |  |  |             //    } | 
					
						
							|  |  |  |  |             //} | 
					
						
							|  |  |  |  |             return; | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |             //var spellss = await TestMarkdown(@"..\..\..\..\..\Data\spells_hd.md"); | 
					
						
							| 
									
										
										
										
											2018-06-23 22:47:10 +02:00
										 |  |  |  |             //var monsterss = await TestMarkdownMonsters(@"..\..\..\..\..\Data\monsters_hd.md"); | 
					
						
							|  |  |  |  |             //return; | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |             //string ignoreDir = @"..\..\..\..\..\Ignore\"; | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  |             //var documentsDirectoryPath = @"database.db"; // Windows.Storage.ApplicationData.Current.LocalFolder.Path; | 
					
						
							|  |  |  |  |             //ItemDatabaseHelper helper = new ItemDatabaseHelper(documentsDirectoryPath); | 
					
						
							|  |  |  |  |             //var spells = await helper.GetSpellsAsync(classe: "", niveauMin: "0", niveauMax: "9", ecole: "", rituel: "", source: "(SRD)"); | 
					
						
							|  |  |  |  |             //var monsters = await helper.GetMonstersAsync(category: "", type: "", minPower: " 0 (0 PX)", maxPower: " 30 (155000 PX)", size: "", legendary: "", source: "(SRD)"); | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |             /* | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  |             var pack = new HtmlDocument(); | 
					
						
							|  |  |  |  |             var client = new HttpClient(); | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |             var spells = LoadJSon<IEnumerable<Spell>>(dataDir + "spells.json"); | 
					
						
							| 
									
										
										
										
											2018-05-23 22:57:50 +02:00
										 |  |  |  |             var spellsVO = new List<Spell>(); | 
					
						
							|  |  |  |  |             foreach (var spell in spells) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 spell.ParseHtml(); | 
					
						
							|  |  |  |  |                 var htmlVO = await client.GetStringAsync(string.Format("https://www.aidedd.org/dnd/sorts.php?vo={0}", spell.IdVO)); | 
					
						
							|  |  |  |  |                 pack.LoadHtml(htmlVO); | 
					
						
							|  |  |  |  |                 var spellVO = Spell.FromHtml(pack.DocumentNode.SelectSingleNode("//div[contains(@class,'bloc')]")); | 
					
						
							|  |  |  |  |                 spellVO.IdVO = spell.IdVO; | 
					
						
							|  |  |  |  |                 spell.IdVF = spellVO.IdVF; | 
					
						
							|  |  |  |  |                 spellsVO.Add(spellVO); | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 22:57:50 +02:00
										 |  |  |  |                 Console.WriteLine(string.Format("{0} : {1} / {2} : {3}", spell.IdVF, spell.NamePHB, spellVO.IdVO, spellVO.NamePHB)); | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |             SaveJSon<IEnumerable<Spell>>(dataDir + "spells_vf.json", spells); | 
					
						
							|  |  |  |  |             SaveJSon<IEnumerable<Spell>>(dataDir + "spells_vo.json", spellsVO); | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |             var monsters = LoadJSon<IEnumerable<Monster>>(dataDir + "monsters.json"); | 
					
						
							| 
									
										
										
										
											2018-05-23 21:52:38 +02:00
										 |  |  |  |             var monstersVO = new List<Monster>(); | 
					
						
							|  |  |  |  |             foreach (var monster in monsters) | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  |             { | 
					
						
							|  |  |  |  |                 monster.ParseHtml(); | 
					
						
							| 
									
										
										
										
											2018-05-23 21:52:38 +02:00
										 |  |  |  |                 var htmlVO = await client.GetStringAsync(string.Format("https://www.aidedd.org/dnd/monstres.php?vo={0}", monster.IdVO)); | 
					
						
							|  |  |  |  |                 pack.LoadHtml(htmlVO); | 
					
						
							|  |  |  |  |                 var monsterVO = Monster.FromHtml(pack.DocumentNode.SelectSingleNode("//div[contains(@class,'bloc')]")); | 
					
						
							|  |  |  |  |                 monsterVO.IdVO = monster.IdVO; | 
					
						
							|  |  |  |  |                 monster.IdVF = monsterVO.IdVF; | 
					
						
							|  |  |  |  |                 monstersVO.Add(monsterVO); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 Console.WriteLine(string.Format("{0} : {1} / {2} : {3}", monster.IdVF, monster.NamePHB, monsterVO.IdVO, monsterVO.NamePHB)); | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |             SaveJSon<IEnumerable<Monster>>(dataDir + "monsters_vf.json", monsters); | 
					
						
							|  |  |  |  |             SaveJSon<IEnumerable<Monster>>(dataDir + "monsters_vo.json", monstersVO); | 
					
						
							|  |  |  |  |             */ | 
					
						
							| 
									
										
										
										
											2018-06-22 09:38:59 +02:00
										 |  |  |  |             //var spellsVF = LoadJSon<IEnumerable<Spell>>(dataDir + "spells_vf_full.json"); | 
					
						
							|  |  |  |  |             //var spellsVO = LoadJSon<IEnumerable<Spell>>(dataDir + "spells_vo_full.json"); | 
					
						
							|  |  |  |  |             //var spellsHD = LoadJSon<IEnumerable<Spell>>(dataDir + "spells_hd_full.json"); | 
					
						
							|  |  |  |  |             //var monstersVF = LoadJSon<IEnumerable<Monster>>(dataDir + "monsters_vf_full.json"); | 
					
						
							|  |  |  |  |             //var monstersVO = LoadJSon<IEnumerable<Monster>>(dataDir + "monsters_vo_full.json"); | 
					
						
							| 
									
										
										
										
											2018-05-28 14:25:31 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-23 22:47:10 +02:00
										 |  |  |  |             //var mdhd = spellsHD.ToMarkdownString(); | 
					
						
							|  |  |  |  |             //await SaveStringAsync(dataDir + "spells_hd.md", mdhd); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             //spellsVF.ForEach(sp => sp.Html = null); | 
					
						
							|  |  |  |  |             //spellsVO.ForEach(sp => sp.Html = null); | 
					
						
							|  |  |  |  |             //spellsVF.ForEach(sp => sp.DescriptionDiv = sp.DescriptionDiv); | 
					
						
							|  |  |  |  |             //spellsVO.ForEach(sp => sp.DescriptionDiv = sp.DescriptionDiv); | 
					
						
							|  |  |  |  |             //monstersVF.ForEach(it => it.Html = null); | 
					
						
							|  |  |  |  |             //monstersVO.ForEach(it => it.Html = null); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             //SaveJSon<IEnumerable<Spell>>(dataDir + "spells_vf.json", spellsVF); | 
					
						
							|  |  |  |  |             //SaveJSon<IEnumerable<Spell>>(dataDir + "spells_vo.json", spellsVO); | 
					
						
							|  |  |  |  |             //SaveJSon<IEnumerable<Spell>>(dataDir + "spells_hd.json", spellsHD); | 
					
						
							|  |  |  |  |             //SaveJSon<IEnumerable<Monster>>(dataDir + "monsters_vf.json", monstersVF); | 
					
						
							|  |  |  |  |             //SaveJSon<IEnumerable<Monster>>(dataDir + "monsters_vo.json", monstersVO); | 
					
						
							|  |  |  |  |             //return; | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-04 22:19:25 +02:00
										 |  |  |  |             /* | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |             var spellLists = new Dictionary<string, IEnumerable<string>>() | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 { "Barde", await LoadList(dataDir + "spell_barde.txt") }, | 
					
						
							|  |  |  |  |                 { "Clerc", await LoadList(dataDir + "spell_clerc.txt") }, | 
					
						
							|  |  |  |  |                 { "Druide", await LoadList(dataDir + "spell_druide.txt") }, | 
					
						
							|  |  |  |  |                 { "Ensorceleur", await LoadList(dataDir + "spell_ensorceleur.txt") }, | 
					
						
							|  |  |  |  |                 { "Magicien", await LoadList(dataDir + "spell_magicien.txt") }, | 
					
						
							|  |  |  |  |                 { "Ombrelame", await LoadList(dataDir + "spell_ombrelame.txt") }, | 
					
						
							|  |  |  |  |                 { "Paladin", await LoadList(dataDir + "spell_paladin.txt") }, | 
					
						
							|  |  |  |  |                 { "Rôdeur", await LoadList(dataDir + "spell_rodeur.txt") }, | 
					
						
							|  |  |  |  |                 { "Sorcier", await LoadList(dataDir + "spell_sorcier.txt") }, | 
					
						
							|  |  |  |  |             }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |             var spellsHD = new List<Spell>(); | 
					
						
							|  |  |  |  |             var spell = new Spell(); | 
					
						
							|  |  |  |  |             using (var reader = new StreamReader(dataDir + "spells_hd.txt")) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 var line = await reader.ReadLineAsync(); | 
					
						
							|  |  |  |  |                 while (line != null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     if (line.Length == 0) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         Console.WriteLine(spell.NamePHB); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         spell.DescriptionHtml = await FormatDescriptionAsync(spell.DescriptionHtml); | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |                         spell.Source = "(HD)"; | 
					
						
							|  |  |  |  |                         spell.Id = spell.IdVF = IdFromName(spell.NamePHB); | 
					
						
							|  |  |  |  |                         var spVF = spellsVF.SingleOrDefault(sp => IdFromName(sp.NamePHB) == spell.Id); | 
					
						
							|  |  |  |  |                         if(spVF != null) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             if(spVF.Source.Contains("(SRD)")) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 spell.Source += "(SRD)"; | 
					
						
							| 
									
										
										
										
											2018-05-27 01:43:09 +02:00
										 |  |  |  |                                 var spVO = spellsVO.SingleOrDefault(sp => sp.IdVO == spVF.IdVO); | 
					
						
							|  |  |  |  |                                 if (spVO != null) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     spell.NameVO = spVO.Name; | 
					
						
							|  |  |  |  |                                     spell.IdVO = spVO.IdVO; | 
					
						
							|  |  |  |  |                                 } | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         foreach (var spellList in spellLists) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             if(spellList.Value.Contains(spell.NamePHB.ToLower())) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 spell.Source += " " + spellList.Key + " ;"; | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |                         spellsHD.Add(spell); | 
					
						
							|  |  |  |  |                         spell = new Spell(); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     else | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         if (spell.NamePHB == null) | 
					
						
							|  |  |  |  |                         { | 
					
						
							| 
									
										
										
										
											2018-05-28 12:57:15 +02:00
										 |  |  |  |                             spell.NamePHB = Capitalize(line); | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else if (spell.LevelType == null) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             spell.LevelType = line; | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |                             var re = new Regex("(?<type>.*) de niveau (?<level>\\d*).?(?<rituel>\\(rituel\\))?"); | 
					
						
							|  |  |  |  |                             var match = re.Match(line); | 
					
						
							|  |  |  |  |                             spell.Type = match.Groups["type"].Value; | 
					
						
							|  |  |  |  |                             spell.Level = match.Groups["level"].Value; | 
					
						
							|  |  |  |  |                             spell.Rituel = match.Groups["rituel"].Value; | 
					
						
							|  |  |  |  |                             if (string.IsNullOrEmpty(spell.Type)) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 re = new Regex("(?<type>.*), (?<level>tour de magie)"); | 
					
						
							|  |  |  |  |                                 match = re.Match(line); | 
					
						
							|  |  |  |  |                                 spell.Type = match.Groups["type"].Value; | 
					
						
							|  |  |  |  |                                 spell.Level = "0"; // match.Groups["level"].Value; | 
					
						
							|  |  |  |  |                                 spell.Rituel = match.Groups["rituel"].Value; | 
					
						
							|  |  |  |  |                             } | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |                         { | 
					
						
							|  |  |  |  |                             if (line.StartsWith("Temps d’incantation : ")) | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |                             { | 
					
						
							| 
									
										
										
										
											2018-05-25 11:42:49 +02:00
										 |  |  |  |                                 spell.CastingTime = line.Substring(22); | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |                             } | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |                             else if (line.StartsWith("Portée : ")) | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 spell.Range = line.Substring(9); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             else if (line.StartsWith("Composantes : ")) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 spell.Components = line.Substring(14); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             else if (line.StartsWith("Durée : ")) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 spell.Duration = line.Substring(8); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             else | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 spell.DescriptionHtml += line + "\n"; | 
					
						
							|  |  |  |  |                                 //if (line.EndsWith(".")) | 
					
						
							|  |  |  |  |                                 //{ | 
					
						
							|  |  |  |  |                                 //    spell.DescriptionHtml += line + "\n"; | 
					
						
							|  |  |  |  |                                 //} | 
					
						
							|  |  |  |  |                                 //else if (line.EndsWith("-")) | 
					
						
							|  |  |  |  |                                 //{ | 
					
						
							|  |  |  |  |                                 //    spell.DescriptionHtml += line.Substring(0, line.Length - 1); | 
					
						
							|  |  |  |  |                                 //} | 
					
						
							|  |  |  |  |                                 //else | 
					
						
							|  |  |  |  |                                 //{ | 
					
						
							|  |  |  |  |                                 //    spell.DescriptionHtml += line + " "; | 
					
						
							|  |  |  |  |                                 //} | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     line = await reader.ReadLineAsync(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             SaveJSon<IEnumerable<Spell>>(dataDir + "spells_hd.json", spellsHD); | 
					
						
							| 
									
										
										
										
											2018-05-23 21:52:38 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  |             Console.WriteLine("Hello World!"); | 
					
						
							| 
									
										
										
										
											2018-06-04 22:19:25 +02:00
										 |  |  |  |             */ | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-28 12:57:15 +02:00
										 |  |  |  |         public static string Capitalize(string text) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             return string.Concat(text.Take(1)).ToUpper() + string.Concat(text.Skip(1)).ToString().ToLower(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |         public static string RemoveDiacritics(string text) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (string.IsNullOrWhiteSpace(text)) | 
					
						
							|  |  |  |  |                 return text; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             text = text.Normalize(NormalizationForm.FormD); | 
					
						
							|  |  |  |  |             var chars = text.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark).ToArray(); | 
					
						
							|  |  |  |  |             return new string(chars).Normalize(NormalizationForm.FormC); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         static string IdFromName(string name) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             return RemoveDiacritics(name.ToLower().Replace(" ", "-")); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  |         static async Task<string> FormatDescriptionAsync(string description) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             string formattedDescription = ""; | 
					
						
							|  |  |  |  |             using (var reader = new StringReader(description)) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 var line = await reader.ReadLineAsync(); | 
					
						
							|  |  |  |  |                 var li = false; | 
					
						
							|  |  |  |  |                 while (line != null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     if (line.StartsWith("»» ")) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         li = true; | 
					
						
							|  |  |  |  |                         formattedDescription += "<li>" + line.Substring(3); | 
					
						
							|  |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |                     else | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         var titles = new List<string>() | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             "À plus haut niveau.", | 
					
						
							|  |  |  |  |                             "Agrandir.", | 
					
						
							|  |  |  |  |                             "Rétrécir.", | 
					
						
							|  |  |  |  |                             "Endurance de l’ours.", | 
					
						
							|  |  |  |  |                             "Force du taureau.", | 
					
						
							|  |  |  |  |                             "Grâce du chat.", | 
					
						
							|  |  |  |  |                             "Splendeur de l’aigle.", | 
					
						
							|  |  |  |  |                             "Ruse du renard.", | 
					
						
							|  |  |  |  |                             "Sagesse du hibou.", | 
					
						
							|  |  |  |  |                             "Aura factice.", | 
					
						
							|  |  |  |  |                             "Masque.", | 
					
						
							|  |  |  |  |                             "Effets visant une cible.", | 
					
						
							|  |  |  |  |                             "Zones de magie.", | 
					
						
							|  |  |  |  |                             "Sorts.", | 
					
						
							|  |  |  |  |                             "Objets magiques.", | 
					
						
							|  |  |  |  |                             "Déplacement magique.", | 
					
						
							|  |  |  |  |                             "Créatures et objets.", | 
					
						
							|  |  |  |  |                             "Dissipation de la magie.", | 
					
						
							|  |  |  |  |                             "Bouille-crâne.", | 
					
						
							|  |  |  |  |                             "Convulsions.", | 
					
						
							|  |  |  |  |                             "Fièvre répugnante.", | 
					
						
							|  |  |  |  |                             "Mal aveuglant.", | 
					
						
							|  |  |  |  |                             "Mort poisseuse.", | 
					
						
							|  |  |  |  |                             "Pourriture.", | 
					
						
							|  |  |  |  |                             "Écarter les eaux.", | 
					
						
							|  |  |  |  |                             "Inondation.", | 
					
						
							|  |  |  |  |                             "Modifier le cours de l’eau.", | 
					
						
							|  |  |  |  |                             "Tourbillon.", | 
					
						
							|  |  |  |  |                             "Création d’eau.", | 
					
						
							|  |  |  |  |                             "Destruction d’eau.", | 
					
						
							|  |  |  |  |                             "Si vous lancez ce sort en une action, choisissez un point à portée.", | 
					
						
							|  |  |  |  |                             "Si vous lancez le sort sur une période de huit heures, vous enrichissez la terre.", | 
					
						
							|  |  |  |  |                             "Annulation d’enchantement.", | 
					
						
							|  |  |  |  |                             "Renvoi.", | 
					
						
							|  |  |  |  |                             "Confinement minimal.", | 
					
						
							|  |  |  |  |                             "Enchaîné.", | 
					
						
							|  |  |  |  |                             "Enseveli.", | 
					
						
							|  |  |  |  |                             "Prison isolée.", | 
					
						
							|  |  |  |  |                             "Sommeil.", | 
					
						
							|  |  |  |  |                             "Mettre fin au sort.", | 
					
						
							|  |  |  |  |                             "Glyphe à sort.", | 
					
						
							|  |  |  |  |                             "Runes explosives.", | 
					
						
							|  |  |  |  |                             "Approche.", | 
					
						
							|  |  |  |  |                             "Arrête.", | 
					
						
							|  |  |  |  |                             "Fuis.", | 
					
						
							|  |  |  |  |                             "Lâche.", | 
					
						
							|  |  |  |  |                             "Rampe.", | 
					
						
							|  |  |  |  |                             "Main agrippeuse.", | 
					
						
							|  |  |  |  |                             "Main interposée.", | 
					
						
							|  |  |  |  |                             "Main percutante.", | 
					
						
							|  |  |  |  |                             "Poing serré.", | 
					
						
							|  |  |  |  |                             "Nauséeux.", | 
					
						
							|  |  |  |  |                             "Endormi.", | 
					
						
							|  |  |  |  |                             "Paniqué.", | 
					
						
							|  |  |  |  |                             "Créature en créature.", | 
					
						
							|  |  |  |  |                             "Objet en créature.", | 
					
						
							|  |  |  |  |                             "Créature en objet.", | 
					
						
							|  |  |  |  |                             "Adaptation aquatique.", | 
					
						
							|  |  |  |  |                             "Armes naturelles.", | 
					
						
							|  |  |  |  |                             "Changer d’apparence.", | 
					
						
							|  |  |  |  |                             "1. Rouge.", | 
					
						
							|  |  |  |  |                             "2. Orange.", | 
					
						
							|  |  |  |  |                             "3. Jaune.", | 
					
						
							|  |  |  |  |                             "4. Vert.", | 
					
						
							|  |  |  |  |                             "5. Bleu.", | 
					
						
							|  |  |  |  |                             "6. Indigo.", | 
					
						
							|  |  |  |  |                             "7. Violet.", | 
					
						
							|  |  |  |  |                             "Couloirs.", | 
					
						
							|  |  |  |  |                             "Escaliers.", | 
					
						
							|  |  |  |  |                             "Portes.", | 
					
						
							|  |  |  |  |                             "Autres effets de sort.", | 
					
						
							|  |  |  |  |                             "Attirance.", | 
					
						
							|  |  |  |  |                             "Répulsion.", | 
					
						
							|  |  |  |  |                             "Mettre un terme à l’effet.", | 
					
						
							|  |  |  |  |                             "Courage.", | 
					
						
							|  |  |  |  |                             "Interférence extradimensionnelle.", | 
					
						
							|  |  |  |  |                             "Langues.", | 
					
						
							|  |  |  |  |                             "Lumière du jour.", | 
					
						
							|  |  |  |  |                             "Protection contres les énergies.", | 
					
						
							|  |  |  |  |                             "Repos éternel.", | 
					
						
							|  |  |  |  |                             "Ténèbres.", | 
					
						
							|  |  |  |  |                             "Vulnérabilité à l’énergie.", | 
					
						
							|  |  |  |  |                             "Silence.", | 
					
						
							|  |  |  |  |                             "Terreur.", | 
					
						
							|  |  |  |  |                             "Démence.", | 
					
						
							|  |  |  |  |                             "Désespoir.", | 
					
						
							|  |  |  |  |                             "Discorde.", | 
					
						
							|  |  |  |  |                             "Douleur.", | 
					
						
							|  |  |  |  |                             "Étourdissement.", | 
					
						
							|  |  |  |  |                             "Frayeur.", | 
					
						
							|  |  |  |  |                             "Mort.", | 
					
						
							|  |  |  |  |                             "Sommeil.", | 
					
						
							|  |  |  |  |                             "Créatures.", | 
					
						
							|  |  |  |  |                             "Objets.", | 
					
						
							|  |  |  |  |                             "Familiarité.", | 
					
						
							|  |  |  |  |                             "Sur place.", | 
					
						
							|  |  |  |  |                             "À proximité.", | 
					
						
							|  |  |  |  |                             "Zone similaire.", | 
					
						
							|  |  |  |  |                             "Incident.", | 
					
						
							|  |  |  |  |                             "Round 2.", | 
					
						
							|  |  |  |  |                             "Round 3.", | 
					
						
							|  |  |  |  |                             "Round 4.", | 
					
						
							|  |  |  |  |                             "Rounds 5 à 10.", | 
					
						
							|  |  |  |  |                             "Fissures.", | 
					
						
							|  |  |  |  |                             "Structures.", | 
					
						
							|  |  |  |  |                         }; | 
					
						
							|  |  |  |  |                         foreach (var title in titles) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             if (line.StartsWith(title)) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 line = "<strong><em>" + title + "</em></strong>" + line.Substring(title.Length); | 
					
						
							|  |  |  |  |                                 break; | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2018-05-24 21:40:16 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |                     if (line.EndsWith(".")) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         formattedDescription += line; | 
					
						
							|  |  |  |  |                         if (li) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             formattedDescription += "</li>"; | 
					
						
							|  |  |  |  |                             li = false; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         formattedDescription += "\n"; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     else | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         formattedDescription += line + " "; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     line = await reader.ReadLineAsync(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 if (li) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     formattedDescription += "</li>"; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             return formattedDescription; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  |         private static T LoadJSon<T>(string filename) where T : class | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             var serializer = new DataContractJsonSerializer(typeof(T)); | 
					
						
							|  |  |  |  |             using (var stream = new FileStream(filename, FileMode.Open)) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return serializer.ReadObject(stream) as T; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private static void SaveJSon<T>(string filename, T objT) where T : class | 
					
						
							|  |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2018-06-04 21:37:22 +02:00
										 |  |  |  |             var settings = new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true }; | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  |             var serializer = new DataContractJsonSerializer(typeof(T)); | 
					
						
							|  |  |  |  |             using (var stream = new FileStream(filename, FileMode.Create)) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2018-06-04 21:37:22 +02:00
										 |  |  |  |                 using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, Encoding.UTF8, true, true, "  ")) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     serializer.WriteObject(writer, objT); | 
					
						
							|  |  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2018-05-23 20:28:50 +02:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |         private static async Task SaveStringAsync(string filename, string text) | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2018-06-23 22:47:10 +02:00
										 |  |  |  |             using (var sw = new StreamWriter(path: filename, append: false, encoding: Encoding.UTF8)) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 await sw.WriteAsync(text); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private static async Task<string> LoadStringAsync(string filename) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             using (var sr = new StreamReader(filename, Encoding.UTF8)) | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2018-06-23 22:47:10 +02:00
										 |  |  |  |                 return await sr.ReadToEndAsync(); | 
					
						
							| 
									
										
										
										
											2018-06-06 20:41:57 +02:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |         private static async Task<IEnumerable<string>> LoadList(string filename) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             using (var stream = new StreamReader(filename)) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 var lines = new List<string>(); | 
					
						
							|  |  |  |  |                 var line = await stream.ReadLineAsync(); | 
					
						
							|  |  |  |  |                 while (line != null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |                     if (!string.IsNullOrEmpty(line)) | 
					
						
							| 
									
										
										
										
											2018-05-27 01:03:00 +02:00
										 |  |  |  |                     { | 
					
						
							|  |  |  |  |                         lines.Add(line); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     line = await stream.ReadLineAsync(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return lines; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-05-21 21:48:18 +02:00
										 |  |  |  |     } | 
					
						
							|  |  |  |  | } |