Rich text editor for Flutter
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.4 KiB

import 'package:html2md/html2md.dart' as html2md;
import 'package:markdown/markdown.dart' as md;
import 'package:meta/meta.dart';
import '../../../markdown_quill.dart';
import '../../../quill_delta.dart';
import '../../utils/delta_x_utils.dart';
@immutable
@experimental
class DeltaX {
const DeltaX._();
/// Convert Markdown text to [Delta]
///
/// This api is **experimental** and designed to be used **internally** and shouldn't
/// used for **production applications**.
@experimental
static Delta fromMarkdown(String markdownText) {
final mdDocument = md.Document(
encodeHtml: false,
inlineSyntaxes: [UnderlineSyntax(), VideoSyntax()],
);
final mdToDelta = MarkdownToDelta(markdownDocument: mdDocument);
return mdToDelta.convert(markdownText);
}
/// Convert the HTML Raw string to [Delta]
///
/// It will run using the following steps:
///
/// 1. Convert the html to markdown string using `html2md` package
/// 2. Convert the markdown string to [Delta] using [fromMarkdown]
///
/// This api is **experimental** and designed to be used **internally** and shouldn't
/// used for **production applications**.
///
@experimental
static Delta fromHtml(String htmlText) {
final markdownText = html2md.convert(
htmlText,
rules: [underlineRule, videoRule],
styleOptions: {'emDelimiter': '*'},
).replaceAll(
'unsafe:',
'',
);
return fromMarkdown(markdownText);
}
}