| 
									
										
										
										
											2018-06-30 18:43:16 +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-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; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 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-07-01 22:10:10 +02:00
										 |  |  |  |                 var spellss = document.ToSpells<SpellHD>(); | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |                 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
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-01 22:51:34 +02:00
										 |  |  |  |                 var monsters = document.ToMonsters<MonsterHD>(); | 
					
						
							| 
									
										
										
										
											2018-06-12 17:59:19 +02:00
										 |  |  |  |                 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"); | 
					
						
							| 
									
										
										
										
											2018-07-01 22:10:10 +02:00
										 |  |  |  |             var items = AideDeJeu.Tools.MarkdownExtensions.MarkdownToSpells<SpellHD>(md); | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |             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-29 12:21:13 +02:00
										 |  |  |  |                 result += string.Format("## {0}\n\n", classe); | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |                 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) | 
					
						
							|  |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2018-06-29 12:21:13 +02:00
										 |  |  |  |                         result += string.Format("### {0}\n\n", level == "0" ? "Tours de magie" : "Niveau " + level); | 
					
						
							|  |  |  |  |                         result += spells.Aggregate((s1, s2) => s1 + "\n" + s2); | 
					
						
							|  |  |  |  |                         result += "\n\n"; | 
					
						
							| 
									
										
										
										
											2018-06-23 23:56:13 +02:00
										 |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											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-29 12:05:19 +02:00
										 |  |  |  |             var mdVO = await LoadStringAsync(dataDir + "monsters_vo.md"); | 
					
						
							|  |  |  |  |             var mdVF = await LoadStringAsync(dataDir + "monsters_hd.md"); | 
					
						
							| 
									
										
										
										
											2018-06-25 10:49:13 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-29 12:05:19 +02:00
										 |  |  |  |             var regex = new Regex("# (?<namevo>.*?)\n- NameVO: \\[(?<namevf>.*?)\\]\n"); | 
					
						
							|  |  |  |  |             var matches = regex.Matches(mdVO); | 
					
						
							|  |  |  |  |             foreach(Match match in matches) | 
					
						
							| 
									
										
										
										
											2018-06-25 10:49:13 +02:00
										 |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2018-06-29 12:05:19 +02:00
										 |  |  |  |                 var nameVF = match.Groups["namevf"].Value; | 
					
						
							|  |  |  |  |                 var nameVO = match.Groups["namevo"].Value; | 
					
						
							|  |  |  |  |                 var replaceOld = string.Format("# {0}\n", nameVF); | 
					
						
							| 
									
										
										
										
											2018-06-29 12:09:36 +02:00
										 |  |  |  |                 var replaceNew = string.Format("# {0}\n- NameVO: [{1}](monsters_vo.md#{2})\n", nameVF, nameVO, Helpers.IdFromName(nameVO)); | 
					
						
							| 
									
										
										
										
											2018-06-29 12:05:19 +02:00
										 |  |  |  |                 mdVF = mdVF.Replace(replaceOld, replaceNew); | 
					
						
							| 
									
										
										
										
											2018-06-25 10:49:13 +02:00
										 |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2018-06-29 12:05:19 +02:00
										 |  |  |  |             Console.WriteLine(mdVF); | 
					
						
							|  |  |  |  |             await SaveStringAsync(dataDir + "monsters_hd_tmp.md", mdVF); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-23 22:47:10 +02:00
										 |  |  |  |             return; | 
					
						
							| 
									
										
										
										
											2018-05-23 21:52:38 +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
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  |  |     } | 
					
						
							|  |  |  |  | } |