Merge pull request #1540 from LucasXu0/missing_code_block_markdown

fix: add missing markdown converter for code block and divider
This commit is contained in:
Lucas.Xu 2022-12-06 18:36:40 +08:00 committed by GitHub
commit 52d65c4c4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 35 additions and 2 deletions

View File

@ -80,6 +80,8 @@ class DocumentMarkdownDecoder extends Converter<String, Document> {
BuiltInAttributeKey.subtype: BuiltInAttributeKey.quote,
},
);
} else if (text.isNotEmpty && RegExp(r'^-*').stringMatch(text) == text) {
return Node(type: 'divider');
}
if (text.isNotEmpty) {

View File

@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:appflowy_editor/src/core/document/document.dart';
import 'package:appflowy_editor/src/plugins/markdown/encoder/parser/divider_node_parser.dart';
import 'package:appflowy_editor/src/plugins/markdown/encoder/parser/image_node_parser.dart';
import 'package:appflowy_editor/src/plugins/markdown/encoder/parser/node_parser.dart';
import 'package:appflowy_editor/src/plugins/markdown/encoder/parser/text_node_parser.dart';
@ -10,6 +11,7 @@ class DocumentMarkdownEncoder extends Converter<Document, String> {
this.parsers = const [
TextNodeParser(),
ImageNodeParser(),
DividerNodeParser(),
],
});

View File

@ -0,0 +1,14 @@
import 'package:appflowy_editor/src/core/document/node.dart';
import 'package:appflowy_editor/src/plugins/markdown/encoder/parser/node_parser.dart';
class DividerNodeParser extends NodeParser {
const DividerNodeParser();
@override
String get id => 'divider';
@override
String transform(Node node) {
return '---\n';
}
}

View File

@ -40,7 +40,7 @@ class TextNodeParser extends NodeParser {
}
} else if (subtype == 'quote') {
result = '> $markdown';
} else if (subtype == 'code-block') {
} else if (subtype == 'code_block') {
result = '```\n$markdown\n```';
} else if (subtype == 'bulleted-list') {
result = '* $markdown';

View File

@ -0,0 +1,15 @@
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:appflowy_editor/src/plugins/markdown/encoder/parser/divider_node_parser.dart';
import 'package:flutter_test/flutter_test.dart';
void main() async {
group('divider_node_parser.dart', () {
test('parser divider node', () {
final node = Node(
type: 'divider',
);
final result = const DividerNodeParser().transform(node);
expect(result, '---\n');
});
});
}

View File

@ -86,7 +86,7 @@ void main() async {
final node = TextNode(
delta: Delta(operations: [TextInsert(text)]),
attributes: {
BuiltInAttributeKey.subtype: 'code-block',
BuiltInAttributeKey.subtype: 'code_block',
},
);
expect(const TextNodeParser().transform(node), '```\n$text\n```');