Files
QuickLook/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/_README.md
2020-03-13 22:28:10 +02:00

10 KiB
Raw Blame History

Synopsis

This project is a compilation of lexers I had written for SharpDevelop's TextEditor component. I am indeed late to the party, as the component is no longer supported by SharpDevelop team; however, I spent a good chunk of time writing these lexers through the years and now I thought why not make them open source for everyone who's still using the component.

All lexers were created exclusively for ICSharpCode.TextEditor v3.2. They were not tested on any earlier or later releases.

Languages

List of all supported languages, sorted alphabetically:

A B C D E F G H I J K L N O P R S T V X
ActionScript Batch C# D Eiffel F# Go Haskell Icon Java KiXtart Lean Nemerle Obj-C ParaSail R Scala TCL Vala X10
Ada Boo C Dart Erlang Falcon Groovy Haxe ILYC JavaScript Kotlin Lisp Nim OCaml Pascal Registry Scheme Thrift VB.NET XC
ANTLR C++ Delphi Fantom Gui4Cli HTML INI/INF JSON Lua PHP Resource Solidity TypeScript VBScript XML
Assembly Ceylon Fortran95 Io Julia Pike Rexx Spike Verilog Xtend
AutoHotkey ChucK PowerShell Rust SQF VHDL
Clojure Prolog SQL VS Solution
Cocoa PureScript Swift Volt
CoffeeScript Python
Cool
CSS

That makes 85 languages in total.

Notes

  • PHP: Heredoc highlighting is not supported. The syntax parser simply can't do it.
  • CSS: Omitting the last semicolon in the block is not supported. Same reason as above.

Usage

If you are on this page, you most likely already know how to activate the lexer and use it.
For a complete noob, this is how it is done:

C#

using System.IO;
using ICSharpCode.TextEditor.Document;
// insert the directory path of the desired .xshd file
var synDir = Application.StartupPath + "\\Syntax";

// check if directory exists to prevent throwing an exception
if (Directory.Exists(synDir))
{
    // create new provider with the highlighting directory
    var fsmProvider = new FileSyntaxModeProvider(synDir);
    // attach to the text editor
    HighlightingManager.Manager.AddSyntaxModeFileProvider(fsmProvider);
    // activate the highlighting, use the name from the SyntaxDefinition node in the .xshd file
    TextEditorControl.SetHighlighting("YourHighlighting");
}
else { MessageBox.Show("\u0027" + synDir + "\u0027" + " doesn't exist"); }

VB.NET

Imports System.IO
Imports ICSharpCode.TextEditor.Document
' insert the directory path of the desired .xshd file
Dim synDir As String = Application.StartupPath & "\Syntax"
' syntax provider
Dim fsmProvider As FileSyntaxModeProvider

If Directory.Exists(synDir) Then
    ' create new provider with the highlighting directory
    fsmProvider = New FileSyntaxModeProvider(synDir)
    ' attach to the text editor
    HighlightingManager.Manager.AddSyntaxModeFileProvider(fsmProvider)
    ' activate the highlighting, use the name from the SyntaxDefinition node in the .xshd file
    TextEditorControl.SetHighlighting("YourHighlighting")
Else
    MessageBox.Show(ChrW(39) + synDir + ChrW(39) + "doesn't exist")
End If

For more information on XSHD files, see here.

Contact Author

Email me your love letters
Tweet me maybe?

This project is distributed under the MIT License

/******************************************************/

Build status Release NuGet

AvalonEditHighlightingThemes

Implements a sample implementation for using Highlightings with different (Light/Dark) WPF themes

ThemedHighlightingManager for AvalonEdit

This AvalonEdit extension implements its own highlighting manager that extends the classic way of handling highlighting definitions (see also Dirkster99/AvalonEdit-Samples).

The inital release contains 5 highlighting themes:

  • Dark
  • Light
  • True Blue-Light
  • True Blue-Dark
  • VS 2019-Dark

but you can easily define more themes. Just create a pull request with the XSHTD file at this site.

The standard highlighting in AvalonEdit is dependent on the currently viewed type of text (eg C# or SQL), but a highlighting definition designed for a Light WPF theme may look ugly if viewed with a Dark WPF theme, and vice versa. This is why the ThemedHighlightingManager extension associates each highlighting definition with:

  • A WPF Theme (Light, Dark) and
  • A type of text (C#, SQL etc)

This approach is very similar to the implementation in Notepad++ except Notepad++ uses a plain xml file to configure a highlighting theme whereas the ThemedHighlightingManager uses an XSHTD file to do the same. But at the end of the day, its XML in both projects, and cloning a highlighting theme from Notepad++ is almost too easy (thats how similar both implementations are).

Assuming that an application already use a WPF theming/management library, such as:

enables an applications author to switch highlighting definitions to a matching color palette whenever the user switches a given WPF theme. See AvalonEditHighlightingThemes and Aehnlich for detailed sample implementations.

Themes

True Blue Light Theme

VS 2019 Dark

Dark Theme

Light Theme

True Blue Dark Theme

Concept

WPF Theme

A WPF theme is a way of styling and theming WPF controls. This is usually implemented in a seperate library, such as:

and takes advantage of WPFs way of defining and using themes ('Dark', 'Light', 'True Blue'...) with XAML resources etc.

Generic Highlighting Theme

A Generic highlighting theme is a classic collection of AvalonEdit V2 highlighting definitions (collection of xshd files). In this project, there is only one such theme, the 'Light' highlighting theme. This theme is defined in a classic collection of xshd resource files at HL.Resources.Light.

Derived Highlighting Theme

A derived highlighting theme is a highlighting theme that makes use of a Generic Highlighting Theme and overwrites formattings defined in named colors by incorporating an additional xshtd file.

This approach re-uses the highlighting patterns of the generic theme but applies different colors and formattings to better support:

  • different background colors of different WPF themes or
  • different taste towards different color schemes by different users

This project has multiple derived highlighting themes

  • 'Dark'
  • 'True Blue'
  • 'VS 2019 Dark'

which are based on the highlighting patterns of the 'Light' generic highlighting theme.

Data Design - Extension with Themable Highlighting

Data Design - Classic Highlighting Manager V5.04

Other AvalonEdit Demo Projects:

More demo projects may be listed at the AvalonEdit's Wiki page