added 'reader.read_word'
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 14 Dec 2020 16:45:34 +0000 (10:45 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 14 Dec 2020 16:45:34 +0000 (10:45 -0600)
core/string/reader.onyx

index b60a34b206cc5a83cc6ce6b1b901bf08a8710486..f1dcaa781df381f52186950762f4be602f18f34c 100644 (file)
@@ -133,6 +133,26 @@ read_until :: proc (use reader: ^StringReader, skip: u32, uptos: ..u8) -> str {
     return out;
 }
 
+// Reads a continuous string of alphabetic chars along with underscores '_'
+read_word :: proc (use reader: ^StringReader) -> str {
+    if count == 0 do return str.{ null, 0 };
+
+    out := str.{ data, 0 };
+    for ch: *(cast(^str) reader) {
+        if     (ch >= #char "a" && ch <= #char "z")
+            || (ch >= #char "A" && ch <= #char "Z")
+            || ch == #char "_" {
+            out.count += 1;            
+        }
+        else do break;
+    }
+
+    data += out.count;
+    count -= out.count;
+
+    return out;
+}
+
 advance_line :: proc (use reader: ^StringReader) {
     if count == 0 do return;