1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-12-23 18:43:27 +00:00

Expand markdown + corrections ids

This commit is contained in:
Yan Maniez 2019-07-12 11:48:41 +02:00
parent de25474e35
commit 3164665221
16 changed files with 5125 additions and 5048 deletions

View file

@ -1,4 +1,5 @@
using AideDeJeu.Tools;
using AideDeJeu.ViewModels;
using iTextSharp.text;
using iTextSharp.text.pdf;
using Markdig;
@ -10,6 +11,7 @@ using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Xamarin.Forms;
@ -38,9 +40,6 @@ namespace AideDeJeu.Pdf
}
Document _Document = null;
PdfWriter _Writer = null;
public string BasePdfDirectory
{
get
@ -49,23 +48,48 @@ namespace AideDeJeu.Pdf
}
}
public async Task<string> MarkdownToPDF(IEnumerable<AideDeJeuLib.Item> items)
{
return await MarkdownToPDF(items.Select(it => it.Markdown));
}
public async Task MarkdownToPDF(IEnumerable<AideDeJeuLib.Item> items, Stream stream)
{
await MarkdownToPdf(items.Select(it => it.Markdown), stream);
}
public async Task<string> MarkdownToPDF(IEnumerable<string> mds)
{
var basePath = BasePdfDirectory;
Directory.CreateDirectory(basePath);
using (var stream = new FileStream(Path.Combine(BasePdfDirectory, "test.pdf"), FileMode.Create))
{
MarkdownToPdf(mds, stream);
await MarkdownToPdf(mds, stream);
}
return "test.pdf";
}
public void MarkdownToPdf(IEnumerable<string> mds, Stream stream)
public async Task<string> ExpandMarkdownAsync(string mdIn)
{
var store = DependencyService.Get<StoreViewModel>();
var regex = new Regex("\\n##* \\[.*?\\]\\((?<id>.*?)\\)");
var matches = regex.Matches(mdIn);
var mdOut = mdIn;
foreach (Match match in matches)
{
var id = match.Groups["id"].Value;
var item = await store.GetItemFromDataAsync(id);
var mdReplace = await ExpandMarkdownAsync(item.Markdown);
mdOut = mdOut.Replace(match.Value, mdReplace);
}
return mdOut;
}
public async Task MarkdownToPdf(IEnumerable<string> mds, Stream stream)
{
var pipeline = new Markdig.MarkdownPipelineBuilder().UseYamlFrontMatter().UsePipeTables().Build();
_Document = new Document(new iTextSharp.text.Rectangle(822, 1122));
_Writer = PdfWriter.GetInstance(_Document, stream);
_Document.Open();
var document = new Document(new iTextSharp.text.Rectangle(822, 1122));
var writer = PdfWriter.GetInstance(document, stream);
document.Open();
//PdfReader reader = null;
//reader = new PdfReader(AideDeJeu.Tools.Helpers.GetResourceStream("AideDeJeu.Pdf.poker_size.pdf"));
//PdfStamper stamper = null;
@ -73,12 +97,13 @@ namespace AideDeJeu.Pdf
foreach (var md in mds)
{
var parsed = Markdig.Markdown.Parse(md, pipeline);
Render(parsed.AsEnumerable(), _Document);
var expandedMd = await ExpandMarkdownAsync(md);
var parsed = Markdig.Markdown.Parse(expandedMd, pipeline);
Render(parsed.AsEnumerable(), document, writer);
}
_Document.Close();
_Writer.Close();
document.Close();
writer.Close();
//stamper.Close();
//reader.Close();
}
@ -187,7 +212,7 @@ namespace AideDeJeu.Pdf
}
}
private void Render(IEnumerable<Block> blocks, Document document)
private void Render(IEnumerable<Block> blocks, Document document, PdfWriter writer)
{
//if(ParagraphFont == null)
//{
@ -219,7 +244,7 @@ namespace AideDeJeu.Pdf
var phrases = Render(blocks);
ColumnText ct = new ColumnText(_Writer.DirectContent);
ColumnText ct = new ColumnText(writer.DirectContent);
int column = 0;
ct.SetSimpleColumn(10, 10 + 200 * column, 200, 200 + 200 * column);

View file

@ -750,6 +750,24 @@ namespace AideDeJeu.ViewModels
return new AideDeJeuContext(dbPath);
}
public async Task<Item> GetItemFromDataAsync(string id)
{
var regex = new Regex("/?(?<file>.*?)(_with_(?<with>.*))?\\.md(#(?<anchor>.*))?");
var match = regex.Match(id);
var file = match.Groups["file"].Value;
var anchor = match.Groups["anchor"].Value;
var with = match.Groups["with"].Value;
try
{
var item = await Task.Run(async () => await Store.GetItemFromDataAsync(file, anchor));
return item;
}
catch
{
}
return null;
}
public async Task<Item> GetItemFromDataAsync(string source, string anchor)
{
var id = $"{source}.md".TrimStart('/');

View file

@ -771,7 +771,7 @@ namespace AideDeJeuCmd
using (var stream = new FileStream("test.pdf", FileMode.Create))
{
//pdfService.MarkdownToPdf("# mon titre\n\nhop", stream);
pdfService.MarkdownToPdf(spells.Select(s => s.Markdown).Take(3).ToList(), stream);
await pdfService.MarkdownToPdf(spells.Select(s => s.Markdown).Take(3).ToList(), stream);
//pdfService.MarkdownToPdf(new List<string>() { item.Markdown }, stream);
//var stream = new MemoryStream();
//pce.GeneratePdfToStream(pc, stream);