From 8819853e15533abd0c740afc8cf43b55f96b494a Mon Sep 17 00:00:00 2001 From: Timerix22 Date: Wed, 9 Mar 2022 00:37:55 +0300 Subject: [PATCH] comments and <\"> fixed --- DtsodC/Autoarr/StringBuilder.c | 2 +- DtsodC/DtsodParser/DtsodV24_deserialize.c | 34 ++++++++++++++++------- DtsodC/DtsodParser/DtsodV24_serialize.c | 19 ++++++++++--- DtsodC/base/mystr.c | 2 +- DtsodC/tests/main.c | 4 +-- DtsodC/tests/test_dtsod.c | 11 ++++++-- 6 files changed, 51 insertions(+), 21 deletions(-) diff --git a/DtsodC/Autoarr/StringBuilder.c b/DtsodC/Autoarr/StringBuilder.c index 4b8273e..030fdb4 100644 --- a/DtsodC/Autoarr/StringBuilder.c +++ b/DtsodC/Autoarr/StringBuilder.c @@ -55,7 +55,7 @@ void StringBuilder_append_uint64(StringBuilder* b, uint64 a){ void StringBuilder_append_double(StringBuilder* b, double a){ char buf[32]; - sprintf(buf,32,"%f",a); + sprintf(buf,"%lf",a); StringBuilder_append_cptr(b,buf); } diff --git a/DtsodC/DtsodParser/DtsodV24_deserialize.c b/DtsodC/DtsodParser/DtsodV24_deserialize.c index fc1c81d..7b84122 100644 --- a/DtsodC/DtsodParser/DtsodV24_deserialize.c +++ b/DtsodC/DtsodParser/DtsodV24_deserialize.c @@ -1,7 +1,10 @@ #include "DtsodV24.h" +#include "../Autoarr/StringBuilder.h" #define ARR_BC 8 #define ARR_BL 16 +#define STRB_BC 64 +#define STRB_BL 1024 Hashtable* __deserialize(char** _text, bool calledRecursively){ Hashtable* dict=Hashtable_create(); @@ -47,7 +50,7 @@ Hashtable* __deserialize(char** _text, bool calledRecursively){ SkipComment(); if(nameStr.length!=0) throw_wrongchar(c); - nameStr.ptr=text; + nameStr.ptr=text+1; //skips '\n' break; case '}': if(!calledRecursively) throw_wrongchar(c); @@ -72,15 +75,26 @@ Hashtable* __deserialize(char** _text, bool calledRecursively){ Unitype ReadValue(){ //returns part of without quotes - string ReadString(){ + char* ReadString(){ bool prevIsBackslash=false; - string str={text+1,0}; - while ((c=*++text)!='"' || prevIsBackslash){ - if (!c) throw(ERR_ENDOFSTR); - prevIsBackslash= c=='\\' && !prevIsBackslash; - str.length++; + StringBuilder _b=StringBuilder_create(STRB_BC,STRB_BL); + StringBuilder* b=&_b; + while ((c=*++text)){ + if(c=='"') { + if(prevIsBackslash) { + //replacing <\"> with <"> + Autoarr_remove(b); + StringBuilder_append_char(b,c); + } + else return StringBuilder_build(b); + } + else { + prevIsBackslash= c=='\\' && !prevIsBackslash; + StringBuilder_append_char(b,c); + } } - return str; + throw(ERR_ENDOFSTR); + return NULL; }; Autoarr(Unitype)* ReadList(){ @@ -174,11 +188,11 @@ Hashtable* __deserialize(char** _text, bool calledRecursively){ SkipComment(); if(valueStr.length!=0) throw_wrongchar(_c); - valueStr.ptr=text; + valueStr.ptr=text+1; //skips '\n' break; case '"': if(valueStr.length!=0) throw_wrongchar(c); - value=UniPtr(CharPtr,string_cpToCharPtr(ReadString())); + value=UniPtr(CharPtr,ReadString()); break; case '\'': if(valueStr.length!=0) throw_wrongchar(c); diff --git a/DtsodC/DtsodParser/DtsodV24_serialize.c b/DtsodC/DtsodParser/DtsodV24_serialize.c index 45eecc0..759d941 100644 --- a/DtsodC/DtsodParser/DtsodV24_serialize.c +++ b/DtsodC/DtsodParser/DtsodV24_serialize.c @@ -10,7 +10,7 @@ void __serialize(StringBuilder* b, uint8 tabs, Hashtable* dtsod){ void AppendTabs(){ - for(uint8 t; t string string_reverse(string s){ string r={malloc(s.length), s.length}; - for(uint32 i; i