Skip to content

Commit

Permalink
Revert changes made in PR #235 (#264)
Browse files Browse the repository at this point in the history
  • Loading branch information
mjordan56 authored Aug 28, 2020
1 parent 8264633 commit 410886c
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 30 deletions.
18 changes: 11 additions & 7 deletions packages/flutter_markdown/lib/src/widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:convert';

import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
Expand Down Expand Up @@ -200,19 +202,20 @@ class _MarkdownWidgetState extends State<MarkdownWidget>

_disposeRecognizers();

/// FIXME: Enhance it using a single RegEx
final List<String> lines = widget.data
.replaceAll(RegExp(r'[ ]{2}(\r?\n)'), ' &amp;')
.split(RegExp(r'\r?\n'))
.map((e) => e?.replaceAll(RegExp(r' &amp;'), ' \n'))
.toList();
final md.Document document = md.Document(
extensionSet: widget.extensionSet ?? md.ExtensionSet.gitHubFlavored,
inlineSyntaxes: (widget.extensionSet?.inlineSyntaxes ?? [])
..add(TaskListSyntax())
..map((syntax) => syntax),
encodeHtml: false,
);

// Parse the source Markdown data into nodes of an Abstract Syntax Tree.
final List<String> lines = LineSplitter().convert(widget.data);
final List<md.Node> astNodes = document.parseLines(lines);

// Configure a Markdown widget builder to traverse the AST nodes and
// create a widget tree based on the elements.
final MarkdownBuilder builder = MarkdownBuilder(
delegate: this,
selectable: widget.selectable,
Expand All @@ -223,7 +226,8 @@ class _MarkdownWidgetState extends State<MarkdownWidget>
builders: widget.builders,
fitContent: widget.fitContent,
);
_children = builder.build(document.parseLines(lines));

_children = builder.build(astNodes);
}

void _disposeRecognizers() {
Expand Down
66 changes: 43 additions & 23 deletions packages/flutter_markdown/test/flutter_markdown_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -70,34 +70,54 @@ void main() {
_expectTextStrings(widgets, <String>['strikethrough']);
});

testWidgets('Single line break', (WidgetTester tester) async {
await tester
.pumpWidget(_boilerplate(const MarkdownBody(data: 'line 1 \nline 2')));
group('Line Breaks', () {
testWidgets(
// Example 654 from the GitHub Flavored Markdown specification.
'Two spaces at end of line inside a block element',
(WidgetTester tester) async {
await tester.pumpWidget(
_boilerplate(const MarkdownBody(data: 'line 1 \nline 2')));

final Iterable<Widget> widgets = tester.allWidgets;
_expectWidgetTypes(widgets,
<Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['line 1\nline 2']);
},
);

final Iterable<Widget> widgets = tester.allWidgets;
_expectWidgetTypes(
widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['line 1\nline 2']);
});
testWidgets(
// Example 655 from the GitHub Flavored Markdown specification.
'Backslash at end of line inside a block element',
(WidgetTester tester) async {
await tester.pumpWidget(
_boilerplate(const MarkdownBody(data: 'line 1\\\nline 2')));

final Iterable<Widget> widgets = tester.allWidgets;
_expectWidgetTypes(widgets,
<Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['line 1\nline 2']);
},
);

testWidgets('Multiple line breaks', (WidgetTester tester) async {
await tester.pumpWidget(
_boilerplate(const MarkdownBody(data: 'line 1 \n \nline 2')));
testWidgets('Non-applicable line break', (WidgetTester tester) async {
final body = MarkdownBody(data: 'line 1.\nline 2.');
await tester.pumpWidget(_boilerplate(body));

final Iterable<Widget> widgets = tester.allWidgets;
_expectWidgetTypes(
widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['line 1\n\nline 2']);
});
final Iterable<Widget> widgets = tester.allWidgets;
_expectWidgetTypes(widgets,
<Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['line 1. line 2.']);
});

testWidgets('Non-applicable line break', (WidgetTester tester) async {
final body = MarkdownBody(data: 'line 1.\nline 2.');
await tester.pumpWidget(_boilerplate(body));
testWidgets('Non-applicable line break', (WidgetTester tester) async {
final body = MarkdownBody(data: 'line 1.\nline 2.');
await tester.pumpWidget(_boilerplate(body));

final Iterable<Widget> widgets = tester.allWidgets;
_expectWidgetTypes(
widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['line 1. line 2.']);
final Iterable<Widget> widgets = tester.allWidgets;
_expectWidgetTypes(widgets,
<Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['line 1. line 2.']);
});
});

testWidgets('Empty string', (WidgetTester tester) async {
Expand Down

0 comments on commit 410886c

Please sign in to comment.