diff --git a/README.md b/README.md index 28e0f46..e6a603a 100644 --- a/README.md +++ b/README.md @@ -270,18 +270,23 @@ In that case, you could supply parser with the resolver, which should provide all missing links. ```dart +import 'package:mdown/mdown.dart'; +import 'package:mdown/ast/standard_ast_factory.dart'; + String library = "mdown"; String version = "0.11.0"; Target linkResolver(String normalizedReference, String reference) { if (reference.startsWith("new ")) { String className = reference.substring(4); - return new Target("http://www.dartdocs.org/documentation/$library/$version/index.html#$library/$library.$className@id_$className-", null); + return astFactory.target( + "http://www.dartdocs.org/documentation/$library/$version/index.html#$library/$library.$className@id_$className-", + null); } else { return null; } } -String res = markdownToHtml('Hello world!\n===', const Options(linkResolver: linkResolver)); +String res = markdownToHtml('Hello world!\n===', new Options(linkResolver: linkResolver)); ``` [CommonMark]: http://commonmark.org/ diff --git a/lib/ast/ast.dart b/lib/ast/ast.dart index c64e9d8..a4e5a21 100644 --- a/lib/ast/ast.dart +++ b/lib/ast/ast.dart @@ -371,22 +371,8 @@ abstract class TableRow implements AstNode { /// Target ::= TargetLink (' ' TargetTitle)? abstract class Target implements AstNode { - TargetLink get link; - - TargetTitle get title; -} - -/// Target link. -/// -/// TargetLink ::= '<'? link '>'? -abstract class TargetLink implements AstNode { String get link; -} -/// Target title. -/// -/// TargetTitle ::= '(' title ')' | '"' title '"' | "'" title "'" -abstract class TargetTitle implements AstNode { String get title; } @@ -553,10 +539,6 @@ abstract class AstVisitor { R visitTarget(Target node); - R visitTargetLink(TargetLink node); - - R visitTargetTitle(TargetTitle node); - R visitTexMathDisplay(TexMathDisplay node); R visitTexMathInline(TexMathInline node); diff --git a/lib/ast/ast_factory.dart b/lib/ast/ast_factory.dart index fb9ba8d..05ec040 100644 --- a/lib/ast/ast_factory.dart +++ b/lib/ast/ast_factory.dart @@ -138,13 +138,7 @@ abstract class AstFactory { TableCell tableCell(Iterable contents); /// Creates target for link and image. - Target target(TargetLink link, TargetTitle title); - - /// Crates target link. - TargetLink targetLink(String link); - - /// Creates target title. - TargetTitle targetTitle(String title); + Target target(String link, String title); /// Creates display TeX math. TexMathDisplay texMathDisplay(String contents); diff --git a/lib/ast/visitor.dart b/lib/ast/visitor.dart index 20eb2be..e34c9b7 100644 --- a/lib/ast/visitor.dart +++ b/lib/ast/visitor.dart @@ -127,12 +127,6 @@ class SimpleAstVisitor implements AstVisitor { @override R visitTarget(Target node) => null; - @override - R visitTargetLink(TargetLink node) => null; - - @override - R visitTargetTitle(TargetTitle node) => null; - @override R visitTexMathDisplay(TexMathDisplay node) => null; @@ -401,18 +395,6 @@ class RecursiveAstVisitor implements AstVisitor { return null; } - @override - R visitTargetLink(TargetLink node) { - node.visitChildren(this); - return null; - } - - @override - R visitTargetTitle(TargetTitle node) { - node.visitChildren(this); - return null; - } - @override R visitTexMathDisplay(TexMathDisplay node) { node.visitChildren(this); @@ -609,12 +591,6 @@ class GeneralizingAstVisitor implements AstVisitor { @override R visitTarget(Target node) => visitNode(node); - @override - R visitTargetLink(TargetLink node) => visitNode(node); - - @override - R visitTargetTitle(TargetTitle node) => visitNode(node); - R visitTexMath(TexMath node) => visitTexRawInline(node); @override @@ -773,12 +749,6 @@ class UnifyingAstVisitor implements AstVisitor { @override R visitTarget(Target node) => visitNode(node); - @override - R visitTargetLink(TargetLink node) => visitNode(node); - - @override - R visitTargetTitle(TargetTitle node) => visitNode(node); - @override R visitTexMathDisplay(TexMathDisplay node) => visitNode(node); diff --git a/lib/src/ast/ast.dart b/lib/src/ast/ast.dart index 1b444d5..9baf34c 100644 --- a/lib/src/ast/ast.dart +++ b/lib/src/ast/ast.dart @@ -449,10 +449,10 @@ class InlineImageImpl extends ImageImpl implements InlineImage { Target get target => _target; @override - String get link => _target?.link?.link; + String get link => _target?.link; @override - String get title => _target?.title?.title; + String get title => _target?.title; } /// Default InlineLink implementation @@ -475,10 +475,10 @@ class InlineLinkImpl extends LinkImpl implements InlineLink { Target get target => _target; @override - String get link => _target?.link?.link; + String get link => _target?.link; @override - String get title => _target?.title?.title; + String get title => _target?.title; } /// Default InlineNode implementation @@ -746,10 +746,10 @@ class ReferenceImageImpl extends ImageImpl implements ReferenceImage { ExtendedAttributes get attributes => _attributes; @override - String get link => _reference?.target?.link?.link; + String get link => _reference?.target?.link; @override - String get title => _reference?.target?.title?.title; + String get title => _reference?.target?.title; } /// Default ReferenceLink implementation. @@ -773,10 +773,10 @@ class ReferenceLinkImpl extends LinkImpl implements ReferenceLink { Reference get reference => _reference; @override - String get link => _reference?.target?.link?.link; + String get link => _reference?.target?.link; @override - String get title => _reference?.target?.title?.title; + String get title => _reference?.target?.title; } /// Default SmartChar implementation. @@ -990,8 +990,8 @@ class TableRowImpl extends AstNodeImpl implements TableRow { /// Default Target implementation. class TargetImpl extends AstNodeImpl implements Target { - final TargetLink _link; - TargetTitle _title; + final String _link; + String _title; /// Constructs Target instance. TargetImpl(this._link, this._title); @@ -999,62 +999,19 @@ class TargetImpl extends AstNodeImpl implements Target { @override R accept(AstVisitor visitor) => visitor.visitTarget(this); - @override - Iterable get childEntities => [_link, _title]; - - @override - TargetLink get link => _link; - - @override - TargetTitle get title => _title; - - set title(TargetTitle title) { - _title = title; - } - - @override - void visitChildren(AstVisitor visitor) { - _link?.accept(visitor); - _title?.accept(visitor); - } -} - -/// Default TargetLink implementation. -class TargetLinkImpl extends AstNodeImpl implements TargetLink { - final String _link; - - /// Constructs TargetLink instance. - TargetLinkImpl(this._link); - - @override - R accept(AstVisitor visitor) => visitor.visitTargetLink(this); - @override Iterable get childEntities => null; @override String get link => _link; - @override - void visitChildren(AstVisitor visitor) {} -} - -/// Default TargetTitle implementation. -class TargetTitleImpl extends AstNodeImpl implements TargetTitle { - final String _title; - - /// Constructs TargetTitle instance. - TargetTitleImpl(this._title); - - @override - R accept(AstVisitor visitor) => visitor.visitTargetTitle(this); - - @override - Iterable get childEntities => null; - @override String get title => _title; + set title(String title) { + _title = title; + } + @override void visitChildren(AstVisitor visitor) {} } diff --git a/lib/src/ast/ast_factory.dart b/lib/src/ast/ast_factory.dart index 7cba6cc..bc1c3c8 100644 --- a/lib/src/ast/ast_factory.dart +++ b/lib/src/ast/ast_factory.dart @@ -162,15 +162,9 @@ class AstFactoryImpl implements AstFactory { new TableCellImpl(contents); @override - Target target(TargetLink link, TargetTitle title) => + Target target(String link, String title) => new TargetImpl(link, title); - @override - TargetLink targetLink(String link) => new TargetLinkImpl(link); - - @override - TargetTitle targetTitle(String title) => new TargetTitleImpl(title); - @override TexMathDisplay texMathDisplay(String contents) => new TexMathDisplayImpl(contents); diff --git a/lib/src/ast/replacing_visitor.dart b/lib/src/ast/replacing_visitor.dart index 5290a49..0740383 100644 --- a/lib/src/ast/replacing_visitor.dart +++ b/lib/src/ast/replacing_visitor.dart @@ -413,20 +413,7 @@ class ReplacingAstVisitor extends AstVisitor { } @override - TargetImpl visitTarget(Target node) { - final TargetLink link = node.link.accept(this); - final TargetTitle title = node.title?.accept(this); - - return link == node.link && title == node.title - ? node - : new TargetImpl(link, title); - } - - @override - TargetLinkImpl visitTargetLink(TargetLink node) => node as TargetLinkImpl; - - @override - TargetTitleImpl visitTargetTitle(TargetTitle node) => node as TargetTitleImpl; + TargetImpl visitTarget(Target node) => node as TargetImpl; @override TexMathDisplayImpl visitTexMathDisplay(TexMathDisplay node) => diff --git a/lib/src/parsers/link_image.dart b/lib/src/parsers/link_image.dart index 737edde..0b3ed34 100644 --- a/lib/src/parsers/link_image.dart +++ b/lib/src/parsers/link_image.dart @@ -121,7 +121,7 @@ class LinkImageParser extends AbstractParser { } final TargetImpl result = - astFactory.target(astFactory.targetLink(href), null); + astFactory.target(href, null); // Maybe parsing title. int codeUnit = text.codeUnitAt(offset); @@ -152,7 +152,7 @@ class LinkImageParser extends AbstractParser { String title = text.substring(startOffset, offset - 1); title = unescapeAndUnreference(title); - result.title = astFactory.targetTitle(title); + result.title = title; // Skip whitespace. while (offset < length) { diff --git a/lib/src/parsers/link_reference.dart b/lib/src/parsers/link_reference.dart index 2232218..99290eb 100644 --- a/lib/src/parsers/link_reference.dart +++ b/lib/src/parsers/link_reference.dart @@ -135,25 +135,19 @@ class LinkReferenceParser extends AbstractParser { if (offsetAfterAttributes != -1) { return new ParseResult.success( new LinkReferenceImpl( - label, - astFactory.target( - astFactory.targetLink(link), astFactory.targetTitle(title)), - attributes), + label, astFactory.target(link, title), attributes), offsetAfterAttributes); } if (offsetAfterTitle != -1) { return new ParseResult.success( new LinkReferenceImpl( - label, - astFactory.target( - astFactory.targetLink(link), astFactory.targetTitle(title)), - attributes), + label, astFactory.target(link, title), attributes), offsetAfterTitle); } if (offsetAfterLink != -1) { return new ParseResult.success( new LinkReferenceImpl(label, - astFactory.target(astFactory.targetLink(link), null), null), + astFactory.target(link, null), null), offsetAfterLink); } diff --git a/test/reference_resolver.dart b/test/reference_resolver.dart index 9851f5d..3361828 100644 --- a/test/reference_resolver.dart +++ b/test/reference_resolver.dart @@ -8,7 +8,7 @@ import 'package:mdown/ast/standard_ast_factory.dart'; Target _linkResolver(String normalizedReference, String reference) { if (reference == "reference") { - return astFactory.target(astFactory.targetLink(reference), null); + return astFactory.target(reference, null); } else { return null; } diff --git a/test/service.dart b/test/service.dart index d02516e..adfdacf 100644 --- a/test/service.dart +++ b/test/service.dart @@ -58,7 +58,7 @@ void serviceTests() { '

test

')); }); - /*t.test('Link resolver', () { + t.test('Link resolver', () { final String library = "mdown"; final String version = "0.11.0"; Target linkResolver(String normalizedReference, String reference) { @@ -73,7 +73,8 @@ void serviceTests() { } String res = markdownToHtml( - 'Hello world!\n===', const Options(linkResolver: linkResolver)); - });*/ + 'Hello world!\n===', new Options(linkResolver: linkResolver)); + t.expect(res, t.equals("

Hello world!

")); + }); }); }