Mercurial > emacs
comparison src/character.h @ 91805:c330bf7419fd
(FETCH_STRING_CHAR_ADVANCE, FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE)
(FETCH_STRING_CHAR_ADVANCE_NO_CHECK): Use SDATA and SREF.
(DEC_POS, BUF_DEC_POS): Use BEG_BYTE rather than hardcoding 1.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 12 Feb 2008 21:27:54 +0000 |
parents | acb32817f0e8 |
children | 29adfc9354e7 |
comparison
equal
deleted
inserted
replaced
91804:d2dce25da0cb | 91805:c330bf7419fd |
---|---|
383 do \ | 383 do \ |
384 { \ | 384 { \ |
385 CHARIDX++; \ | 385 CHARIDX++; \ |
386 if (STRING_MULTIBYTE (STRING)) \ | 386 if (STRING_MULTIBYTE (STRING)) \ |
387 { \ | 387 { \ |
388 unsigned char *ptr = &XSTRING (STRING)->data[BYTEIDX]; \ | 388 unsigned char *ptr = &SDATA (STRING)[BYTEIDX]; \ |
389 int len; \ | 389 int len; \ |
390 \ | 390 \ |
391 OUTPUT = STRING_CHAR_AND_LENGTH (ptr, 0, len); \ | 391 OUTPUT = STRING_CHAR_AND_LENGTH (ptr, 0, len); \ |
392 BYTEIDX += len; \ | 392 BYTEIDX += len; \ |
393 } \ | 393 } \ |
394 else \ | 394 else \ |
395 OUTPUT = XSTRING (STRING)->data[BYTEIDX++]; \ | 395 { \ |
396 OUTPUT = SREF (STRING, BYTEIDX); \ | |
397 BYTEIDX++; \ | |
398 } \ | |
396 } \ | 399 } \ |
397 while (0) | 400 while (0) |
398 | 401 |
399 /* Like FETCH_STRING_CHAR_ADVANCE but return a multibyte character eve | 402 /* Like FETCH_STRING_CHAR_ADVANCE but return a multibyte character eve |
400 if STRING is unibyte. */ | 403 if STRING is unibyte. */ |
403 do \ | 406 do \ |
404 { \ | 407 { \ |
405 CHARIDX++; \ | 408 CHARIDX++; \ |
406 if (STRING_MULTIBYTE (STRING)) \ | 409 if (STRING_MULTIBYTE (STRING)) \ |
407 { \ | 410 { \ |
408 unsigned char *ptr = &XSTRING (STRING)->data[BYTEIDX]; \ | 411 unsigned char *ptr = &SDATA (STRING)[BYTEIDX]; \ |
409 int len; \ | 412 int len; \ |
410 \ | 413 \ |
411 OUTPUT = STRING_CHAR_AND_LENGTH (ptr, 0, len); \ | 414 OUTPUT = STRING_CHAR_AND_LENGTH (ptr, 0, len); \ |
412 BYTEIDX += len; \ | 415 BYTEIDX += len; \ |
413 } \ | 416 } \ |
414 else \ | 417 else \ |
415 { \ | 418 { \ |
416 OUTPUT = XSTRING (STRING)->data[BYTEIDX++]; \ | 419 OUTPUT = SREF (STRING, BYTEIDX); \ |
420 BYTEIDX++; \ | |
417 MAKE_CHAR_MULTIBYTE (OUTPUT); \ | 421 MAKE_CHAR_MULTIBYTE (OUTPUT); \ |
418 } \ | 422 } \ |
419 } \ | 423 } \ |
420 while (0) | 424 while (0) |
421 | 425 |
423 /* Like FETCH_STRING_CHAR_ADVANCE but assumes STRING is multibyte. */ | 427 /* Like FETCH_STRING_CHAR_ADVANCE but assumes STRING is multibyte. */ |
424 | 428 |
425 #define FETCH_STRING_CHAR_ADVANCE_NO_CHECK(OUTPUT, STRING, CHARIDX, BYTEIDX) \ | 429 #define FETCH_STRING_CHAR_ADVANCE_NO_CHECK(OUTPUT, STRING, CHARIDX, BYTEIDX) \ |
426 do \ | 430 do \ |
427 { \ | 431 { \ |
428 unsigned char *ptr = &XSTRING (STRING)->data[BYTEIDX]; \ | 432 unsigned char *ptr = &SDATA (STRING)[BYTEIDX]; \ |
429 int len; \ | 433 int len; \ |
430 \ | 434 \ |
431 OUTPUT = STRING_CHAR_AND_LENGTH (ptr, 0, len); \ | 435 OUTPUT = STRING_CHAR_AND_LENGTH (ptr, 0, len); \ |
432 BYTEIDX += len; \ | 436 BYTEIDX += len; \ |
433 CHARIDX++; \ | 437 CHARIDX++; \ |
491 do { \ | 495 do { \ |
492 unsigned char *p; \ | 496 unsigned char *p; \ |
493 \ | 497 \ |
494 pos_byte--; \ | 498 pos_byte--; \ |
495 if (pos_byte < GPT_BYTE) \ | 499 if (pos_byte < GPT_BYTE) \ |
496 p = BEG_ADDR + pos_byte - 1; \ | 500 p = BEG_ADDR + pos_byte - BEG_BYTE; \ |
497 else \ | 501 else \ |
498 p = BEG_ADDR + GAP_SIZE + pos_byte - 1; \ | 502 p = BEG_ADDR + GAP_SIZE + pos_byte - BEG_BYTE;\ |
499 while (!CHAR_HEAD_P (*p)) \ | 503 while (!CHAR_HEAD_P (*p)) \ |
500 { \ | 504 { \ |
501 p--; \ | 505 p--; \ |
502 pos_byte--; \ | 506 pos_byte--; \ |
503 } \ | 507 } \ |
549 #define BUF_DEC_POS(buf, pos_byte) \ | 553 #define BUF_DEC_POS(buf, pos_byte) \ |
550 do { \ | 554 do { \ |
551 unsigned char *p; \ | 555 unsigned char *p; \ |
552 pos_byte--; \ | 556 pos_byte--; \ |
553 if (pos_byte < BUF_GPT_BYTE (buf)) \ | 557 if (pos_byte < BUF_GPT_BYTE (buf)) \ |
554 p = BUF_BEG_ADDR (buf) + pos_byte - 1; \ | 558 p = BUF_BEG_ADDR (buf) + pos_byte - BEG_BYTE; \ |
555 else \ | 559 else \ |
556 p = BUF_BEG_ADDR (buf) + BUF_GAP_SIZE (buf) + pos_byte - 1; \ | 560 p = BUF_BEG_ADDR (buf) + BUF_GAP_SIZE (buf) + pos_byte - BEG_BYTE;\ |
557 while (!CHAR_HEAD_P (*p)) \ | 561 while (!CHAR_HEAD_P (*p)) \ |
558 { \ | 562 { \ |
559 p--; \ | 563 p--; \ |
560 pos_byte--; \ | 564 pos_byte--; \ |
561 } \ | 565 } \ |