all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Peck, Jeff" <jeff.peck@intel.com>
Subject: translate-region occasionally misses chars?
Date: Thu, 2 May 2002 22:51:11 -0400	[thread overview]
Message-ID: <59F55CE047A6D51196360002A534A4AC0296C6D0@pysmsx102.py.intel.com> (raw)

Running ntemacs 20.7 on Win2K, and with 21.2 the problem continues.

Using translate-region, occasionally and intermittantly
a character will *not* be translated.

Attached is a function that demonstrates the problem.

Starting from some buffer (I used Help-apropos "file" for my test)
The routine copies buf1 to another buffer (buf2),
and then applies translate-region to that buffer.
The particular translation swaps each printing char with
another, Z<=>E, Y<=>F, etc. so applying it twice should return
the original buffer.

But occasionally, as demonstrated by the output below,
a single character will fail to be translated.
[can't tell if it fails on pass1 or pass2, but it doesn't matter]

Of course, it may not be translate-region's fault,
I have other experience, not so reproducible, where a char
in a file just appears to read in wrong!  [that is, the buffer
shows --nomodification-- but it there is a character that
does not agree with the file].

If anyone knows what is happening, my eternal thanks.
In the meantime, my use of translate-region is wrapped
in a loop that compares the before to the double application
and keeps trying until they are the same... bletch.

It fails on both my Win2k machines, I don't a have a unix/linux to test.
If someone can confirm this on other OS, that would be a comfort.
It is intermittant, to you may need to try it a couple times.
Sometimes it fails immediately and frequently, other times it takes longer.
I have not found a correlation with OS activity, paging, filesystem or
whatever.


;;; this routine applies translate-region and logs the errors to *Messages*
;;; print flip-string and flop-string for a convenient translation table
;;; to see that the erroneous chars really are 'missed translations' and
;;; not some random bit loss. (flop-string has no other purpose)


(defun test-flip (n &optional i)
  (message "flip %d chars, %d times" (- (point-max)(point-min)) n)
  (sit-for 1)
  (setq i n)
  (let ((flip-string                    ; reverse chars and nums:
         (do ((str "") (i 0 (1+ i))) ((> i 255) str)
           (let ((chr (char-to-string
                       (if (or (<= i 32) (>= i 127)) i (- 159 i)))))
             (setq str (concat str chr)))))
        (flop-string 
         (do ((str "") (i 0 (1+ i))) ((> i 255) str)
           (let ((chr (char-to-string
                       (if (or (<= i 32) (>= i 127)) i i))))
             (setq str (concat str chr)))))
        (buf1 (current-buffer))
        (buf2 (get-buffer-create "*flip*")))
    (message "flip-string is %s" (substring flip-string 32 127))
    (message "flop-string is %s" (substring flop-string 32 127))

    ;; copy buf1 to buf2
    (set-buffer buf2)
    (erase-buffer)
    (insert-buffer buf1)

    (while (plusp n)
      (progn
        (setq n (- n 1))
        (translate-region (point-min) (point-max) flip-string)
        (translate-region (point-min) (point-max) flip-string)
        (let ((comp (abs (compare-buffer-substrings buf1 4 (- (point-max) 4)
                                                    buf2 4 (- (point-max)
4)))))
          (if (not (zerop comp))
              (let ((str1 (save-excursion
                            (set-buffer buf1)
                            (buffer-substring comp (+ comp 7))))
                    (str2 (buffer-substring comp (+ comp 7))))
                (message "%d. error at %d: [%s] [%s]" (- i n) comp str1
str2)
                (sit-for 1)
                (erase-buffer)
                (insert-buffer buf1)
                )))))))

Here is output from one run against *Apropos* 


flip 12089 chars, 50 times
flip-string is  ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFE
DCBA@?>=<;:9876543210/.-,+*)('&%$#"!
flop-string is  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Mark set
43. error at 1168: [oint.
c] [oin+.
c]
44. error at 144: [tation.] [tat6on.]
45. error at 579: [-x appe] [-x >ppe]
46. error at 1623: [ one.
c] [ on:.
c]
47. error at 2072: [ subdir] [ su=dir]
48. error at 2301: [ FILE-B] [ FISE-B]
49. error at 216: [me RET
] [me MET
]
50. error at 372: [additio] [add6tio]

             reply	other threads:[~2002-05-03  2:51 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-05-03  2:51 Peck, Jeff [this message]
2002-05-04  3:36 ` translate-region occasionally misses chars? Richard Stallman
  -- strict thread matches above, loose matches on Subject: below --
2002-05-04  3:58 Peck, Jeff
2002-05-05  5:34 ` Richard Stallman
2002-06-07 16:33 Peck, Jeff
2002-06-15 14:13 ` Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=59F55CE047A6D51196360002A534A4AC0296C6D0@pysmsx102.py.intel.com \
    --to=jeff.peck@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.