diff options
| author | Wiimm <wiimm@wiimm.de> | 2022-07-09 11:48:24 +0200 |
|---|---|---|
| committer | Wiimm <wiimm@wiimm.de> | 2022-07-09 11:48:24 +0200 |
| commit | 06ff18cd020779c226f7c25d22016e06b898f303 (patch) | |
| tree | b5c12ca4c6b9b0c86e63d2b6a965b8bd74dd0d86 /project/src/lib-parser.c | |
| parent | f30e94a61fdc9fb13fd1fbd8b75502fedf5a2f71 (diff) | |
SZS v2.28a.beta
Diffstat (limited to '')
| -rw-r--r-- | project/src/lib-parser.c | 84 |
1 files changed, 79 insertions, 5 deletions
diff --git a/project/src/lib-parser.c b/project/src/lib-parser.c index f375395..7271258 100644 --- a/project/src/lib-parser.c +++ b/project/src/lib-parser.c @@ -2216,6 +2216,51 @@ char NextCharSI /////////////////////////////////////////////////////////////////////////////// +bool IsSectionOrEotSI +( + // Call NextCharSI() and check for new section or EOT (return true if found) + // Section name is stored in 'last_index_name' (upper case) + + ScanInfo_t * si, // valid data + bool skip_lines // true: skip empty lines +) +{ + DASSERT(si); + + *last_index_name = 0; + char ch = NextCharSI(si,skip_lines); + if (!ch) + return true; + + if ( ch == '[' ) + { + ScanFile_t *sf = si->cur_file; + DASSERT(sf); + ccp beg = sf->ptr + 1; + ccp eol = beg; + while ( eol < sf->end && *eol != '\n' ) + eol++; + eol--; + while ( eol > beg && (uchar)*eol <= ' ' ) + eol--; + + if ( *eol == ']' ) + { + int len = eol - beg; + if ( len > 0 && !memchr(beg,'[',len) && !memchr(beg,']',len) ) + { + mem_t name = { .ptr = beg, .len = len }; + SetIndexNameM(name); + return true; + } + } + } + + return false; +} + +/////////////////////////////////////////////////////////////////////////////// + char SkipCharSI ( // return next non skipped character @@ -2372,6 +2417,25 @@ enumError CheckLevelSI /////////////////////////////////////////////////////////////////////////////// +ccp GetEolSI +( + ScanInfo_t * si // valid data +) +{ + DASSERT(si); + ScanFile_t *sf = si->cur_file; + DASSERT(sf); + + ccp ptr = sf->ptr, prev = sf->prev_ptr; + GotoEolSI(si); + ccp eol = sf->ptr; + sf->ptr = ptr; + sf->prev_ptr = prev; + return eol; +} + +/////////////////////////////////////////////////////////////////////////////// + void GotoEolSI ( ScanInfo_t * si // valid data @@ -2647,12 +2711,14 @@ uint ScanNameSI enumError ConcatStringsSI ( ScanInfo_t * si, // valid data - char ** dest_str, // store string here, use FREE + MALLOC + char ** dest_str, // not NULL: store string here, use FREE + MALLOC uint * ret_len // not NULL: store length of return string here ) { DASSERT(si); + //-- clear result + if (dest_str) { FreeString(*dest_str); @@ -2661,6 +2727,9 @@ enumError ConcatStringsSI if (ret_len) *ret_len = 0; + + //-- scan string + // [[var-string-]] support of dynamic buffer char buf[5000]; char *buf_end = buf + sizeof(buf) - 1; @@ -2711,6 +2780,8 @@ enumError ConcatStringsSI } } + //-- store result + const uint len = dest - buf; if (ret_len) *ret_len = len; @@ -2781,10 +2852,10 @@ enumError ScanStringSI char last_index_name[VARNAME_SIZE+1] = {0}; -//----------------------------------------------------------------------------- - int ScanIndexSI ( + // varname is stored in 'last_index_name' (upper case) + ScanInfo_t * si, // valid data enumError * err, // return value: error code int index, // index to define if name @@ -2805,6 +2876,7 @@ int ScanIndexSI char ch = NextCharSI(si,false); if (IsNum(ch,0)) { + *last_index_name = 0; u32 num; *err = ScanU32SI(si,&num,1,0); if (il) @@ -2872,16 +2944,18 @@ int ScanIndexSI //----------------------------------------------------------------------------- +#if 0 // [[2do]] [[obsolete]] void SetIndexName ( ccp name ) { if (!name) name = ""; char *dest = last_index_name; - char *end = dest + sizeof(last_index_name) -1 ; - while ( dest < end && *name ) + char *endbuf = dest + sizeof(last_index_name) -1 ; + while ( dest < endbuf && *name ) *dest++ = toupper((int)*name++); *dest = 0; } +#endif //----------------------------------------------------------------------------- |
