From b27142c0fe785ce4b117775d97a51a40d595ea6f Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Fri, 14 Jun 2019 23:15:55 +0200 Subject: [PATCH] =?UTF-8?q?Maj=20nuget=20+=20d=C3=A9but=20parsing=20tome?= =?UTF-8?q?=20of=20beasts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AideDeJeu.Android.csproj | 4 +- AideDeJeu/AideDeJeu.UWP/AideDeJeu.UWP.csproj | 4 +- AideDeJeu/AideDeJeu.iOS/AideDeJeu.iOS.csproj | 4 +- AideDeJeu/AideDeJeu/AideDeJeu.csproj | 4 +- AideDeJeu/AideDeJeuCmd/AideDeJeuCmd.csproj | 3 +- AideDeJeu/AideDeJeuCmd/Program.cs | 127 ++++++++++++++++++ .../AideDeJeuUnitTest.csproj | 2 +- AideDeJeu/AideDeJeuWeb/AideDeJeuWeb.csproj | 2 +- 8 files changed, 139 insertions(+), 11 deletions(-) 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 @@ - +