コンテンツにスキップ

Swift

IllusionMarkdown は MDI の Swift Package Manager 配布名です。product と import module はどちらも MDI です。

import MDI

Swift は小さな C ABI を通じて Rust の mdi-core に解析とレンダリングを委譲します。文法を再実装しないため、全バインディングで同じ構文、document IR、diagnostics、renderer を共有します。

Package.swift に依存関係を追加し、使用する target に MDI product を追加します。

dependencies: [
.package(url: "https://github.com/illusions-lab/MDI.git", from: "2.0.2"),
]
// target の dependencies:
.product(name: "MDI", package: "MDI")

バイナリパッケージは macOS 13+、iOS 15+、Apple Silicon、および該当する Intel simulator をサポートします。

let result = try MDI.parse("# 見出し\n\n{東京|とうきょう}で第^12^話")
print(result.irVersion) // "1.0"
print(result.capabilities.mdi) // true
print(result.diagnostics)

result.document は可逆な MDIJSONValue ツリーです。.object.array.string.number.bool.null の pattern matching で node を扱えます。MDISourceSpan は UTF-8 byte offset です。

let html = try MDI.renderHTML("{東京|とうきょう} ^12^")
let mdi = try MDI.serialize("{東京|とうきょう} ^12^")
let text = try MDI.renderText("# Title")
let epub: Data = try MDI.renderEPUB("# Chapter")
let docx: Data = try MDI.renderDOCX("# Chapter")

EPUB と DOCX は ZIP ベースの Data を返すため、対応する拡張子でファイルへ書き出してください。

すべての API は MDIError を throw します。core は Rust core の失敗、invalidWireFormat は無効または未対応の native response を表します。CI は XCFramework をビルドし、XCTest を実行して swift/Sources/MDI に 90% の line coverage を要求し、Codecov へ送信します。PAT や別リポジトリは必要ありません。

do {
let html = try MDI.renderHTML(source)
print(html)
} catch let error as MDIError {
print(error.localizedDescription)
}

リポジトリの swift/Package.swift はローカル開発用パッケージです。CI は XCFramework をビルドし、XCTest を実行して swift/Sources/MDI に 90% の line-coverage gate を適用し、レポートを Codecov に送信します。release workflow は manifest 用の pull request を作成し、その PR がマージされた後に承認済み artifact を公開します。GitHub Actions 組み込みの token を使うため、PAT や別リポジトリは不要です。