diff --git a/Logof Client.csproj b/Logof Client.csproj index a1d80cc..9fa3722 100644 --- a/Logof Client.csproj +++ b/Logof Client.csproj @@ -9,25 +9,26 @@ - - - - - + + + + + None All - - - - + + + + + - - + + @@ -37,15 +38,15 @@ - + PreserveNewest - + PreserveNewest - + PreserveNewest @@ -56,6 +57,6 @@ PreserveNewest - + diff --git a/MainWindow.axaml b/MainWindow.axaml index c7c2c9c..e9cabf9 100644 --- a/MainWindow.axaml +++ b/MainWindow.axaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:md="https://github.com/whistyun/Markdown.Avalonia" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" MinWidth="1000" MinHeight="600" IsVisible="False" x:Class="Logof_Client.MainWindow" WindowState="Maximized" Icon="assets/icon.ico" @@ -370,9 +371,7 @@ - - - + diff --git a/MainWindow.axaml.cs b/MainWindow.axaml.cs index fa49f68..10d3408 100644 --- a/MainWindow.axaml.cs +++ b/MainWindow.axaml.cs @@ -230,18 +230,19 @@ public partial class MainWindow : Window { _selectedWikiFilePath = item.Path; var text = await _wikiService.LoadFileContentAsync(item.Path); - try - { - PreviewPanel.Children.Clear(); - var rendered = MarkdownRenderer.Render(text ?? string.Empty); - PreviewPanel.Children.Add(rendered); - } - catch (Exception ex) - { - Logger.Log($"Error while rendering markdown: {ex.Message}", Logger.LogType.Error); - PreviewPanel.Children.Clear(); - PreviewPanel.Children.Add(new TextBlock { Text = text ?? string.Empty }); - } + MsvWikiView.Markdown = text; + // try + // { + // PreviewPanel.Children.Clear(); + // var rendered = MarkdownRenderer.Render(text ?? string.Empty); + // PreviewPanel.Children.Add(rendered); + // } + // catch (Exception ex) + // { + // Logger.Log($"Error while rendering markdown: {ex.Message}", Logger.LogType.Error); + // PreviewPanel.Children.Clear(); + // PreviewPanel.Children.Add(new TextBlock { Text = text ?? string.Empty }); + // } EditButton.IsEnabled = true; } diff --git a/Wiki/MarkdownRenderer.cs b/Wiki/MarkdownRenderer.cs index 6b20aa0..d34a181 100644 --- a/Wiki/MarkdownRenderer.cs +++ b/Wiki/MarkdownRenderer.cs @@ -11,130 +11,130 @@ namespace Logof_Client.Wiki; public static class MarkdownRenderer { - public static Control Render(string markdown) - { - try - { - var panel = new StackPanel { Spacing = 6 }; - if (string.IsNullOrWhiteSpace(markdown)) return panel; - - var doc = Markdown.Parse(markdown); - - foreach (var block in doc) - { - switch (block) - { - case HeadingBlock hb: - { - var text = GetInlineText(hb.Inline); - var tb = new TextBlock - { - Text = text, - FontWeight = FontWeight.Bold, - Margin = new Avalonia.Thickness(0, hb.Level == 1 ? 6 : 2, 0, 2) - }; - tb.FontSize = hb.Level switch { 1 => 22, 2 => 18, 3 => 16, _ => 14 }; - panel.Children.Add(tb); - break; - } - - case ParagraphBlock pb: - { - var text = GetInlineText(pb.Inline); - var tb = new TextBlock { Text = text, TextWrapping = Avalonia.Media.TextWrapping.Wrap }; - panel.Children.Add(tb); - break; - } - - case FencedCodeBlock cb: - { - var sb = new StringBuilder(); - foreach (var line in cb.Lines.Lines) - { - sb.Append(line.ToString()); - } - var codeBox = new TextBox - { - Text = sb.ToString(), - FontFamily = "Consolas, monospace", - IsReadOnly = true, - AcceptsReturn = true - }; - panel.Children.Add(codeBox); - break; - } - - case ListBlock lb: - { - var sp = new StackPanel { Spacing = 2 }; - var number = 1; - foreach (var item in lb) - { - if (item is ListItemBlock lib) - { - var itemText = new StringBuilder(); - foreach (var sub in lib) - { - if (sub is ParagraphBlock pp) - itemText.Append(GetInlineText(pp.Inline)); - } - var tb = new TextBlock { Text = (lb.IsOrdered ? (number++ + ". ") : "• ") + itemText.ToString() }; - sp.Children.Add(tb); - } - } - panel.Children.Add(sp); - break; - } - - default: - { - // fallback: raw text - panel.Children.Add(new TextBlock { Text = block.ToString() }); - break; - } - } - } - - return panel; - } catch (Exception ex) { Logger.Log($"Error while : {ex.Message}",Logger.LogType.Error);} - - return new Panel(); - } - - private static string GetInlineText(ContainerInline? container) - { - try - { - if (container == null) return string.Empty; - var sb = new StringBuilder(); - foreach (var inline in container) - { - switch (inline) - { - case LiteralInline li: - sb.Append(li.Content.ToString()); - break; - case EmphasisInline ei: - sb.Append(GetInlineText(ei)); - break; - case CodeInline ci: - sb.Append(ci.Content); - break; - case LinkInline li: - sb.Append(GetInlineText(li)); - break; - case LineBreakInline: - sb.Append("\n"); - break; - default: - sb.Append(inline.ToString()); - break; - } - } - - return sb.ToString(); - } catch (Exception ex) { Logger.Log($"Error while : {ex.Message}",Logger.LogType.Error);} - - return null; - } + // public static Control Render(string markdown) + // { + // try + // { + // var panel = new StackPanel { Spacing = 6 }; + // if (string.IsNullOrWhiteSpace(markdown)) return panel; + // + // var doc = Markdown.Parse(markdown); + // + // foreach (var block in doc) + // { + // switch (block) + // { + // case HeadingBlock hb: + // { + // var text = GetInlineText(hb.Inline); + // var tb = new TextBlock + // { + // Text = text, + // FontWeight = FontWeight.Bold, + // Margin = new Avalonia.Thickness(0, hb.Level == 1 ? 6 : 2, 0, 2) + // }; + // tb.FontSize = hb.Level switch { 1 => 22, 2 => 18, 3 => 16, _ => 14 }; + // panel.Children.Add(tb); + // break; + // } + // + // case ParagraphBlock pb: + // { + // var text = GetInlineText(pb.Inline); + // var tb = new TextBlock { Text = text, TextWrapping = Avalonia.Media.TextWrapping.Wrap }; + // panel.Children.Add(tb); + // break; + // } + // + // case FencedCodeBlock cb: + // { + // var sb = new StringBuilder(); + // foreach (var line in cb.Lines.Lines) + // { + // sb.Append(line.ToString()); + // } + // var codeBox = new TextBox + // { + // Text = sb.ToString(), + // FontFamily = "Consolas, monospace", + // IsReadOnly = true, + // AcceptsReturn = true + // }; + // panel.Children.Add(codeBox); + // break; + // } + // + // case ListBlock lb: + // { + // var sp = new StackPanel { Spacing = 2 }; + // var number = 1; + // foreach (var item in lb) + // { + // if (item is ListItemBlock lib) + // { + // var itemText = new StringBuilder(); + // foreach (var sub in lib) + // { + // if (sub is ParagraphBlock pp) + // itemText.Append(GetInlineText(pp.Inline)); + // } + // var tb = new TextBlock { Text = (lb.IsOrdered ? (number++ + ". ") : "• ") + itemText.ToString() }; + // sp.Children.Add(tb); + // } + // } + // panel.Children.Add(sp); + // break; + // } + // + // default: + // { + // // fallback: raw text + // panel.Children.Add(new TextBlock { Text = block.ToString() }); + // break; + // } + // } + // } + // + // return panel; + // } catch (Exception ex) { Logger.Log($"Error while : {ex.Message}",Logger.LogType.Error);} + // + // return new Panel(); + // } + // + // private static string GetInlineText(ContainerInline? container) + // { + // try + // { + // if (container == null) return string.Empty; + // var sb = new StringBuilder(); + // foreach (var inline in container) + // { + // switch (inline) + // { + // case LiteralInline li: + // sb.Append(li.Content.ToString()); + // break; + // case EmphasisInline ei: + // sb.Append(GetInlineText(ei)); + // break; + // case CodeInline ci: + // sb.Append(ci.Content); + // break; + // case LinkInline li: + // sb.Append(GetInlineText(li)); + // break; + // case LineBreakInline: + // sb.Append("\n"); + // break; + // default: + // sb.Append(inline.ToString()); + // break; + // } + // } + // + // return sb.ToString(); + // } catch (Exception ex) { Logger.Log($"Error while : {ex.Message}",Logger.LogType.Error);} + // + // return null; + // } }