From 50a8a6876a2f057d3b04eec3257786799893e5b0 Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Mon, 17 Jun 2019 00:19:22 +0200 Subject: [PATCH] Parsing --- AideDeJeu/AideDeJeuCmd/Program.cs | 92 ++++++++++++++++++++++++------- 1 file changed, 72 insertions(+), 20 deletions(-) diff --git a/AideDeJeu/AideDeJeuCmd/Program.cs b/AideDeJeu/AideDeJeuCmd/Program.cs index b79dbacf..b5c596e4 100644 --- a/AideDeJeu/AideDeJeuCmd/Program.cs +++ b/AideDeJeu/AideDeJeuCmd/Program.cs @@ -447,7 +447,7 @@ namespace AideDeJeuCmd var divStyle = txtDiv.GetAttributeValue("style", ""); var parsedSpan = new ParsedSpan() { - Text = span.InnerText, + Text = span.InnerText.Replace(" ",""), Style = spanStyle, IdStyle = spanIdStyle, DivStyle = divStyle, @@ -502,6 +502,46 @@ namespace AideDeJeuCmd bool started = false; + public string MDStyle(string text, string style) + { + text = text.Trim(); + if (style.Contains("italic")) + { + text = $"_{text}_"; + } + if (style.Contains("bold")) + { + text = $"**{text}**"; + } + return text; + } + + List> MDSizes = new List>() + { + new KeyValuePair("Petite/Très Grande", "P/TG"), + new KeyValuePair("Très Petite", "TP"), + new KeyValuePair("Très Grande", "TG"), + new KeyValuePair("Grande", "G"), + new KeyValuePair("Moyenne", "M"), + new KeyValuePair("Gigantesque", "Gig"), + //new KeyValuePair("Moyenne (métamorphe)", "M"), + //new KeyValuePair("Très Petite taille ", "TP"), + new KeyValuePair("Petite", "P"), + //new KeyValuePair("Petite taille (cynome)", "P"), + //new KeyValuePair("Grande taille d’élémentaires de taille Minuscule", "G"), + }; + + string ToMDSize(string size) + { + foreach(var mdsize in MDSizes) + { + if(size.Contains(mdsize.Key)) + { + return mdsize.Value; + } + } + return size; + } public void OutputMarkdown(FullText fullText, TextWriter output, TextWriter error) { var page = fullText.Where(l => l.FirstOrDefault().Style.Contains(st16_255))?.FirstOrDefault()?.FirstOrDefault()?.Text; @@ -515,31 +555,32 @@ namespace AideDeJeuCmd string value = ""; if (line.Count > 1) { - value = line.Skip(1).Select(p => p.Text).Aggregate((p1, p2) => p1.Trim() + " " + p2.Trim()); + value = line.Skip(1).Select(p => MDStyle(p.Text, p.Style)).Aggregate((p1, p2) => p1.Trim() + " " + p2.Trim()); } + string text = MDStyle(keySpan.Text, keySpan.Style); Console.ForegroundColor = ConsoleColor.DarkGray; - error.Write($"{keySpan.Text}"); + error.Write($"{text}"); error.WriteLine($" {value}"); if (keySpan.Style.Contains(st48_0) && keySpan.IdStyle.Contains(idsnn)) { // titre de page Console.ForegroundColor = ConsoleColor.Blue; - error.Write($"{keySpan.Text} {value}\n"); + error.Write($"{text} {value}\n"); } else if (keySpan.Style.Contains(st9_203) && keySpan.IdStyle.Contains(idssnn)) { // bloodmark Console.ForegroundColor = ConsoleColor.Blue; - error.Write($"{keySpan.Text} {value}\n"); + error.Write($"{text} {value}\n"); } else if (keySpan.Style.Contains(st16_255) && keySpan.IdStyle.Contains(idsbn)) { // page Console.ForegroundColor = ConsoleColor.Blue; - error.Write($"{keySpan.Text} {value}\n"); + error.Write($"{text} {value}\n"); } else if (keySpan.Style.Contains(st8_0) && keySpan.IdStyle.Contains(idsnn)) { // encadré Console.ForegroundColor = ConsoleColor.Blue; - error.Write($"{keySpan.Text} {value}\n"); + error.Write($"{text} {value}\n"); } else if (keySpan.Style.Contains(st11_255) && keySpan.IdStyle.Contains(idssnn)) { // nom @@ -555,23 +596,34 @@ namespace AideDeJeuCmd output.Write("\n\n\n"); } output.Write("\n\n"); - output.Write($"# {CultureInfo.CurrentCulture.TextInfo.ToTitleCase(keySpan.Text.ToLower())}\n\n- Source: (LDM p{page})\n"); + output.Write($"# {CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text.ToLower())}\n\n- Source: (LDM p{page})\n"); } - else if (keySpan.Style.Contains(st8_0) && keySpan.IdStyle.Contains(idssni) && keySpan.Text.Contains("taille")) + else if (keySpan.Style.Contains(st8_0) && keySpan.IdStyle.Contains(idssni) && text.Contains("taille")) { // type / size / alignment // todo : découper type / size / alignment + var regex = new Regex("^(?.*?) de (taille )?(?.*?)( taille)?, (?.*?)$"); + var match = regex.Match(text); + var type = match.Groups["type"].Value; + var size = match.Groups["size"].Value; + var alignment = match.Groups["alignment"].Value; + if (type.Length > 0) + { + text = text.Replace(type, $"{type}"); + text = text.Replace(",", $" ({ToMDSize(size)}),"); + text = text.Replace(alignment, $"{alignment}"); + } Console.ForegroundColor = ConsoleColor.White; - output.Write($"-  {keySpan.Text}\n"); + output.Write($"-  {text}\n"); } else if (keySpan.Style.Contains(st8_121) && keySpan.IdStyle.Contains(idssbn)) { // key / ... string tag = ""; - if (KeyTags.ContainsKey(keySpan.Text.Trim())) + if (KeyTags.ContainsKey(text.Trim())) { - tag = KeyTags[keySpan.Text.Trim()]; + tag = KeyTags[text.Trim()]; Console.ForegroundColor = ConsoleColor.White; - output.Write($"- **{keySpan.Text.Trim()}** {value}\n"); + output.Write($"- **{text.Trim()}** {value}\n"); } else { @@ -587,7 +639,7 @@ namespace AideDeJeuCmd { // ... / value if (abilities != null) { - abilities += keySpan.Text; + abilities += text; if (abilities.Count(c => c == '(') == 6) { Console.ForegroundColor = ConsoleColor.White; @@ -598,33 +650,33 @@ namespace AideDeJeuCmd else { Console.ForegroundColor = ConsoleColor.White; - output.Write($"{keySpan.Text} {value}\n"); + output.Write($"{text} {value}\n"); } } else if (keySpan.Style.Contains(st14_137) && keySpan.IdStyle.Contains(idsnn)) { // actions / réactions Console.ForegroundColor = ConsoleColor.White; - output.Write($"\n## {keySpan.Text}\n{value}\n"); + output.Write($"\n## {text}\n{value}\n"); } else if (keySpan.Style.Contains(st8_0) && keySpan.IdStyle.Contains(idssnn)) { Console.ForegroundColor = ConsoleColor.White; - output.Write($"{keySpan.Text.Trim()} {value}\n"); + output.Write($"{text.Trim()} {value}\n"); } else if (keySpan.Style.Contains(st8_0) && keySpan.IdStyle.Contains(idssbi)) { Console.ForegroundColor = ConsoleColor.White; - output.Write($"\n**_{keySpan.Text.Trim()}_** {value}\n"); + output.Write($"\n**_{text.Trim()}_** {value}\n"); } else if (keySpan.Style.Contains(st8_0) && keySpan.IdStyle.Contains(idssbn)) { Console.ForegroundColor = ConsoleColor.White; - output.Write($"\n**{keySpan.Text.Trim()}** {value}\n"); + output.Write($"\n**{text.Trim()}** {value}\n"); } else { Console.ForegroundColor = ConsoleColor.Red; - error.Write($"{keySpan.Text} {value}\n"); + error.Write($"{text} {value}\n"); error.Write($"{keySpan.Style}\n"); error.Write($"{keySpan.IdStyle}\n"); }