Crates.io | htmltoadf |
lib.rs | htmltoadf |
version | 0.1.10 |
source | src |
created_at | 2022-02-09 04:37:06.750979 |
updated_at | 2024-02-18 01:13:01.237478 |
description | An HTML to Atlassian Document Format (ADF) converter |
homepage | https://github.com/wouterken/htmltoadf |
repository | https://github.com/wouterken/htmltoadf |
max_upload_size | |
id | 529485 |
size | 1,304,882 |
htmltoadf is an HTML to Atlassian Document Format (ADF) converter written in Rust.
The library can be used in several different ways:
See demo of the tool running as a WASM library entirely in the client here: https://wouterken.github.io/htmltoadf/
The htmltoadf tool includes an html2adf binary.
$ html2adf -h
htmltoadf 0.1.10
An HTML to Atlassian Document Format (ADF) converter
USAGE:
html2adf [OPTIONS] [INPATH]
ARGS:
<INPATH> The path to the file to read
OPTIONS:
-h, --help Print help information
-o, --outpath <OUTPATH>
-V, --version Print version information
cargo install
$ cargo install htmltoadf
installing htmltoadf v0.1.10 (/usr/src/html2adf)
Updating crates.io index
Downloading crates ...
Downloaded lock_api v0.4.6
--snip--
Compiling htmltoadf v0.1.10
Finished release [optimized] target(s) in 1m 42s
Installing ~/.cargo/bin/htmltoadf
Installed package `htmltoadf v0.1.10` (executable `html2adf`)
Pre-built binaries can be downloaded from here: https://github.com/wouterken/htmltoadf/releases/tag/0.1.10
Docker Repo:
https://hub.docker.com/r/wouterken/html2adf
Usage
$ echo "<h1>Hello world<p>Test</p></h1>" | docker run --rm -i wouterken/html2adf:0.1.10
{"version":1,"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"type":"text","text":"Hello world"},{"type":"text","text":"Test"}]}]}
$ echo "<h1>Hello world<p>Test</p></h1>" | docker run --rm -i wouterken/html2adf:0.1.10 | jq
{
"version": 1,
"type": "doc",
"content": [
{
"type": "heading",
"attrs": {
"level": 1
},
"content": [
{
"type": "text",
"text": "Hello world"
},
{
"type": "text",
"text": "Test"
}
]
}
]
}
Cargo.toml
[dependencies]
htmltoadf = "0.1.10"
Code
use htmltoadf::convert_html_str_to_adf_str;
use serde_json::json;
let converted = convert_html_str_to_adf_str("<h1>Hello World</h1>".to_string());
let expected = json!({
"version": 1,
"type": "doc",
"content": [
{
"type": "heading",
"attrs": {
"level": 1
},
"content": [
{
"type": "text",
"text": "Hello World"
}
]
}
]
}).to_string();
assert_eq!(expected, converted);
Install package from npm
import init, {convert} from "htmltoadf";
init()
.then(() => {
alert(convert("<h1>Hello from WebAssembly</h1>"))
});
First compile the code as a library, e.g.:
cargo build --lib --release
Then you can link to the library dynamic from any environment that supports a FFI. It is important to copy the dynamic library from the release directory, and provide a relative link to the library file from the FFI
E.g.
require 'ffi'
module HTMLToADF
extend FFI::Library
ffi_lib 'libhtmltoadf'
attach_function :convert, [ :string ], :string
end
puts HTMLToADF.convert("<h1>Hello from Ruby</h1>")
var ffi = require('ffi-napi');
var htmltoadf = ffi.Library('libhtmltoadf', {
'convert': [ 'string', [ 'string' ] ]
});
console.log(htmltoadf.convert("<h1>Hello from Node!</h1>"));
from cffi import FFI
ffi = FFI()
lib = ffi.dlopen("libhtmltoadf")
ffi.cdef("char * convert(char *);")
print(ffi.string(lib.convert(b"<h1>Hello from Python!</h1>")))
This converter only implements a subset of possible mappings between HTML and ADF. The following features are implemented:
Run cargo test
from the repository root.
Bug reports and pull requests are welcome on GitHub at https://github.com/wouterken/htmltoadf. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.