https://github.com/pingmantools/litehtmlsharp
LiteHtmlSharp is a C# cross-platform library for HTML/CSS(2/3) visualization - self contained, fast and small
https://github.com/pingmantools/litehtmlsharp
Last synced: 12 months ago
JSON representation
LiteHtmlSharp is a C# cross-platform library for HTML/CSS(2/3) visualization - self contained, fast and small
- Host: GitHub
- URL: https://github.com/pingmantools/litehtmlsharp
- Owner: PingmanTools
- License: bsd-3-clause
- Created: 2017-02-09T23:48:42.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2025-06-27T01:21:36.000Z (about 1 year ago)
- Last Synced: 2025-06-27T01:49:17.264Z (about 1 year ago)
- Language: C#
- Size: 81.7 MB
- Stars: 10
- Watchers: 3
- Forks: 6
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Background and "features"
LiteHtmlSharp is a C# cross-platform library for HTML/CSS(2/3) visualization - self contained, fast and small.
The HTML parser/renderer is based on the fantastic [litehtml](https://github.com/litehtml/litehtml) C++ library,
and the drawing is done with platform-native controls (currently WPF and Cocoa).
> litehtml is the lightweight HTML rendering engine with CSS2/CSS3 support. Note, litehtml itself does
> not draw any text, pictures or other graphics and litehtml does not depend of any image/draw/font library.
> You are free to use any library to draw images, fonts and any other graphics. litehtml just parses
> HTML/CSS and places the HTML elements into right position (renders HTML).
### HTML Visualization? What does that mean?
We wanted to use HTML/css to do splash screen, about-box design, new version availability messaging, new
user "greeting", getting started documentation, etc. We wanted to have this tightly integrated, completely
in our control (no platform right-click menus, no Windows Internet Explorer compatibility problems) and
appropriately sized (no 50mb distributions that require a chrome browser process running).
We couldn't find anything for .NET / C# that met our needs, but [litehtml](https://github.com/litehtml/litehtml)
sparked our imagination, and it's a stable, awesome library that knows how to do layout (but not draw) for
just about everything we needed.
So we wrapped [litehtml](https://github.com/litehtml/litehtml) to make it work for C#, then built a drawing
abstraction layer and OSX and WPF implementations. Cool. It *could* work for Android, iOS, Linx, too - we've
just not done the visualization part for that yet. Several other parts are not yet fully flushed out, too.
## LiteHtmlLib (C++)
The first layer of this library is a C++ project (see the LiteHtmlLib directory) that wraps the litehtml
[document_container](https://github.com/litehtml/litehtml/wiki/document_container) abstract class
in a way that the C# PInvoke system can interact with. This code along with the litehtml C++ is compiled
into a native binary that our C# wrapper consumes with DLLImports. We've provided precompiled win32/64 DLLs
and a OSX 32/64 dylib.
### Compiling DLL on Windows
Use the `LiteHtmlLib/LiteHtmlLib.vcxproj` project in Visual Studio 2015.
### Compiling on OSX
Install CMake. Open `LiteHtmlLib/LiteHtml.dyblib.mdproj` in Xamarin Studio and run build.
Or just call the build script from terminal:
```bash
cd LiteHtmlLib
sh build.sh
```
### Compiling on Linux
The above build script should work but hasn't been tested.
## LiteHtmlSharp
Second layer is a C# shared project that provides a C# abstract class equivalent of the C++ document_container.
Most of the of the structs and class methods have been ported.
#### Usage Documentation
If you are wanting to just display HTML in a WPF or Xamarin.Mac/MonoMac app, then use our platform
implementations (see below). Otherwise you will have to derive the base C# container and implement
the drawing API for your platform. The `Container` class definition more-or-less mirrors the
original C++ one but with C#-style syntax. The API should be close enough to be able to
use the original litehtml usage documentation:
[document_container](https://github.com/litehtml/litehtml/wiki/document_container) and
[how to use litehtml](https://github.com/litehtml/litehtml/wiki/How-to-use-litehtml)
Our WPF & Mac implementations can be used as examples when implementing a new platform.
Some cool, unimplemented ideas:
* An OpenTK implementation (provides html -> OpenGL rendering on most platforms)
* A Mono.Cairo implementation
* A Winforms GTK+ (System.Drawing) implementation
## Platform Implementations
### Core Graphics (Apple platforms)
The LiteHtmlSharp.CoreGraphics shared project contains `CGContainer` (derived from litehtml container) which draws to
a `CoreGraphics.CGContext` instance. Xamarin.iOS and Xamarin.Mac Unified projects can use this project.
### Xamarin.Mac
The `LiteHtmlSharp.Mac` library contains a litehtml-`NSView` and a litehtml-`NSWindow`. Usage examples:
#### LiteHtmlNSView
```cs
var myView = new LiteHtmlNSView(new CGRect(0, 0, 400, 500), File.ReadAllText("master.css"));
myView.LiteHtmlContainer.ImportCssCallback = (url, baseUrl) => File.ReadAllText(url);
myView.LiteHtmlContainer.LoadImageCallback = (url) => File.ReadAllBytes(url);
myView.LoadHtml(File.ReadAllText("index.html"));
windowContentView.AddSubview(myView);
```
#### LiteHtmlNSWindow
```cs
var htmlWindow = new LiteHtmlNSWindow(
new CGRect(0, 0, 400, 400),
NSWindowStyle.Closable | NSWindowStyle.Titled | NSWindowStyle.Resizable,
File.ReadAllText("master.css")
);
htmlWindow.LiteHtmlContainer.ImportCssCallback = (url, baseUrl) => File.ReadAllText(url);
htmlWindow.LiteHtmlContainer.LoadImageCallback = (url) => File.ReadAllBytes(url);
htmlWindow.LiteHtmlView.LoadHtml(File.ReadAllText("index.html"));
htmlWindow.MakeKeyAndOrderFront(this);
```
### WPF
```cs
// code
```