Lines Matching refs:pstr

21 					re_string_t *pstr,
40 re_string_allocate (re_string_t *pstr, const char *str, int len, int init_len,
50 re_string_construct_common (str, len, pstr, trans, icase, dfa);
52 ret = re_string_realloc_buffers (pstr, init_buf_len);
56 pstr->word_char = dfa->word_char;
57 pstr->word_ops_used = dfa->word_ops_used;
58 pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str;
59 pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len;
60 pstr->valid_raw_len = pstr->valid_len;
68 re_string_construct (re_string_t *pstr, const char *str, int len,
72 memset (pstr, '\0', sizeof (re_string_t));
73 re_string_construct_common (str, len, pstr, trans, icase, dfa);
77 ret = re_string_realloc_buffers (pstr, len + 1);
81 pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str;
90 ret = build_wcs_upper_buffer (pstr);
93 if (pstr->valid_raw_len >= len)
95 if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max)
97 ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2);
104 build_upper_buffer (pstr);
110 build_wcs_buffer (pstr);
115 re_string_translate_buffer (pstr);
118 pstr->valid_len = pstr->bufs_len;
119 pstr->valid_raw_len = pstr->bufs_len;
131 re_string_realloc_buffers (re_string_t *pstr, int new_buf_len)
134 if (pstr->mb_cur_max > 1)
143 new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len);
146 pstr->wcs = new_wcs;
147 if (pstr->offsets != NULL)
149 int *new_offsets = re_realloc (pstr->offsets, int, new_buf_len);
152 pstr->offsets = new_offsets;
156 if (pstr->mbs_allocated)
158 unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char,
162 pstr->mbs = new_mbs;
164 pstr->bufs_len = new_buf_len;
171 re_string_construct_common (const char *str, int len, re_string_t *pstr,
175 pstr->raw_mbs = (const unsigned char *) str;
176 pstr->len = len;
177 pstr->raw_len = len;
178 pstr->trans = trans;
179 pstr->icase = icase ? 1 : 0;
180 pstr->mbs_allocated = (trans != NULL || icase);
181 pstr->mb_cur_max = dfa->mb_cur_max;
182 pstr->is_utf8 = dfa->is_utf8;
183 pstr->map_notascii = dfa->map_notascii;
184 pstr->stop = pstr->len;
185 pstr->raw_stop = pstr->stop;
203 build_wcs_buffer (re_string_t *pstr)
207 assert (MB_LEN_MAX >= pstr->mb_cur_max);
215 /* Build the buffers from pstr->valid_len to either pstr->len or
216 pstr->bufs_len. */
217 end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
218 for (byte_idx = pstr->valid_len; byte_idx < end_idx;)
224 prev_st = pstr->cur_state;
226 if (BE (pstr->trans != NULL, 0))
230 for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i)
232 ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i];
233 buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch];
238 p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx;
239 mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
241 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len), 0))
245 wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx];
246 if (BE (pstr->trans != NULL, 0))
247 wc = pstr->trans[wc];
248 pstr->cur_state = prev_st;
253 pstr->cur_state = prev_st;
258 pstr->wcs[byte_idx++] = wc;
261 pstr->wcs[byte_idx++] = WEOF;
263 pstr->valid_len = byte_idx;
264 pstr->valid_raw_len = byte_idx;
272 build_wcs_upper_buffer (re_string_t *pstr)
279 assert (MB_LEN_MAX >= pstr->mb_cur_max);
284 byte_idx = pstr->valid_len;
285 end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
289 if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed)
295 if (isascii (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx])
296 && mbsinit (&pstr->cur_state))
299 pstr->mbs[byte_idx]
300 = toupper (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]);
303 pstr->wcs[byte_idx] = (wchar_t) pstr->mbs[byte_idx];
309 prev_st = pstr->cur_state;
311 ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx
312 + byte_idx), remain_len, &pstr->cur_state);
323 memcpy (pstr->mbs + byte_idx, buf, mbclen);
331 memcpy (pstr->mbs + byte_idx,
332 pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen);
333 pstr->wcs[byte_idx++] = wcu;
336 pstr->wcs[byte_idx++] = WEOF;
339 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len))
343 int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx];
344 pstr->mbs[byte_idx] = ch;
346 pstr->wcs[byte_idx++] = (wchar_t) ch;
348 pstr->cur_state = prev_st;
353 pstr->cur_state = prev_st;
357 pstr->valid_len = byte_idx;
358 pstr->valid_raw_len = byte_idx;
362 for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;)
368 prev_st = pstr->cur_state;
369 if (BE (pstr->trans != NULL, 0))
373 for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i)
375 ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i];
376 buf[i] = pstr->trans[ch];
381 p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx;
382 mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
393 memcpy (pstr->mbs + byte_idx, buf, mbclen);
398 if (byte_idx + mbcdlen > pstr->bufs_len)
400 pstr->cur_state = prev_st;
404 if (pstr->offsets == NULL)
406 pstr->offsets = re_malloc (int, pstr->bufs_len);
408 if (pstr->offsets == NULL)
411 if (!pstr->offsets_needed)
414 pstr->offsets[i] = i;
415 pstr->offsets_needed = 1;
418 memcpy (pstr->mbs + byte_idx, buf, mbcdlen);
419 pstr->wcs[byte_idx] = wcu;
420 pstr->offsets[byte_idx] = src_idx;
423 pstr->offsets[byte_idx + i]
425 pstr->wcs[byte_idx + i] = WEOF;
427 pstr->len += mbcdlen - mbclen;
428 if (pstr->raw_stop > src_idx)
429 pstr->stop += mbcdlen - mbclen;
430 end_idx = (pstr->bufs_len > pstr->len)
431 ? pstr->len : pstr->bufs_len;
437 memcpy (pstr->mbs + byte_idx, p, mbclen);
440 memcpy (pstr->mbs + byte_idx, p, mbclen);
442 if (BE (pstr->offsets_needed != 0, 0))
446 pstr->offsets[byte_idx + i] = src_idx + i;
450 pstr->wcs[byte_idx++] = wcu;
453 pstr->wcs[byte_idx++] = WEOF;
456 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len))
459 int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx];
461 if (BE (pstr->trans != NULL, 0))
462 ch = pstr->trans [ch];
463 pstr->mbs[byte_idx] = ch;
465 if (BE (pstr->offsets_needed != 0, 0))
466 pstr->offsets[byte_idx] = src_idx;
470 pstr->wcs[byte_idx++] = (wchar_t) ch;
472 pstr->cur_state = prev_st;
477 pstr->cur_state = prev_st;
481 pstr->valid_len = byte_idx;
482 pstr->valid_raw_len = src_idx;
491 re_string_skip_chars (re_string_t *pstr, int new_raw_idx, wint_t *last_wc)
499 for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len;
503 int remain_len = pstr->raw_len - rawbuf_idx;
504 prev_st = pstr->cur_state;
505 mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx,
506 remain_len, &pstr->cur_state);
513 wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx);
515 pstr->cur_state = prev_st;
532 build_upper_buffer (re_string_t *pstr)
535 end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
537 for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx)
539 int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx];
540 if (BE (pstr->trans != NULL, 0))
541 ch = pstr->trans[ch];
543 pstr->mbs[char_idx] = toupper (ch);
545 pstr->mbs[char_idx] = ch;
547 pstr->valid_len = char_idx;
548 pstr->valid_raw_len = char_idx;
555 re_string_translate_buffer (re_string_t *pstr)
558 end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
560 for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx)
562 int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx];
563 pstr->mbs[buf_idx] = pstr->trans[ch];
566 pstr->valid_len = buf_idx;
567 pstr->valid_raw_len = buf_idx;
571 Concretely, convert to wide character in case of pstr->mb_cur_max > 1,
576 re_string_reconstruct (re_string_t *pstr, int idx, int eflags)
578 int offset = idx - pstr->raw_mbs_idx;
583 if (pstr->mb_cur_max > 1)
584 memset (&pstr->cur_state, '\0', sizeof (mbstate_t));
586 pstr->len = pstr->raw_len;
587 pstr->stop = pstr->raw_stop;
588 pstr->valid_len = 0;
589 pstr->raw_mbs_idx = 0;
590 pstr->valid_raw_len = 0;
591 pstr->offsets_needed = 0;
592 pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
594 if (!pstr->mbs_allocated)
595 pstr->mbs = (unsigned char *) pstr->raw_mbs;
602 if (BE (offset < pstr->valid_raw_len, 1))
606 if (BE (pstr->offsets_needed, 0))
608 int low = 0, high = pstr->valid_len, mid;
612 if (pstr->offsets[mid] > offset)
614 else if (pstr->offsets[mid] < offset)
620 if (pstr->offsets[mid] < offset)
622 pstr->tip_context = re_string_context_at (pstr, mid - 1,
628 if (pstr->valid_len > offset
629 && mid == offset && pstr->offsets[mid] == offset)
631 memmove (pstr->wcs, pstr->wcs + offset,
632 (pstr->valid_len - offset) * sizeof (wint_t));
633 memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset);
634 pstr->valid_len -= offset;
635 pstr->valid_raw_len -= offset;
636 for (low = 0; low < pstr->valid_len; low++)
637 pstr->offsets[low] = pstr->offsets[low + offset] - offset;
643 pstr->len = pstr->raw_len - idx + offset;
644 pstr->stop = pstr->raw_stop - idx + offset;
645 pstr->offsets_needed = 0;
646 while (mid > 0 && pstr->offsets[mid - 1] == offset)
648 while (mid < pstr->valid_len)
649 if (pstr->wcs[mid] != WEOF)
653 if (mid == pstr->valid_len)
654 pstr->valid_len = 0;
657 pstr->valid_len = pstr->offsets[mid] - offset;
658 if (pstr->valid_len)
660 for (low = 0; low < pstr->valid_len; ++low)
661 pstr->wcs[low] = WEOF;
662 memset (pstr->mbs, 255, pstr->valid_len);
665 pstr->valid_raw_len = pstr->valid_len;
671 pstr->tip_context = re_string_context_at (pstr, offset - 1,
674 if (pstr->mb_cur_max > 1)
675 memmove (pstr->wcs, pstr->wcs + offset,
676 (pstr->valid_len - offset) * sizeof (wint_t));
678 if (BE (pstr->mbs_allocated, 0))
679 memmove (pstr->mbs, pstr->mbs + offset,
680 pstr->valid_len - offset);
681 pstr->valid_len -= offset;
682 pstr->valid_raw_len -= offset;
684 assert (pstr->valid_len > 0);
691 int prev_valid_len = pstr->valid_len;
694 if (BE (pstr->offsets_needed, 0))
696 pstr->len = pstr->raw_len - idx + offset;
697 pstr->stop = pstr->raw_stop - idx + offset;
698 pstr->offsets_needed = 0;
701 pstr->valid_len = 0;
703 if (pstr->mb_cur_max > 1)
708 if (pstr->is_utf8)
714 raw = pstr->raw_mbs + pstr->raw_mbs_idx;
715 end = raw + (offset - pstr->mb_cur_max);
716 if (end < pstr->raw_mbs)
717 end = pstr->raw_mbs;
722 if (isascii (*p) && BE (pstr->trans == NULL, 1))
724 memset (&pstr->cur_state, '\0', sizeof (mbstate_t));
725 /* pstr->valid_len = 0; */
735 int mlen = raw + pstr->len - p;
740 if (BE (pstr->trans != NULL, 0))
744 buf[i] = pstr->trans[p[i]];
755 memset (&pstr->cur_state, '\0',
757 pstr->valid_len = mbclen - (raw + offset - p);
765 pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx;
767 pstr->tip_context
768 = re_string_context_at (pstr, prev_valid_len - 1, eflags);
770 pstr->tip_context = ((BE (pstr->word_ops_used != 0, 0)
774 && pstr->newline_anchor)
776 if (BE (pstr->valid_len, 0))
778 for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx)
779 pstr->wcs[wcs_idx] = WEOF;
780 if (pstr->mbs_allocated)
781 memset (pstr->mbs, 255, pstr->valid_len);
783 pstr->valid_raw_len = pstr->valid_len;
788 int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1];
789 pstr->valid_raw_len = 0;
790 if (pstr->trans)
791 c = pstr->trans[c];
792 pstr->tip_context = (bitset_contain (pstr->word_char, c)
794 : ((IS_NEWLINE (c) && pstr->newline_anchor)
798 if (!BE (pstr->mbs_allocated, 0))
799 pstr->mbs += offset;
801 pstr->raw_mbs_idx = idx;
802 pstr->len -= offset;
803 pstr->stop -= offset;
807 if (pstr->mb_cur_max > 1)
809 if (pstr->icase)
811 reg_errcode_t ret = build_wcs_upper_buffer (pstr);
816 build_wcs_buffer (pstr);
820 if (BE (pstr->mbs_allocated, 0))
822 if (pstr->icase)
823 build_upper_buffer (pstr);
824 else if (pstr->trans != NULL)
825 re_string_translate_buffer (pstr);
828 pstr->valid_len = pstr->len;
830 pstr->cur_idx = 0;
836 re_string_peek_byte_case (const re_string_t *pstr, int idx)
841 if (BE (!pstr->mbs_allocated, 1))
842 return re_string_peek_byte (pstr, idx);
845 if (pstr->mb_cur_max > 1
846 && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx))
847 return re_string_peek_byte (pstr, idx);
850 off = pstr->cur_idx + idx;
852 if (pstr->offsets_needed)
853 off = pstr->offsets[off];
856 ch = pstr->raw_mbs[pstr->raw_mbs_idx + off];
863 if (pstr->offsets_needed && !isascii (ch))
864 return re_string_peek_byte (pstr, idx);
872 re_string_fetch_byte_case (re_string_t *pstr)
874 if (BE (!pstr->mbs_allocated, 1))
875 return re_string_fetch_byte (pstr);
878 if (pstr->offsets_needed)
889 if (!re_string_first_byte (pstr, pstr->cur_idx))
890 return re_string_fetch_byte (pstr);
892 off = pstr->offsets[pstr->cur_idx];
893 ch = pstr->raw_mbs[pstr->raw_mbs_idx + off];
896 return re_string_fetch_byte (pstr);
898 re_string_skip_bytes (pstr,
899 re_string_char_size_at (pstr, pstr->cur_idx));
904 return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++];
909 re_string_destruct (re_string_t *pstr)
912 re_free (pstr->wcs);
913 re_free (pstr->offsets);
915 if (pstr->mbs_allocated)
916 re_free (pstr->mbs);