From 996eec6152fcbe6cca6c6f9c3b0571906ddccb11 Mon Sep 17 00:00:00 2001 From: Nick Chambers Date: Sun, 14 Apr 2024 09:45:10 -0500 Subject: [PATCH] Implement basic HTTP tokenizer --- .../cobweb/HttpTokenStream.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/com/spookyinternet/cobweb/HttpTokenStream.java diff --git a/src/com/spookyinternet/cobweb/HttpTokenStream.java b/src/com/spookyinternet/cobweb/HttpTokenStream.java new file mode 100644 index 0000000..2cd3fdb --- /dev/null +++ b/src/com/spookyinternet/cobweb/HttpTokenStream.java @@ -0,0 +1,65 @@ +package com.spookyinternet.cobweb; + +import java.io.*; +import java.util.*; + +class BufferManager { + private BufferedReader reader; + + public BufferManager(BufferedReader reader) { + this.reader = reader; + } + + public boolean runesMatch() { + return false; + } + + public void advance() { + } + + public String str() { + return ""; + } +} + +class HttpTokenStream implements Iterator { + private BufferedReader reader; + private BufferManager buff; + int line = 1; + int seq = 0; + + public HttpTokenStream(BufferedReader reader) { + this.reader = reader; + this.buff = new BufferManager(reader); + } + + @Override + public boolean hasNext() { + try { + return this.reader.ready(); + } catch(Exception _) { + return false; + } + } + + @Override + public HttpToken next() { + while(this.buff.runesMatch()) { + this.buff.advance(); + } + + this.seq += 1; + int snapshot_line = this.line; + int snapshot_seq = this.seq; + String value = this.buff.str(); + boolean eol = false; + + if(value.endsWith("\r\n")) { + this.line += 1; + this.seq = 0; + eol = true; + } + + return new HttpToken(snapshot_line, value, snapshot_seq == 1, eol); + } +}