mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-09-14 12:19:08 +00:00
finish first version of TextViewer plug-in
This commit is contained in:
61
QuickLook.Plugin.TextViewer/Plugin.cs
Normal file
61
QuickLook.Plugin.TextViewer/Plugin.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using ICSharpCode.AvalonEdit.Highlighting;
|
||||
|
||||
namespace QuickLook.Plugin.TextViewer
|
||||
{
|
||||
public class Plugin : IViewer
|
||||
{
|
||||
private TextViewerPanel _tvp;
|
||||
|
||||
public int Priority => 0;
|
||||
|
||||
public bool CanHandle(string path)
|
||||
{
|
||||
if (Directory.Exists(path))
|
||||
return false;
|
||||
|
||||
// ReSharper disable once InconsistentNaming
|
||||
const long MAX_SIZE = 20 * 1024 * 1024;
|
||||
|
||||
// if there is a possible highlighting scheme (by file extension), treat it as a plain text file
|
||||
if (HighlightingManager.Instance.GetDefinitionByExtension(Path.GetExtension(path)) != null)
|
||||
return new FileInfo(path).Length <= MAX_SIZE;
|
||||
|
||||
// otherwise, read the first 512 bytes as string (StreamReader handles encoding automatically),
|
||||
// check whether they are all printable chars.
|
||||
using (var sr = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)))
|
||||
{
|
||||
var buffer = new char[512];
|
||||
var len = sr.Read(buffer, 0, 512);
|
||||
|
||||
for (var i = 0; i < len; i++)
|
||||
{
|
||||
if (!char.IsControl(buffer[i])) continue;
|
||||
|
||||
if (buffer[i] != '\r' && buffer[i] != '\n' && buffer[i] != '\t')
|
||||
return false;
|
||||
}
|
||||
|
||||
return new FileInfo(path).Length <= MAX_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
public void BoundSize(string path, ViewContentContainer container)
|
||||
{
|
||||
container.PreferedSize = new Size {Width = 800, Height = 600};
|
||||
}
|
||||
|
||||
public void View(string path, ViewContentContainer container)
|
||||
{
|
||||
_tvp = new TextViewerPanel(path);
|
||||
|
||||
container.SetContent(_tvp);
|
||||
container.Title = $"{Path.GetFileName(path)}";
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
35
QuickLook.Plugin.TextViewer/Properties/AssemblyInfo.cs
Normal file
35
QuickLook.Plugin.TextViewer/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("QuickLook.Plugin.TextViewer")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("QuickLook.Plugin.TextViewer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("ae041682-e3a1-44f6-8bb4-916a98d89fbe")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{AE041682-E3A1-44F6-8BB4-916A98D89FBE}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>QuickLook.Plugin.TextViewer</RootNamespace>
|
||||
<AssemblyName>QuickLook.Plugin.TextViewer</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\Build\Debug\Plugins\QuickLook.Plugin.TextViewer\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\Build\Release\Plugins\QuickLook.Plugin.TextViewer\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="ICSharpCode.AvalonEdit, Version=5.0.3.0, Culture=neutral, PublicKeyToken=9cc39be672370310, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\AvalonEdit.5.0.3\lib\Net40\ICSharpCode.AvalonEdit.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xaml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Plugin.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="TextViewerPanel.xaml.cs">
|
||||
<DependentUpon>TextViewerPanel.xaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\QuickLook\QuickLook.csproj">
|
||||
<Project>{8b4a9ce5-67b5-4a94-81cb-3771f688fdeb}</Project>
|
||||
<Name>QuickLook</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Page Include="TextViewerPanel.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
16
QuickLook.Plugin.TextViewer/TextViewerPanel.xaml
Normal file
16
QuickLook.Plugin.TextViewer/TextViewerPanel.xaml
Normal file
@@ -0,0 +1,16 @@
|
||||
<UserControl x:Class="QuickLook.Plugin.TextViewer.TextViewerPanel"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"
|
||||
xmlns:local="clr-namespace:QuickLook.Plugin.TextViewer"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="317.974"
|
||||
d:DesignWidth="448.79"
|
||||
UseLayoutRounding="True">
|
||||
<Grid>
|
||||
<avalonEdit:TextEditor x:Name="viewer" Background="#00FFFFFF" FontFamily="Consolas" ShowLineNumbers="True"
|
||||
WordWrap="True" IsReadOnly="True" />
|
||||
</Grid>
|
||||
</UserControl>
|
26
QuickLook.Plugin.TextViewer/TextViewerPanel.xaml.cs
Normal file
26
QuickLook.Plugin.TextViewer/TextViewerPanel.xaml.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using System.IO;
|
||||
using System.Windows.Controls;
|
||||
using ICSharpCode.AvalonEdit.Highlighting;
|
||||
|
||||
namespace QuickLook.Plugin.TextViewer
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for TextViewerPanel.xaml
|
||||
/// </summary>
|
||||
public partial class TextViewerPanel : UserControl
|
||||
{
|
||||
public TextViewerPanel(string path)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
LoadFile(path);
|
||||
}
|
||||
|
||||
private void LoadFile(string path)
|
||||
{
|
||||
viewer.Load(path);
|
||||
|
||||
viewer.SyntaxHighlighting = HighlightingManager.Instance.GetDefinitionByExtension(Path.GetExtension(path));
|
||||
}
|
||||
}
|
||||
}
|
5
QuickLook.Plugin.TextViewer/packages.config
Normal file
5
QuickLook.Plugin.TextViewer/packages.config
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<packages>
|
||||
<package id="AvalonEdit" version="5.0.3" targetFramework="net452" />
|
||||
</packages>
|
Reference in New Issue
Block a user