From 52a8bb09d2d5cbb0b06b5b5c43cded8006e7aa00 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Wed, 17 Feb 2021 10:35:04 -0700 Subject: [PATCH] Add Stream fromString --- kiss/src/kiss/EmbeddedScript.hx | 2 +- kiss/src/kiss/Kiss.hx | 2 +- kiss/src/kiss/Stream.hx | 18 ++++++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/kiss/src/kiss/EmbeddedScript.hx b/kiss/src/kiss/EmbeddedScript.hx index 96697f06..f35f0382 100644 --- a/kiss/src/kiss/EmbeddedScript.hx +++ b/kiss/src/kiss/EmbeddedScript.hx @@ -60,7 +60,7 @@ class EmbeddedScript { classFields.push(field); } - Reader.readAndProcess(new Stream(scriptFile), k, (nextExp) -> { + Reader.readAndProcess(Stream.fromFile(scriptFile), k, (nextExp) -> { var field = Kiss.readerExpToField(nextExp, k, false); if (field != null) { classFields.push(field); diff --git a/kiss/src/kiss/Kiss.hx b/kiss/src/kiss/Kiss.hx index 17b49e1f..f57b4520 100644 --- a/kiss/src/kiss/Kiss.hx +++ b/kiss/src/kiss/Kiss.hx @@ -94,7 +94,7 @@ class Kiss { public static function build(kissFile:String, ?k:KissState, useClassFields = true):Array { return _try(() -> { var classFields:Array = if (useClassFields) Context.getBuildFields() else []; - var stream = new Stream(kissFile); + var stream = Stream.fromFile(kissFile); // (load... ) relative to the original file var loadingDirectory = Path.directory(kissFile); diff --git a/kiss/src/kiss/Stream.hx b/kiss/src/kiss/Stream.hx index d537bfbf..34855641 100644 --- a/kiss/src/kiss/Stream.hx +++ b/kiss/src/kiss/Stream.hx @@ -42,19 +42,29 @@ class Stream { public var startOfLine = true; - public function new(file:String) { - // Banish ye Windows line-endings - content = File.getContent(file); + public static function fromFile(file:String) { + return new Stream(file, File.getContent(file)); + } + public static function fromString(content:String) { + return new Stream("string", content); + } + + private function new(file:String, content:String) { + this.file = file; + + // Banish ye Windows line-endings if (content.indexOf('\r') >= 0) { absolutePerNewline = 2; content = content.replace('\r', ''); } + + this.content = content; + // Life is easier with a trailing newline if (content.charAt(content.length - 1) != "\n") content += "\n"; - this.file = file; line = 1; column = 1; absoluteChar = 0;