]> code.delx.au - gnu-emacs/blobdiff - src/ccl.c
(x_create_tip_frame): Initialize frame's colors like
[gnu-emacs] / src / ccl.c
index 0ab2bcb3310a71ab5bd1abce83151e2a368d2dd0..4f0dfbfbdbc0c92d504e3b323bc03f9d360e8a4d 100644 (file)
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -669,11 +669,22 @@ static tr_stack *mapping_stack_pointer;
 #define CCL_WRITE_CHAR(ch)                                     \
   do {                                                         \
     int bytes = SINGLE_BYTE_CHAR_P (ch) ? 1: CHAR_BYTES (ch);  \
+    if (ch == '\n' && ccl->eol_type == CODING_EOL_CRLF)                \
+      bytes++;                                                 \
     if (!dst)                                                  \
       CCL_INVALID_CMD;                                         \
     else if (dst + bytes <= (dst_bytes ? dst_end : src))       \
       {                                                                \
-       if (bytes == 1)                                         \
+       if (ch == '\n')                                         \
+         {                                                     \
+           if (ccl->eol_type == CODING_EOL_CRLF)               \
+             *dst++ = '\r', *dst++ = '\n';                     \
+           else if (ccl->eol_type == CODING_EOL_CR)            \
+             *dst++ = '\r';                                    \
+           else                                                \
+             *dst++ = '\n';                                    \
+         }                                                     \
+       else if (bytes == 1)                                    \
          *dst++ = (ch);                                        \
        else                                                    \
          dst += CHAR_STRING (ch, dst);                         \
@@ -1015,8 +1026,9 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
          break;
 
        case CCL_End:           /* 0000000000000000000000XXXXX */
-         if (stack_idx-- > 0)
+         if (stack_idx > 0)
            {
+             stack_idx--;
              ccl_prog = ccl_prog_stack_struct[stack_idx].ccl_prog;
              ic = ccl_prog_stack_struct[stack_idx].ic;
              break;
@@ -1755,6 +1767,7 @@ setup_ccl_program (ccl, ccl_prog)
   ccl->private_state = 0;
   ccl->status = 0;
   ccl->stack_idx = 0;
+  ccl->eol_type = CODING_EOL_LF;
   return 0;
 }