diff --git a/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj b/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj
index 3639c719..0ca37d05 100644
--- a/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj
+++ b/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj
@@ -96,10 +96,10 @@
       1.1.0
     
     
-      4.0.0.482894
+      4.0.0.497661
     
     
-      4.0.0.482894
+      4.0.0.497661
     
     
       1.0.0
diff --git a/AideDeJeu/AideDeJeu.UWP/AideDeJeu.UWP.csproj b/AideDeJeu/AideDeJeu.UWP/AideDeJeu.UWP.csproj
index 2341b7de..14db536e 100644
--- a/AideDeJeu/AideDeJeu.UWP/AideDeJeu.UWP.csproj
+++ b/AideDeJeu/AideDeJeu.UWP/AideDeJeu.UWP.csproj
@@ -632,10 +632,10 @@
       1.1.0
     
     
-      4.0.0.482894
+      4.0.0.497661
     
     
-      4.0.0.482894
+      4.0.0.497661
     
     
       1.0.0
diff --git a/AideDeJeu/AideDeJeu.iOS/AideDeJeu.iOS.csproj b/AideDeJeu/AideDeJeu.iOS/AideDeJeu.iOS.csproj
index b1c44400..7b524fb0 100644
--- a/AideDeJeu/AideDeJeu.iOS/AideDeJeu.iOS.csproj
+++ b/AideDeJeu/AideDeJeu.iOS/AideDeJeu.iOS.csproj
@@ -450,10 +450,10 @@
       1.1.0
     
     
-      4.0.0.482894
+      4.0.0.497661
     
     
-      4.0.0.482894
+      4.0.0.497661
     
     
       1.0.0
diff --git a/AideDeJeu/AideDeJeu/AideDeJeu.csproj b/AideDeJeu/AideDeJeu/AideDeJeu.csproj
index 661ede86..e60950d5 100644
--- a/AideDeJeu/AideDeJeu/AideDeJeu.csproj
+++ b/AideDeJeu/AideDeJeu/AideDeJeu.csproj
@@ -82,8 +82,8 @@
     
     
     
-    
-    
+    
+    
     
     
   
diff --git a/AideDeJeu/AideDeJeuCmd/AideDeJeuCmd.csproj b/AideDeJeu/AideDeJeuCmd/AideDeJeuCmd.csproj
index 1b279e30..67fb4ba9 100644
--- a/AideDeJeu/AideDeJeuCmd/AideDeJeuCmd.csproj
+++ b/AideDeJeu/AideDeJeuCmd/AideDeJeuCmd.csproj
@@ -12,11 +12,12 @@
   
 
   
+    
     
     
     
     
-    
+    
     
   
 
diff --git a/AideDeJeu/AideDeJeuCmd/Program.cs b/AideDeJeu/AideDeJeuCmd/Program.cs
index 7dfa40fa..76a40e06 100644
--- a/AideDeJeu/AideDeJeuCmd/Program.cs
+++ b/AideDeJeu/AideDeJeuCmd/Program.cs
@@ -356,6 +356,7 @@ namespace AideDeJeuCmd
                 Console.WriteLine("l : build library");
                 Console.WriteLine("o : check orphan links");
                 Console.WriteLine("p : test pdf");
+                Console.WriteLine("h : extract html");
                 Console.WriteLine("q : quitter");
                 var key = Console.ReadKey(true);
                 switch (key.KeyChar)
@@ -369,12 +370,138 @@ namespace AideDeJeuCmd
                     case 'p':
                         await TestPdfAsync();
                         break;
+                    case 'h':
+                        await ExtractHtmlAsync();
+                        break;
                     case 'q':
                         return;
                 }
             }
         }
 
+        static async Task ExtractHtmlAsync()
+        {
+            var parser = new HtmlParser();
+            var doc = new HtmlAgilityPack.HtmlDocument();
+            doc.Load(@"..\..\..\..\..\Ignore\tome_of_beasts\page30.html");
+            parser.Parse(doc);
+        }
+
+        class HtmlParser
+        {
+            string key = "";
+            string value = "";
+            public void Parse(HtmlAgilityPack.HtmlDocument doc)
+            {
+                var styles = doc.DocumentNode.SelectSingleNode("/html/head/style").InnerText.Split('\n');
+                var txtDivs = doc.DocumentNode.SelectNodes("//div[@class='txt']");
+                bool started = false;
+                foreach (var txtDiv in txtDivs)
+                {
+                    var spans = txtDiv.Elements("span");
+                    foreach (var span in spans)
+                    {
+                        var spanId = span.GetAttributeValue("id", "");
+                        var spanStyle = span.GetAttributeValue("style", "");
+                        var spanIdStyle = styles.SingleOrDefault(s => s.StartsWith($"#{spanId} "));
+
+                        if (spanStyle.Contains("font-size:11px"))
+                        {   // nom (démarrage)
+                            started = true;
+                        }
+                        if (started)
+                        {
+                            if (spanStyle.Contains("font-size:11px"))
+                            {   // nom
+                                Console.WriteLine($"# {span.InnerText}");
+                            }
+                            else if (spanIdStyle.Contains("font-family:sans-serif; font-weight:normal; font-style:italic;") && span.InnerText.Contains("taille"))
+                            {   // type / size / alignment
+                                // todo : découper type / size / alignment
+                                Console.WriteLine($"-  {span.InnerText}");
+                            }
+                            else if (spanStyle.Contains("rgba(121,27,16,1)"))
+                            {   // key / value
+                                if (CloseKeyValue())
+                                {
+                                }
+                                key = span.InnerText;
+                                //Console.WriteLine($"-  {span.InnerText}");
+                            }
+                            else if (spanIdStyle.Contains("font-family:sans-serif; font-weight:normal; font-style:normal;"))
+                            {
+                                value += (value.Length == 0 ? " " : "") + span.InnerText;
+                            }
+                            else
+                            {
+                                if (CloseKeyValue())
+                                {
+                                }
+                                //Console.Write($"{spanStyle} => {span.InnerText} ");
+                                Console.Write($"{span.InnerText}");
+                            }
+                        }
+                    }
+                    if (started)
+                    {
+                        //Console.WriteLine();
+                    }
+                }
+            }
+
+            Dictionary KeyTags = new Dictionary()
+            {
+                { "Classe d’armure" , "ArmorClass" },
+                { "Points de vie", "HitPoints" },
+                { "Vitesse", "Speed" },
+                { "", "SavingThrows" },
+                { "Compétences", "Skills" },
+                { "Sens", "Senses" },
+                { "Langues", "Languages" },
+                { "Dangerosité", "Challenge" },
+                { "Résistance aux dégâts", "DamageResistance" },
+                { "Immunité contre les dégâts", "DamageImmunities" },
+                { "Immunité contre les états", "StateImmunities" },
+                //{ "", "" },
+                //{ "", "" },
+                //{ "", "" },
+                //{ "", "" },
+                //{ "", "" },
+                //{ "", "" },
+            };
+            List KeyCaracs = new List()
+            {
+                "FOR", "DEX", "CON", "INT", "SAG", "CHA"
+            };
+
+            string caracs = null;
+            bool CloseKeyValue()
+            {
+                if (!string.IsNullOrEmpty(key))
+                {
+                    if (KeyTags.ContainsKey(key.Trim()))
+                    {
+                        var tag = KeyTags[key.Trim()];
+                        Console.WriteLine($"- **{key.Trim()}** {value.Trim()}");
+                    }
+                    else if (KeyCaracs.Contains(key.Trim()))
+                    {
+                        if (key.Trim() == "FOR")
+                        {
+                            Console.WriteLine("|FOR|DEX|CON|INT|SAG|CHA|\n|---|---|---|---|---|---|");
+                        }
+                    }
+                    else
+                    {
+                        Console.WriteLine(value);
+                    }
+                    key = "";
+                    value = "";
+                    return true;
+                }
+                return false;
+            }
+        }
         static async Task TestPdfAsync()
         {
             Tests.Xamarin.Forms.Mocks.MockForms.Init();
diff --git a/AideDeJeu/AideDeJeuUnitTest/AideDeJeuUnitTest.csproj b/AideDeJeu/AideDeJeuUnitTest/AideDeJeuUnitTest.csproj
index a52e50af..b5c02272 100644
--- a/AideDeJeu/AideDeJeuUnitTest/AideDeJeuUnitTest.csproj
+++ b/AideDeJeu/AideDeJeuUnitTest/AideDeJeuUnitTest.csproj
@@ -13,7 +13,7 @@
     
     
     
-    
+    
     
   
 
diff --git a/AideDeJeu/AideDeJeuWeb/AideDeJeuWeb.csproj b/AideDeJeu/AideDeJeuWeb/AideDeJeuWeb.csproj
index ca692473..6c80f53b 100644
--- a/AideDeJeu/AideDeJeuWeb/AideDeJeuWeb.csproj
+++ b/AideDeJeu/AideDeJeuWeb/AideDeJeuWeb.csproj
@@ -15,7 +15,7 @@
     
     
     
-    
+