convert function

ConversionResult convert(
  1. String html, {
  2. ConversionOptions? options,
  3. Visitor? visitor,
})

Implementation

ConversionResult convert(
  String html, {
  ConversionOptions? options,
  Visitor? visitor,
}) {
  final lib = NativeLibrary();
  final arena = Arena();
  final bridge = visitor != null ? VisitorBridge(visitor) : null;

  try {
    final htmlPtr = html.toNativeUtf8(allocator: arena);
    final optionsPtr = _createOptions(lib, options, arena);

    // Attach visitor bridge if provided
    if (bridge != null) {
      bridge.attach(optionsPtr);
    }

    final resultPtr = lib.htmConvert(htmlPtr, optionsPtr);

    if (resultPtr == nullptr) {
      checkLastError();
      throw const ConversionErrorException('Conversion returned null result');
    }

    final jsonPtr = lib.htmConversionResultToJson(resultPtr);
    final json = jsonPtr.toDartString();
    lib.htmFreeString(jsonPtr);

    final map = dart_convert.jsonDecode(json);
    final result = ConversionResult.fromJson(map as Map<String, dynamic>);

    lib.htmConversionResultFree(resultPtr);
    return result;
  } finally {
    bridge?.close();
    arena.releaseAll();
  }
}