Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Unified Diff: pkg/third_party/html5lib/lib/parser_console.dart

Issue 22375011: move html5lib code into dart svn repo (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: change location of html5lib to pkg/third_party/html5lib Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/third_party/html5lib/lib/parser_console.dart
diff --git a/pkg/third_party/html5lib/lib/parser_console.dart b/pkg/third_party/html5lib/lib/parser_console.dart
new file mode 100644
index 0000000000000000000000000000000000000000..7858ab2e0b7b2824456cff03cdc5983782c9083a
--- /dev/null
+++ b/pkg/third_party/html5lib/lib/parser_console.dart
@@ -0,0 +1,46 @@
+/**
+ * This library adds `dart:io` support to the HTML5 parser. Call
+ * [initDartIOSupport] before calling the [parse] methods and they will accept
+ * a [RandomAccessFile] as input, in addition to the other input types.
+ */
+library parser_console;
+
+import 'dart:io';
+import 'parser.dart';
+import 'src/inputstream.dart' as inputstream;
+
+/**
+ * Adds support to the [HtmlParser] for running on a console VM. In particular
+ * this means it will be able to handle `dart:io` and [RandomAccessFile]s as
+ * input to the various [parse] methods.
+ */
+void useConsole() {
+ inputstream.consoleSupport = new _ConsoleSupport();
+}
+
+class _ConsoleSupport extends inputstream.ConsoleSupport {
+ List<int> bytesFromFile(source) {
+ if (source is! RandomAccessFile) return null;
+ return readAllBytesFromFile(source);
+ }
+}
+
+// TODO(jmesserly): this should be `RandomAccessFile.readAllBytes`.
+/** Synchronously reads all bytes from the [file]. */
+List<int> readAllBytesFromFile(RandomAccessFile file) {
+ int length = file.lengthSync();
+ var bytes = new List<int>(length);
+
+ int bytesRead = 0;
+ while (bytesRead < length) {
+ int read = file.readIntoSync(bytes, bytesRead, length - bytesRead);
+ if (read <= 0) {
+ // This could happen if, for example, the file was resized while
+ // we're reading. Just shrink the bytes array and move on.
+ bytes = bytes.sublist(0, bytesRead);
+ break;
+ }
+ bytesRead += read;
+ }
+ return bytes;
+}

Powered by Google App Engine
This is Rietveld 408576698