mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-03 05:08:14 +00:00
Strip carriage return \r from raw string literals
This commit is contained in:
+21
-1
@@ -661,10 +661,25 @@ bool unquote_char(String s, u8 quote, Rune *rune, bool *multiple_bytes, String *
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String strip_carriage_return(gbAllocator a, String s) {
|
||||||
|
isize buf_len = s.len;
|
||||||
|
u8 *buf = gb_alloc_array(a, u8, buf_len);
|
||||||
|
isize i = 0;
|
||||||
|
for (isize j = 0; j < s.len; j++) {
|
||||||
|
u8 c = s.text[j];
|
||||||
|
|
||||||
|
if (c != '\r') {
|
||||||
|
buf[i++] = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return make_string(buf, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 0 == failure
|
// 0 == failure
|
||||||
// 1 == original memory
|
// 1 == original memory
|
||||||
// 2 == new allocation
|
// 2 == new allocation
|
||||||
i32 unquote_string(gbAllocator a, String *s_, u8 quote=0) {
|
i32 unquote_string(gbAllocator a, String *s_, u8 quote=0, bool has_carriage_return=false) {
|
||||||
String s = *s_;
|
String s = *s_;
|
||||||
isize n = s.len;
|
isize n = s.len;
|
||||||
if (quote == 0) {
|
if (quote == 0) {
|
||||||
@@ -683,6 +698,11 @@ i32 unquote_string(gbAllocator a, String *s_, u8 quote=0) {
|
|||||||
if (string_contains_char(s, '`')) {
|
if (string_contains_char(s, '`')) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (has_carriage_return) {
|
||||||
|
*s_ = strip_carriage_return(a, s);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
*s_ = s;
|
*s_ = s;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -960,6 +960,7 @@ Token tokenizer_get_token(Tokenizer *t) {
|
|||||||
case '`': // Raw String Literal
|
case '`': // Raw String Literal
|
||||||
case '"': // String Literal
|
case '"': // String Literal
|
||||||
{
|
{
|
||||||
|
bool has_carriage_return = false;
|
||||||
i32 success;
|
i32 success;
|
||||||
Rune quote = curr_rune;
|
Rune quote = curr_rune;
|
||||||
token.kind = Token_String;
|
token.kind = Token_String;
|
||||||
@@ -989,10 +990,13 @@ Token tokenizer_get_token(Tokenizer *t) {
|
|||||||
if (r == quote) {
|
if (r == quote) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (r == '\r') {
|
||||||
|
has_carriage_return = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
token.string.len = t->curr - token.string.text;
|
token.string.len = t->curr - token.string.text;
|
||||||
success = unquote_string(heap_allocator(), &token.string);
|
success = unquote_string(heap_allocator(), &token.string, 0, has_carriage_return);
|
||||||
if (success > 0) {
|
if (success > 0) {
|
||||||
if (success == 2) {
|
if (success == 2) {
|
||||||
array_add(&t->allocated_strings, token.string);
|
array_add(&t->allocated_strings, token.string);
|
||||||
|
|||||||
Reference in New Issue
Block a user