comparison src/coding.c @ 20227:71008f909642

(setup_coding_system): Initialize common_flags member instead of require_flushing member of `*coding'. (code_convert_region): Fix previous change.
author Kenichi Handa <handa@m17n.org>
date Sat, 08 Nov 1997 03:05:44 +0000
parents 402b6e5f4b58
children 9960d1196c09
comparison
equal deleted inserted replaced
20226:549826cf2952 20227:71008f909642
2318 Lisp_Object coding_spec, plist, type, eol_type; 2318 Lisp_Object coding_spec, plist, type, eol_type;
2319 Lisp_Object val; 2319 Lisp_Object val;
2320 int i; 2320 int i;
2321 2321
2322 /* At first, set several fields to default values. */ 2322 /* At first, set several fields to default values. */
2323 coding->require_flushing = 0;
2324 coding->last_block = 0; 2323 coding->last_block = 0;
2325 coding->selective = 0; 2324 coding->selective = 0;
2326 coding->composing = 0; 2325 coding->composing = 0;
2327 coding->direction = 0; 2326 coding->direction = 0;
2328 coding->carryover_size = 0; 2327 coding->carryover_size = 0;
2376 val = XCONS (val)->cdr; 2375 val = XCONS (val)->cdr;
2377 } 2376 }
2378 } 2377 }
2379 2378
2380 if (VECTORP (eol_type)) 2379 if (VECTORP (eol_type))
2381 coding->eol_type = CODING_EOL_UNDECIDED; 2380 {
2381 coding->eol_type = CODING_EOL_UNDECIDED;
2382 coding->common_flags = CODING_REQUIRE_DETECTION_MASK;
2383 }
2382 else if (XFASTINT (eol_type) == 1) 2384 else if (XFASTINT (eol_type) == 1)
2383 coding->eol_type = CODING_EOL_CRLF; 2385 {
2386 coding->eol_type = CODING_EOL_CRLF;
2387 coding->common_flags
2388 = CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
2389 }
2384 else if (XFASTINT (eol_type) == 2) 2390 else if (XFASTINT (eol_type) == 2)
2385 coding->eol_type = CODING_EOL_CR; 2391 {
2392 coding->eol_type = CODING_EOL_CR;
2393 coding->common_flags
2394 = CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
2395 }
2386 else 2396 else
2387 coding->eol_type = CODING_EOL_LF; 2397 {
2398 coding->eol_type = CODING_EOL_LF;
2399 coding->common_flags = 0;
2400 }
2388 2401
2389 type = XVECTOR (coding_spec)->contents[0]; 2402 type = XVECTOR (coding_spec)->contents[0];
2390 switch (XFASTINT (type)) 2403 switch (XFASTINT (type))
2391 { 2404 {
2392 case 0: 2405 case 0:
2393 coding->type = coding_type_emacs_mule; 2406 coding->type = coding_type_emacs_mule;
2407 if (!NILP (coding->post_read_conversion))
2408 coding->common_flags |= CODING_REQUIRE_DECODING_MASK;
2409 if (!NILP (coding->pre_write_conversion))
2410 coding->common_flags |= CODING_REQUIRE_ENCODING_MASK;
2394 break; 2411 break;
2395 2412
2396 case 1: 2413 case 1:
2397 coding->type = coding_type_sjis; 2414 coding->type = coding_type_sjis;
2415 coding->common_flags
2416 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
2398 break; 2417 break;
2399 2418
2400 case 2: 2419 case 2:
2401 coding->type = coding_type_iso2022; 2420 coding->type = coding_type_iso2022;
2421 coding->common_flags
2422 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
2402 { 2423 {
2403 Lisp_Object val, temp; 2424 Lisp_Object val, temp;
2404 Lisp_Object *flags; 2425 Lisp_Object *flags;
2405 int i, charset, default_reg_bits = 0; 2426 int i, charset, default_reg_bits = 0;
2406 2427
2548 ? 1 2569 ? 1
2549 : (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT 2570 : (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT
2550 ? 2 : 0))); 2571 ? 2 : 0)));
2551 } 2572 }
2552 } 2573 }
2553 coding->require_flushing = 1; 2574 coding->common_flags |= CODING_REQUIRE_FLUSHING_MASK;
2554 break; 2575 break;
2555 2576
2556 case 3: 2577 case 3:
2557 coding->type = coding_type_big5; 2578 coding->type = coding_type_big5;
2579 coding->common_flags
2580 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
2558 coding->flags 2581 coding->flags
2559 = (NILP (XVECTOR (coding_spec)->contents[4]) 2582 = (NILP (XVECTOR (coding_spec)->contents[4])
2560 ? CODING_FLAG_BIG5_HKU 2583 ? CODING_FLAG_BIG5_HKU
2561 : CODING_FLAG_BIG5_ETEN); 2584 : CODING_FLAG_BIG5_ETEN);
2562 break; 2585 break;
2563 2586
2564 case 4: 2587 case 4:
2565 coding->type = coding_type_ccl; 2588 coding->type = coding_type_ccl;
2589 coding->common_flags
2590 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
2566 { 2591 {
2567 Lisp_Object val = XVECTOR (coding_spec)->contents[4]; 2592 Lisp_Object val = XVECTOR (coding_spec)->contents[4];
2568 if (CONSP (val) 2593 if (CONSP (val)
2569 && VECTORP (XCONS (val)->car) 2594 && VECTORP (XCONS (val)->car)
2570 && VECTORP (XCONS (val)->cdr)) 2595 && VECTORP (XCONS (val)->cdr))
2573 setup_ccl_program (&(coding->spec.ccl.encoder), XCONS (val)->cdr); 2598 setup_ccl_program (&(coding->spec.ccl.encoder), XCONS (val)->cdr);
2574 } 2599 }
2575 else 2600 else
2576 goto label_invalid_coding_system; 2601 goto label_invalid_coding_system;
2577 } 2602 }
2578 coding->require_flushing = 1; 2603 coding->common_flags |= CODING_REQUIRE_FLUSHING_MASK;
2579 break; 2604 break;
2580 2605
2581 case 5: 2606 case 5:
2582 coding->type = coding_type_raw_text; 2607 coding->type = coding_type_raw_text;
2583 break; 2608 break;
2584 2609
2585 default: 2610 default:
2586 if (EQ (type, Qt)) 2611 if (EQ (type, Qt))
2587 coding->type = coding_type_undecided; 2612 {
2613 coding->type = coding_type_undecided;
2614 coding->common_flags |= CODING_REQUIRE_DETECTION_MASK;
2615 }
2588 else 2616 else
2589 coding->type = coding_type_no_conversion; 2617 coding->type = coding_type_no_conversion;
2590 break; 2618 break;
2591 } 2619 }
2592 return 0; 2620 return 0;
2593 2621
2594 label_invalid_coding_system: 2622 label_invalid_coding_system:
2595 coding->type = coding_type_no_conversion; 2623 coding->type = coding_type_no_conversion;
2624 coding->common_flags = 0;
2596 coding->eol_type = CODING_EOL_LF; 2625 coding->eol_type = CODING_EOL_LF;
2597 coding->symbol = coding->pre_write_conversion = coding->post_read_conversion 2626 coding->symbol = coding->pre_write_conversion = coding->post_read_conversion
2598 = Qnil; 2627 = Qnil;
2599 return -1; 2628 return -1;
2600 } 2629 }
3432 beg = XINT (b); 3461 beg = XINT (b);
3433 TEMP_SET_PT (beg); 3462 TEMP_SET_PT (beg);
3434 insval = call1 (coding->post_read_conversion, make_number (len)); 3463 insval = call1 (coding->post_read_conversion, make_number (len));
3435 CHECK_NUMBER (insval, 0); 3464 CHECK_NUMBER (insval, 0);
3436 if (pos >= beg + len) 3465 if (pos >= beg + len)
3437 pos = beg + XINT (insval); 3466 pos += XINT (insval) - len;
3438 else if (pos > beg) 3467 else if (pos > beg)
3439 pos = beg; 3468 pos = beg;
3440 TEMP_SET_PT (pos); 3469 TEMP_SET_PT (pos);
3441 len = XINT (insval); 3470 len = XINT (insval);
3442 } 3471 }