extract_readme.dart
2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
* Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import 'dart:io';
import 'package:markdown/markdown.dart' as md;
Iterable<String> getCode(List<md.Node>? nodes, [bool isCode = false]) sync* {
if (nodes == null) {
return;
}
for (md.Node node in nodes) {
if (node is md.Element) {
// print(node.tag);
// print(node.attributes);
yield* getCode(node.children,
node.tag == 'code' && node.attributes['class'] == 'language-dart');
} else if (node is md.Text) {
if (isCode && !node.text.startsWith('import')) {
yield '// ------------';
yield node.text;
}
} else {
print(node);
}
}
}
void buildFile(String src, String dest, bool flutter) {
final md.Document document = md.Document(
extensionSet: md.ExtensionSet.commonMark,
encodeHtml: false,
);
final output = File(dest);
final st = output.openWrite();
st.writeln('// ignore_for_file: avoid_web_libraries_in_flutter');
st.writeln('import \'dart:io\';');
st.writeln('import \'dart:typed_data\';');
st.writeln('import \'package:flutter/services.dart\' show rootBundle;');
if (flutter) {
st.writeln('import \'package:path_provider/path_provider.dart\';');
st.writeln(
'import \'package:htmltopdfwidgets/htmltopdfwidgets.dart\' show HTMLToPdf;');
} else {
st.writeln('import \'dart:convert\';');
st.writeln('import \'package:web/web.dart\' as web;');
}
st.writeln('import \'package:printing/printing.dart\';');
st.writeln('import \'package:pdf/pdf.dart\';');
st.writeln('import \'package:pdf/widgets.dart\' as pw;');
final data = File(src).readAsStringSync();
final List<String> lines = data.replaceAll('\r\n', '\n').split('\n');
final List<md.Node> parsedLines = document.parseLines(lines);
final Iterable<String> code = getCode(parsedLines);
st.writeln('Future main() async {');
st.writeln(code.join('\n'));
st.writeln('}');
st.close();
}
void main() {
buildFile('../pdf/README.md', 'readme-pdf.dart', false);
buildFile('../printing/README.md', 'readme-printing.dart', true);
}