mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-10-29 22:45:44 +00:00
Description ok !
This commit is contained in:
parent
d6a516c75f
commit
63ee4b6a17
5 changed files with 128 additions and 60 deletions
|
|
@ -55,6 +55,7 @@ namespace AideDeJeu.ViewModels
|
|||
public Item ParseItem(string source, ref ContainerBlock.Enumerator enumerator, Dictionary<string, Item> allItems)
|
||||
{
|
||||
var currentItem = GetNewItem(enumerator.Current);
|
||||
PropertyInfo currentProp = null;
|
||||
|
||||
if (currentItem != null)
|
||||
{
|
||||
|
|
@ -65,66 +66,114 @@ namespace AideDeJeu.ViewModels
|
|||
|
||||
if (block is HtmlBlock)
|
||||
{
|
||||
if (IsClosingItem(block))
|
||||
var htmlBlock = block as HtmlBlock;
|
||||
if (htmlBlock.Type == HtmlBlockType.Comment)
|
||||
{
|
||||
currentItem.Id = GetNewAnchorId(source, currentItem.Name, allItems);
|
||||
if (currentItem.Id != null && allItems != null)
|
||||
{
|
||||
allItems[currentItem.Id] = currentItem;
|
||||
}
|
||||
return currentItem;
|
||||
}
|
||||
else if (IsNewItem(block))
|
||||
{
|
||||
var subItem = ParseItem(source, ref enumerator, allItems);
|
||||
subItem.ParentLink = GetNewAnchorId(source, currentItem.Name, allItems);
|
||||
subItem.ParentName = currentItem.Name;
|
||||
subItem.Markdown = $"> {subItem.ParentNameLink}\n\n---\n\n{subItem.Markdown}";
|
||||
var tag = htmlBlock.Lines.Lines.FirstOrDefault().Slice.ToString();
|
||||
var parsedComment = new ParsedComment(tag, withSigns: true);
|
||||
|
||||
var propertyName = subItem.GetType().Name;
|
||||
|
||||
if (currentItem.GetType().GetProperty(propertyName) != null)
|
||||
if (parsedComment.Type == ParsedCommentType.Item)
|
||||
{
|
||||
PropertyInfo prop = currentItem.GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance);
|
||||
if (null != prop && prop.CanWrite)
|
||||
if (parsedComment.IsClosing)
|
||||
{
|
||||
prop.SetValue(currentItem, subItem, null);
|
||||
}
|
||||
}
|
||||
else //if (currentItem is Items)
|
||||
{
|
||||
if (allItems != null && currentItem.GetNewFilterViewModel() == null)
|
||||
{
|
||||
var name = subItem.Name;
|
||||
var level = Math.Max(1, Math.Min(6, subItem.NameLevel));
|
||||
var link = (subItem is LinkItem ? (subItem as LinkItem).Link : subItem.Id);
|
||||
currentItem.Markdown += $"\n\n{new String('#', level)} [{name}]({link})";
|
||||
if(!string.IsNullOrEmpty(subItem.AltNameText))
|
||||
currentItem.Id = GetNewAnchorId(source, currentItem.Name, allItems);
|
||||
if (currentItem.Id != null && allItems != null)
|
||||
{
|
||||
var altname = subItem.AltNameText;
|
||||
var altlevel = Math.Max(1, Math.Min(6, subItem.NameLevel + 3));
|
||||
currentItem.Markdown += $"\n\n{new String('#', altlevel)} _[{altname}]({link})_";
|
||||
allItems[currentItem.Id] = currentItem;
|
||||
}
|
||||
currentItem.Markdown += "\n\n";
|
||||
return currentItem;
|
||||
}
|
||||
else
|
||||
{
|
||||
var items = currentItem; // as Items;
|
||||
items.AddChild(subItem);
|
||||
var subItem = ParseItem(source, ref enumerator, allItems);
|
||||
subItem.ParentLink = GetNewAnchorId(source, currentItem.Name, allItems);
|
||||
subItem.ParentName = currentItem.Name;
|
||||
subItem.Markdown = $"> {subItem.ParentNameLink}\n\n---\n\n{subItem.Markdown}";
|
||||
|
||||
var propertyName = subItem.GetType().Name;
|
||||
|
||||
if (currentItem.GetType().GetProperty(propertyName) != null)
|
||||
{
|
||||
PropertyInfo prop = currentItem.GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance);
|
||||
if (null != prop && prop.CanWrite)
|
||||
{
|
||||
prop.SetValue(currentItem, subItem, null);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (allItems != null && currentItem.GetNewFilterViewModel() == null)
|
||||
{
|
||||
var name = subItem.Name;
|
||||
var level = Math.Max(1, Math.Min(6, subItem.NameLevel));
|
||||
var link = (subItem is LinkItem ? (subItem as LinkItem).Link : subItem.Id);
|
||||
currentItem.Markdown += $"\n\n{new String('#', level)} [{name}]({link})";
|
||||
if (!string.IsNullOrEmpty(subItem.AltNameText))
|
||||
{
|
||||
var altname = subItem.AltNameText;
|
||||
var altlevel = Math.Max(1, Math.Min(6, subItem.NameLevel + 3));
|
||||
currentItem.Markdown += $"\n\n{new String('#', altlevel)} _[{altname}]({link})_";
|
||||
}
|
||||
currentItem.Markdown += "\n\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
var items = currentItem; // as Items;
|
||||
items.AddChild(subItem);
|
||||
}
|
||||
}
|
||||
enumerator.MoveNext();
|
||||
}
|
||||
}
|
||||
else if (parsedComment.Type == ParsedCommentType.Property)
|
||||
{
|
||||
if (!parsedComment.IsClosing)
|
||||
{
|
||||
PropertyInfo prop = currentItem.GetType().GetProperty(parsedComment.Name, BindingFlags.Public | BindingFlags.Instance);
|
||||
if (null != prop && prop.CanWrite)
|
||||
{
|
||||
prop.SetValue(currentItem, "", null);
|
||||
currentProp = prop;
|
||||
}
|
||||
enumerator.MoveNext();
|
||||
}
|
||||
else
|
||||
{
|
||||
currentProp = null;
|
||||
enumerator.MoveNext();
|
||||
}
|
||||
}
|
||||
else // comment html différent de item et property
|
||||
{
|
||||
var md = enumerator.Current.ToMarkdownString();
|
||||
currentItem.Markdown += md;
|
||||
if (currentProp != null)
|
||||
{
|
||||
currentProp.SetValue(currentItem, currentProp.GetValue(currentItem) + md, null);
|
||||
}
|
||||
enumerator.MoveNext();
|
||||
}
|
||||
}
|
||||
else // autre chose qu'un comment html
|
||||
{
|
||||
var md = enumerator.Current.ToMarkdownString();
|
||||
currentItem.Markdown += md;
|
||||
if (currentProp != null)
|
||||
{
|
||||
currentProp.SetValue(currentItem, currentProp.GetValue(currentItem) + md, null);
|
||||
}
|
||||
enumerator.MoveNext();
|
||||
}
|
||||
else
|
||||
{
|
||||
currentItem.Markdown += enumerator.Current.ToMarkdownString();
|
||||
enumerator.MoveNext();
|
||||
}
|
||||
}
|
||||
else
|
||||
else // autre chose qu'un block html
|
||||
{
|
||||
ParseItemProperties(source, currentItem, block);
|
||||
currentItem.Markdown += enumerator.Current.ToMarkdownString();
|
||||
var md = enumerator.Current.ToMarkdownString();
|
||||
currentItem.Markdown += md;
|
||||
if (currentProp != null)
|
||||
{
|
||||
currentProp.SetValue(currentItem, currentProp.GetValue(currentItem) + md, null);
|
||||
}
|
||||
enumerator.MoveNext();
|
||||
}
|
||||
}
|
||||
|
|
@ -259,16 +308,27 @@ namespace AideDeJeu.ViewModels
|
|||
return false;
|
||||
}
|
||||
|
||||
public enum ParsedCommentType
|
||||
{
|
||||
Item,
|
||||
Property,
|
||||
None,
|
||||
}
|
||||
public class ParsedComment
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public Dictionary<string, string> Attributes { get; set; }
|
||||
public string Name { get; private set; }
|
||||
public ParsedCommentType Type { get; private set; }
|
||||
public bool IsClosing { get; private set; }
|
||||
public Dictionary<string, string> Attributes { get; private set; }
|
||||
|
||||
public ParsedComment(string comment)
|
||||
public ParsedComment(string tag, bool withSigns = false)
|
||||
{
|
||||
var regex = new Regex("(?<item>\\w+)(\\s+((?<name>\\w+)=\"(?<value>.*?)\"))*");
|
||||
var comment = withSigns ? tag.Substring(4, tag.Length - 7) : tag;
|
||||
var regex = new Regex("(?<closing>/?)(?<item>\\w+)(\\s+((?<name>\\w+)=\"(?<value>.*?)\"))*");
|
||||
var match = regex.Match(comment);
|
||||
Name = match.Groups["item"].Value;
|
||||
Type = Name.EndsWith("Item") || Name.EndsWith("Items") ? ParsedCommentType.Item : Name != "br" ? ParsedCommentType.Property : ParsedCommentType.None;
|
||||
IsClosing = !string.IsNullOrEmpty(match.Groups["closing"].Value);
|
||||
var names = match.Groups["name"].Captures;
|
||||
var values = match.Groups["value"].Captures;
|
||||
Attributes = new Dictionary<string, string>();
|
||||
|
|
@ -282,7 +342,7 @@ namespace AideDeJeu.ViewModels
|
|||
bool CheckNewItem(string itemString)
|
||||
{
|
||||
var parsedComment = new ParsedComment(itemString);
|
||||
if (parsedComment.Name.EndsWith("Item") || parsedComment.Name.EndsWith("Items"))
|
||||
if (parsedComment.Type == ParsedCommentType.Item)
|
||||
{
|
||||
var name = $"AideDeJeuLib.{parsedComment.Name}, AideDeJeu";
|
||||
var type = Type.GetType(name);
|
||||
|
|
@ -291,7 +351,7 @@ namespace AideDeJeu.ViewModels
|
|||
return true;
|
||||
}
|
||||
}
|
||||
else if(parsedComment.Name != "br")
|
||||
else if(parsedComment.Type == ParsedCommentType.Property)
|
||||
{
|
||||
Debug.WriteLine(parsedComment.Name);
|
||||
}
|
||||
|
|
@ -350,6 +410,19 @@ namespace AideDeJeu.ViewModels
|
|||
return false;
|
||||
}
|
||||
|
||||
public bool IsClosingProperty(Block block)
|
||||
{
|
||||
var htmlBlock = block as HtmlBlock;
|
||||
if (htmlBlock.Type == HtmlBlockType.Comment)
|
||||
{
|
||||
var tag = htmlBlock.Lines.Lines.FirstOrDefault().Slice.ToString();
|
||||
var comment = tag.Substring(4, tag.Length - 7);
|
||||
var parsedComment = new ParsedComment(comment);
|
||||
return parsedComment.IsClosing && parsedComment.Type == ParsedCommentType.Property;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public Item GetNewItem(Block block)
|
||||
{
|
||||
var htmlBlock = block as HtmlBlock;
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@
|
|||
<Picker Title="Variante" HorizontalOptions="FillAndExpand" IsEnabled="{Binding SubBackgrounds.IsSuccessfullyCompleted}" ItemsSource="{Binding SubBackgrounds.Result}" ItemDisplayBinding="{Binding Name}" SelectedIndex="{Binding SubBackgroundSelectedIndex, Mode=TwoWay}" />
|
||||
<ScrollView Orientation="Vertical">
|
||||
<StackLayout>
|
||||
<mdview:MarkdownView Markdown="{Binding SelectedPlayerCharacter.Background.Description}" />
|
||||
<mdview:MarkdownView Markdown="{Binding SelectedPlayerCharacter.Background.Markdown}" />
|
||||
<mdview:MarkdownView Markdown="{Binding SelectedPlayerCharacter.SubBackground.Markdown}" />
|
||||
</StackLayout>
|
||||
|
|
|
|||
|
|
@ -373,14 +373,7 @@ namespace AideDeJeuCmd
|
|||
flags[it.Id] = true;
|
||||
}
|
||||
await context.Items.AddRangeAsync(store._AllItems.Values);
|
||||
try
|
||||
{
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex);
|
||||
}
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
var itemsSRD = await context.Items.Where(item => (item.Source != null && item.Source.Contains("SRD"))).ToListAsync();
|
||||
var monsters = await context.Monsters.ToListAsync();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
---
|
||||
!BackgroundItem
|
||||
Description: >+
|
||||
Vous n'êtes ni un solitaire, ni un sauvage, mais vous avez grandi et vécu en marge de la société. Par choix ou par contrainte, vous avez préféré vous tenir loin des villes et des routes les plus fréquentées, préférant les chemins de terre et les pistes sinueuses aux rues étroites des cités. Une large part de votre existence a été consacrée à assurer votre survie et celle de vos proches, qu'il s'agisse de votre famille ou de compagnons de brigandage. Et lorsque la nature n'y suffisait pas, vous n'avez jamais rechigné à vous en prendre aux voyageurs ou aux villageois afin d'assurer votre subsistance.
|
||||
|
||||
Abilities: Discrétion, Survie.
|
||||
MasteredTools: Véhicules (terrestres), un type de jeu au choix.
|
||||
Equipment: Couverture, habits de voyageur, piège à mâchoires, boîte à amadou, matériel de pêche, outre d'eau, bourse contenant 10 po.
|
||||
|
|
@ -18,10 +21,8 @@ Attributes: {}
|
|||
|
||||
# Brigand
|
||||
|
||||
|
||||
Vous n'êtes ni un solitaire, ni un sauvage, mais vous avez grandi et vécu en marge de la société. Par choix ou par contrainte, vous avez préféré vous tenir loin des villes et des routes les plus fréquentées, préférant les chemins de terre et les pistes sinueuses aux rues étroites des cités. Une large part de votre existence a été consacrée à assurer votre survie et celle de vos proches, qu'il s'agisse de votre famille ou de compagnons de brigandage. Et lorsque la nature n'y suffisait pas, vous n'avez jamais rechigné à vous en prendre aux voyageurs ou aux villageois afin d'assurer votre subsistance.
|
||||
|
||||
|
||||
**Compétences :** Discrétion, Survie.
|
||||
|
||||
**Outils maîtrisés :** Véhicules (terrestres), un type de jeu au choix.
|
||||
|
|
|
|||
BIN
Data/library.db
BIN
Data/library.db
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue