static void analyze(const char *src, int len_src, bool rewrite, int state) { GB_ARRAY garray, tarray, parray; int i, n, pos, len, p, upos, ulen, l; char *str; EVAL_ANALYZE result; EVAL_analyze(src, len_src, state == HIGHLIGHT_COMMENT ? EVAL_TYPE_COMMENT : EVAL_TYPE_END, &result, rewrite); n = 0; for (i = 0; i < result.len; i++) { if (result.color[i].state != EVAL_TYPE_END) n++; } GB.Array.New(&garray, GB_T_STRING, n); GB.Array.New(&tarray, GB_T_INTEGER, n); GB.Array.New(&parray, GB_T_INTEGER, n); pos = 0; upos = 0; i = 0; for (p = 0; p < result.len; p++) { len = result.color[p].len; ulen = 0; for (l = 0; l < len; l++) ulen += get_char_length(result.str[upos + ulen]); if (result.color[p].state != EVAL_TYPE_END) { str = GB.NewString(&result.str[upos], ulen); *((char **)GB.Array.Get(garray, i)) = str; *((int *)GB.Array.Get(tarray, i)) = convState(result.color[p].state); *((int *)GB.Array.Get(parray, i)) = pos; i++; } pos += len; upos += ulen; } GB.Unref(&_analyze_symbol); _analyze_symbol = garray; GB.Ref(garray); GB.Unref(&_analyze_type); _analyze_type = tarray; GB.Ref(tarray); GB.Unref(&_analyze_pos); _analyze_pos = parray; GB.Ref(parray); GB.FreeString(&_analyze_text); _analyze_text = result.str; }
void CL_UTF8_Reader_Impl::next() { current_position += get_char_length(); }
void UTF8_Reader::next() { current_position += get_char_length(); }
static char *purge(const char *s, int len_s, bool comment, bool string) { char c; uint i; int lc, ls; bool in_comment = FALSE; char wait = 0; char *r = NULL; for (i = 0; i < len_s; i += ls) { c = s[i]; ls = lc = get_char_length((unsigned char)c); switch(wait) { case 0: if (in_comment) { if (!comment) c = ' ', lc = 1; } else if (c == '"') wait = '"'; else if (c == '\'') in_comment = TRUE; break; case '"': if (c == '"') wait = 0; else if (c == '\\') { if (string) { if (i < len_s) r = GB.AddChar(r, c); //r += c; i++; c = s[i]; lc = get_char_length((unsigned char)c); } else { i++; if (i < len_s) r = GB.AddChar(r, ' '); //r += ' '; c = ' ', lc = 1; } } else { if (!string) c = ' ', lc = 1; } break; } if (lc == 1) r = GB.AddChar(r, c); else r = GB.AddString(r, &s[i], lc); } GB.FreeString(&_purged_line); _purged_line = r; return r; }