mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-10-30 15:06:06 +00:00
Test reverse
This commit is contained in:
parent
d01f135867
commit
a83b481abf
14 changed files with 237 additions and 11 deletions
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Markdig.Syntax;
|
||||
|
||||
namespace AideDeJeuLib.Conditions
|
||||
{
|
||||
|
|
@ -18,5 +19,10 @@ namespace AideDeJeuLib.Conditions
|
|||
Text;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Parse(ref ContainerBlock.Enumerator enumerator)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Markdig.Syntax;
|
||||
|
||||
namespace AideDeJeuLib.Models
|
||||
{
|
||||
|
|
@ -19,5 +20,10 @@ namespace AideDeJeuLib.Models
|
|||
"# [Conditions](conditions_vo.md)\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
public override void Parse(ref ContainerBlock.Enumerator enumerator)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,8 +28,9 @@ namespace AideDeJeuLib
|
|||
}
|
||||
}
|
||||
|
||||
public Properties Properties { get; set; }
|
||||
//public Properties Properties { get; set; }
|
||||
|
||||
public abstract string Markdown { get; }
|
||||
public abstract void Parse(ref Markdig.Syntax.ContainerBlock.Enumerator enumerator);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
39
AideDeJeu/AideDeJeu/Models/Items.cs
Normal file
39
AideDeJeu/AideDeJeu/Models/Items.cs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Markdig.Syntax;
|
||||
|
||||
namespace AideDeJeuLib
|
||||
{
|
||||
public class Items : Item, IEnumerable<Item>
|
||||
{
|
||||
private IEnumerable<Item> _Items;
|
||||
public override string Markdown => throw new NotImplementedException();
|
||||
|
||||
public IEnumerator<Item> GetEnumerator()
|
||||
{
|
||||
return _Items.GetEnumerator();
|
||||
}
|
||||
|
||||
public override void Parse(ref ContainerBlock.Enumerator enumerator)
|
||||
{
|
||||
var items = new List<Item>();
|
||||
enumerator.MoveNext();
|
||||
while (enumerator.Current != null)
|
||||
{
|
||||
var item = new Spells.SpellHD();
|
||||
item.Parse(ref enumerator);
|
||||
items.Add(item);
|
||||
//enumerator.MoveNext();
|
||||
}
|
||||
_Items = items;
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return _Items.GetEnumerator();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Markdig.Syntax;
|
||||
|
||||
namespace AideDeJeuLib.Monsters
|
||||
{
|
||||
|
|
@ -36,5 +37,10 @@ namespace AideDeJeuLib.Monsters
|
|||
(LegendaryActions != null ? $"## Actions Légendaires\n\n" + LegendaryActions.Aggregate((s1, s2) => s1 + "\n\n" + s2) : "");
|
||||
}
|
||||
}
|
||||
|
||||
public override void Parse(ref ContainerBlock.Enumerator enumerator)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Markdig.Syntax;
|
||||
|
||||
namespace AideDeJeuLib.Monsters
|
||||
{
|
||||
|
|
@ -36,5 +37,10 @@ namespace AideDeJeuLib.Monsters
|
|||
(LegendaryActions != null ? $"## Legendary Actions\n\n" + LegendaryActions.Aggregate((s1, s2) => s1 + "\n\n" + s2) : "");
|
||||
}
|
||||
}
|
||||
|
||||
public override void Parse(ref ContainerBlock.Enumerator enumerator)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using AideDeJeu.Tools;
|
||||
using Markdig.Syntax;
|
||||
|
||||
namespace AideDeJeuLib.Spells
|
||||
{
|
||||
|
|
@ -65,5 +68,128 @@ namespace AideDeJeuLib.Spells
|
|||
}
|
||||
}
|
||||
|
||||
public override void Parse(ref ContainerBlock.Enumerator enumerator)
|
||||
{
|
||||
while (enumerator.Current != null)
|
||||
{
|
||||
var block = enumerator.Current;
|
||||
if (block is Markdig.Syntax.HeadingBlock)
|
||||
{
|
||||
var headingBlock = block as Markdig.Syntax.HeadingBlock;
|
||||
//DumpHeadingBlock(headingBlock);
|
||||
if (headingBlock.HeaderChar == '#' && headingBlock.Level == 1)
|
||||
{
|
||||
if(this.Name != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.Name = headingBlock.Inline.ToMarkdownString();
|
||||
//Console.WriteLine(spell.Name);
|
||||
}
|
||||
}
|
||||
if (block is Markdig.Syntax.ParagraphBlock)
|
||||
{
|
||||
var paragraphBlock = block as Markdig.Syntax.ParagraphBlock;
|
||||
this.DescriptionHtml += MarkdownExtensions.MarkdownToHtml(paragraphBlock.ToMarkdownString()) + "\n";
|
||||
////DumpParagraphBlock(paragraphBlock);
|
||||
//Console.WriteLine(paragraphBlock.IsBreakable);
|
||||
//spell.DescriptionHtml += paragraphBlock.Inline.ToContainerString();
|
||||
//if(paragraphBlock.IsBreakable)
|
||||
//{
|
||||
// spell.DescriptionHtml += "\n";
|
||||
//}
|
||||
}
|
||||
if (block is Markdig.Syntax.ListBlock)
|
||||
{
|
||||
var listBlock = block as Markdig.Syntax.ListBlock;
|
||||
//DumpListBlock(listBlock);
|
||||
if (listBlock.BulletType == '-')
|
||||
{
|
||||
this.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.ToMarkdownString();
|
||||
|
||||
var properties = new List<Tuple<string, Action<Spell, string>>>()
|
||||
{
|
||||
new Tuple<string, Action<Spell, string>>("NameVO: ", (m, s) => m.NameVO = s),
|
||||
new Tuple<string, Action<Spell, string>>("CastingTime: ", (m, s) => m.CastingTime = s),
|
||||
new Tuple<string, Action<Spell, string>>("Components: ", (m, s) => m.Components = s),
|
||||
new Tuple<string, Action<Spell, string>>("Duration: ", (m, s) => m.Duration = s),
|
||||
new Tuple<string, Action<Spell, string>>("LevelType: ", (m, s) => m.LevelType = s),
|
||||
new Tuple<string, Action<Spell, string>>("Range: ", (m, s) => m.Range = s),
|
||||
new Tuple<string, Action<Spell, string>>("Source: ", (m, s) => m.Source = s),
|
||||
new Tuple<string, Action<Spell, string>>("Classes: ", (m, s) => m.Source += s),
|
||||
new Tuple<string, Action<Spell, string>>("", (m,s) =>
|
||||
{
|
||||
})
|
||||
};
|
||||
|
||||
foreach (var property in properties)
|
||||
{
|
||||
if (str.StartsWith(property.Item1))
|
||||
{
|
||||
property.Item2.Invoke(this, str.Substring(property.Item1.Length));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var inblock in listBlock)
|
||||
{
|
||||
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;
|
||||
this.DescriptionHtml += listBlock.BulletType + " " + MarkdownExtensions.MarkdownToHtml(paragraphBlock.ToMarkdownString()) + "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (block is Markdig.Extensions.Tables.Table)
|
||||
{
|
||||
var tableBlock = block as Markdig.Extensions.Tables.Table;
|
||||
this.DescriptionHtml += "\n\n" + tableBlock.ToMarkdownString() + "\n\n";
|
||||
}
|
||||
//if (enumerator.Current is Markdig.Syntax.LinkReferenceDefinitionGroup)
|
||||
//{
|
||||
// var linkReferenceDefinitionGroup = enumerator.Current as Markdig.Syntax.LinkReferenceDefinitionGroup;
|
||||
// var linkReferenceDefinition = linkReferenceDefinitionGroup.FirstOrDefault() as Markdig.Syntax.LinkReferenceDefinition;
|
||||
// var label = linkReferenceDefinition.Label;
|
||||
// var title = linkReferenceDefinition.Title;
|
||||
// var url = linkReferenceDefinition.Url;
|
||||
// if (label == "//")
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
//}
|
||||
enumerator.MoveNext();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using Markdig.Syntax;
|
||||
|
||||
namespace AideDeJeuLib.Spells
|
||||
{
|
||||
|
|
@ -47,5 +48,10 @@ namespace AideDeJeuLib.Spells
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
public override void Parse(ref ContainerBlock.Enumerator enumerator)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,39 @@ namespace AideDeJeu.Tools
|
|||
return md;
|
||||
}
|
||||
|
||||
|
||||
public static Item ToItem(string md)
|
||||
{
|
||||
var pipeline = new MarkdownPipelineBuilder().UsePipeTables().Build();
|
||||
var document = Markdig.Parsers.MarkdownParser.Parse(md, pipeline);
|
||||
var block = document.First();
|
||||
var enumerator = document.GetEnumerator();
|
||||
{
|
||||
enumerator.MoveNext();
|
||||
while (enumerator.Current != null)
|
||||
{
|
||||
if(enumerator.Current is Markdig.Syntax.LinkReferenceDefinitionGroup)
|
||||
{
|
||||
var linkReferenceDefinitionGroup = enumerator.Current as Markdig.Syntax.LinkReferenceDefinitionGroup;
|
||||
var linkReferenceDefinition = linkReferenceDefinitionGroup.FirstOrDefault() as Markdig.Syntax.LinkReferenceDefinition;
|
||||
var label = linkReferenceDefinition.Label;
|
||||
var title = linkReferenceDefinition.Title;
|
||||
var url = linkReferenceDefinition.Url;
|
||||
if (label == "//")
|
||||
{
|
||||
var name = $"AideDeJeuLib.{title}, AideDeJeu";
|
||||
var type = Type.GetType(name);
|
||||
var instance = Activator.CreateInstance(type) as Item;
|
||||
instance.Parse(ref enumerator);
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
enumerator.MoveNext();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static IEnumerable<TSpell> ToSpells<TSpell>(this Markdig.Syntax.MarkdownDocument document) where TSpell : Spell, new()
|
||||
{
|
||||
var spells = new List<TSpell>();
|
||||
|
|
|
|||
|
|
@ -20,16 +20,10 @@ namespace AideDeJeu.ViewModels
|
|||
}
|
||||
}
|
||||
|
||||
public Command LoadItemCommand { get; set; }
|
||||
|
||||
public ItemDetailViewModel(Item item = null)
|
||||
{
|
||||
Title = item?.Name;
|
||||
Item = item;
|
||||
LoadItemCommand = new Command(async () => await ExecuteLoadItemCommand());
|
||||
}
|
||||
async Task ExecuteLoadItemCommand()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,8 @@ namespace AideDeJeu.ViewModels
|
|||
resourceName = "AideDeJeu.Data.spells_hd.md";
|
||||
//var md = await Tools.Helpers.GetStringFromUrl("https://raw.githubusercontent.com/Nioux/AideDeJeu/master/Data/spells_hd.md");
|
||||
var md = await Tools.Helpers.GetResourceStringAsync(resourceName);
|
||||
_AllItems = Tools.MarkdownExtensions.MarkdownToSpells<SpellHD>(md);
|
||||
_AllItems = Tools.MarkdownExtensions.ToItem(md) as IEnumerable<Item>;
|
||||
//_AllItems = Tools.MarkdownExtensions.MarkdownToSpells<SpellHD>(md);
|
||||
}
|
||||
break;
|
||||
case ItemSourceType.ConditionVO:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ namespace AideDeJeu.ViewModels
|
|||
return;
|
||||
|
||||
var vm = new ItemDetailViewModel(item);
|
||||
vm.LoadItemCommand.Execute(null);
|
||||
await Navigation.PushAsync(new ItemDetailPage(vm));
|
||||
}
|
||||
|
||||
|
|
@ -46,7 +45,6 @@ namespace AideDeJeu.ViewModels
|
|||
// return;
|
||||
|
||||
//var vm = new ItemDetailViewModel(item);
|
||||
//vm.LoadItemCommand.Execute(null);
|
||||
await Navigation.PushAsync(new ItemsPage());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<NavigationPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="AideDeJeu.Views.MainNavigationPage">
|
||||
x:Class="AideDeJeu.Views.MainNavigationPage" IsBusy="{Binding Main.IsBusy}">
|
||||
</NavigationPage>
|
||||
|
|
@ -1,4 +1,8 @@
|
|||
|
||||
[//]: # (Items)
|
||||
|
||||
[SpellHD]
|
||||
[SpellHD]: # ()
|
||||
# Agrandir/rétrécir
|
||||
- NameVO: [Enlarge/Reduce](spells_vo.md#enlargereduce)
|
||||
- CastingTime: 1 action
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue