mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-31 15:36:07 +00:00 
			
		
		
		
	Tests markdown
This commit is contained in:
		
							parent
							
								
									0e6b37ebae
								
							
						
					
					
						commit
						73a99d791c
					
				
					 3 changed files with 6599 additions and 32 deletions
				
			
		|  | @ -15,8 +15,179 @@ using Xamarin.Forms.Internals; | ||||||
| 
 | 
 | ||||||
| namespace AideDeJeuCmd | namespace AideDeJeuCmd | ||||||
| { | { | ||||||
|  |     public static class MarkdownExtensions | ||||||
|  |     { | ||||||
|  |         public static string ToString(this Markdig.Syntax.SourceSpan span, string md) | ||||||
|  |         { | ||||||
|  |             return md.Substring(span.Start, span.Length); | ||||||
|  |         } | ||||||
|  |         public static string ToContainerString(this Markdig.Syntax.Inlines.ContainerInline inlines) | ||||||
|  |         { | ||||||
|  |             var str = string.Empty; | ||||||
|  |             foreach(var inline in inlines) | ||||||
|  |             { | ||||||
|  |                 if (inline is Markdig.Syntax.Inlines.LineBreakInline) | ||||||
|  |                 { | ||||||
|  |                     str += "\n"; | ||||||
|  |                 } | ||||||
|  |                 else if (inline is Markdig.Syntax.Inlines.LiteralInline) | ||||||
|  |                 { | ||||||
|  |                     str += inline.ToString(); | ||||||
|  |                 } | ||||||
|  |                 else if(inline is Markdig.Syntax.Inlines.ContainerInline) | ||||||
|  |                 { | ||||||
|  |                     str += (inline as Markdig.Syntax.Inlines.ContainerInline).ToContainerString(); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     str += inline.ToString(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             return str; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public static string ToMarkdownString(this IEnumerable<Spell> spells) | ||||||
|  |         { | ||||||
|  |             var md = string.Empty; | ||||||
|  |             foreach(var spell in spells) | ||||||
|  |             { | ||||||
|  |                 md += spell.ToMarkdownString(); | ||||||
|  |             } | ||||||
|  |             return md; | ||||||
|  |         } | ||||||
|  |         public static string ToMarkdownString(this Spell spell) | ||||||
|  |         { | ||||||
|  |             var md = string.Empty; | ||||||
|  |             md += string.Format("# {0}\n", spell.NamePHB); | ||||||
|  |             md += string.Format("- NameVO: {0}\n", spell.NameVO); | ||||||
|  |             md += string.Format("- CastingTime: {0}\n", spell.CastingTime); | ||||||
|  |             md += string.Format("- Components: {0}\n", spell.Components); | ||||||
|  |             md += string.Format("- Duration: {0}\n", spell.Duration); | ||||||
|  |             md += string.Format("- LevelType: {0}\n", spell.LevelType); | ||||||
|  |             md += string.Format("- Range: {0}\n", spell.Range); | ||||||
|  |             var regex = new Regex("(?<source>\\(.*\\)) (?<classes>.*)"); | ||||||
|  |             var match = regex.Match(spell.Source); | ||||||
|  |             var source = match.Groups["source"].Value; | ||||||
|  |             var classes = match.Groups["classes"].Value; | ||||||
|  |             md += string.Format("- Source: {0}\n", source); | ||||||
|  |             md += string.Format("- Classes: {0}\n", classes.Replace(" ;", ",").Trim().Trim(',')); | ||||||
|  |             md += "\n"; | ||||||
|  |             md += "### Description\n\n"; | ||||||
|  |             md += spell | ||||||
|  |                 .DescriptionHtml | ||||||
|  |                 .Replace("<strong>", "**") | ||||||
|  |                 .Replace("</strong>", "**") | ||||||
|  |                 .Replace("<em>", "_") | ||||||
|  |                 .Replace("</em>", "_") | ||||||
|  |                 .Replace("<li>", "*") | ||||||
|  |                 .Replace("</li>", "") | ||||||
|  |                 .Replace("<br/>", "\n") | ||||||
|  |                 ; | ||||||
|  |             md += "\n\n"; | ||||||
|  |             return md; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|     class Program |     class Program | ||||||
|     { |     { | ||||||
|  |         public class MarkdownConverter | ||||||
|  |         { | ||||||
|  |             public IEnumerable<Spell> MarkdownToSpells(string md) | ||||||
|  |             { | ||||||
|  |                 var spells = new List<Spell>(); | ||||||
|  |                 var document = Markdig.Parsers.MarkdownParser.Parse(MD); | ||||||
|  |                 Spell spell = null; | ||||||
|  |                 foreach (var block in document) | ||||||
|  |                 { | ||||||
|  |                     DumpBlock(block); | ||||||
|  |                     if (block is Markdig.Syntax.HeadingBlock) | ||||||
|  |                     { | ||||||
|  |                         var headingBlock = block as Markdig.Syntax.HeadingBlock; | ||||||
|  |                         DumpHeadingBlock(headingBlock); | ||||||
|  |                         if (headingBlock.HeaderChar == '#' && headingBlock.Level == 1) | ||||||
|  |                         { | ||||||
|  |                             if (spell != null) | ||||||
|  |                             { | ||||||
|  |                                 spells.Add(spell); | ||||||
|  |                             } | ||||||
|  |                             spell = new Spell(); | ||||||
|  |                             spell.Name = spell.NamePHB = headingBlock.Inline.ToContainerString(); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     if (block is Markdig.Syntax.ParagraphBlock) | ||||||
|  |                     { | ||||||
|  |                         var paragraphBlock = block as Markdig.Syntax.ParagraphBlock; | ||||||
|  |                         DumpParagraphBlock(paragraphBlock); | ||||||
|  |                         spell.DescriptionHtml += paragraphBlock.Inline.ToContainerString(); | ||||||
|  |                     } | ||||||
|  |                     if (block is Markdig.Syntax.ListBlock) | ||||||
|  |                     { | ||||||
|  |                         var listBlock = block as Markdig.Syntax.ListBlock; | ||||||
|  |                         DumpListBlock(listBlock); | ||||||
|  |                         if (listBlock.BulletType == '-') | ||||||
|  |                         { | ||||||
|  |                             spell.Source = ""; | ||||||
|  |                             foreach (var inblock in listBlock) | ||||||
|  |                             { | ||||||
|  |                                 DumpBlock(inblock); | ||||||
|  |                                 var regex = new Regex("(?<key>.*?): (?<value>.*)"); | ||||||
|  |                                 if (inblock is Markdig.Syntax.ListItemBlock) | ||||||
|  |                                 { | ||||||
|  |                                     var listItemBlock = inblock as Markdig.Syntax.ListItemBlock; | ||||||
|  |                                     foreach (var ininblock in listItemBlock) | ||||||
|  |                                     { | ||||||
|  |                                         DumpBlock(ininblock); | ||||||
|  |                                         if(ininblock is Markdig.Syntax.ParagraphBlock) | ||||||
|  |                                         { | ||||||
|  |                                             var paragraphBlock = ininblock as Markdig.Syntax.ParagraphBlock; | ||||||
|  |                                             DumpParagraphBlock(paragraphBlock); | ||||||
|  |                                             var str = paragraphBlock.Inline.ToContainerString(); | ||||||
|  |                                             var match = regex.Match(str); | ||||||
|  |                                             var key = match.Groups["key"].Value; | ||||||
|  |                                             var value = match.Groups["value"].Value; | ||||||
|  |                                             switch(key) | ||||||
|  |                                             { | ||||||
|  |                                                 case "NameVO": | ||||||
|  |                                                     spell.NameVO = value; | ||||||
|  |                                                     break; | ||||||
|  |                                                 case "CastingTime": | ||||||
|  |                                                     spell.CastingTime = value; | ||||||
|  |                                                     break; | ||||||
|  |                                                 case "Components": | ||||||
|  |                                                     spell.Components = value; | ||||||
|  |                                                     break; | ||||||
|  |                                                 case "Duration": | ||||||
|  |                                                     spell.Duration = value; | ||||||
|  |                                                     break; | ||||||
|  |                                                 case "LevelType": | ||||||
|  |                                                     spell.LevelType = value; | ||||||
|  |                                                     break; | ||||||
|  |                                                 case "Range": | ||||||
|  |                                                     spell.Range = value; | ||||||
|  |                                                     break; | ||||||
|  |                                                 case "Source": | ||||||
|  |                                                     spell.Source += value; | ||||||
|  |                                                     break; | ||||||
|  |                                                 case "Classes": | ||||||
|  |                                                     spell.Source += value; | ||||||
|  |                                                     break; | ||||||
|  |                                             } | ||||||
|  |                                         } | ||||||
|  |                                     } | ||||||
|  | 
 | ||||||
|  |                                     DumpListItemBlock(inblock as Markdig.Syntax.ListItemBlock); | ||||||
|  |                                 } | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                 } | ||||||
|  |                 if (spell != null) | ||||||
|  |                 { | ||||||
|  |                     spells.Add(spell); | ||||||
|  |                 } | ||||||
|  |                 return spells; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|         static string MD; |         static string MD; | ||||||
|         static void DumpParagraphBlock(Markdig.Syntax.ParagraphBlock block) |         static void DumpParagraphBlock(Markdig.Syntax.ParagraphBlock block) | ||||||
|         { |         { | ||||||
|  | @ -65,7 +236,7 @@ namespace AideDeJeuCmd | ||||||
|             Console.WriteLine(block.Line); |             Console.WriteLine(block.Line); | ||||||
|             Console.WriteLine(block.RemoveAfterProcessInlines); |             Console.WriteLine(block.RemoveAfterProcessInlines); | ||||||
|             Console.WriteLine(block.Span.ToString()); |             Console.WriteLine(block.Span.ToString()); | ||||||
|             Console.WriteLine(MD.Substring(block.Span.Start, block.Span.Length)); |             Console.WriteLine(block.Span.ToString(MD)); | ||||||
|             Console.WriteLine(block.ToString()); |             Console.WriteLine(block.ToString()); | ||||||
|             if(block is Markdig.Syntax.ParagraphBlock) |             if(block is Markdig.Syntax.ParagraphBlock) | ||||||
|             { |             { | ||||||
|  | @ -91,12 +262,20 @@ namespace AideDeJeuCmd | ||||||
|                 DumpBlock(block); |                 DumpBlock(block); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         static async Task Main(string[] args) | 
 | ||||||
|  |         static async Task TestMD() | ||||||
|         { |         { | ||||||
|             MD = await new StreamReader(@"..\..\..\..\..\Data\spells_hd.md").ReadToEndAsync(); |             MD = await new StreamReader(@"..\..\..\..\..\Data\spells_hd.md").ReadToEndAsync(); | ||||||
|             var document = Markdig.Parsers.MarkdownParser.Parse(MD); |             var document = Markdig.Parsers.MarkdownParser.Parse(MD); | ||||||
|             DumpMarkdownDocument(document); |             DumpMarkdownDocument(document); | ||||||
|             return; |             var converter = new MarkdownConverter(); | ||||||
|  |             var spellss = converter.MarkdownToSpells(MD); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         static async Task Main(string[] args) | ||||||
|  |         { | ||||||
|  |             //await TestMD(); | ||||||
|  |             //return; | ||||||
|             string dataDir = @"..\..\..\..\..\Data\"; |             string dataDir = @"..\..\..\..\..\Data\"; | ||||||
|             //string ignoreDir = @"..\..\..\..\..\Ignore\"; |             //string ignoreDir = @"..\..\..\..\..\Ignore\"; | ||||||
|             //var documentsDirectoryPath = @"database.db"; // Windows.Storage.ApplicationData.Current.LocalFolder.Path; |             //var documentsDirectoryPath = @"database.db"; // Windows.Storage.ApplicationData.Current.LocalFolder.Path; | ||||||
|  | @ -148,6 +327,9 @@ namespace AideDeJeuCmd | ||||||
|             var monstersVF = LoadJSon<IEnumerable<Monster>>(dataDir + "monsters_vf_full.json"); |             var monstersVF = LoadJSon<IEnumerable<Monster>>(dataDir + "monsters_vf_full.json"); | ||||||
|             var monstersVO = LoadJSon<IEnumerable<Monster>>(dataDir + "monsters_vo_full.json"); |             var monstersVO = LoadJSon<IEnumerable<Monster>>(dataDir + "monsters_vo_full.json"); | ||||||
| 
 | 
 | ||||||
|  |             var mdhd = spellsHD.ToMarkdownString(); | ||||||
|  |             await SaveStringAsync(dataDir + "spells_hd.md", mdhd); | ||||||
|  | 
 | ||||||
|             spellsVF.ForEach(sp => sp.Html = null); |             spellsVF.ForEach(sp => sp.Html = null); | ||||||
|             spellsVO.ForEach(sp => sp.Html = null); |             spellsVO.ForEach(sp => sp.Html = null); | ||||||
|             spellsVF.ForEach(sp => sp.DescriptionDiv = sp.DescriptionDiv); |             spellsVF.ForEach(sp => sp.DescriptionDiv = sp.DescriptionDiv); | ||||||
|  | @ -485,6 +667,15 @@ namespace AideDeJeuCmd | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         private static async Task SaveStringAsync(string filename, string text)  | ||||||
|  |         { | ||||||
|  |             using (var stream = new FileStream(filename, FileMode.Create)) | ||||||
|  |             { | ||||||
|  |                 var buffer = Encoding.UTF8.GetBytes(text); | ||||||
|  |                 await stream.WriteAsync(buffer, 0, buffer.Length); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         private static async Task<IEnumerable<string>> LoadList(string filename) |         private static async Task<IEnumerable<string>> LoadList(string filename) | ||||||
|         { |         { | ||||||
|             using (var stream = new StreamReader(filename)) |             using (var stream = new StreamReader(filename)) | ||||||
|  |  | ||||||
							
								
								
									
										6380
									
								
								Data/spells_hd.md
									
										
									
									
									
								
							
							
						
						
									
										6380
									
								
								Data/spells_hd.md
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										54
									
								
								Data/spells_hd_test.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								Data/spells_hd_test.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | ||||||
|  | # Agrandir/rétrécir | ||||||
|  | - NameVO: Enlarge/Reduce | ||||||
|  | - CastingTime: 1 action | ||||||
|  | - Components: V, S, M (une pincée de limaille de fer) | ||||||
|  | - Duration: concentration, jusqu’à 1 minute | ||||||
|  | - LevelType: Transmutation de niveau 2 | ||||||
|  | - Range: 9 mètres | ||||||
|  | - Source: (HD)(SRD)  | ||||||
|  | - Classes: Ensorceleur, Magicien | ||||||
|  | 
 | ||||||
|  | ### Description | ||||||
|  | 
 | ||||||
|  | Vous agrandissez ou rétrécissez une créature ou un objet situé à portée et dans votre champ de vision pendant toute la durée du sort.  | ||||||
|  | Choisissez soit une créature, soit un objet qui n’est ni porté ni transporté.  | ||||||
|  | Si la cible n’est pas consentante, elle a droit à un jet de sauvegarde de Constitution.  | ||||||
|  | Si elle le réussit, le sort est sans effet. | ||||||
|  | 
 | ||||||
|  | Si la cible est une créature, tout ce qu’elle porte et tout ce qu’elle transporte change de taille avec elle.  | ||||||
|  | En revanche, si elle lâche un objet, il reprend sa taille normale sur-le-champ. | ||||||
|  | 
 | ||||||
|  | **_Agrandir._**  | ||||||
|  | La cible double dans toutes les dimensions, et son poids est multiplié par huit.  | ||||||
|  | Cette croissance augmente sa catégorie de taille d’un cran, de M à G par exemple.  | ||||||
|  | Si la cible n’a pas assez de place pour doubler de volume, elle atteint la taille maximale possible dans l’espace dont elle dispose.  | ||||||
|  | Elle bénéficie d’un avantage lors des tests de Force et des jets de sauvegarde de Force jusqu’à la fin du sort.  | ||||||
|  | Les armes de la cible grandissent pour s’adapter à sa nouvelle taille.  | ||||||
|  | Tant qu’elles sont ainsi agrandies, elles infligent 1d4 dégâts de plus. | ||||||
|  | 
 | ||||||
|  | **_Rétrécir._** | ||||||
|  | La cible réduit de moitié dans toutes les dimensions et son poids est divisé par huit.  | ||||||
|  | Ce rétrécissement réduit sa catégorie de taille d’un cran, de M à P par exemple.  | ||||||
|  | La cible subit un désavantage lors des tests de Force et des jets de sauvegarde de Force jusqu’à la fin du sort.  | ||||||
|  | Les armes de la cible rétrécissent pour s’adapter à sa nouvelle taille.  | ||||||
|  | Tant qu’elles sont ainsi réduites, elles infligent 1d4 dégâts de moins (avec un minimum de 1 dégât). | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Aide | ||||||
|  | - NameVO: Aid | ||||||
|  | - CastingTime: 1 action | ||||||
|  | - Components: V, S, M (une minuscule bandelette de tissu blanc) | ||||||
|  | - Duration: 8 heures | ||||||
|  | - LevelType: Abjuration de niveau 2 | ||||||
|  | - Range: 9 mètres | ||||||
|  | - Source: (HD)(SRD)  | ||||||
|  | - Classes: Clerc, Paladin | ||||||
|  | 
 | ||||||
|  | ### Description | ||||||
|  | 
 | ||||||
|  | Le sort renforce vos alliés, qui deviennent plus robustes et plus résolus.  | ||||||
|  | Choisissez jusqu’à trois créatures à portée.  | ||||||
|  | Le maximum de points de vie et les points de vie actuels de chacune d’entre elles augmentent de 5 pendant toute la durée du sort. | ||||||
|  | 
 | ||||||
|  | **_À plus haut niveau._** | ||||||
|  | Quand vous lancez ce sort en utilisant un emplacement de niveau 3 ou supérieur, les points de vie de chaque cible augmentent de 5 points supplémentaires pour chaque niveau au-delà du niveau 2. | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez