| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:io'; |
| |
| import 'package:markdown/markdown.dart'; |
| |
| /// Scrapes links in a markdown document. |
| class LinkScraper { |
| /// Extracts links from the given [file]. |
| Iterable<String> scrape(String file) { |
| final List<Node> nodes = |
| Document().parseLines(File(file).readAsLinesSync()); |
| final _Visitor visitor = _Visitor(); |
| for (Node node in nodes) { |
| node.accept(visitor); |
| } |
| return visitor.links; |
| } |
| } |
| |
| class _Visitor implements NodeVisitor { |
| static const String _key = 'href'; |
| |
| final Set<String> links = <String>{}; |
| |
| @override |
| bool visitElementBefore(Element element) { |
| if (element.attributes.containsKey(_key)) { |
| links.add(element.attributes[_key]); |
| } |
| return true; |
| } |
| |
| @override |
| void visitElementAfter(Element element) {} |
| |
| @override |
| void visitText(Text text) {} |
| } |