From cf2a66e6a0aaf454ffd2bda99062376f017fc227 Mon Sep 17 00:00:00 2001 From: Rene Modery Date: Tue, 8 Nov 2022 11:57:47 +0800 Subject: [PATCH] Markdown Core Core classes to support Markdown generation --- PowerDocu.Common/MarkdownBuilder.cs | 132 +++++++++++++++++++++++ PowerDocu.Common/OutputFormatHelper.cs | 13 +++ PowerDocu.Common/PowerDocu.Common.csproj | 4 +- 3 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 PowerDocu.Common/MarkdownBuilder.cs create mode 100644 PowerDocu.Common/OutputFormatHelper.cs diff --git a/PowerDocu.Common/MarkdownBuilder.cs b/PowerDocu.Common/MarkdownBuilder.cs new file mode 100644 index 0000000..cd69b04 --- /dev/null +++ b/PowerDocu.Common/MarkdownBuilder.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace PowerDocu.Common +{ + public abstract class MarkdownBuilder + { + protected readonly Random random = new Random(); + protected Dictionary SVGImages; + + protected string AddExpressionDetails(List inputs) + { + StringBuilder tableSB = new StringBuilder(""); + foreach (Expression input in inputs) + { + StringBuilder operandsCellSB = new StringBuilder(""); + } + else + { + if (input.expressionOperands.Count > 0) + { + if (input.expressionOperands[0]?.GetType() == typeof(Expression)) + { + operandsCellSB.Append(AddExpressionTable((Expression)input.expressionOperands[0]).Append("
"); + + if (input.expressionOperands.Count > 1) + { + StringBuilder operandsTableSB = new StringBuilder(""); + foreach (object actionInputOperand in input.expressionOperands) + { + if (actionInputOperand.GetType() == typeof(Expression)) + { + operandsTableSB.Append(AddExpressionTable((Expression)actionInputOperand, false)); + } + else + { + operandsTableSB.Append(""); + } + } + operandsTableSB.Append("
").Append(actionInputOperand.ToString()).Append("
"); + operandsCellSB.Append(operandsTableSB).Append("
")); + } + else + { + operandsCellSB.Append(input.expressionOperands[0]?.ToString()); + } + } + else + { + operandsCellSB.Append(""); + } + operandsCellSB.Append(""); + } + tableSB.Append("").Append(input.expressionOperator).Append("").Append(operandsCellSB).Append(""); + } + tableSB.Append(""); + return tableSB.ToString(); + } + + protected StringBuilder AddExpressionTable(Expression expression, bool createNewTable = true, bool firstColumnBold = false) + { + StringBuilder table = createNewTable ? new StringBuilder("") : new StringBuilder(); + + if (expression?.expressionOperator != null) + { + StringBuilder tr = new StringBuilder(""); + StringBuilder tc = new StringBuilder("")); + tc = new StringBuilder(""); + table.Append(tr.Append("")); + } + if (createNewTable) + { + table.Append("
"); + + if (firstColumnBold) + { + tc.Append("").Append(expression.expressionOperator).Append(""); + } + else + { + tc.Append(expression.expressionOperator); + } + tr.Append(tc.Append(""); + if (expression.expressionOperands.Count > 1) + { + StringBuilder operandsTable = new StringBuilder(""); + foreach (var expressionOperand in expression.expressionOperands.OrderBy(o => o.ToString()).ToList()) + { + if (expressionOperand.GetType().Equals(typeof(string))) + { + operandsTable.Append(""); + } + else if (expressionOperand.GetType().Equals(typeof(Expression))) + { + operandsTable.Append(AddExpressionTable((Expression)expressionOperand, false)); + } + else + { + operandsTable.Append(""); + } + } + tc.Append(operandsTable).Append("
").Append((string)expressionOperand).Append("
"); + } + else if (expression.expressionOperands.Count == 0) + { + //nothing to do here + } + else + { + object expo = expression.expressionOperands[0]; + if (expo.GetType().Equals(typeof(string))) + { + tc.Append((expression.expressionOperands.Count == 0) ? "" : expression.expressionOperands[0]?.ToString()); + } + else + { + tc.Append(AddExpressionTable((Expression)expo, true)); + } + } + tr.Append(tc).Append("
"); + } + return table; + } + + protected string getLinkFromText(string text) + { + return "#" + text.ToLower(); + } + } +} \ No newline at end of file diff --git a/PowerDocu.Common/OutputFormatHelper.cs b/PowerDocu.Common/OutputFormatHelper.cs new file mode 100644 index 0000000..44a4065 --- /dev/null +++ b/PowerDocu.Common/OutputFormatHelper.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace PowerDocu.Common +{ + public static class OutputFormatHelper + { + public static readonly string Word = "Word"; + public static readonly string Markdown = "Markdown"; + public static readonly string All = "All"; + } +} \ No newline at end of file diff --git a/PowerDocu.Common/PowerDocu.Common.csproj b/PowerDocu.Common/PowerDocu.Common.csproj index 430e001..286b644 100644 --- a/PowerDocu.Common/PowerDocu.Common.csproj +++ b/PowerDocu.Common/PowerDocu.Common.csproj @@ -4,12 +4,14 @@ netcoreapp3.1 latest embedded - x64 + x64 + +