9 个版本

0.1.10 2024 年 2 月 18 日
0.1.9 2023 年 12 月 22 日
0.1.8 2023 年 10 月 10 日
0.1.7 2023 年 3 月 12 日
0.1.6 2022 年 2 月 11 日

#1 in #atlassian

Download history 34/week @ 2024-04-07 46/week @ 2024-04-14 22/week @ 2024-04-21 46/week @ 2024-04-28 48/week @ 2024-05-05 66/week @ 2024-05-12 30/week @ 2024-05-19 20/week @ 2024-05-26 22/week @ 2024-06-02 12/week @ 2024-06-09 138/week @ 2024-06-16 62/week @ 2024-06-23 122/week @ 2024-06-30 179/week @ 2024-07-07 210/week @ 2024-07-14 869/week @ 2024-07-21

1,380 每月下载量
用于 2 crates

MIT 许可证

1MB
2.5K SLoC

htmltoadf 最新版本 Rustc 版本 1.58+ htmltoadf htmltoadf

htmltoadf 是一个用 Rust 编写的 HTML 到 Atlassian 文档格式 (ADF) 转换器。

该库可以用几种不同的方式使用

  • 作为命令行二进制文件(直接在兼容的主机上或使用 Docker)
  • 作为 Rust 项目的库包含
  • 从不同的语言或环境中调用(例如 C、JavaScript、Ruby、PHP、.NET 等)使用 FFI
  • 作为 Web Assembly (wasm) 模块调用


演示

在此处查看工具作为完全在客户端运行的 WASM 库的演示:https://wouterken.github.io/htmltoadf/


命令行界面 (CLI)

二进制文件

htmltoadf 工具包含一个 html2adf 二进制文件。

用法

$ 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 从 Crates.io 安装二进制文件

$ 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`)

从 Github 下载二进制文件

预构建的二进制文件可以在此处下载: https://github.com/wouterken/htmltoadf/releases/tag/0.1.10

Docker 镜像

Docker 仓库

https://hub.docker.com/r/wouterken/html2adf

用法

$ 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"
        }
      ]
    }
  ]
}

示例 Rust 代码

Cargo.toml

[dependencies]
htmltoadf = "0.1.10"

代码

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);

WASM

npm 安装软件包

import init, {convert} from "htmltoadf";
init()
  .then(() => {
    alert(convert("<h1>Hello from WebAssembly</h1>"))
  });

FFI

首先将代码编译为库,例如。

cargo build --lib --release

然后您可以从支持FFI的任何环境中动态链接到库。 非常重要,需要从发布目录复制动态库,并从FFI提供库文件的相对链接

例如:

Ruby

require 'ffi'

module HTMLToADF
  extend FFI::Library
  ffi_lib 'libhtmltoadf'
  attach_function :convert, [ :string ], :string
end

puts HTMLToADF.convert("<h1>Hello from Ruby</h1>")

Node/JavaScript

var ffi = require('ffi-napi');

var htmltoadf = ffi.Library('libhtmltoadf', {
  'convert': [ 'string', [ 'string' ] ]
});
console.log(htmltoadf.convert("<h1>Hello from Node!</h1>"));

Python

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>")))

实现的功能

此转换器仅实现了HTML和ADF之间可能映射的子集。以下功能已实现

  • 标题
  • 图片
  • 列表(有序和无序列表)
  • 表格
  • 文本和段落
  • 代码
  • 模糊测试
  • 支持命名CSS颜色
  • 智能图像大小调整
  • 内联卡片
  • 面板
  • 表情符号
  • 内置JSON Schema验证

发布流程

  • 在.toml和README中递增版本号
  • 编译二进制文件并创建发布
  • 构建并推送Docker镜像
  • 构建并推送WASM NPM包
  • 推送crate
  • 更新演示页面中的依赖项
  • 推送到版本控制系统

测试

从存储库根目录运行 cargo test

贡献

欢迎在GitHub上提交错误报告和拉取请求:https://github.com/wouterken/htmltoadf。该项目旨在成为一个安全、友好的协作空间,并期望贡献者遵守贡献者公约行为准则。

依赖项

~8–16MB
~186K SLoC