mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-09-01 18:35:13 +00:00
Add RTL support for markdown files
Co-authored-by: emako <24737061+emako@users.noreply.github.com>
This commit is contained in:

committed by
ema

parent
a4d118e11f
commit
4840a87858
@@ -16,10 +16,12 @@
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
using Microsoft.Web.WebView2.Core;
|
||||
using QuickLook.Common.Helpers;
|
||||
using QuickLook.Plugin.HtmlViewer;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
@@ -78,7 +80,33 @@ public class MarkdownPanel : WebpagePanel
|
||||
var content = encoding.GetString(bytes);
|
||||
|
||||
var template = ReadString("/md2html.html");
|
||||
var html = template.Replace("{{content}}", content);
|
||||
|
||||
// Check for RTL support similar to TextViewer
|
||||
bool isRtl = false;
|
||||
var extension = Path.GetExtension(path);
|
||||
|
||||
// Apply RTL support to all markdown-like extensions handled by this plugin
|
||||
var supportedExtensions = new[]
|
||||
{
|
||||
".md", ".markdown", ".mdx", ".mmd", ".mkd", ".mdwn", ".mdown",
|
||||
".mdc", ".qmd", ".rmd", ".rmarkdown", ".apib", ".mdtxt", ".mdtext"
|
||||
};
|
||||
|
||||
if (supportedExtensions.Any(ext => extension.Equals(ext, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
if (CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft)
|
||||
{
|
||||
string isSupportRTL = TranslationHelper.Get("IsSupportRTL",
|
||||
failsafe: bool.TrueString,
|
||||
domain: Assembly.GetExecutingAssembly().GetName().Name);
|
||||
|
||||
if (bool.TrueString.Equals(isSupportRTL, StringComparison.OrdinalIgnoreCase))
|
||||
isRtl = true;
|
||||
}
|
||||
}
|
||||
|
||||
var html = template.Replace("{{content}}", content)
|
||||
.Replace("{{rtl}}", isRtl ? "rtl" : "ltr");
|
||||
|
||||
return html;
|
||||
}
|
||||
|
@@ -83,6 +83,9 @@
|
||||
<EmbeddedResource Include="Resources\**\*">
|
||||
<LogicalName>QuickLook.Plugin.MarkdownViewer.Resources.%(RecursiveDir)%(Filename)%(Extension)</LogicalName>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Translations.config">
|
||||
<LogicalName>QuickLook.Plugin.MarkdownViewer.Translations.config</LogicalName>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html dir="{{rtl}}">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
|
||||
@@ -144,6 +144,34 @@
|
||||
cursor: ew-resize;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* RTL support */
|
||||
html[dir="rtl"] .container {
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
|
||||
html[dir="rtl"] #toc {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
html[dir="rtl"] .table-of-contents a {
|
||||
border-right: 2px solid transparent;
|
||||
border-left: none;
|
||||
margin-right: -1em;
|
||||
margin-left: 0;
|
||||
padding-right: calc(1em - 2px);
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
html[dir="rtl"] .table-of-contents .active {
|
||||
border-right: 2px solid var(--fgColor-accent);
|
||||
border-left: none;
|
||||
margin-right: -1em;
|
||||
margin-left: 0;
|
||||
padding-right: calc(1em - 2px);
|
||||
padding-left: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<textarea id="text-input" style="display: none">{{content}}</textarea>
|
||||
@@ -337,6 +365,21 @@
|
||||
if (e.code === "Space") {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
// Support keyboard shortcuts for RTL and LTR text direction
|
||||
// RTL: Ctrl + RShift
|
||||
// LTR: Ctrl + LShift
|
||||
if ((e.ctrlKey || e.metaKey)) {
|
||||
if (e.shiftKey && e.location === KeyboardEvent.DOM_KEY_LOCATION_RIGHT) {
|
||||
// Right Shift + Ctrl: RTL
|
||||
document.documentElement.setAttribute('dir', 'rtl');
|
||||
e.preventDefault();
|
||||
} else if (e.shiftKey && e.location === KeyboardEvent.DOM_KEY_LOCATION_LEFT) {
|
||||
// Left Shift + Ctrl: LTR
|
||||
document.documentElement.setAttribute('dir', 'ltr');
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<Translations>
|
||||
<ar>
|
||||
<IsSupportRTL>True</IsSupportRTL>
|
||||
</ar>
|
||||
<he>
|
||||
<IsSupportRTL>True</IsSupportRTL>
|
||||
</he>
|
||||
<en>
|
||||
<IsSupportRTL>False</IsSupportRTL>
|
||||
</en>
|
||||
</Translations>
|
Reference in New Issue
Block a user